Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
Google Maps Reviews Scraper icon

Google Maps Reviews Scraper

Scrape Google Maps reviews by place URL, place ID or search: rating, full text, date, reviewer, owner reply, photo count.

17 runs on Apify
Run this in the cloudRun on Apify →

Maps & Local Lead Generation

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust startUrls, placeIds, searchStrings (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Inputs

FieldWhat it doesType
startUrlsGoogle Maps URLs to scrape reviews from. Accepts /maps/place, /maps/search and ?cid= links.array
placeIdsGoogle place IDs (start with ChIJ). One per line, or paste a list with Bulk edit.array
searchStringsBusiness names or queries; the top Google Maps match for each is scraped.array
maxReviewsHow many reviews to collect for each place. Hard ceiling is 2000.integer
maxPlacesSafety cap on how many of the supplied targets are visited in one run.integer
reviewsSortOrder Google returns the reviews in. Newest first is the default.string
reviewsStartDateAbsolute date (2026-01-01) or relative (30 days, 6 months). Older reviews are dropped and never charged.string
reviewsFilterStringKeep only reviews whose text contains this word. Filtered-out reviews are not charged.string
languageTwo-letter language code Google should answer in, e.g. en, de, fr, es.string
personalDataTurn off to blank out reviewer name, profile URL and profile ID in the output.boolean

What you get

A structured dataset — each result includes fields like:

placeNameratingreviewerNamerelativeDatetextownerReplyreviewPhotosCountplaceUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Maps & Local Lead Generation

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Yandex Maps Scraper iconMaps & Local Lead Generation

Yandex Maps Scraper

Extract Yandex Maps business listings: name, address, GPS coordinates, category, rating, review count, phone, website and opening hours.

Ready to run — no setup

Google Maps Scraper iconMaps & Local Lead Generation

Google Maps Scraper

Scrape Google Maps business listings by category and city: name, phone, website, rating, reviews, lat/lng and place ID. Build local lead lists fast.

24 use cases

Google Reviews Monitor — Multi-Location Alerts & Reports iconMaps & Local Lead Generation

Google Reviews Monitor — Multi-Location Alerts & Reports

Track Google Maps reviews across all your locations. Get only-new deltas, negative-review and rating-drop alerts to Slack, plus AI summaries and reply drafts.

4 use cases

2GIS Places Scraper iconMaps & Local Lead Generation

2GIS Places Scraper

Scrape 2GIS places at $0.50 per 1,000: name, category, address, coordinates, phone, website, rating and reviews. Russia and CIS coverage. No API key.

Ready to run — no setup

2GIS Reviews Scraper iconMaps & Local Lead Generation

2GIS Reviews Scraper

Extract 2GIS reviews by place URL or city search: star rating, review text, author, date, photos, owner replies and aggregate rating. No 2GIS API key.

Ready to run — no setup

Yelp Scraper iconMaps & Local Lead Generation

Yelp Scraper

Scrape Yelp businesses and reviews via Yelp's official Fusion API: rating, review count, price, phone, address, GPS and review text.

Ready to run — no setup

See all Maps & Local Lead Generation →

Google Maps Reviews Scraper

Point it at a Google Maps place — a URL, a place ID, or just the business name — and get every review back as a row: star rating, the full review text, when it was posted, who wrote it (with their own review and photo counts), the owner's reply, and how many photos the review carries.

Sorted newest first. No Google account, no cookies, no API key, nothing to log into.

Price

$0.35 per 1,000 reviews, plus a $0.0000125 start fee per GB of run memory (this Actor runs at 1 GB, so that is $0.0000125 per run — a hundredth of a cent).

That is the cheapest Google Maps reviews scraper on the market. Here is the comparison, taken from Apify's own store API on 2026-08-14, counting only the per-result event and ignoring the decoy apify-default-dataset-item charges rivals attach beside their real price:

ActorUsers (30d)Per reviewStart fee1,000 reviews
dami_studio/google-maps-reviews-scrapernew$0.00035$0.0000125$0.35
beatanalytics/google-maps-reviews-scraper106$0.0005$0$0.50
delicious_zebu/google-maps-store-review-scraper24$0.0004$0.00005$0.40
datablow/google-reviews-scraper37$0.003$0.00005$3.00
agents/google-maps-reviews16$0.016 per query$0n/a (per query)
compass/google-maps-reviews-scraper5,703no per-result priceyou pay Apify platform compute instead

The most-installed rival, compass, does not charge per review at all — it bills you Apify platform usage, so what a run costs depends on how long its browser sits there. This Actor charges a flat $0.00035 per review and nothing else, so a 5,000-review job costs $1.75 whether it takes one minute or ten.

What is free. The uncharged sample row you get from an empty input is free. Every diagnostic row (ok: false, with an errorCode) is free — blocks, empty places, bad URLs. Reviews dropped by your keyword or date filter are free, because they are never pushed. You only pay for a review row that actually landed in the dataset.

Input

Everything is optional. Give it at least one of startUrls, placeIds or searchStrings.

{

  "searchStrings": ["Katz's Delicatessen New York"],

  "maxReviews": 100,

  "maxPlaces": 1,

  "reviewsSort": "newest",

  "language": "en"

}
FieldWhat it does
startUrlsGoogle Maps URLs — /maps/place/…, /maps/search/… or ?cid=…
placeIdsPlace IDs starting with ChIJ
searchStringsBusiness names or queries; the top Maps match for each is scraped
maxReviewsReviews per place, ceiling 2000 (default behaviour: 100)
maxPlacesSafety cap on how many targets one run visits, ceiling 50
reviewsSortnewest (default), mostRelevant, highestRanking, lowestRanking
reviewsStartDate2026-01-01 or 30 days — older reviews are dropped and not charged
reviewsFilterStringKeep only reviews containing this word; the rest are not charged
languageTwo-letter code Google answers in (en, de, fr, es, …)
personalDataSet false to blank out reviewer name, profile URL and profile ID
proxyConfigurationOptional. Leave empty and it picks its own cheap egress

The field names match compass/google-maps-reviews-scraper where they overlap (startUrls, placeIds, maxReviews, reviewsSort, reviewsStartDate, reviewsFilterString, language, personalData), so an existing input JSON can be pasted straight in.

Output

A real row from a real run (run mg8e1KaEV80M11Pu5, 12 newest reviews of Katz's Delicatessen):

{

  "ok": true,

  "charged": true,

  "placeName": "Katz's Delicatessen",

  "placeUrl": "https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/data=!3m1!4b1!4m6!3m5!1s0x89c2598f7ff4aa09:0x313547e757cb8cea!8m2!3d40.722233!4d-73.987429!16zL20vMDN0eF9o",

  "placeTotalScore": 4.5,

  "placeReviewsCount": 39526,

  "reviewsSort": "newest",

  "sortApplied": true,

  "reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2treGRHUnhjMmxhWWs0MGMzQTRha3RYZW5keldGRRAB",

  "reviewerName": "Vanesa Herrera",

  "reviewerUrl": "https://www.google.com/maps/contrib/116379031429699768301/reviews",

  "reviewerId": "116379031429699768301",

  "reviewerNumberOfReviews": 5,

  "reviewerNumberOfPhotos": null,

  "isLocalGuide": false,

  "rating": 2,

  "relativeDate": "3 hours ago",

  "publishedAtDate": "2026-08-15T01:00:12.328Z",

  "text": "If you're in a group larger than six and want to eat at the table where the servers serve you, don't mention it because it will take a long time to get your table... In the end, the food was okay, but nothing extraordinary.",

  "ownerReply": null,

  "ownerReplyRelativeDate": null,

  "reviewPhotosCount": 0,

  "reviewPhotoUrls": []

}

Coverage on that run: 12 of 12 rows carried placeName, placeTotalScore, placeReviewsCount, rating, relativeDate, reviewerName, reviewerUrl, reviewerNumberOfReviews and text, and 0 of 12 texts were left truncated with the "... More" preview. On a larger run of the same place (100 reviews, run M5qRtD9Rzymcff0pt) 43 of the 100 rows also carried an ownerReply — the rest simply have no reply — and the longest review body came back at over 1,900 characters.

Rows arrive newest first when sortApplied is true; that run's first rows were "3 hours ago", "an hour ago", "21 minutes ago".

Honest limits

  • publishedAtDate is derived, not exact. Google only publishes a relative label

("a month ago"), so this Actor converts that label to a timestamp at scrape time. relativeDate is the raw label Google gave; use it when you need the ground truth. reviewsStartDate filtering works off the derived timestamp, so it is accurate to roughly the granularity Google shows.

  • sortApplied tells you the truth about sorting. Google's sort control is a menu that

occasionally does not open in a headless session. When that happens the run still returns reviews, but in Google's default "most relevant" order, and sortApplied is false on every row so you can see it rather than guess.

  • Google soft-throttles by IP. Instead of an error it sometimes serves a cut-down place page

with no Reviews tab at all — the page footer says "You're seeing a limited view of Google Maps". This Actor detects that page, rotates to a different exit address and retries up to three times. If all three fail you get an uncharged BLOCKED diagnostic row, not a silent empty dataset.

  • placeReviewsCount is the number Google prints on the reviews pane, which is not always the

same as the headline count on the overview card — Google counts star-only ratings differently in the two places. Treat it as Google's own figure for the review list you are paging, not as an audited total.

  • Ceiling is 2000 reviews per place. Google's own pane stops serving more long before that on

most places; very large places will return what the pane gives, then stop.

  • One place per search phrase. A searchStrings entry resolves to Google's top match. If you

need a specific branch, pass its place URL or place ID.

  • No reply threads, no review edits history, no reviewer email. Google does not publish them.
  • Very short reviews can come back with an empty text. Google Maps lets people leave a star

rating with no words. Those rows still carry the rating, reviewer and date, and text is empty rather than padded with the card's chrome.

  • Runs use a real browser. Google's reviews are not served by any public JSON endpoint — its

internal listugcposts RPC returns HTTP 403 to every anonymous request (verified across four TLS fingerprints, four Google country hosts, with and without cookies and session tokens). A short run therefore has a fixed browser cost; runs of roughly 25 reviews or more are where the per-review price does its job.

FAQ

Do I need a Google account or an API key? No. Nothing is logged into. It reads the public Google Maps place page.

How much does 10,000 reviews cost? $3.50, plus the start fee of one hundredth of a cent per run.

Can I get only reviews from the last month? Yes — set reviewsStartDate to 30 days. Older reviews are dropped before they are pushed, so you are not charged for them.

Can I scrape several places in one run? Yes. Put multiple entries in startUrls, placeIds or searchStrings. maxReviews applies per place; maxPlaces caps how many are visited.

What happens if a place has no reviews? You get one uncharged diagnostic row with errorCode: "NO_RESULTS" and the run finishes as succeeded. You are not billed for it.

What happens if I run it with empty input? You get exactly one labelled sample row (_sample: true, charged: false) showing the output shape, and the run succeeds. Nothing is charged except the start fee.

Is this really the cheapest Google Maps reviews scraper? At $0.35 per 1,000 reviews, yes — every other Google Maps reviews scraper on Apify with a real per-result price charges more (see the table above), and the free-tier ones bill you platform compute instead, which on a browser-driven review crawl runs higher than $0.35 per 1,000.

Can I send the results to Google Sheets / a webhook? Results land in a standard Apify dataset, so every Apify integration works: API, webhooks, Zapier, Make, or a direct CSV/JSON/Excel export from the run page.