Google Maps Reviews Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
31
Total users
0
Monthly active users
a day ago
Last modified
Categories
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
ChIJPlace 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
modeis 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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
mode | enum | No | place | place for one business or location, author for everything one reviewer has reviewed |
placeUrl | string | In place mode | — | Google Maps place URL; mobile/country-domain/short-link variants and copied tracking parameters are normalized |
placeId | string | In place mode | — | Canonical Google Place ID beginning with ChIJ; use instead of placeUrl |
contributorUrls | array | In author mode | — | One or more reviewer profile URLs or bare numeric reviewer IDs; profile, reviews, photos and place links are all accepted |
contributorUrl | string | In author mode | — | A single reviewer profile URL or bare numeric reviewer ID; same as one entry in contributorUrls |
maxReviews | integer | No | 50 | Maximum 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 |
sortBy | enum | No | newest | relevant, newest, highest_rating, or lowest_rating (used in place mode) |
language | enum | No | en | Google Maps interface language |
proxyConfiguration | object | No | US RESIDENTIAL | The 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
- Go to Google Maps
- Search for the business or place
- Click on the place to open its details
- 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
- Open any review written by the reviewer on Google Maps
- Click the reviewer's name to open their contributor profile
- 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
| Field | Type | Description |
|---|---|---|
recordType | string | review in place mode, authorReview in author mode |
reviewId | string | Unique review identifier when exposed |
reviewerName | string | Name of the reviewer (place mode) |
reviewerAvatarUrl | string | URL of the reviewer's profile picture (place mode) |
reviewerProfileUrl | string | URL of the reviewer's public profile (place mode) |
reviewerSubtitle | string | Google's subtitle under the reviewer name, e.g. Local Guide level, review and photo counts (place mode) |
reviewerLocalGuideLevel | integer | Reviewer's Local Guide level parsed from the subtitle (place mode) |
reviewerTotalReviews | integer | Reviewer's published review total parsed from the subtitle (place mode) |
reviewerPhotoCount | integer | Number of photos on the reviewer's profile parsed from the subtitle (place mode) |
reviewerEmoji | string | Emoji Google shows next to the reviewer's name (place mode) |
rating | integer | Star rating (1–5) |
reviewText | string | Full review text |
reviewLanguage | string | Language code Google reports for the review text (place mode) |
originalReviewLanguage | string | Original language code when Google shows a translated review (place mode) |
reviewDateOriginal | string | Date text exactly as Google displayed it |
reviewDate | string | Absolute date only when Google exposed one directly |
isEdited | boolean | Set when Google marks the review as edited |
likesCount | integer | Helpful/like count only when published |
businessName | string | Name of the business (place mode) |
businessRating | number | Overall business star rating (place mode) |
businessTotalReviews | integer | Total number of reviews for the business (place mode) |
businessCategory | string | Business category (place mode) |
businessAddress | string | Business street address (place mode) |
contributorId | string | Reviewer's public numeric ID (author mode) |
contributorName | string | Reviewer's display name (author mode) |
contributorAvatarUrl | string | Reviewer's profile picture (author mode) |
contributorProfileUrl | string | Reviewer's public reviews page (author mode) |
contributorLocalGuideLevel | integer | Reviewer's Local Guide level (author mode) |
contributorPoints | integer | Reviewer's public contribution points (author mode) |
contributorTotalReviews | integer | Reviewer's published review total (author mode) |
placeName | string | Place the reviewer reviewed (author mode) |
placeAddress | string | Address of the reviewed place (author mode) |
position | integer | Position of the review in the reviewer's list (author mode) |
reviewPhotoUrls | array | Photo URLs attached to the review (author mode) |
reviewPhotoCount | integer | Number of photos attached to the review (author mode) |
videosInReview | integer | Number of directly labelled video controls Google exposes on this review card |
photosInReview | array | Photo URLs attached to the review (place mode) |
ownerResponseText | string | Owner reply, when the place replied |
ownerResponseDate | string | Owner reply date converted to an absolute date, when resolvable |
ownerResponseDateOriginal | string | Owner reply date text exactly as Google displayed it |
contextLabels | array | Public context labels shown on the review (author mode) |
mentionedItems | array | Public item or aspect chips Google highlights in the review |
isVerified | boolean | Set when Google marks the review with a verified badge |
visitDate | string | Visit date text Google shows on the review, e.g. "Visited in May" |
placeId | string | Canonical Google Place ID beginning with ChIJ, when Google exposes one (place and author modes) |
featureId | string | Legacy feature/CID token (0x…:0x…), when Google exposes one (place and author modes) |
placeUrl | string | Google Maps place URL |
sourceUrl | string | Source Google Maps URL for the row |
sortBy | string | Requested review order for the row (relevant, newest, highest_rating, lowest_rating); place mode only |
sortConfirmed | boolean | true 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 |
sortStatus | string | Short form of sortConfirmed: confirmed or unconfirmed. Place mode only |
order | integer | Position of the review in results (0-based, place mode) |
scrapedAt | string | ISO 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
| Field | Type | Description |
|---|---|---|
placeId | string | Canonical Google Place ID beginning with ChIJ, when Google exposes one. |
featureId | string | Legacy 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
maxReviewswisely — 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
RESIDENTIALsession, 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 reviewscontrol 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
reviewDateOriginaland 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.
| Actor | What it does |
|---|---|
| 🏢 Google Maps Business Scraper | Extract business data — name, address, phone, website, rating, reviews, hours, amenities |
| 📸 Google Maps Photos Scraper | Extract all photos from any place — max-resolution URLs, contributor info, categories |
| 🕐 Google Maps Business Hours Scraper | Full 7-day hours, timezone, current local time, next open/close, holiday hours |
| 📊 Google Maps Popular Times Scraper | Busy hours histogram for all 7 days + current busyness + typical visit time |
| 📧 Google Maps Email Extractor | Find business emails + social media links by crawling websites |
| 🗺️ Google Maps Area Scanner | Geographic grid scanning — bypass the 120-place limit with bounding box / circle / polygon |
| 💼 Google Maps Leads Scraper | B2B lead generation with email + phone enrichment, US states + global countries |
| 🤖 Google Maps MCP Server | Unified MCP server combining search + reviews for AI assistants |
| 🧭 Google Maps Directions Scraper | A→B routing — distance, duration, traffic, route alternatives for driving/walking/transit |
| 📍 Google Maps Geocoding Scraper | Bidirectional geocoding — address ↔ coordinates, with address components |
| 🔗 Google Maps Similar Places Scraper | "People also search for" / related place discovery — competitor & alternative finder |
| 🍽️ Google Maps Menu Scraper | Restaurant menu items, prices, descriptions, photos |
| 📌 Google Maps Nearby Scraper | Find places near a coordinate point — lightweight POI search by category |
| 📋 Google Maps Place List Scraper | Extract Google's curated "Top X in Y" lists — best hotels/restaurants/things to do |
| 🌍 Google Maps Timezone Scraper | IANA timezone + current local time from coordinates |