Google Maps Reviews Scraper — Sorted Reviews avatar

Google Maps Reviews Scraper — Sorted Reviews

Pricing

$0.50 / 1,000 reviews

Go to Apify Store
Google Maps Reviews Scraper — Sorted Reviews

Google Maps Reviews Scraper — Sorted Reviews

Google Maps reviews scraper with newest, most relevant, highest, and lowest rating sort orders. Extract review text, ratings, authors, images, replies, and timestamps from a Maps URL or place ID. $0.50 per 1,000 delivered reviews.

Pricing

$0.50 / 1,000 reviews

Rating

0.0

(0)

Developer

Meka.im

Meka.im

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

39 minutes ago

Last modified

Share

Use this Google Maps reviews scraper to extract review text, ratings, reviewers, photos, owner replies, and timestamps from Google Maps URLs or place IDs. Collect reviews using Google's real most relevant, newest, highest rating, or lowest rating order without a login.

  • Four real sort orders — most relevant, newest, highest rating, lowest rating. Google's orders, not a re-sort on our side
  • Four ways to name a place — Maps URL, ChIJ… place ID, numeric CID, or 0x…:0x… feature ID
  • Truncated responses are flagged, never passed off as the full list
  • $0.50 per 1,000 delivered reviews, no start fee
  • No login, no cookies, no browser

Quick start: scrape Google Maps reviews

{
"places": ["https://www.google.com/maps?cid=7590626642755549500"],
"sort": "newest",
"maxReviews": 50
}

All four of these name the same place and return the same reviews:

{
"places": [
"https://www.google.com/maps?cid=7590626642755549500",
"ChIJ_bMOIClFVVMRPHkP-LZSV2k",
"7590626642755549500",
"0x53554529200eb3fd:0x695752b6f80f793c"
]
}

Given all four at once, the place is scraped and charged once.

Google Maps review scraper input

FieldTypeDefaultNotes
placesarrayOne place per line, any of the four forms. Required
sortstringmostRelevantmostRelevant / newest / highest / lowest
maxReviewsinteger100Per place
languagestringenGoogle interface language. Does not filter reviews, see below
requireCompletebooleantrueFlag truncated responses instead of accepting them
placeConcurrencyinteger2Advanced
sessionRetriesinteger3Advanced
retryDelayMsinteger1500Advanced

Unrecognised places are skipped, reported in the run summary, and never charged. One bad entry does not stop the batch. Links that are not on a Google domain are rejected before any request is made.

Google Maps reviews data output

One row per unique review, ordered by input, then page, then position on the page.

FieldMeaning
reviewIdGoogle's own id. Stable across sessions and sort orders
text, language, ratingThe review as written. Not a machine translation
timeWhen the review was first posted
updatedTimeWhen it was last edited. Equals time when never edited
isEditedWhether those two differ
relativeTimeGoogle's own wording, e.g. 2 months ago
authorname, profileUrl, profileImageUrl, publicId, isLocalGuide, reviewerNumberOfReviews
ownerResponseThe business reply, when there is one
imagesPhoto URLs attached to the review
placeinput, inputType, featureId, cid, url
sort, page, rankWhere this row sits in the requested order
requestedLanguageThe interface language this run asked for
variant, incomplete, expectedCompleteness, see below

Two timestamps, on purpose

time is when the review was posted. updatedTime is when it was last edited.

Google's newest order follows the edit time, not the post time. A review posted in March and edited in June sorts as a June review. Tools that expose a single timestamp have to pick one, and picking the edit time silently rewrites when the review was written.

We give both and let you choose. Measured over 80 reviews: ordering by time looks out of order in 7 places, ordering by updatedTime in none.

Pricing

EventPrice
review-delivered$0.0005 — $0.50 per 1,000 delivered reviews

No start fee. Platform usage is included.

Not charged: unrecognised places, places that return nothing, failed fetches, and any review already delivered in this run or a previous one.

Limits

Stated here rather than discovered later.

Google truncates some anonymous sessions. A truncated response is exactly five reviews with no next page — which is indistinguishable from a place that genuinely has five reviews. This Actor retries with fresh sessions; if the response is still short, every row for that place carries incomplete: true and the run summary names the place. We do not pass five reviews off as a full list. The one case we cannot resolve is a place that really does have exactly five reviews: it will be flagged as incomplete even though it is not.

This can happen on your first run. Retries clear it most of the time, but not every time — in our own acceptance runs one attempt in roughly eight came back truncated even after six fresh sessions. When it does, you get five rows with incomplete: true rather than a silent short list. Run it again; already-delivered reviews are not refetched or recharged.

language does not filter reviews. It is Google's interface language: it changes the relative time wording (3 weeks agovor 3 Wochen) and the language Google would translate into. Review text comes back in the language the reviewer wrote it in, never a translation — asking for ja on a French place still returns French. Each row reports both: language is the review's own language, requestedLanguage is what you asked for.

Owner replies have no absolute timestamp. Google only exposes a relative one (3 weeks ago) for the reply itself.

Sorted orders are Google's. mostRelevant reflects Google's ranking on the day you run it.

Not included: review sentiment, AI summaries, reviewer profile enrichment, emails or contact details, and anything behind a login.

Completeness

Each row carries:

FieldMeaning
variantfull when Google returned a complete page, teaser when short
incompletetrue when we know the place was not fully delivered
expectedThe completeness threshold the run used

OUTPUT also reports placesComplete / placesIncomplete and a perPlace breakdown, plus target-site errors, local back-pressure and parse failures counted separately — so a failure tells you whose problem it is.

API and automation

curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&clean=true" \
-H "Authorization: Bearer APIFY_TOKEN"

A run that is interrupted and restarted picks up where it stopped. The Dataset is the source of truth for what was already delivered, so nothing is written or charged twice.

Local business research workflow

  • Start with Google Maps Business Scraper to discover businesses and their Google Maps identifiers.
  • Use this Actor to collect and sort their customer reviews.
  • Send the businesses' websites to Website Email Finder to find public contact addresses with source evidence.

FAQ

Why do two rows have the same star rating but different order under newest? Order follows updatedTime. Check isEdited.

A place came back with incomplete: true but it really does have five reviews. That is the one case the public protocol cannot resolve. variant and the run summary let you confirm by hand.

Can I get reviews in English for a non-English place? No. Reviews come back in the original language.

My run stopped early. If stoppedOnBudget is true, the run hit the maximum charge you allowed. Raise it and start again; delivered reviews are not refetched or recharged.

Why did a place I listed twice only get scraped once? All four input forms resolve to the same place. Duplicates are collapsed and charged once.

This Actor is independently developed and is not affiliated with, endorsed by, or sponsored by Google.

It reads public pages. It does not sign in, does not use cookies or credentials, and does not reach anything behind a login. You are responsible for how you use the data, including any applicable terms and data-protection rules.