Google Maps Reviews API
Read a place's public reviews with rating, date and text, newest, most relevant, highest or lowest first.
- 1 credit per call
- Failed calls are free
- Updated
- googlemaps.reviews
{ "summary": { "feature_id": "0x89c258bc949d58cf:0x84ac8a2dc2535dc2", "has_more": true, "next_cursor": "r1:2:", "total_items": 2, "total_pages": 1 }, "items": [ { "text": "Example review text: what the reviewer wrote about the place.", "rating": 5, "published_at": "2026-06-13T15:13:58Z", "language": "en", "review_id": "EXAMPLE_REVIEW_ID_1", "photos": [ "https://lh3.googleusercontent.com/example-review-photo" ] }, { "text": "Example review text: what the reviewer wrote about the place.", "rating": 5, "published_at": "2022-04-21T17:50:59Z", "language": "en", "owner_reply": "Example owner reply text.", "relative_time": "Edited 4 years ago", "review_id": "EXAMPLE_REVIEW_ID_2", "photos": [ "https://lh3.googleusercontent.com/example-review-photo" ] } ]}
| # | Text | Rating | Published at | Language | Owner reply | Relative time | Review id |
|---|---|---|---|---|---|---|---|
| 1 | Example review text: what the reviewer wrote about the place. | 5 | 2026-06-13T15:13:58Z | en | EXAMPLE_REVIEW_ID_1 | ||
| 2 | Example review text: what the reviewer wrote about the place. | 5 | 2022-04-21T17:50:59Z | en | Example owner reply text. | Edited 4 years ago | EXAMPLE_REVIEW_ID_2 |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| feature_id | string | one of | 0x...:0x... from a Search Places or Get Place result. | 0x89c258bc949d58cf:0x84ac8a2dc2535dc2 |
| url | string | one of | HTTPS Google Maps URL with an explicit ID or named place. Supports maps.app.goo.gl and goo.gl/maps short links with at most five redirects to allowed Maps hosts. Also normalizes google.co.in, google.co.uk, google.fr, google.de, google.ca and google.com.au (bare or www) to www.google.com. Explicit IDs are verified; name-only URLs use the best search match. | |
| cursor | string | no | summary.next_cursor from a previous request for the same place and sort. Continues exactly where that request stopped. | |
| lang | string | no | Interface language code such as 'en' or 'en-US' (default 'en'). It does not filter or translate reviews; each review keeps its original language. Default: en. |
|
| limit | integer | no | Max reviews to return in this request (default 100, max 1000). Google serves 60 reviews per page; use summary.next_cursor to continue. From 1 to 1000. Default: 100. |
50 |
| sort | string | no | Sort order. Allowed values: relevant, newest, highest, lowest. Default: newest. |
newest |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | Example |
|---|---|---|
| items[].text | string | Example review text: what the reviewer wrote about the place. |
| items[].rating | integer | 5 |
| items[].published_at | string | 2026-06-13T15:13:58Z |
| items[].language | string | en |
| items[].photos | array | https://lh3.googleusercontent.com/example-review-photo |
| items[].review_id | string | EXAMPLE_REVIEW_ID_1 |
| items | array | 2 records |
| summary | object | 5 fields |
| summary.feature_id | string | 0x89c258bc949d58cf:0x84ac8a2dc2535dc2 |
| summary.has_more | boolean | true |
| summary.next_cursor | string | r1:2: |
| summary.total_items | integer | 2 |
| summary.total_pages | integer | 1 |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "googlemaps.reviews", "input": { "feature_id": "0x89c258bc949d58cf:0x84ac8a2dc2535dc2", "limit": 50, "sort": "newest" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "googlemaps.reviews", "input": { "feature_id": "0x89c258bc949d58cf:0x84ac8a2dc2535dc2", "limit": 50, "sort": "newest" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "googlemaps.reviews", "input": { "feature_id": "0x89c258bc949d58cf:0x84ac8a2dc2535dc2", "limit": 50, "sort": "newest" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, get the Google Maps reviews for feature id "0x89c258bc949d58cf:0x84ac8a2dc2535dc2" and sort "newest". Tell me what it costs before you run it, then show the results as a table.
More from the Google Maps API
The same data from other platforms
Google Maps Reviews API FAQ
The short answers. The docs have the long ones.
How much does the Google Maps Reviews API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Every input is optional; the input fields below list what each one does.
Do I need a Google Maps login?
No. It reads public Google Maps data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds googlemaps.reviews, checks its price and runs it with the same credits as the REST API.
Your first Google Maps call is free.
Up to 100 free credits to start, no card needed.