Google Maps Reviews Scraper | CSV & JSON Export
Pricing
from $0.50 / 1,000 review scrapeds
Google Maps Reviews Scraper | CSV & JSON Export
Extract Google Maps reviews from place URLs or Place IDs. Export ratings, review text, owner replies and business details to CSV, Excel or JSON.
Pricing
from $0.50 / 1,000 review scrapeds
Rating
0.0
(0)
Developer
Anas Nadeem
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Extract Google Maps reviews from business place URLs or Place IDs. Export review text, star ratings, owner replies, reviewer details and business metadata to JSON, CSV or Excel through Apify. Use the data for local SEO audits, reputation monitoring and competitor review analysis.
No Google Maps API key or Google account is required. Start with one business and 20 reviews, then inspect the place summary before increasing your limit.
How to scrape Google Maps reviews
- Click Try for free and paste a Google Maps business URL into Google Maps place URLs. A sample business is prefilled.
- Set Max reviews per place to
20for your first run. Keep the interface language set toen. - Select newest, most relevant, highest rating or lowest rating and start the Actor.
- Inspect the output and the place's
dataQualityStatus. A successful run can still contain partial or blocked results. - Export the dataset in JSON, CSV or Excel. Filter
recordTypetoreviewfor a review-only spreadsheet; summary rows are also included in the default dataset.
What data does it extract?
| Data | Fields |
|---|---|
| Review | reviewId, reviewPosition, reviewUrl, stars, text, likesCount |
| Review date | publishedAtText, publishedAt |
| Reviewer (optional) | reviewerName, reviewerProfileUrl |
| Owner reply | ownerResponseText, ownerResponseAtText, ownerResponseAt |
| Business on each review | placeKey, placeId, cid, fid, placeTitle, placeCategory, placeAddress, placeRating, placeReviewsCount, placeUrl, inputUrl |
| Place summary | title, category, address, phone, website, location, rating, reviewsCount, scrapedReviewsCount, deliveredReviewsCount, url, inputUrl, place identifiers |
| Quality and collection time | Summary dataQualityStatus, dataQualityReason, warnings; scrapedAt on both record types |
Fields are included when available. Dates parsed from relative labels such as “a month ago” are estimates; preserve the original text for analysis. reviewId can be generated from available review fields when Google does not expose an ID.
Input example
{"placeUrls": ["https://www.google.com/maps/place/Aligarh+House+Restaurant+-+HSR/@12.9084006,77.6325664,17z/data=!3m1!4b1!4m6!3m5!1s0x3bae1570d7a8549f:0x3d107e987ed1f50f!8m2!3d12.9083954!4d77.6351413!16s%2Fg%2F11v6bf6td0"],"maxReviews": 20,"sort": "newest","language": "en","region": "IN","includeReviewerDetails": true,"proxyConfiguration": {"useApifyProxy": false}}
To use Place IDs, replace placeUrls with a placeIds array containing your actual Google Place IDs. Provide at least one URL or Place ID. Keywords and business-name searches are not supported.
| Option | Default | Behavior |
|---|---|---|
placeUrls | Sample URL in Console | One or more Maps place URLs; direct business URLs recommended |
placeIds | Empty | Google Place IDs as an alternative to URLs |
maxReviews | 20 | Per-place limit, maximum 1,000; 0 means the 1,000 safety cap, not unlimited |
sort | newest | newest, relevant, highest, lowest |
language | en | Maps interface language; parsing and sort controls currently rely on English labels |
region | US | Maps region code, e.g. US or IN |
includeReviewerDetails | true | Set false to omit reviewer name and profile URL |
proxyConfiguration | No Apify Proxy | Optional Apify or custom proxy configuration |
debugMode | false | Additional logs and slower browser actions |
Output example
Illustrative review record, abbreviated; this is not a measured sample run:
{"recordType": "review","placeKey": "example-business","placeTitle": "Example Restaurant","reviewId": "example-review","reviewPosition": 1,"stars": 5,"text": "Great food and quick service.","publishedAtText": "a week ago","ownerResponseText": "Thanks for visiting!"}
The default dataset contains review and placeSummary records joined by placeKey. The Reviews and Places views select columns; they do not filter out the other record type. The key-value store also contains PLACE_SUMMARIES for accessing quality results separately. scrapedReviewsCount is the extracted count; deliveredReviewsCount is the number of review rows written after applying the spending limit.
Pricing
The live Pricing tab is authoritative. At the September 11, 2026 audit, the review event costs $0.0025 per review ($2.50 per 1,000). That is $0.05 for 20 delivered reviews or $0.25 for 100, plus the Actor start charge.
The start event is $0.00005 per allocated GB, with a minimum of one event. At the current 4 GB default, that is $0.0002 per start. Place summary rows do not incur review-event charges. A run with no extracted reviews can still incur its start charge. The run spending limit can reduce the number of delivered review rows.
Use the Google Maps reviews API
Save the input example as input.json, set your Apify token in APIFY_TOKEN, and create a run:
curl --request POST \'https://api.apify.com/v2/acts/whoareyouanas~google-maps-review-scraper/runs' \--header "Authorization: Bearer $APIFY_TOKEN" \--header 'Content-Type: application/json' \--data-binary @input.json
The response includes data.id. Poll GET https://api.apify.com/v2/actor-runs/RUN_ID using the same authorization header until the run reaches a terminal status. On success, use data.defaultDatasetId:
curl 'https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true' \--header "Authorization: Bearer $APIFY_TOKEN"
Replace RUN_ID and DATASET_ID with returned values. Paginate larger exports. In your application, keep records where recordType === "review" for review analysis. See the Actor API tab for more integration examples.
Data quality and troubleshooting
| Result | Meaning / next step |
|---|---|
ok | Requested/available review target reached with summary metrics and no collection warnings |
partial | Fewer reviews than the target, incomplete metadata or a collection warning; inspect dataQualityReason |
blocked | Unusable content or blocking signals; retry a small sample with a different proxy/session configuration |
| Invalid input error | Supply a direct Google Maps business URL or actual Place ID |
| Unexpected review order | Check warnings: if Google sort controls fail, locally sorting the collected subset cannot guarantee globally newest/highest/lowest reviews |
| Missing dates/replies | Google may omit the field; use en because non-English interface parsing is limited |
| Fewer output rows than collected | Check the run spending limit and charge-limit warnings |
Google Maps markup, session restrictions and visible review counts can vary. The Actor cannot guarantee all reviews, exact dates from relative labels, or complete results for every business. It stops after repeated scrolls yield no new reviews and also has an iteration limit.
Frequently asked questions
Can I export Google reviews to Excel or CSV?
Yes. Use Apify's dataset export options, then filter the recordType column to review. JSON retains nested place coordinates and warning arrays more naturally.
Can I monitor multiple businesses?
Yes. Supply multiple URLs or Place IDs. The review limit applies to each business. Save input as an Apify task and schedule recurring runs for periodic exports. Cross-run deduplication and change detection belong in your downstream workflow; repeated reviews may be collected and charged again.
Does this analyze sentiment or discover competitors?
It collects review data for your own analysis. Automated competitor discovery, sentiment scoring, review photos, date-range filters and incremental collection are not current features.
Does disabling reviewer details anonymize the data?
It removes the dedicated reviewer name and profile URL fields. Review text and links may still contain personal information.
Where can I report a problem?
Use the Issues tab with your run URL, input settings and expected versus actual result. Do not include API tokens.
Local development
npm installnpm testnpm run build