Google Map API endpoint
Returns 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.
/google/map/place/{place_id}/reviewsPath parameters:
place_id: required. Google Place ID.Query parameters:
limit: optional, non-negative integer. Caps how many reviews are returned. Omit or pass 0 to get
everything captured. A negative value returns a 400.Notable response behavior:
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.data array, not an error.| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| id | 5 | |
| rating | 5 | 1 to 5, median 1 |
| text | 5 | median 713 characters |
| relative_time | 5 | |
| published_at | 5 | 2026-07-05 to 2026-08-19 |
| author_name | 5 | |
| author_id | 5 | |
| author_url | 5 | google.com |
| author_photo | 5 | lh3.googleusercontent.com |
| author_review_count | 5 | 2 to 366, median 23 |
| source | 5 | |
| photos | 0 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| place_id (path) | string | Yes | Google Place ID | ChIJs3cv0KuvEmsRHcXYwNJ6GU0 | |
| 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/ChIJs3cv0KuvEmsRHcXYwNJ6GU0/reviews?limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"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 | Pixel height of the image at its URL. 0 when Google does not report it. | ||
| 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 |
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid input | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/google/map/place/ChIJs3cv0KuvEmsRHcXYwNJ6GU0/reviews?limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"