Google Maps Reviews Scraper avatar

Google Maps Reviews Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Google Maps Reviews Scraper

Google Maps Reviews Scraper

Extract detailed reviews from any Google Maps business page. This scraper retrieves reviewer information, ratings, review text, dates, likes, and owner responses.

Pricing

from $3.00 / 1,000 results

Rating

5.0

(3)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

1

Bookmarked

31

Total users

0

Monthly active users

a day ago

Last modified

Share

Collect public Google Maps reviews without login cookies or a browser profile. Records are pushed progressively and include only fields directly exposed by Google.

What this actor does

  • Extracts review text, ratings, reviewer context, and business context from public place pages.
  • Supports direct place URLs or canonical ChIJ Place IDs.
  • Can also run in author mode, which collects everything one Google reviewer has reviewed from their public profile.
  • Preserves Google’s displayed relative dates instead of inventing calendar dates.
  • Emits one clean dataset record per observed review and omits unavailable fields.

Two modes

  • Place mode (default) — give a business or location and get its reviews. This is the original behaviour and stays the default when mode is omitted.
  • Author mode — give a Google reviewer’s public profile and get the reviews that reviewer has written. Author mode returns up to about ten of that reviewer’s most recent reviews; this is a limit of what Google publishes anonymously, not a setting.

Input

FieldTypeRequiredDefaultDescription
modeenumNoplaceplace for one business or location, author for everything one reviewer has reviewed
placeUrlstringIn place mode—Google Maps place URL; mobile/country-domain/short-link variants and copied tracking parameters are normalized
placeIdstringIn place mode—Canonical Google Place ID beginning with ChIJ; use instead of placeUrl
contributorUrlsarrayIn author mode—One or more reviewer profile URLs or bare numeric reviewer IDs; profile, reviews, photos and place links are all accepted
contributorUrlstringIn author mode—A single reviewer profile URL or bare numeric reviewer ID; same as one entry in contributorUrls
maxReviewsintegerNo50Maximum number of reviews to extract. In author mode Google publishes only about ten of a reviewer’s most recent reviews, so a higher value does not yield more rows
sortByenumNonewestrelevant, newest, highest_rating, or lowest_rating (used in place mode)
languageenumNoenGoogle Maps interface language
proxyConfigurationobjectNoUS RESIDENTIALThe actor hardcodes Apify RESIDENTIAL and leaves per-request IP rotation to Apify; a retry gets a fresh browser/proxy configuration. A valid apifyProxyCountry is honored; group and useApifyProxy cannot disable or replace Residential. Direct access is the bounded last fallback.

Examples

Example: newest reviews from a place URL

{
"placeUrl": "https://www.google.com/maps/place/Joe's+Pizza/@40.7305137,-73.9968643,17z/data=!3m2!4b1!5s0x89c2599bcc4854cd:0xabc03f64af538b40!4m6!3m5!1s0x89c2599bca4854c5:0x48e61b36c6e9e68!8m2!3d40.7305137!4d-73.9942894!16s%2Fg%2F1tfrzlcv",
"maxReviews": 30
}

Example: highest-rated reviews by Place ID

{
"placeId": "ChIJabtoT7hlwokRLECK0SW3_8I",
"maxReviews": 100,
"sortBy": "highest_rating",
"language": "en"
}

Example: Japanese review collection

{
"placeUrl": "https://www.google.com/maps/place/Sushi+no+Midori/@35.6704396,139.7596577,17z/",
"maxReviews": 50,
"sortBy": "relevant",
"language": "ja"
}

Example: everything one reviewer has reviewed

{
"mode": "author",
"contributorUrls": ["https://www.google.com/maps/contrib/102461194647441801965/reviews"],
"maxReviews": 10,
"language": "en"
}

How to Get the Place URL

  1. Go to Google Maps
  2. Search for the business or place
  3. Click on the place to open its details
  4. Copy the URL from your browser's address bar

The URL can be a desktop or mobile Google Maps URL, a supported country-domain URL, or a Google Maps short link. Wrapping quotes and tracking parameters are cleaned automatically.

You may provide a canonical Google Place ID beginning with ChIJ in placeId instead of placeUrl. Feature IDs and CIDs are not accepted as Place IDs.

