Google Maps Reviews Scraper - Original Language & Owner Replies avatar

Google Maps Reviews Scraper - Original Language & Owner Replies

Deprecated

Pricing

Pay per usage

Go to Apify Store
Google Maps Reviews Scraper - Original Language & Owner Replies

Google Maps Reviews Scraper - Original Language & Owner Replies

Deprecated

Google 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

seungkyu cho

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

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 passThree passes
Reviews returned200200
With original text79 (39%)200 (100%)
Languages representedko onlyko / 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:

CountNote
Rows returned200
Rating-only, no text73nothing to translate, nothing to recover
Written in ja or ko22original text recovered
Written in another language105Chinese, 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
}
FieldMeaning
placeUrlsAny 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
sortBynewest, relevance, highestRating, lowestRating
sweepAllSortOrdersRun all four orders — the single best way to raise unique coverage
wideLanguageSweep14-language pass when you don't know the audience
keepOriginalOnlyDrop reviews whose original text never surfaced
expandLongReviewsClick 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: false is 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

Questions and problems

Open an issue on the Issues tab of this actor, with the run ID.