Google Maps REVIEWS Scraper avatar

Google Maps REVIEWS Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Google Maps REVIEWS Scraper

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

Tin

Maintained by Community

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

  1. Open Google Maps and search for the place you want.
  2. Click the place to open its panel, then copy the URL from your browser's address bar.
  3. Open the Actor's Input tab and paste the URL into Start URLs.
  4. Set Max reviews per place to control how many reviews are collected (default: 100).
  5. Optionally pick a Sort order (Most relevant, Newest, Highest rating, Lowest rating).
  6. Optionally set Reviews start date to skip anything older — supports ISO dates (2024-05-03) or relative phrases (8 days, 3 months).
  7. Click Start and wait for the run to finish.
  8. 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.

FieldTypeDescriptionDefault
startUrlsarrayGoogle Maps place URLs to scrape reviews from(required)
maxReviewsPerPlaceintegerStop after collecting this many reviews per place100
sortOrderstringmostRelevant, newest, highestRating, or lowestRatingmostRelevant
reviewsStartDatestringOnly 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

FieldDescription
reviewIdGoogle's unique review ID
placeIdFID of the place the review belongs to
publishedAtISO timestamp of when the review was first posted
editedAtISO timestamp of the last edit (null if never edited)
relativeTimeHuman-readable relative time as shown on Maps (e.g. 2 months ago)
starsStar rating, 1–5
textOriginalReview text in its original language
textTranslatedGoogle's auto-translation if shown
languageOriginalLanguage code of the original text
reviewer.idReviewer's Google contributor ID
reviewer.nameReviewer's display name
reviewer.avatarURL of the reviewer's avatar
reviewer.profileUrlLink to the reviewer's public Maps profile
reviewer.reviewCountTotal reviews the reviewer has written
reviewer.photoCountTotal photos the reviewer has uploaded
reviewer.isLocalGuideWhether the reviewer is a Local Guide
reviewer.localGuideLevelLocal Guide level (if applicable)
reviewer.labelFree-form label Google shows next to the name
photos[]Photos attached to the review (id, url, width, height)
reviewUrlPermalink to the review on Google Maps
placeUrlThe 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 reviewsStartDate for incremental runs — set it to the timestamp of the previous run to collect only new reviews. Sort order is forced to newest so 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 listugcposts response 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

  1. Actor.getInput() reads the input and extracts the place FID (!1s slot) from each URL.
  2. PuppeteerCrawler opens each place page with a Windows/Linux desktop fingerprint, blocking images and fonts to keep bandwidth low.
  3. The handler clicks the Reviews tab if the panel did not auto-load and waits for [data-review-id] to appear.
  4. If a sort order other than mostRelevant is requested, the dropdown is opened and the matching option is clicked, triggering a fresh listugcposts XHR.
  5. A page.on('response') listener catches every /maps/rpc/list response, strips Google's )]}' XSSI prefix, and parses the JSON into structured review objects.
  6. Once the URL template and nextPageToken are known, pagination switches to direct in-page fetch() calls — replacing the !2s token slot — until maxReviewsPerPlace is reached, no token is returned, or reviewsStartDate is crossed.
  7. Reviews are deduplicated by reviewId and pushed to the dataset with Actor.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:

  1. Go to Actor creation page
  2. 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:

  1. Log in to Apify (you'll need your Apify API Token):

    $apify login
  2. Deploy your Actor. This builds the Actor on the Apify Platform; find it under Actors → My Actors:

    $apify push

Documentation reference