WeWidget

For developers

Google Reviews API for developers — get more than 5 reviews

A CORS-open JSON endpoint and a typed React library for all of a business's Google reviews. No Google API key, no OAuth, no approval queue — connect once and fetch.

Free tier available · No credit card required

The problem

Google gives you two bad options

Places API

Returns a maximum of 5 reviews per place. No pagination, no parameter to raise it — 5 is the hard cap. You also pay per request and need an API key with billing enabled.

Google Business Profile API

Returns all reviews, but access requires a manual approval process that typically takes 2–4 weeks, plus an OAuth flow authenticated as the profile owner. Overkill for putting reviews on a website.

If you've searched “google reviews api more than 5 reviews”, that's why. There's no official middle ground — so we built one.

The solution

Connect once, fetch forever

Sign up for WeWidget and connect the business with a business-name search — no OAuth, no Cloud Console. WeWidget syncs the profile's reviews on a schedule and serves them from an edge-cached endpoint. You then consume them one of three ways:

1

Drop-in widget

Two lines of HTML, or the <WeWidget /> React component. Fully styled and configured from your dashboard.

2

React hook

useGoogleReviews(widgetId) from @wewidget/react — typed review data, render it however you like.

3

Raw JSON endpoint

A plain GET request from any language or framework. CORS-open, so it works straight from the browser.

API reference

The widget data endpoint

GET https://app.wewidget.app/api/widget-mock/{widgetId}

No authentication. Your widget ID is the only parameter.

Response shape

{
  "widgetId": "wgt_2f9c1a",
  "status": "active",
  "config": { "layout": "carousel", "minRating": 4, "...": "..." },
  "reviews": [
    {
      "id": "ChZDSUhNMG9nS0VJQ0FnSUR...",
      "authorName": "Sophie Turner",
      "authorPhotoUrl": "https://lh3.googleusercontent.com/a/...",
      "rating": 5,
      "comment": "Brilliant service from start to finish...",
      "publishedAt": "2026-06-14T09:32:00.000Z",
      "language": "en"
    }
  ],
  "totalCount": 187,
  "businessName": "The Golden Spoon",
  "writeReviewUrl": "https://g.page/r/.../review",
  "placeRating": 4.8,
  "placeReviewCount": 187,
  "placeMapsUri": "https://maps.google.com/?cid=..."
}

reviews is newest-first, filtered and capped by your widget's dashboard settings (e.g. minimum rating, max reviews). placeRating / placeReviewCount / placeMapsUri carry the business's aggregate Google data.

Quick start

Four ways to ship it

1. Plain HTML embed

Works on any site — WordPress, Wix, Shopify, hand-rolled HTML. Replace WIDGET_ID with the ID from your dashboard.

<div data-review-widget="WIDGET_ID"></div>
<script src="https://app.wewidget.app/widget.js" data-widget-id="WIDGET_ID"></script>

2. React component

Install npm install @wewidget/react. The component loads the embed script once and handles SPA re-renders.

import { WeWidget } from '@wewidget/react'

export default function ReviewsSection() {
  return <WeWidget widgetId="WIDGET_ID" />
}

3. React hook — bring your own UI

Typed review data with loading and error states. Render it with your own components and CSS.

import { useGoogleReviews } from '@wewidget/react'

export default function CustomReviews() {
  const { reviews, businessName, rating, reviewCount, loading, error } =
    useGoogleReviews('WIDGET_ID')

  if (loading) return <p>Loading reviews…</p>
  if (error) return <p>Could not load reviews.</p>

  return (
    <section>
      <h2>{businessName} — {rating}★ ({reviewCount} reviews)</h2>
      {reviews.map((r) => (
        <blockquote key={r.id}>
          <p>{r.comment}</p>
          <footer>{r.authorName} · {r.rating}★</footer>
        </blockquote>
      ))}
    </section>
  )
}

4. Plain fetch — any language

It's just JSON over GET. This works equally well from Node, Python, PHP, or an edge function.

const res = await fetch(
  'https://app.wewidget.app/api/widget-mock/WIDGET_ID'
)
const data = await res.json()

console.log(data.businessName)   // "The Golden Spoon"
console.log(data.totalCount)     // 187 — not capped at 5
data.reviews.forEach((r) => {
  console.log(`${r.rating}★ ${r.authorName}: ${r.comment}`)
})

The fine print

Things you should know

Frequently asked questions

How do I get more than 5 Google reviews from an API?
The Places API is hard-capped at 5 reviews per place — there is no parameter to raise it. Your options are the Google Business Profile API (2–4 weeks of approval and OAuth as the profile owner) or a sync service. WeWidget syncs all reviews from the connected Google Business Profile and serves them as JSON through the widget data endpoint, so you get the full set with a single GET request.
Do I need a Google API key?
No. You never touch the Google Cloud Console. Sign up for WeWidget, connect the business by searching for its name, and use the widget ID from your dashboard. That ID is the only credential the endpoint and the React library need.
Is there a rate limit?
The endpoint is fair-use. Responses are cached at the edge (CDN caching with stale-while-revalidate), so even calling it on every page load of a busy site is fine — most requests never reach the origin. There is no per-key quota to track or pay for.
Can I style the reviews myself?
Yes — that is exactly what the useGoogleReviews hook and the raw JSON endpoint are for. You get typed review data (author, rating, comment, date, photo URL) and render it with your own components and CSS. Remember to include Google attribution when displaying review data.
How fresh is the data?
Reviews re-sync from Google automatically, every day. On top of that, responses are edge-cached for a few minutes, so a brand-new review typically appears on your site within the sync window.

Get your widget ID in about two minutes

Free tier available · No credit card · No Google API key