Who it's for
Google Reviews API: how to get all your reviews as JSON
Pull Google reviews by API: Business Profile API (access request, OAuth), Places API (5 reviews max), or the Revys JSON API. With curl, JavaScript, PHP.
Updated
Contents
You want a business's Google reviews as data, not as a prebuilt widget: for a custom design, an app, an internal dashboard, or a client site. The real question is which API to use and what it actually takes to get access.
Is there an official Google Reviews API?
Yes, two of them, and they're very different. The Google Business Profile API (formerly the Google My Business API) returns every review on a profile, but only to the profile's owners and managers. The Places API, part of Google Maps Platform, works for any business with a plain API key, but returns 5 reviews at most.
| Business Profile API | Places API (New) | Revys API | |
|---|---|---|---|
| Reviews returned | All, 50 per page | 5 max, sorted by relevance | All reviews on your connected profiles |
| Who can use it | Profile owners and managers | Anyone | You, for profiles you've connected |
| Access | Access request to Google, then OAuth | Google Cloud API key | Revys API key |
| Cost | No charge | 1,000 free requests a month, then $25 per 1,000 | Included in Pro |
| Storing reviews | Allowed | Not allowed outside Google's services | Revys stores them |
| Replying to reviews | Yes (updateReply) | No | No (read-only) |
The Business Profile API: complete, but slow to get into
It returns every review, including the owner's reply, and lets you post replies. The price is four steps before your first successful call.
Meet the prerequisites
Google requires that you manage a Business Profile that has been verified and active for more than 60 days, and that the business has a website. It can be your own profile or a client's profile you manage.
Request access
Create a Google Cloud project, note its project number, and submit the Business Profile API contact form, choosing "Application for Basic API Access". Send it from an email that's an owner or manager on the profile. Until you're approved, your quota is 0 requests per minute; approval sets it to 300.
Set up OAuth
Every call runs on behalf of a user who granted the
https://www.googleapis.com/auth/business.managescope. You have to store their refresh token, refresh access tokens, and handle revoked access.Walk accounts, locations, then reviews
List the accounts, then each account's locations, then each location's reviews:
GET https://mybusiness.googleapis.com/v4/accounts/{account}/locations/{location}/reviews, 50 reviews per page max, sorted byupdateTime descby default (or by rating).
Then comes the ongoing work: syncing on a schedule, picking up edited and deleted reviews, staying under 300 requests per minute, and storing everything in your own database. Doable, but it's a small product to maintain.
The Places API: easy, but only 5 reviews
The Places API (New) needs just an API key: GET https://places.googleapis.com/v1/places/{place_id} with the header X-Goog-FieldMask: reviews. The field mask is mandatory. Google's reference is explicit: a maximum of 5 reviews, "sorted by relevance". No pagination, no sort by date.
Two more catches:
- Cost. Asking for the
reviewsfield triggers the "Place Details Enterprise + Atmosphere" SKU: 1,000 free requests a month, then $25 per 1,000 (up to 100,000). - Storage. The Google Maps Platform terms (section 3.2.3(a), "No Scraping") bar you from extracting, storing, or rehosting this content outside Google's services. You can't build your own review database from the Places API.
That's why so many free widgets show the same 5 reviews forever.
How does the Revys reviews API work?
Revys handles the Google side (API access, OAuth, syncing roughly every hour, storage) and serves your reviews through a read-only JSON API.
Endpoint: GET https://revys.io/api/v1/reviews
Auth: an Authorization: Bearer rv_<prefix>_<secret> header. Create keys on the dashboard's “API & developers” page; the secret is shown once. Keep it on your server.
Parameters (exactly one):
| Parameter | What it does |
|---|---|
?widget=<publicId> | Uses the profiles and filters (minimum rating, number of reviews) saved on a widget |
?source=<sourceId> | Targets one profile directly, no filters |
?widget= is the easy path: set your filters in the widget editor and the API applies them.
curl example
curl -H "Authorization: Bearer $REVYS_API_KEY" \
"https://revys.io/api/v1/reviews?widget=YOUR_WIDGET_ID"
Response shape
{
"data": {
"reviews": [
{
"id": "rev_123",
"authorName": "Jordan Miller",
"authorImage": null,
"rating": 5,
"text": "Fast, friendly, and they fixed it the same day.",
"language": "en",
"reviewedAt": "2026-05-01T10:00:00.000Z",
"ownerReply": null
}
],
"aggregate": {
"count": 128,
"average": 4.8,
"distribution": { "1": 1, "2": 2, "3": 5, "4": 30, "5": 90 }
},
"schemaOrg": {
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Business"
}
}
}
(Sample review, not a real one.) Reviews come newest first; any you've hidden in Revys are left out. aggregate covers every review on the profile(s), never trimmed by the widget's minimum rating, so average matches your real Google rating. schemaOrg is a bare Organization object with no aggregateRating or review, in line with Google's self-serving reviews rule (more in review schema and Google stars).
JavaScript example (Node.js 18+, server side)
const res = await fetch("https://revys.io/api/v1/reviews?widget=YOUR_WIDGET_ID", {
headers: { Authorization: `Bearer ${process.env.REVYS_API_KEY}` },
signal: AbortSignal.timeout(3000),
});
if (!res.ok) throw new Error(`Revys returned ${res.status}`);
const { data } = await res.json();
for (const r of data.reviews) {
console.log(`${r.rating}/5 — ${r.authorName}: ${r.text ?? "(rating only)"}`);
}
In Next.js, make this call in a Server Component so the reviews land in the HTML; see the full walkthrough in Google reviews in Next.js.
PHP example
<?php
$ch = curl_init('https://revys.io/api/v1/reviews?widget=YOUR_WIDGET_ID');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 3,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('REVYS_API_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = $status === 200 ? json_decode($body, true)['data'] : null;
foreach ($data['reviews'] ?? [] as $r) {
echo '<blockquote><p>' . htmlspecialchars($r['text'] ?? '') . '</p>'
. '<cite>' . htmlspecialchars($r['authorName']) . ', ' . (int) $r['rating'] . '/5</cite></blockquote>';
}
if ($data) {
echo '<script type="application/ld+json">' . json_encode($data['schemaOrg']) . '</script>';
}
Cache the response (an hour is plenty) instead of calling the API on every page view.
What are the Revys API limits?
These are the limits enforced in production, with no hidden caps.
| Limit | Value |
|---|---|
| Plan | Pro (Free gets 403 plan_required) |
| Monthly quota | 10,000 calls per paid location per month, reset on the 1st (UTC); only 200 responses count |
| Rate limit | 120 requests per 60 seconds per key (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset headers) |
| Caching | Cache-Control: public, max-age=300 (5 minutes) |
| Over quota | The last 200 response for the same target is served again (status 200, X-Revys-Quota: exceeded, not counted); otherwise 429 quota_exceeded |
Other errors return JSON { "error": "<code>" }: 401 unauthorized (missing or bad key), 400 missing_target (no widget or source), 404 widget_not_found or source_not_found, 429 rate_limited, 500 internal_error.
Pro is $7.90 a month for your first location, with volume pricing after that (pricing). Every account starts with a 14-day Pro trial, API included.
Need HTML instead of JSON?
If all you want is to show reviews on a site, you may not need the API at all. The server include at https://revys.io/api/embed/<publicId>/html returns the widget already rendered: reviews, scoped CSS, and JSON-LD, with no JavaScript. It's public, needs no key, and supports ETag and 304.
<?php echo @file_get_contents('https://revys.io/api/embed/YOUR_ID/html'); ?>
The dashboard gives you hardened versions (1-hour cache, 2-second timeout) for PHP, Next.js, Astro, Node.js, Python, Ruby and Cloudflare Workers; see PHP and plain HTML sites. On WordPress, the Revys plugin does it with no code.
| You want | Use |
|---|---|
| A fully custom design, an app, a dashboard | JSON API |
| Reviews on a PHP, Next.js, or Node site | Server include |
| Reviews on WordPress | Plugin |
| A comparison of every method | How to embed Google reviews on a website |
What the Revys API doesn't do
- Other people's profiles: it only returns reviews for profiles connected to your account, meaning ones you own or manage.
- Replies: it's read-only. Reply from the dashboard, where AI replies post through Google's API.
- Other platforms: Google only today; Facebook and Trustpilot are planned.
- Webhooks: there's no push notification to your app yet. Poll the API; with a 5-minute cache and hourly syncs, that's plenty for display.
Managing reviews for several clients? See Revys for agencies, with 10,000 API calls a month for each location.
FAQ
Is the Google My Business API free?
Yes. Google says the API is available to registered users at no charge. The catch is access: until Google approves your request, your project's quota is 0 requests per minute. Once approved, it's 300 per minute.
Why does the Google Places API only return 5 reviews?
That's a hard limit of the API: the reviews field returns at most 5 reviews, sorted by relevance, with no pagination. To get every review on a profile you need the Business Profile API, which only works for the profile's owners and managers.
Is there a free way to scrape Google reviews?
There are scrapers, but scraping Google breaks its terms, and the Google Maps Platform terms also forbid extracting or storing Places content outside Google's services. If you need all reviews for a business, get added as a Manager on its profile and use the official API.
How many calls does the Revys API allow?
10,000 calls a month per paid location on the Pro plan (3 locations means 30,000 calls), with a burst limit of 120 requests per minute per key. Only 200 responses count. The Free plan has no API access.
Can I call the Revys API from the browser?
Don't: your API key would be visible in the page source. Call it from your server and render the reviews into the HTML. That's also what makes them visible to AI crawlers, which don't run JavaScript.
Can I reply to reviews through the API?
With Google's Business Profile API, yes: the updateReply method posts the owner's response. The Revys API is read-only; replies go through the Revys dashboard and its AI replies, which post through Google's API.
Sources
- Google Business Profile APIs: Prerequisites (updated 2026-08-28)
- Google Business Profile APIs: Usage fees (updated 2026-08-28)
- Google Business Profile APIs: accounts.locations.reviews.list (updated 2026-04-07)
- Google Places API (New): Place resource, reviews field
- Google Maps Platform pricing, Places SKUs (updated 2026-10-16)
- Google Maps Platform Terms of Service, 3.2.3(a) No Scraping (modified 2026-08-26)
Related
- Review management for agencies: all your clients' Google reviews in one placeManage every client's Google reviews from one dashboard: per-location pricing, AI replies tuned per client, reviews in their site's HTML. White label: coming.Read
- Google Reviews for Auto Repair Shops: Get, Answer and Show ThemFor auto repair shops: when to ask for Google reviews (at vehicle pickup), how to answer price complaints, showing reviews on your site, and GBP setup.Read
- Google Reviews for Contractors and Home Service BusinessesFor plumbers, electricians, roofers and HVAC pros: when to ask for Google reviews, handling job disputes, reviews on your quote page, service-area setup.Read
- Google Reviews for Dentists: Get and Answer Them Without HIPAA RiskDentists: how patients use reviews, when to ask, how to reply without disclosing PHI (HHS has fined practices for it), and setting up your Google profile.Read
- Google Reviews for Hotels: Get, Answer and Show ThemHoteliers: when to ask for Google reviews (checkout, next day), how to reply, where to show reviews next to your booking engine, and hotel profile setup.Read
- Google Reviews for Restaurants: Get, Answer and Show ThemRestaurant owners: when to ask for Google reviews (with the check), how to answer complaints about wait times or food, where to show reviews, and profile setup.Read