For developers
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
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.
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
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:
Two lines of HTML, or the <WeWidget /> React component. Fully styled and configured from your dashboard.
useGoogleReviews(widgetId) from @wewidget/react — typed review data, render it however you like.
A plain GET request from any language or framework. CORS-open, so it works straight from the browser.
API reference
GET https://app.wewidget.app/api/widget-mock/{widgetId}No authentication. Your widget ID is the only parameter.
{
"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
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>
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" />
}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>
)
}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
Free tier available · No credit card · No Google API key