How to Get a Contributor Profile URL

  1. Open any review written by the reviewer on Google Maps
  2. Click the reviewer's name to open their contributor profile
  3. Copy the URL from your browser's address bar

The profile URL looks like https://www.google.com/maps/contrib/…. You can paste the profile link, a …/reviews, …/photos, or …/place/… link, or just the reviewer's numeric ID — all are accepted and cleaned automatically.

Output per review

Each row in the dataset represents one review. In place mode every row includes the review data and the business context; in author mode every row includes the review data and the reviewer's public profile context. The recordType field tells the two apart (review for place mode, authorReview for author mode).

Sample Output

{
"recordType": "review",
"reviewId": "ChZDSUhNMG9nS0VJQ0...",
"reviewerName": "John Smith",
"reviewerAvatarUrl": "https://lh3.googleusercontent.com/a/...",
"rating": 5,
"reviewText": "Best pizza in NYC! The classic slice is perfection.",
"reviewDateOriginal": "2 weeks ago",
"likesCount": 3,
"businessName": "Joe's Pizza",
"businessRating": 4.5,
"businessTotalReviews": 12847,
"businessCategory": "Pizza restaurant",
"businessAddress": "7 Carmine St, New York, NY 10014",
"placeUrl": "https://www.google.com/maps/place/Joe's+Pizza/...",
"sourceUrl": "https://www.google.com/maps/place/Joe's+Pizza/...",
"sortBy": "newest",
"sortConfirmed": true,
"sortStatus": "confirmed",
"order": 0,
"scrapedAt": "2026-09-14T12:00:00+00:00"
}

Sample Author-Mode Output

{
"recordType": "authorReview",
"contributorId": "102461194647441801965",
"contributorName": "Hilarie Sant",
"contributorAvatarUrl": "https://lh3.googleusercontent.com/a/...",
"contributorProfileUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
"contributorLocalGuideLevel": 3,
"contributorPoints": 154,
"contributorTotalReviews": 9,
"placeName": "Especially For You Your Downtown Florist",
"placeAddress": "221 W 400 S, Salt Lake City, UT 84101, United States",
"rating": 5,
"reviewText": "Thank you for the absolutely beautiful flowers and wonderful customer service!",
"reviewDateOriginal": "2 weeks ago",
"position": 1,
"sourceUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
"scrapedAt": "2026-09-14T12:00:00+00:00"
}

Output Fields

