Google Maps REVIEWS Scraper
Pricing
from $2.00 / 1,000 results
Google Maps REVIEWS Scraper
Extract reviews from any **[Google Maps](https://www.google.com/maps)** place at scale. The scraper collects review text, ratings, reviewer profiles, photos, and timestamps
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Tin
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract reviews from any Google Maps place at scale. The scraper collects review text, ratings, reviewer profiles, photos, and timestamps — without requiring a Google account or API key. Run it on the Apify platform with built-in proxy rotation, scheduling, and export to JSON, CSV, or Excel.
What does Google Maps Reviews Scraper do?
This Actor opens a Google Maps place URL in a real Chrome browser, switches to the Reviews panel, and intercepts Google's internal listugcposts API responses. It then paginates the same API directly via in-page fetch() calls — no DOM scrolling — for fast, reliable collection of every review the panel exposes.
You can sort by Most relevant, Newest, Highest rating, or Lowest rating, and stop early once reviews older than a chosen cutoff date appear. Each review is deduplicated by reviewId and pushed to the dataset as a single structured item.
Try it by pasting any Google Maps place URL — e.g. https://www.google.com/maps/place/Alien+Store/... — and setting a maxReviewsPerPlace limit.
Why use Google Maps Reviews Scraper?
- Reputation monitoring — track new reviews for your business or your competitors
- Sentiment analysis — pipe review text into NLP models to surface trends and complaints
- Local SEO research — analyse keywords, ratings, and reviewer demographics across markets
- Lead generation — identify Local Guides and high-volume reviewers in your category
- Travel and hospitality — bulk-collect reviews for hotels, restaurants, and attractions
How to use Google Maps Reviews Scraper
- Open Google Maps and search for the place you want.
- Click the place to open its panel, then copy the URL from your browser's address bar.
- Open the Actor's Input tab and paste the URL into Start URLs.
- Set Max reviews per place to control how many reviews are collected (default: 100).
- Optionally pick a Sort order (Most relevant, Newest, Highest rating, Lowest rating).
- Optionally set Reviews start date to skip anything older — supports ISO dates (
2024-05-03) or relative phrases (8 days,3 months). - Click Start and wait for the run to finish.
- Download your results from the Output tab in JSON, CSV, or Excel.
Input
Configure the Actor from the Input tab in Apify Console, or provide a JSON input.
| Field | Type | Description | Default |
|---|---|---|---|
startUrls | array | Google Maps place URLs to scrape reviews from | (required) |
maxReviewsPerPlace | integer | Stop after collecting this many reviews per place | 100 |
sortOrder | string | mostRelevant, newest, highestRating, or lowestRating | mostRelevant |
reviewsStartDate | string | Only collect reviews newer than this date — ISO (2024-05-03) or relative (8 days, 3 months) | — |
When reviewsStartDate is set, sortOrder is automatically forced to newest so the run can stop as soon as it hits an older review.
Example input:
{"startUrls": [{ "url": "https://www.google.com/maps/place/Alien+Store/@10.7832864,106.646065,16z/data=!4m6!3m5!1s0x31752fc26ef62299:0x91b03a6ca3ba9aa6" }],"maxReviewsPerPlace": 200,"sortOrder": "newest","reviewsStartDate": "3 months"}
Output
Results are saved to the default Dataset. Each item is one review.
Example output (1 item):
{"reviewId": "ChdDSUhNMG9nS0VJQ0FnSURGdjgyVjZRRRAB","placeId": "0x31752fc26ef62299:0x91b03a6ca3ba9aa6","publishedAt": "2025-09-12T14:21:08.000Z","editedAt": null,"relativeTime": "2 months ago","stars": 5,"textOriginal": "Great selection of figures, friendly staff.","textTranslated": null,"languageOriginal": "en","reviewer": {"id": "1029384756","name": "Jane Doe","avatar": "https://lh3.googleusercontent.com/a/...","profileUrl": "https://www.google.com/maps/contrib/1029384756","reviewCount": 42,"photoCount": 17,"isLocalGuide": true,"localGuideLevel": 6,"label": "Local Guide · 42 reviews"},"photos": [{"id": "AF1QipM...","url": "https://lh5.googleusercontent.com/p/AF1QipM...","width": 4032,"height": 3024}],"reviewUrl": "https://www.google.com/maps/reviews/...","placeUrl": "https://www.google.com/maps/place/Alien+Store/..."}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data fields
| Field | Description |
|---|---|
reviewId | Google's unique review ID |
placeId | FID of the place the review belongs to |
publishedAt | ISO timestamp of when the review was first posted |
editedAt | ISO timestamp of the last edit (null if never edited) |
relativeTime | Human-readable relative time as shown on Maps (e.g. 2 months ago) |
stars | Star rating, 1–5 |
textOriginal | Review text in its original language |
textTranslated | Google's auto-translation if shown |
languageOriginal | Language code of the original text |
reviewer.id | Reviewer's Google contributor ID |
reviewer.name | Reviewer's display name |
reviewer.avatar | URL of the reviewer's avatar |
reviewer.profileUrl | Link to the reviewer's public Maps profile |
reviewer.reviewCount | Total reviews the reviewer has written |
reviewer.photoCount | Total photos the reviewer has uploaded |
reviewer.isLocalGuide | Whether the reviewer is a Local Guide |
reviewer.localGuideLevel | Local Guide level (if applicable) |
reviewer.label | Free-form label Google shows next to the name |
photos[] | Photos attached to the review (id, url, width, height) |
reviewUrl | Permalink to the review on Google Maps |
placeUrl | The place URL this review was scraped from |
Pricing / Cost estimation
This Actor uses Puppeteer (headless Chrome) to render the Maps panel and intercept the reviews API. Typical costs on Apify:
- ~0.02–0.05 compute units per place for ~100 reviews
- The Actor blocks images, fonts, and media to keep bandwidth low
- After the first XHR is captured, pagination is pure
fetch()— no extra page loads
The Apify Free plan includes $5/month in free usage, enough for thousands of reviews. For large-scale or recurring scrapes, a paid plan is recommended.
Tips and advanced options
- Scrape multiple places — add several URLs to
startUrls; each is processed independently. - Use
reviewsStartDatefor incremental runs — set it to the timestamp of the previous run to collect only new reviews. Sort order is forced tonewestso the run exits as soon as it crosses the cutoff. - Sort by
lowestRating— fastest way to surface complaints for QA or competitor analysis. - Schedule recurring runs — use Apify's scheduler to monitor reviews daily and trigger alerts on negative sentiment.
- Export to Google Sheets — use the Apify Google Sheets integration to push results directly into a spreadsheet.
FAQ, disclaimers, and support
Is it legal to scrape Google Maps reviews? Reviews are publicly visible and generally permissible to collect for personal, research, and non-commercial purposes in many jurisdictions. However, Google's Terms of Service restrict automated access. Use this Actor responsibly, respect rate limits, and avoid storing personal data without a legal basis. Always consult a legal professional for your specific use case.
Why are fewer reviews returned than maxReviewsPerPlace?
The place may simply have fewer reviews than the limit, or Google may have stopped returning a nextPageToken before the limit was reached. Combined with reviewsStartDate, the run also stops as soon as it crosses the cutoff.
Why does the Actor occasionally reload the page? Google sometimes serves a layout that hides the Reviews panel. The Actor retries up to four times — clicking the Reviews tab and reloading — before giving up. A debug screenshot and HTML dump are saved to the key-value store on failure.
Known limitations
- Google frequently changes the internal
listugcpostsresponse shape; if extraction breaks, the scraper needs an update. - Reviews not displayed by Google's own UI (e.g. flagged or removed) are not accessible.
Support Found a bug or need a custom solution? Open an issue on the ../../issues or contact us through Apify Console.
Included features
- Puppeteer Crawler — headless Chrome with anti-detection fingerprinting
- In-page
fetch()pagination — no scroll latency, just direct API calls reusing the page's session cookies - Input schema — typed, validated input with sensible defaults
- Dataset — structured, exportable review records
- Apify SDK — toolkit for building Actors
How it works
Actor.getInput()reads the input and extracts the place FID (!1sslot) from each URL.PuppeteerCrawleropens each place page with a Windows/Linux desktop fingerprint, blocking images and fonts to keep bandwidth low.- The handler clicks the Reviews tab if the panel did not auto-load and waits for
[data-review-id]to appear. - If a sort order other than
mostRelevantis requested, the dropdown is opened and the matching option is clicked, triggering a freshlistugcpostsXHR. - A
page.on('response')listener catches every/maps/rpc/listresponse, strips Google's)]}'XSSI prefix, and parses the JSON into structured review objects. - Once the URL template and
nextPageTokenare known, pagination switches to direct in-pagefetch()calls — replacing the!2stoken slot — untilmaxReviewsPerPlaceis reached, no token is returned, orreviewsStartDateis crossed. - Reviews are deduplicated by
reviewIdand pushed to the dataset withActor.pushData().
Getting started
For complete information see this article. To run the Actor locally:
$apify run
Deploy to Apify
Connect Git repository to Apify
If you've created a Git repository for the project, you can easily connect to Apify:
- Go to Actor creation page
- Click on Link Git Repository button
Push project on your local machine to Apify
You can also deploy from your local machine without a Git repository:
-
Log in to Apify (you'll need your Apify API Token):
$apify login -
Deploy your Actor. This builds the Actor on the Apify Platform; find it under Actors → My Actors:
$apify push