Google Maps Reviews Scraper - Most Comprehensive
Pricing
from $0.04 / 1,000 reviews
Google Maps Reviews Scraper - Most Comprehensive
🔥 ~$0.04/1K reviews 🔥 The most comprehensive Google Maps review scraper. Extract reviews with ratings, text, translations, photos, author details, owner responses, structured dining/hotel/attraction data, and 65+ place fields. Supports keyword filtering, sorting.
Pricing
from $0.04 / 1,000 reviews
Rating
4.8
(9)
Developer
Kai
Maintained by CommunityActor stats
20
Bookmarked
712
Total users
214
Monthly active users
4.4 hours
Issues response
2 days ago
Last modified
Categories
Share
Google Maps Reviews Scraper
Collect reviews and place context from canonical Google Maps place or search URLs, or from Place IDs. Each saved review includes its rating, available text and translation, publication data, author metadata, photos, owner response, structured details, and place reference.
Use it to monitor your locations, compare customer feedback, prepare review datasets, or track owner responses over time.
Use cases
- Monitor new reviews, ratings, and owner responses across locations
- Compare customer feedback and recurring themes between places
- Prepare review text, ratings, and language metadata for analysis
- Study available structured details such as food, service, atmosphere, rooms, location, and visit information
- Collect available review-photo metadata
What you get
Review records
The default dataset contains one item per saved review:
- Stable review identifier and review link when available
- Rating, source, original text, translated text, language codes, and language names
- Publication, edit, relative, and visit-period information
- Author profile, contribution counts, and Local Guide metadata
- Review photos with dimensions, coordinates, description, and upload time when available
- Owner-response text, translations, languages, and timestamps when available
- Structured details that vary by place type
- Likes, collection timestamp, and slim place context
Every row follows the dataset schema. Nullable fields use null when unavailable; collections and structured details remain arrays or objects.
Place records
The default key-value store contains one full place record for each place whose collection completes. Its key is place-{placeId} when a Place ID is available, otherwise place-{hexId}. A place record can contain:
- Identity, categories, descriptions, business state, and available owner metadata
- Address components, coordinates, timezone, neighborhood, plus code, and entrance coordinates
- Phone, website, Maps, menu, and reservation links
- Rating, review count, review summary, highlights, per-rating totals, topics, and featured reviews
- Hours, photos, street view, amenities, attributes, and place types
- Popular-times data, typical visit duration, and related places
Optional values depend on what is available for the requested place. ratingBreakdown counts reviews saved during the current run after filters and limits. It includes only ratings present in the saved reviews and is {} when no reviews are saved. It is separate from the place-level reviewsPerRating value.
Quick start
Enter one or more bare Place IDs or supported Google Maps URLs:
{"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"]}
The default run saves up to 20 reviews per place, sorted by newest activity. Supported URL forms are canonical google.com/maps/place, google.com/maps/search, and equivalent maps.google.com place or search URLs. URLs containing place_id=... or q=place_id:... also work. You can mix URLs and Place IDs in the same run.
More or all available reviews
Set a larger per-place limit:
{"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],"maxReviews": 100}
Set maxReviews to 0 to collect all reviews available to the run.
Multiple places and a result limit
{"urls": ["ChIJN1t_tDeuEmsRUsoyG83frY4","ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],"maxReviews": 100}
The limit and sort order apply independently to each place. Reviews are saved as they arrive, so rows from different places can be mixed together in the dataset.
Sort modes
| Value | Result order |
|---|---|
relevant | Most relevant first |
newest | Latest review activity first. An edit time is used when present, otherwise the publication time. |
highest | Highest rating first |
lowest | Lowest rating first |
newest is the default. Date filters always use the publication timestamp, regardless of the selected sort mode.
Keyword and localization
{"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],"searchQuery": "service","sort": "relevant","language": "ja","region": "JP"}
Filter by date range
{"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],"reviewsNewerThan": "2026-01-01","reviewsOlderThan": "2026-06-30","sort": "newest","maxReviews": 0}
Date boundaries are inclusive. Date-only values use UTC: the lower boundary starts at 00:00:00.000, and the upper boundary ends at 23:59:59.999. Date-time values must include Z or a UTC offset.
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
urls | string[] | required | Non-empty list of canonical Google Maps URLs or bare Place IDs. Short share links are not accepted. You can mix both supported forms. |
maxReviews | integer | 20 | Maximum saved reviews per place. Use 0 for all available reviews. |
sort | string | newest | relevant, newest, highest, or lowest. |
searchQuery | string | none | Return reviews matching this keyword or phrase. |
reviewsNewerThan | string | none | Include reviews published on or after this ISO 8601 boundary. |
reviewsOlderThan | string | none | Include reviews published on or before this ISO 8601 boundary. |
language | string | en | Requested language code. Values are not restricted to a built-in list. |
region | string | US | Requested country or region code. Values are not restricted to a built-in list. |
proxyConfiguration | object | Apify Proxy enabled | Optional connection settings. |
Sample output
These fields were copied from one real dataset item returned on 2026-07-29. Fields not shown are omitted.
{"place": {"name": "Eiffel Tower","placeId": "ChIJLU7jZClu5kcR4PcOOO6p3I0"},"publishedAt": "2026-07-13T13:05:39.615Z","lastEditedAt": "2026-07-15T20:02:44.481Z","relativeDate": "Edited a week ago","language": "en","originalLanguage": null,"translatedLanguage": null,"rating": 3,"reviewOrigin": "Google","details": {"visitedOn": "Weekend","waitTime": "Up to 10 min","reservationRecommended": "No"},"ownerResponse": null,"engagement": {"likes": 0}}
The matching place record from the same run includes:
{"name": "Eiffel Tower","placeId": "ChIJLU7jZClu5kcR4PcOOO6p3I0","rating": 4.7,"totalReviewCount": 492464,"categories": ["Historical landmark","Monument","Tourist attraction"],"businessStatus": null,"ratingBreakdown": {"3": 1,"4": 1,"5": 3}}
Both examples are selected subsets. The full records contain the fields described by the dataset schema and place-record section above. hasLocalGuideBadge is the current author badge field; hasGuideProfile is a deprecated compatibility alias with the same value.
FAQ
How many reviews can I scrape?
Set maxReviews to a positive per-place limit or use 0 for all reviews available to the run. Availability can vary over time. Use newest when completeness matters; relevant can expose only a ranked subset of the place's total reviews.
Where is the full place data?
Open the default key-value store and select place-{placeId}, or place-{hexId} when no Place ID is available. Each review row repeats only name, placeId, address, and googleMapsUri.
Does it work for non-English reviews?
Yes. Set language and region to request localized results. Original and translated text and language metadata are included when available.
Troubleshooting
- A successful run can contain no review rows when a place has no available reviews or no reviews match your filters. When the place finishes successfully, its place record is still saved.
- Date-filtered runs skip reviews that do not have a publication timestamp.
- The full input is checked before collection starts. An unknown field, an invalid URL or Place ID anywhere in
urls, or a start date later than the end date stops the run before any results are saved. - Place IDs that Google reports as unavailable are logged and skipped. Any other per-place collection failure is also logged as a warning and counted in the final summary without failing the overall run. Rows saved before a failure remain in the dataset, including partial rows from that place. Only completed places receive a full place record. Invalid run input and actor-level storage, infrastructure, or startup failures remain fatal.
Limitations
maxReviewsapplies per place, not across the whole input.- Short share links such as
maps.app.goo.glare not accepted. Use the expanded canonical URL or a Place ID. - Available reviews and optional fields can vary by language, region, and upstream availability.
- Date filters use the review publication timestamp. Reviews without one are excluded.
ratingBreakdowndescribes rows saved by the current run, not the place's lifetime distribution.