FieldTypeDescription
recordTypestringreview in place mode, authorReview in author mode
reviewIdstringUnique review identifier when exposed
reviewerNamestringName of the reviewer (place mode)
reviewerAvatarUrlstringURL of the reviewer's profile picture (place mode)
reviewerProfileUrlstringURL of the reviewer's public profile (place mode)
reviewerSubtitlestringGoogle's subtitle under the reviewer name, e.g. Local Guide level, review and photo counts (place mode)
reviewerLocalGuideLevelintegerReviewer's Local Guide level parsed from the subtitle (place mode)
reviewerTotalReviewsintegerReviewer's published review total parsed from the subtitle (place mode)
reviewerPhotoCountintegerNumber of photos on the reviewer's profile parsed from the subtitle (place mode)
reviewerEmojistringEmoji Google shows next to the reviewer's name (place mode)
ratingintegerStar rating (1–5)
reviewTextstringFull review text
reviewLanguagestringLanguage code Google reports for the review text (place mode)
originalReviewLanguagestringOriginal language code when Google shows a translated review (place mode)
reviewDateOriginalstringDate text exactly as Google displayed it
reviewDatestringAbsolute date only when Google exposed one directly
isEditedbooleanSet when Google marks the review as edited
likesCountintegerHelpful/like count only when published
businessNamestringName of the business (place mode)
businessRatingnumberOverall business star rating (place mode)
businessTotalReviewsintegerTotal number of reviews for the business (place mode)
businessCategorystringBusiness category (place mode)
businessAddressstringBusiness street address (place mode)
contributorIdstringReviewer's public numeric ID (author mode)
contributorNamestringReviewer's display name (author mode)
contributorAvatarUrlstringReviewer's profile picture (author mode)
contributorProfileUrlstringReviewer's public reviews page (author mode)
contributorLocalGuideLevelintegerReviewer's Local Guide level (author mode)
contributorPointsintegerReviewer's public contribution points (author mode)
contributorTotalReviewsintegerReviewer's published review total (author mode)
placeNamestringPlace the reviewer reviewed (author mode)
placeAddressstringAddress of the reviewed place (author mode)
positionintegerPosition of the review in the reviewer's list (author mode)
reviewPhotoUrlsarrayPhoto URLs attached to the review (author mode)
reviewPhotoCountintegerNumber of photos attached to the review (author mode)
videosInReviewintegerNumber of directly labelled video controls Google exposes on this review card
photosInReviewarrayPhoto URLs attached to the review (place mode)
ownerResponseTextstringOwner reply, when the place replied
ownerResponseDatestringOwner reply date converted to an absolute date, when resolvable
ownerResponseDateOriginalstringOwner reply date text exactly as Google displayed it
contextLabelsarrayPublic context labels shown on the review (author mode)
mentionedItemsarrayPublic item or aspect chips Google highlights in the review
isVerifiedbooleanSet when Google marks the review with a verified badge
visitDatestringVisit date text Google shows on the review, e.g. "Visited in May"
placeIdstringCanonical Google Place ID beginning with ChIJ, when Google exposes one (place and author modes)
featureIdstringLegacy feature/CID token (0x…:0x…), when Google exposes one (place and author modes)
placeUrlstringGoogle Maps place URL
sourceUrlstringSource Google Maps URL for the row
sortBystringRequested review order for the row (relevant, newest, highest_rating, lowest_rating); place mode only
sortConfirmedbooleantrue only when the requested order was confirmed from Google's own panel; false when rows were emitted but the requested order could not be confirmed. Place mode only
sortStatusstringShort form of sortConfirmed: confirmed or unconfirmed. Place mode only
orderintegerPosition of the review in results (0-based, place mode)
scrapedAtstringISO 8601 timestamp of when the data was scraped

Sort confirmation

sortedness is reported on the rows, never assumed. sortConfirmed is true only when the panel's own post-click order positively shows the requested order and something distinguishes it from the pre-click default order — the sampled cards reordered, or Google's relevance window was replaced at the head by its recency window. For newest, an all-identical relative-age window (for example ten reviews that all read "3 weeks ago") is compatible with newest-first and is confirmed once the panel changed; a window whose ages get newer going down is not newest-first. For highest_rating/lowest_rating, a window of equal ratings cannot distinguish the two orders and is left unconfirmed rather than guessed. A requested order that could not be confirmed is named in the run's status message and on every row.

Place identity

FieldTypeDescription
placeIdstringCanonical Google Place ID beginning with ChIJ, when Google exposes one.
featureIdstringLegacy feature/CID token (0x…:0x…), when Google exposes one.

A canonical ChIJ… token is recorded in placeId; a legacy 0x…:0x… token is recorded in featureId and is never relabelled as a Place ID. When both are observed, the canonical token takes placeId and the legacy token is still recorded as featureId. An identity that was never observed is omitted rather than invented.

Use cases

  • Monitor customer feedback for a business or location.
  • Compare review themes and ratings across competitors.
  • Follow prolific reviewers and see everything they have reviewed across places.
  • Build analysis datasets while preserving Google’s original relative date text.
  • Feed public review records into reporting or sentiment-analysis workflows.

Tips

  • Restaurants, shops, and hotels work best — these are the most common use cases
  • Set maxReviews wisely — higher values take longer but give more data when the public review surface exposes it
  • Author mode is small by design — Google publishes only about ten of a reviewer's most recent reviews anonymously, so expect about ten rows per profile
  • Reviews follow the requested sortBy; if Google's own sort control cannot be applied, the run reports the ignored sort and emits no relevance-ordered rows in its place
  • Relative review dates are preserved as observed; the actor never converts them into guessed calendar dates

