Google Maps Reviews Scraper
Pricing
from $7.00 / 1,000 reviews
Google Maps Reviews Scraper
Scrape all reviews for any Google Maps business: reviewer, star rating, text, dates, owner replies, photos and the place's overall rating.
Pricing
from $7.00 / 1,000 reviews
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Google Maps Reviews Scraper
Here is one real result, with every field the actor returns:
{"placeName": "Katz's Delicatessen","placeUrl": "https://maps.google.com/?cid=3545819340560108778","placeRating": 4.5,"placeReviewCount": 54573,"ratingDistribution": {"oneStar": 1747,"twoStar": 1389,"threeStar": 3284,"fourStar": 8692,"fiveStar": 39461},"featureId": "0x89c2598f7ff4aa09:0x313547e757cb8cea","reviewerName": "Weston At The Table","rating": 5,"reviewText": "I've been to Katz's several times over the years, and every time I bring someone new, I get to experience it all over again through their eyes. ... Not because it is famous, but because it earns that fame every single day. Five stars.","relativeDate": "a month ago","publishedAt": "2026-06-21T17:15:11.623Z","reviewLanguage": "en","reviewerAvatarUrl": "https://lh3.googleusercontent.com/a-/ALV-UjVbcybwlao5Yo1luWz0bAznFm5YDcqY4aSG9k2G0G56zC3Hp0k=s120-c-rp-mo-ba12-br100","reviewerProfileUrl": "https://www.google.com/maps/contrib/105557893517551139063?hl=en-US","reviewerReviewCount": 73,"isLocalGuide": true,"likesCount": 0,"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2tSc2QwdFBjVzVWVW5ad2VFeHRSVFJTVkVRMkxVRRAB","ownerResponseText": "This review means a lot to us - thanks for taking the time to write it up. We're proud to be part of NYC's history, and even prouder to still be hand-carving pastrami the same way after all these years!","ownerResponseDate": "a month ago","reviewPhotos": ["https://lh3.googleusercontent.com/grass-cs/ACvplmMe-P8JCpFMbIp9EObRyjBiHfOfvYtRwFyP8jiko1MyR7LEe1Ty...=k-no","https://lh3.googleusercontent.com/grass-cs/ACvplmOkaN5p_MrO_cYvwJ_awlisPAVxfX6MDOth7dKXdiCivow2AH9A...=k-no"],"observedAt": "2026-08-10T14:32:32.368Z","error": null}
reviewTextandreviewPhotosabove are trimmed for readability (the review is a long multi-paragraph text and the record has 7 photos). Every value shown is the real, unedited data from the run.
The most complete Google Maps reviews scraper available. It returns every field a review exposes (rating, full text, reviewer profile, local-guide status, likes and review ID), plus place context and the full rating distribution, owner replies and review photos, and optional AI add-ons for sentiment, a one-line summary and topics, so you can analyze reputation without extra parsing.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor resolves each place you provide (by Google Maps URL, share link, place ID, or a name plus optional location), then collects reviews in the sort order you choose and writes one normalized record per review to the run's dataset. Each record carries place context (name, rating, review count and the full star distribution) alongside the review itself. With withDetails on, each review also includes the business owner's response and any photos attached to the review. Missing source values are returned as null, never invented.
Three optional AI add-ons run only on paid Apify plans and only charge when they produce output: aiSentiment classifies each review, aiSummary writes a one-sentence summary, and aiTopics extracts discussed aspects and a broad category.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 most relevant reviews for Katz's Delicatessen with owner replies and photos.
{"placeUrls": ["https://www.google.com/maps/place/Katz's+Delicatessen/@40.722237,-73.9884,17z"],"maxReviews": 10,"withDetails": true,"reviewsSort": "mostRelevant","language": "en"}
No URL handy? Set searchQuery to a business name (and optional location) and the top matching place is used.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
placeUrls | string[] | no | (Katz's example) | One or more Google Maps place URLs, share links, or place IDs (for example ChIJ...). Reviews are collected for each place. |
searchQuery | string | no | (empty) | Business name to search when you do not have a URL, for example Blue Bottle Coffee. The top matching place is used. |
location | string | no | (empty) | City or area to disambiguate the search query, for example San Francisco. |
maxReviews | integer | no | 10 | Maximum reviews to collect per place. |
withDetails | boolean | no | true | When on, each review also includes the owner's response and any attached photos. |
reviewsSort | enum | no | mostRelevant | Order in which reviews are collected. One of mostRelevant, newest, highestRating, lowestRating. |
language | string | no | en | Two-letter language code for review dates and owner replies, for example en, es, pt. |
withSentiment | boolean | no | false | Paid add-on. Classify each review as positive, negative or neutral with a confidence score. Requires a paid plan. |
withSummary | boolean | no | false | Paid add-on. Generate a one-sentence AI summary of each review. Requires a paid plan. |
withTopics | boolean | no | false | Paid add-on. Extract discussed aspects and keywords plus a broad category. Requires a paid plan. |
Output reference
One dataset item per review. Types: string, number, boolean, string[], object, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
placeName | string | Name of the place the review belongs to. |
placeUrl | string | Canonical Google Maps link to the place. |
placeRating | number | Overall average rating of the place. |
placeReviewCount | number | Total number of reviews for the place. |
ratingDistribution | object | Count of one, two, three, four and five star reviews. |
featureId | string | Google feature ID of the place. |
reviewerName | string | Display name of the reviewer. |
rating | number | Star rating this reviewer gave, 1 to 5. |
reviewText | string | Full text of the review, or null if none. |
relativeDate | string | Human-relative date as shown by Google, for example a month ago. |
publishedAt | string | ISO 8601 timestamp derived from the relative date. |
reviewLanguage | string | Detected language code of the review. |
reviewerAvatarUrl | string | Reviewer profile photo URL. |
reviewerProfileUrl | string | Link to the reviewer's Google Maps contributor profile. |
reviewerReviewCount | number | Total reviews written by this reviewer. |
isLocalGuide | boolean | true if the reviewer is a Google Local Guide. |
likesCount | number | Number of likes on the review. |
reviewId | string | Stable unique ID of the review. |
ownerResponseText | string | Business owner's reply text (with withDetails), or null. |
ownerResponseDate | string | Relative date of the owner's reply, or null. |
reviewPhotos | string[] | URLs of photos attached to the review (with withDetails), or null. |
aiSentiment | string | AI sentiment positive, negative or neutral (add-on), else absent. |
aiSentimentScore | number | AI sentiment score between -1 and 1 (add-on), else absent. |
aiSummary | string | AI one-sentence summary of the review (add-on), else absent. |
aiTopics | string[] | AI-extracted aspects and keywords (add-on), else absent. |
aiCategory | string | AI broad category for the review (add-on), else absent. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"placeUrls":["https://www.google.com/maps/place/Katz's+Delicatessen/..."],"maxReviews":10,"withDetails":true}):
{"placeName": "Katz's Delicatessen","placeRating": 4.5,"placeReviewCount": 54573,"ratingDistribution": {"oneStar": 1747, "twoStar": 1389, "threeStar": 3284, "fourStar": 8692, "fiveStar": 39461},"reviewerName": "Weston At The Table","rating": 5,"reviewText": "I've been to Katz's several times over the years ... it earns that fame every single day. Five stars.","relativeDate": "a month ago","publishedAt": "2026-06-21T17:15:11.623Z","reviewLanguage": "en","reviewerReviewCount": 73,"isLocalGuide": true,"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2tSc2QwdFBjVzVWVW5ad2VFeHRSVFJTVkVRMkxVRRAB","ownerResponseText": "This review means a lot to us - thanks for taking the time to write it up.","ownerResponseDate": "a month ago","reviewPhotos": ["https://lh3.googleusercontent.com/grass-cs/ACvplmMe...=k-no"],"observedAt": "2026-08-10T14:32:32.368Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~google-maps-reviews-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQuery":"Blue Bottle Coffee","location":"San Francisco","maxReviews":25,"reviewsSort":"newest"}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~google-maps-reviews-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"placeUrls":["https://maps.google.com/?cid=3545819340560108778"],"maxReviews":100,"withDetails":true}'
Apify CLI:
apify call scrapers_lat/google-maps-reviews-scraper \--input '{"searchQuery":"Katz'\''s Delicatessen","maxReviews":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per review returned (
resultevent). See the pricing tab for the current per-result price. - Add-ons. Detail enrichment (owner reply and photos) and the three AI add-ons are priced separately and charge only when they produce output.
- No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 reviews per place per run. Upgrade for higher
maxReviews.
FAQ and troubleshooting
A run returned 0 reviews. Why?
The place could not be resolved or has no reviews. Check the URL or place ID, or use searchQuery plus location. Zero-result runs are not charged.
How do I get the newest reviews only?
Set reviewsSort to newest. You can also use highestRating or lowestRating.
Why are owner replies or photos missing?
Either withDetails was off, or the review has no owner reply or photos. With withDetails on, they are included when present; otherwise they stay null.
Why did the AI fields not appear?
The AI add-ons require a paid Apify plan and are off by default. Enable withSentiment, withSummary or withTopics on a paid plan. They charge only when output is produced.
Can I scrape several places at once?
Yes. Pass multiple entries in placeUrls. Reviews are collected for each place up to maxReviews per place.
Is this an official Google tool? No. This actor is independent and not affiliated with Google. It reads only publicly visible Google Maps reviews.
Related scrapers
- Google Maps Scraper: Full Google Maps place details at scale.
- Google Maps Business Leads Scraper: Maps businesses enriched with emails and socials.
- App Store Reviews Scraper: Reviews from the Apple App Store.
- Google Play Reviews Scraper: Reviews from Google Play apps.
- Booking Reviews Scraper: Hotel reviews from Booking.com.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Google. Accesses only publicly available Google Maps reviews.
