Google Maps Reviews Scraper - Original Language & Owner Replies
DeprecatedPricing
Pay per usage
Google Maps Reviews Scraper - Original Language & Owner Replies
DeprecatedGoogle Maps reviews kept in the language the reviewer actually wrote them in, not Google's machine translation, with ratings, owner replies, photos and per-review language flags.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
seungkyu cho
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare
Google Maps Reviews Scraper
Reviews for any place — kept in the language the reviewer actually wrote them in.
That distinction is the entire point of this actor. Google will happily hand you a machine translation of every review, and most tools take it. If you're doing sentiment analysis, translated text is a different dataset with different results.
What a row looks like
{"recordType": "googleMapsReview","placeName": "이치란 시부야점","author": "伝説のわさび","rating": 5,"text": "深夜に行っても回転が速くて待ち時間が短い。","originalLanguage": "ja","isOriginalText": true,"capturedUnderHl": "ja","relativeDate": "2 months ago","photoCount": 3,"photoUrls": ["https://lh5.googleusercontent.com/..."],"ownerReplyText": null,"scrapedAt": "2026-08-26T04:41:03.219Z"}
isOriginalText tells you whether you're looking at the reviewer's own words or
Google's translation of them. capturedUnderHl shows which language pass caught
it — useful when you're auditing coverage.
How the original text is recovered
Google only shows a review's original text when you browse in that review's own language. So this actor sweeps the place once per language you list, merges the results by review ID, and keeps the original-language version whenever one turns up.
Measured on a Tokyo ramen shop with ["ko", "en", "ja"], capped at 200 reviews:
| Single pass | Three passes | |
|---|---|---|
| Reviews returned | 200 | 200 |
| With original text | 79 (39%) | 200 (100%) |
| Languages represented | ko only | ko / en / ja |
Same bill, two and a half times the usable data.
The cap is applied once, at the end, after every pass has run — and the trim keeps original-language reviews ahead of translated ones. You get the most useful 200, not the first 200.
What decides your original-text rate
The languages you list, matched against the languages the reviewers actually used. A review written in a language you did not list comes back only as Google's translation — no pass can recover it.
The same Tokyo ramen shop, run with ["ja", "ko"] and capped at 200:
| Count | Note | |
|---|---|---|
| Rows returned | 200 | |
| Rating-only, no text | 73 | nothing to translate, nothing to recover |
Written in ja or ko | 22 | original text recovered |
| Written in another language | 105 | Chinese, English, Thai — translation only |
Two passes were not the limit here; the language list was. A tourist destination
draws reviews in a dozen languages, so list the ones your readers care about, or
turn on wideLanguageSweep to cover 14 at once.
Each pass gets its own slice of the run's time budget, so adding a language
shortens the other passes rather than starving them. Check
RUN_STATS.reviewsByLanguage in the key-value store to see how many reviews each
pass actually contributed.
Input
{"placeUrls": ["https://www.google.com/maps/place/.../data=!4m7!3m6!1s0x..."],"maxReviewsPerPlace": 200,"sortBy": "newest","languages": ["ja"],"expandLongReviews": true,"headless": false}
| Field | Meaning |
|---|---|
placeUrls | Any of: the long address-bar URL, a share link (maps.app.goo.gl/…), a Google Maps search URL, or just the place name — the first search result is used |
sortBy | newest, relevance, highestRating, lowestRating |
sweepAllSortOrders | Run all four orders — the single best way to raise unique coverage |
wideLanguageSweep | 14-language pass when you don't know the audience |
keepOriginalOnly | Drop reviews whose original text never surfaced |
expandLongReviews | Click through "More" so long reviews aren't truncated |
It always finishes in time
The run watches its own timeout and stops collecting about 10% before the platform would kill it, then writes everything it has. A place that is too big for the timeout comes back partial and the run still succeeds — the status message says so. Previously a place with thousands of reviews ran into the timeout and returned nothing.
Defaults are sized so a first run finishes in a few minutes: 200 reviews per place, one language pass, one sort order. Add languages and sort orders when you need more coverage.
Honest limits
- This is not every review. Google caps how deep a review list will scroll, and the cap differs per sort order. On a place with 5,166 reviews: relevance gave 848, newest 750, and rating-sorted stopped at 176. All four orders combined reached 1,341 — about 26% of the total. Extra language passes barely move that number; they change which text you get, not how much.
- Roughly a third of reviews have no text at all — star-only ratings. That's Google, not a collection failure.
- Owner replies are truncated near 125 characters, and unlike review bodies
they have no "More" button to expand. A trailing
…means the rest is gone. headless: falseis the working default. Google serves headless sessions a limited page with no reviews on it.- Google's terms prohibit automated collection. The risk and the use you make of the data are yours.
Good for
- Multilingual sentiment analysis that isn't reading translations
- Pulling place reviews for restaurants, hotels or clinics with their review dates intact
- Reading reviews by language to see where locals and visitors disagree
- Competitor review monitoring across locations
- Finding what low-rating reviewers specifically complain about
- Location research where the local-language reviews are the honest ones
More actors from this author
- Encar Scraper — Korean used-car listings with accident history and inspection records
- Naver Shopping Scraper — Korean product search, prices and sellers from Naver Shopping
- Instagram Keyword Scraper — public posts and reels discovered from keywords
- YouTube Search Scraper — keyword search to videos with exact views, likes and publish dates
- YouTube Channel Scraper — one channel to profile, every video and the comments
Questions and problems
Open an issue on the Issues tab of this actor, with the run ID.