Skip to main content
Use POST /web/scrape with formats.parse: true and parseParams: {"type": "prebuilt", "parser": "google-maps-reviews"}. Read the result in parsed.data, with parsed.type: "google-maps-reviews". See the Quickstart for authentication and SDK setup. Don’t send custom rules with this parser. For CSS selectors and rules, use the Custom parser.

Request

The URL identifies the place. These forms are accepted:
  • A Maps place URL, such as https://www.google.com/maps/place/.... When the URL carries a feature ID (!1s0x…:0x…), that exact place is used.
  • A CID URL, such as https://maps.google.com/?cid=16537904221077587530. Signed CIDs, as returned by the Google Maps parser, work too.
  • A reviews URL, such as https://search.google.com/local/reviews?placeid=ChIJ….
  • A Maps search URL. The first result is used.
The google_maps_url and google_reviews_url fields of Google Maps parser results both work as input. Two optional fields on parseParams control the result: newest, relevant, highest, and lowest follow Google’s own orders. oldest returns the earliest reviews first, ordered by exact posting time, which Google itself does not offer. Other parsers reject sort and limit.
Larger limits take longer: about 20 seconds for the oldest 1,000 reviews of a large place, and about 45 seconds for 1,000 in Google’s orders. Raise timeoutOpts.milliseconds when you need headroom beyond the 90-second default.

Output

Field names and shapes match Serper’s Google reviews response, so existing Serper integrations work unchanged. featureId, cid, and sort at the top level, and user.isLocalGuide, language, and details on each review, are additions. When parsed.success is true, the parsed output has this shape:
featureId is the place’s Maps feature ID. cid is the same signed CID the Google Maps parser returns, so you can join the two outputs. sort is the order used.

Review fields

Optional keys are omitted, not null, when empty, matching Serper. Other unavailable values are null.
  • date is Google’s relative label, such as "3 months ago", and isoDate is the exact posting time as an ISO 8601 timestamp.
  • snippet is the review in its original language, and language is that language’s code. translatedSnippet is Google’s English translation, omitted when there is none, such as for English reviews. Line breaks are \n, and rating-only reviews have no snippet.
  • likes counts every reaction on the review.
  • user is the reviewer: thumbnail is the avatar URL, link the contributor profile, and reviews and photos the contributor’s review and photo counts.
  • media lists the review’s photos and is omitted when there are none. caption is omitted when empty.
  • response is the owner’s reply, omitted when the owner hasn’t replied. Google only gives a relative date for replies.
  • link is the review’s permalink.
  • details holds the guided answers, such as {"Meal type": "Breakfast", "Food": 5} for restaurants or {"Rooms": 4, "Location": 5} for hotels, and is {} when there are none.

Empty results and errors

A place without reviews returns reviews: []. Google answers an unknown CID the same way, so an empty list does not establish that the place exists. A search or place URL that matches no place fails with NOT_FOUND. Reviews posted in the last few hours can take a while to appear in every Google region, so a very fresh review may be missing from one request and present in the next. Read parsed.success before using the data. A failed parse has data: null and can coexist with successful outputs. parsed.type remains "google-maps-reviews" even when parsing fails. See timeouts and errors for handling failures.

Request options

This parser fetches source data separately from the rendered page, using a US exit and English labels. Content filters and browser actions do not change its results. Browser profiles are unsupported with this parser. Other Scrape controls, including caching, timeouts, and zero data retention, still apply.