Google Map API endpoint
Use Crawlora's Google Maps place reviews API to extract supported public Google Map data as structured JSON. This page includes request parameters, cURL examples, response schema, error behavior, credit cost, and a Playground link for testing before integration.
/google/map/place/{place_id}/reviewsReturns the reviews Google shows on a specified place_id's Google Maps page — typically the 8 most relevant, each with its rating, text, reviewer, timestamp, and any photos the reviewer attached. Photo-only reviews return an empty `text`. This is the place page's first page of reviews, not the full review archive. Rate limit is enforced at 1 request per second. Developers commonly use this endpoint for data enrichment, monitoring, research dashboards, internal automation, and agent-native workflows that need repeatable structured public web data. Authentication uses the documented Crawlora headers, and usage is metered with the credit cost shown on this page.
Request parameters are generated from the active endpoint catalog. Required values must be sent before Crawlora can call the upstream public web data source.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| place_id (path) | string | Yes | Google Place ID | ||
| limit | integer | No | Maximum number of reviews to return. Omit or 0 for all captured. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/google/map/place/ChIJN1t_tDeuEmsRUsoyG83frY4/reviews?limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
This endpoint is executed through Crawlora's managed scraping infrastructure.
Some targets require real browser execution because the data is loaded through JavaScript, dynamic rendering, or interaction-like browser behavior.
For supported endpoints, Crawlora can route requests through a managed browser cluster. This allows Crawlora to execute JavaScript, load dynamic content, apply browser-level request behavior, and normalize the rendered result into JSON.
You do not need to operate your own Playwright, Puppeteer, Chrome, proxy, queue, or retry infrastructure.
- This is the place page's **first page** of reviews, not the full review archive. There is no cursor to page through, so the response is the complete set this endpoint can return for the place. Use `review_count` on `/google/map/place/{place_id}` for the place's total review tally. - `text` is empty for a photo-only review — Google allows a review with photos and a rating but no written body. That is not a parse failure. - `published_at` is RFC3339 UTC. It is empty when Google did not report a timestamp. - `relative_time` is Google's own wording ("6 months ago") in the requested language, so it is a display string rather than something to parse — use `published_at` for date logic. - `photos` are the images attached to that specific review. They never overlap with `/google/map/place/{place_id}/photos`, which returns the place's own gallery; a review's photos belong to the review. - `author_url` is normalized to drop Google's `?hl=` suffix, so the same reviewer yields the same URL regardless of the request language. - `author_review_count` is how many reviews that contributor has written overall. `0` means Google did not report it, which is normal for a syndicated review. - `source` names the site the review came from. Google's place pages syndicate reviews from partner sites — common on hotels — so this is `Google` for a native Google review and the partner's name (for example `Tripadvisor`, `TrustYou`) otherwise. Syndicated reviews still carry a rating, text, author name, and timestamp, but have no Google contributor id, so `author_id` is empty and `author_url` points at the partner site rather than a Google contributor page. - A place nobody has reviewed returns an empty `data` array, not an error. Example response: ```json { "code": 200, "msg": "ok", "data": [ { "id": "Ci9DQUlRQUNvZENodHljRjlvT201dFRHSk1aRU54T0U5cmRFVjNlbGRmU1RJNFkzYxAB", "rating": 5, "text": "I never knew pork could taste this good. We tried the special loin and it was worth the queue.", "relative_time": "6 months ago", "published_at": "2026-01-01T14:39:25Z", "author_name": "Supisara Darnchaloemwong", "author_id": "112997636113922766481", "author_url": "https://www.google.com/maps/contrib/112997636113922766481", "author_photo": "https://lh3.googleusercontent.com/a-/ALV-UjWc6XFX9IKHJiQ4vZoY7o_EVCYkjMbWjGfdPZrLEw", "author_review_count": 23, "source": "Google", "photos": [ { "url": "https://lh3.googleusercontent.com/grass-cs/ACvplmM2ICW60UtuEQbkJLN-ot5vq3pCknhfn=w1207-h1262-k-no", "width": 1207, "height": 1262 } ] } ] } ```
Crawlora does not silently return bad data when the upstream page cannot be used.
| Status | Common failure case |
|---|---|
| 400 | Invalid input or missing required parameter |
| 429 | Plan or endpoint rate limit exceeded |
| 500 | Internal execution error |
| 502 | Upstream platform failed, returned unusable HTML, or served a challenge page that could not be resolved |
When possible, Crawlora returns structured error context so your integration can retry, back off, or inspect the request.
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid input | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
{
"code": 200,
"msg": "ok",
"data": [
{
"id": "Ci9DQUlRQUNvZENodHljRjlvT201dFRHSk1aRU54T0U5cmRFVjNlbGRmU1RJNFkzYxAB",
"rating": 5,
"text": "I never knew pork could taste this good. We tried the special loin and it was worth the queue.",
"relative_time": "6 months ago",
"published_at": "2026-01-01T14:39:25Z",
"author_name": "Supisara Darnchaloemwong",
"author_id": "112997636113922766481",
"author_url": "https://www.google.com/maps/contrib/112997636113922766481",
"author_photo": "https://lh3.googleusercontent.com/a-/ALV-UjWc6XFX9IKHJiQ4vZoY7o_EVCYkjMbWjGfdPZrLEw",
"author_review_count": 23,
"source": "Google",
"photos": [
{
"url": "https://lh3.googleusercontent.com/grass-cs/ACvplmM2ICW60UtuEQbkJLN-ot5vq3pCknhfn=w1207-h1262-k-no",
"width": 1207,
"height": 1262
}
]
}
]
}Request schema
No body schema
Response schema
#/definitions/google.mapPlaceReviewsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | array | No | ||||
| data[].author_id | string | No | 112997636113922766481 | AuthorID is the reviewer's stable Google contributor id. | ||
| data[].author_name | string | No | Supisara Darnchaloemwong | AuthorName is the reviewer's display name. | ||
| data[].author_photo | string | No | https://lh3.googleusercontent.com/a-/ALV-UjWc6XFX9IKHJiQ4vZoY7o_EVCYkjMbWjGfdPZrLEw | AuthorPhoto is the reviewer's avatar URL. | ||
| data[].author_review_count | integer | No | 23 | AuthorReviewCount is how many reviews this contributor has written in total, as reported by Google. 0 means not captured, and is normal for a review syndicated from another site. | ||
| data[].author_url | string | No | https://www.google.com/maps/contrib/112997636113922766481 | AuthorURL is the reviewer's public Google Maps contributor page. | ||
| data[].id | string | No | Ci9DQUlRQUNvZENodHljRjlvT201dFRHSk1aRU54T0U5cmRFVjNlbGRmU1RJNFkzYxAB | ID is Google's opaque review identifier, stable across fetches. | ||
| data[].photos | array | No | Photos are the images attached to this review, largest variant first. | |||
| data[].photos[].height | integer | No | 100 | |||
| data[].photos[].url | string | No | https://lh3.googleusercontent.com/gps-cs-s/AHRPTWlbepbs69mWZVN7SNi4FYseIr1JvRCpGHgpFfN5wOf02mKOVdfv2REVb896InfULrDb_yQmqdxmQcSnmwHp2VncbLzYxzWtsUFFbKH3buF34st-Nhlg1fEIH0_tkmvNKJmWKEHKv45RBu4=w203-h100-k-no | URL is Google's image URL exactly as served, including its size suffix (e.g. `=w203-h100-k-no`). Swap that suffix to request other dimensions. | ||
| data[].photos[].width | integer | No | 203 | Width and Height are the pixel dimensions of the URL as served, when Google reports them. 0 means not captured. | ||
| data[].published_at | string | No | 2026-01-01T14:39:25Z | PublishedAt is the review timestamp in RFC3339 (UTC). Empty when Google did not report one. | ||
| data[].rating | integer | No | 5 | Rating is the star rating this reviewer gave, 1-5. | ||
| data[].relative_time | string | No | 6 months ago | RelativeTime is Google's own human-readable age for the review, in the requested language (e.g. "6 months ago"). | ||
| data[].source | string | No | Source is the site the review came from. Google's place pages syndicate reviews from partner sites (notably for hotels), so this is "Google" for a native Google review and the partner's name (e.g. "Tripadvisor", "TrustYou") otherwise. | |||
| data[].text | string | No | I never knew pork could taste this good. | Text is the review body. Empty for a photo-only review, which Google allows. | ||
| msg | string | No | ok |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/google/map/place/ChIJN1t_tDeuEmsRUsoyG83frY4/reviews?limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"Crawlora is designed for responsible structured public web data workflows. Customers are responsible for using Crawlora in compliance with applicable laws, third-party rights, target-platform rules, and Crawlora terms.
Read Crawlora terms