Limitations

  • Google Maps can expose a smaller anonymous review window than the place's aggregate review count. Place mode starts with a hardcoded Apify RESIDENTIAL session, retries with a new pinned Residential session, then has a bounded direct fallback. It reports an under-fetch if those cookieless acquisitions still miss the requested target; that is a detected failure, not a claim that the underlying data is unavailable.
  • The scraper extracts reviews visible on Google Maps — private or filtered reviews are not accessible
  • Google may advertise a large aggregate review count while exposing only a smaller anonymous review window. The actor opens Google's public More reviews control and reports only the reviews it actually observes, without padding.
  • Author mode returns at most about ten reviews per profile. Google's public reviewer pages expose only the most recent handful of reviews with no way to page further; this is a Google limit, not a bug, and the actor reports only the reviews it actually observes.
  • A reviewer's absolute review dates are not published. Google shows only relative labels such as "2 weeks ago", so author-mode rows keep that label in reviewDateOriginal and never invent a calendar date.

You are responsible for using these public reviews lawfully and in line with Google's terms.

FAQ

Do I need to provide cookies or sign in? No. The actor uses a fresh public browser session.

Are relative dates converted to calendar dates? No. They remain in reviewDateOriginal unless Google exposes an absolute date directly.

Why are some review fields absent? Google does not publish every field for every review; unavailable values are omitted.

Can I sort the reviews? Yes. Choose the supported sortBy value such as newest, relevant, highest_rating, or lowest_rating. When an explicit order cannot be applied through Google's sort control, the run reports the ignored sort instead of returning relevance-ordered rows as though they were sorted.

What happens when anonymous Google Maps initially exposes only a few reviews? Place mode first uses Apify RESIDENTIAL with per-request IP rotation, retries with a fresh browser and proxy configuration, then gives the bounded direct fallback any remaining shared run budget. It emits only real reviews and reports an under-fetch if all configured acquisitions fail to reach the requested count or the place's known review total.

How does the actor load more than the first review window? It expands the public review list using Google's own More reviews control and only continues while the number of visible reviews actually grows. Detached cards and public pagination transports are retried within bounded time; unavailable fields remain omitted.

How many reviews does author mode return? About ten of that reviewer's most recent reviews. Google's public reviewer pages only expose that first window and offer no way to page further, so the actor reports exactly what Google shows and never pads the list.

Do author-mode rows have exact review dates like place mode? No, and neither does Google. A reviewer's published dates are relative labels such as "3 months ago"; those are kept verbatim in reviewDateOriginal, and no calendar date is guessed.

🗺️ Complete Google Maps Scraper Suite

This actor is part of a comprehensive Google Maps data extraction toolkit. It uses anonymous public access by default and omits unavailable fields.

ActorWhat it does
🏢 Google Maps Business ScraperExtract business data — name, address, phone, website, rating, reviews, hours, amenities
📸 Google Maps Photos ScraperExtract all photos from any place — max-resolution URLs, contributor info, categories
🕐 Google Maps Business Hours ScraperFull 7-day hours, timezone, current local time, next open/close, holiday hours
📊 Google Maps Popular Times ScraperBusy hours histogram for all 7 days + current busyness + typical visit time
📧 Google Maps Email ExtractorFind business emails + social media links by crawling websites
🗺️ Google Maps Area ScannerGeographic grid scanning — bypass the 120-place limit with bounding box / circle / polygon
💼 Google Maps Leads ScraperB2B lead generation with email + phone enrichment, US states + global countries
🤖 Google Maps MCP ServerUnified MCP server combining search + reviews for AI assistants
🧭 Google Maps Directions ScraperA→B routing — distance, duration, traffic, route alternatives for driving/walking/transit
📍 Google Maps Geocoding ScraperBidirectional geocoding — address ↔ coordinates, with address components
🔗 Google Maps Similar Places Scraper"People also search for" / related place discovery — competitor & alternative finder
🍽️ Google Maps Menu ScraperRestaurant menu items, prices, descriptions, photos
📌 Google Maps Nearby ScraperFind places near a coordinate point — lightweight POI search by category
📋 Google Maps Place List ScraperExtract Google's curated "Top X in Y" lists — best hotels/restaurants/things to do
🌍 Google Maps Timezone ScraperIANA timezone + current local time from coordinates