Google Maps Reviews Scraper
Pricing
from $0.30 / 1,000 per reviews
Google Maps Reviews Scraper
Extract every public review for a place on Google Maps by URL or place ID: review text with English translation, star rating, dates, likes, owner_response, attached photos and reviewer details. Export JSON, CSV or Excel.
Pricing
from $0.30 / 1,000 per reviews
Rating
0.0
(0)
Developer
herus13
Maintained by CommunityActor stats
1
Bookmarked
9
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
The Google Maps Reviews Scraper extracts every public review for a place on Google Maps — review text with an English translation, star rating, dates, likes, owner replies, attached photos and reviewer details. Point it at a place by URL or place ID and export to JSON, CSV or Excel.
What you get
One flat row per review, 20 fields wide.
{"place_id": "0x8644b4eb0b01986f:0x6b241d4769ed491e","business_name": "ATX Family Dental","business_url": "https://www.google.com/maps?cid=7720627710330453534","review_id": "ChdDSUhNMG9nS0VJQ0FnSURydXBfcXdBEAE","rating": 5,"text": "Absolutely love this place. The staff is kind, professional and always on time.","text_translated": null,"review_images": ["https://lh3.googleusercontent.com/grass-cs/AN..."],"relative_time": "2 months ago","absolute_date": "2026-03-14T09:37:20.931310Z","language": "en","review_likes": 3,"owner_response": "Thank you so much! We love having you as a patient.","has_owner_response": true,"reviewer_name": "Sarah M.","reviewer_profile_url": "https://www.google.com/maps/contrib/113456789012345678901","reviewer_review_count": 47,"scraped_at": "2026-06-19T08:30:00+00:00","_meta": {"author": "https://apify.com/herus13", "status": "ok", "message": null}}
_meta is run metadata, not scraped data. If the run fails or stops early, a row with only _meta (status failed or stopped, the reason in message) explains why; those rows are never charged.
absolute_date is an exact ISO 8601 timestamp, so reviews sort and filter properly — Google's own "2 months ago" wording is kept alongside it in relative_time. review_url and reviewer_photo_url round out the row.
What it costs
| Event | Free | Bronze | Silver | Gold+ |
|---|---|---|---|---|
per review (review) | $0.0005 | $0.00045 | $0.0004 | $0.0003 |
You pay per review delivered, which works out at $0.50 per 1,000 reviews on the Free tier and $0.30 per 1,000 on Gold, with no start charge per run. Unused headroom costs nothing: ask for 100 reviews from a place that has 30 and you are charged for 30. The residential proxy the run needs is included in the price.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
startUrls | array | no | — | Google Maps places to pull reviews from, one per entry: the place URL from the address bar, a share link (maps.app.goo.gl), a ?cid= link, or a place_id link. Ids work here too, so this field and placeIds take the same formats. Search URLs and saved lists are skipped: give each place on its own. Give at least one of startUrls or placeIds; leave empty when you are supplying placeIds instead. |
placeIds | array | no | — | Google place ids, one per entry: a ChIJ… place id, a 0x…:0x… feature id, or a numeric CID. URLs work here too, so this field and startUrls take the same formats. A place given in several forms is read once. Give at least one of startUrls or placeIds; leave empty when you are supplying startUrls instead. |
maxReviews | integer | no | 100 | How many reviews to return for each place. Default 100. Set 0 to take every review the place has. Google counts star-only ratings in the headline total it shows, while only reviews that carry text come back as rows, so a place advertising 500 reviews can return fewer. |
reviewsSort | string | no | "newest" | Which reviews you get first: newest for the most recent, mostRelevant for Google's own ranking, highestRating for the best, lowestRating for the worst. Default newest. Pair highestRating with a small maxReviews to lift a place's showcase reviews, or newest to watch fresh feedback. |
includeRatingOnlyReviews | boolean | no | false | Also return the star-only ratings — reviews with a rating but no text — which are left out by default. Default false. No longer available: Google stopped showing star-only ratings to signed-out visitors, so this option has no effect and only text reviews are returned. It is kept so saved inputs that set it still run. |
language | string | no | "en" | BCP-47 language code for the review text, for example en, de, fr or vi. Default en. A review written in another language still comes back in the original, with the English translation in text_translated. |
debugDumpRaw | boolean | no | false | Save the first raw reviews response Google returned into the run's key-value store, under the key DEBUG_LISTUGCPOSTS_RAW, so there is something concrete to look at when a place comes back empty. Default false; leave it off for normal runs. |
proxyUrls | array | no | — | Leave empty and the run uses a residential proxy that is included in the price of the run. To route through your own account instead, add one gateway URL per entry, for example http://user:pass@host:port. Works with any provider that issues URLs. When set, the run uses these first and switches to the included proxy if they stop working, so a broken proxy never fails the run. |
Give at least one place, as a URL in Place URLs or an id in Place IDs; either field takes any format.
How to run it
- Open the actor on Apify Console and click Try for free.
- Open your place in Google Maps, copy the URL out of the address bar, and paste it into Place URLs. Add as many places as you like, one per line.
- Run it. Reviews stream into the dataset while the run is still going; export them as JSON, CSV or Excel, or read them from the Apify API.
{"startUrls": ["https://www.google.com/maps/place/ATX+Family+Dental/@30.2482229,-97.7559705,17z/data=!4m8!3m7!1s0x8644b4eb0b01986f:0x6b241d4769ed491e!"],"maxReviews": 200,"reviewsSort": "newest","language": "en"}
Minimal input:
{"startUrls": ["https://www.google.com/maps/place/ATX+Family+Dental/@30.2482229,-97.7559705,17z/data=!4m8!3m7!1s0x8644b4eb0b01986f:0x6b241d4769ed491e!"]}
Available as the MCP tool herus13--google-maps-reviews-scraper on mcp.apify.com and through the Apify API; send the same JSON.
Why this scraper
- The fullest review row on the Store. English translation, like count and attached photos, plus owner replies and the reviewer's own profile and review count, all in one flat row that opens cleanly in a spreadsheet.
- Pay only for reviews you actually receive. Per-review billing, no start charge, no per-place fee and no subscription.
- Any place reference. Paste a place URL or share link straight out of Google Maps, or feed the ChIJ, hex or CID ids you already hold.
- Sortable dates. Every review carries an exact timestamp as well as Google's relative wording, so a rating trend can be plotted without parsing "3 years ago".
- Clean values. Impossible ratings, negative counts and malformed URLs are dropped rather than passed through, so the file you export is the file you can load.
Use cases
- Reputation monitoring — pull every public review for a place and watch the rating trend rather than the current average. Owner replies come too, so you can audit which complaints were answered and which were left standing.
- Sentiment analysis on real customer language — the English translation arrives beside the original, which makes a multi-market location set analysable in one pipeline instead of one per language.
- Competitor research — read what a competitor's customers actually complain about. Attached photos frequently show conditions the text never mentions.
- Multi-location chain auditing — per-place review streams show which branches drag the brand average down, and the dates separate a bad week from a persistent problem.
- Product and service feedback mining — a few thousand reviews across a category give you the vocabulary customers use, which is the wording that belongs in your own copy.
FAQ
Do I need a proxy? A residential proxy is included in the price of the run. To use your own, paste gateway URLs into Your own proxy URLs.
What happens if my input is wrong? The run stops before it scrapes anything, so no results are charged. Its status and log name each field that is wrong and say what to change — fix the input and run again.
How do I get a place URL? Open the place in Google Maps and copy the whole URL out of your browser's address bar into Place URLs. The URL already carries the place's ID, so there is no lookup to do. Paste as many as you like, one per line.
Which place ID format is accepted? All the common ones, in either field: a ChIJ… place id, a 0x…:0x… feature id, a numeric CID, a full place URL, a maps.app.goo.gl share link, a ?cid= link or a place_id link. A place given in several forms is read once. Search URLs and saved lists are skipped; give each place on its own.
Why do I get fewer reviews than the place's total? Google counts star-only ratings, which carry no text, inside the total it advertises. By default only reviews with text come back as rows, so a place showing "500 reviews" can legitimately return fewer. Star-only ratings cannot be collected: Google no longer shows them to signed-out visitors, so the Include star-only ratings option has no effect.
Can I get reviews in English? Yes. When a review is not in the language you asked for, Google's English translation comes back in text_translated next to the original text.
Is this legal? The actor collects publicly available review data only. You remain responsible for complying with Google's terms and with the law that applies to you, including handling personal data such as reviewer names on a lawful basis.
Related actors
- Google Maps Business & Contact Scraper — businesses from Google Maps with emails, phone numbers, ratings, photos and social links. The natural pair for reviews.
- Google Play Reviews Scraper — Android app reviews and ratings, for cross-platform reputation tracking.
- Apple App Store Scraper — App Store search plus featured reviews.