googlemaps.reviews
Read a place's public reviews with rating, date and text, newest, most relevant, highest or lowest first.
At a glance
- Endpoint ID
googlemaps.reviews- Price
- 1 credit per call; failed calls are free
- Runs for up to
- 120 seconds
Request
Send the endpoint ID as capability and its fields as input. Set UPSCRAPE_API_KEY to your key first.
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));
Input
| 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 |
Response
A finished call answers with HTTP 200; the data is in results[0].data, and billing.credits_charged is what it cost. A call still running after the wait answers 202: see jobs and results.
This is results[0].data from a real run:
{ "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" ] } ]}
Fields
| 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 |
If a call fails
A failed call costs nothing. The response carries an error.code you can branch on; Errors and retries lists every code and which ones to retry.
Other Google Maps endpoints
Something missing or unclear? Ask the team that builds the Google Maps endpoints.