Google Maps Reviews Scraper ✅ $0.20/1k reviews
Pricing
from $0.20 / 1,000 review scrapeds
Google Maps Reviews Scraper ✅ $0.20/1k reviews
$0.20/1k reviews. Fast Google Maps reviews scraper for place URLs, review URLs, CID URLs, and Place IDs. Extract review text, ratings, dates, review URLs, reviewer profiles, owner replies, context fields, detailed ratings, and place metadata.
Pricing
from $0.20 / 1,000 review scrapeds
Rating
0.0
(0)
Developer
Hundevmode Labs
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Google Maps Reviews Scraper: Extract Google Reviews, Ratings, Review URLs & Reviewer Data
Use this Google Maps Reviews Scraper to extract reviews from exact Google Maps places. Add Google Maps place URLs, cid URLs, Google review URLs, or Google Place IDs, and the actor saves one dataset item per review.
It is built for reputation monitoring, local SEO, sentiment analysis, competitor research, review exports, customer feedback analysis, and Google Maps review datasets. The scraper resolves the selected Google Maps place first, then fetches reviews through the fast Google Maps reviews RPC with cursor pagination.

AI agent skill
Use the dedicated Google Maps Reviews Scraper Apify agent skill when you want AI agents to prepare place URLs or Place IDs, run this actor through Apify, control spend with maxTotalChargeUsd, and return review rows for reputation monitoring, local SEO, sentiment analysis, datasets, or automation workflows.
Install with skills.sh-compatible agents:
npx skills add hundevmode/apify-google-maps-reviews-scraper-agent-skill \--skill google-maps-reviews-scraper-apify
ClawHub skill slug: google-maps-reviews-scraper-apify.
At a glance
| Need | Use this Google Maps review scraper for |
|---|---|
| Review exports | Extract review text, star rating, publish date, review ID, and direct review URL |
| Reviewer profiles | Collect public reviewer ID, name, profile URL, photo URL, Local Guide status, and public review count |
| Place context | Attach place title, address, category, coordinates, rating, reviews count, Place ID, CID, FID, and Google Maps URL to every review |
| Review filters | Keep only reviews matching a keyword or posted after a date |
| Sorting | Scrape newest, most relevant, highest rating, or lowest rating reviews |
| Price | Paid tiers from $0.20 / 1,000 saved reviews |
| Diagnostics | Get RUN_SUMMARY with source status, review status, saved counts, duration, and charge-budget details |
Pricing
This actor uses Apify pay-per-event pricing. It charges for saved review records, not for empty pages or skipped sources.
| Event | Free plan | Paid plans |
|---|---|---|
| Review scraped | $0.50 / 1,000 saved reviews | $0.20 / 1,000 saved reviews |
| Actor start | $0.00005 per run | $0.00001 per run |
If you set a maximum cost for a run, the actor calculates how many review-scraped events fit into the budget and reduces the review target before scraping. When the budget is exhausted, it exits cleanly and writes the reason to RUN_SUMMARY.
What can this Google Maps Reviews Scraper do?
- Scrape Google reviews from direct Google Maps place URLs.
- Scrape reviews from
google.com/maps?cid=...URLs. - Resolve Google review detail URLs such as
google.com/maps/reviews/data=...back to the reviewed place. - Scrape reviews from Google Place IDs.
- Save one dataset item per review, which makes JSON, CSV, Excel, API, and database exports straightforward.
- Extract review text, rating, review ID, review URL, original language, relative publish text, and best-effort normalized date.
- Extract structured review context when Google exposes it, for example
orderType,mealType,pricePerPerson,food,service,atmosphere, park tips, hotel sub-ratings, and similar guided review answers. - Include public reviewer profile data returned by Google Maps.
- Add place metadata to each review row so every record is self-contained.
- Continue pagination with Google review cursors to collect hundreds or thousands of reviews from one place.
This actor is for exact places. It does not expand broad Google Maps search URLs into many places. Use the main Google Maps Scraper for discovery by keyword, area, category, or map viewport, then scrape reviews through its Reviews add-on or pass exact place URLs / Place IDs to this actor.
Quick start
Scrape reviews from one Google Maps place URL:
{"startUrls": [{"url": "https://www.google.com/maps/place/Joe%27s+Pizza/@40.7306597,-74.0021707,17z/data=!3m1!4b1!4m6!3m5!1s0x89c259924a960df1:0x43b20488619b3f43!8m2!3d40.7306597!4d-74.0021707!16s%2Fg%2F1tyyy0n3"}],"maxReviews": 100,"reviewsSort": "newest","language": "en"}
Scrape reviews from Place IDs:
{"placeIds": ["ChIJ8Q2WSpJZwokRQz-bYYgEskM"],"maxReviews": 250,"reviewsSort": "mostRelevant","language": "en"}
Input options
| Field | Type | Description |
|---|---|---|
startUrls | array | Google Maps place URLs, google.com/maps?cid=... URLs, or Google review detail URLs. |
placeIds | array | Google Place IDs. Values prefixed with place_id: and URLs containing query_place_id are accepted. |
maxReviews | integer | Maximum number of reviews to save per place. |
reviewsSort | string | newest, mostRelevant, highestRanking, or lowestRanking. |
reviewsStartDate | string | Optional date filter. Choose an absolute date or a relative value such as 8 days, 3 months, or 1 year. |
reviewsOrigin | string | google or all. The current Google Maps reviews RPC returns Google-native reviews; all is accepted for compatibility. |
language | string | Google Maps interface language, for example en, es, de, fr, ja, or vi. |
personalData | boolean | Include public reviewer profile data when available. Default is true. |
URL and ID behavior
| Input | Supported | Notes |
|---|---|---|
| Direct Google Maps place URL | Yes | Best input when you already know the business or location. |
google.com/maps?cid=... URL | Yes | The actor resolves the CID to a place and then fetches reviews. |
| Google review detail URL | Yes | URLs like google.com/maps/reviews/data=... are resolved through the review CID. |
| Google Place ID | Yes | Use placeIds or a URL containing query_place_id. |
| Broad Google Maps search URL | Not expanded | Use the main Google Maps Scraper for search/discovery workflows. |
Date filtering examples
Get newest reviews posted after a date:
{"startUrls": [{"url": "https://www.google.com/maps/place/Joe%27s+Pizza/@40.7306597,-74.0021707,17z/data=!3m1!4b1!4m6!3m5!1s0x89c259924a960df1:0x43b20488619b3f43!8m2!3d40.7306597!4d-74.0021707!16s%2Fg%2F1tyyy0n3"}],"maxReviews": 25,"reviewsSort": "newest","reviewsStartDate": "2026-01-01","language": "en"}
Get reviews from the last 3 months:
{"placeIds": ["ChIJ8Q2WSpJZwokRQz-bYYgEskM"],"maxReviews": 100,"reviewsStartDate": "3 months","reviewsSort": "newest"}
Google often returns dates as relative text, for example a week ago or 3 months ago. Date filtering is therefore best-effort. For date-filtered runs, use reviewsSort: "newest" so the actor scans the newest review pages first.
When reviewsStartDate is active, the scraper requests full 200-review pages and keeps scanning until it saves enough matching reviews or Google exhausts pagination.
Output
Each dataset item is one Google Maps review. Review data, reviewer data, and place data are combined into the same row so exports are easy to use in BI tools, spreadsheets, databases, and APIs.
| Group | Fields |
|---|---|
| Source | searchString, inputStartUrl, inputPlaceId, rank, searchPageUrl, searchPageLoadedUrl |
| Review | reviewId, reviewUrl, text, publishAt, publishedAtDate, stars, rating, likesCount, reviewOrigin, originalLanguage, translatedLanguage |
| Owner response | responseFromOwnerDate, responseFromOwnerText |
| Review extras | reviewImageUrls, reviewContext, reviewDetailedRating, visitedIn, isAdvertisement |
| Reviewer | reviewerId, reviewerUrl, name, reviewerNumberOfReviews, isLocalGuide, reviewerPhotoUrl |
| Place | title, placeId, fid, cid, categoryName, categories, totalScore, reviewsCount, url, imageUrl |
| Address | address, neighborhood, street, city, postalCode, state, countryCode, location |
| Runtime | scrapedAt, language |
Example output item:
{"searchString": "https://www.google.com/maps/place/Joe's+Pizza/...","inputStartUrl": "https://www.google.com/maps/place/Joe's+Pizza/...","reviewerId": "103238366514610497903","reviewerUrl": "https://www.google.com/maps/contrib/103238366514610497903?hl=en-US","name": "Kelly Chan","reviewerNumberOfReviews": 358,"isLocalGuide": true,"text": "Food: 4 Stars Service: 4 Stars...","publishAt": "6 months ago","publishedAtDate": "2025-12-01","reviewId": "Ci9DQUlRQUNvZENod...","reviewUrl": "https://www.google.com/maps/reviews/data=...","reviewOrigin": "Google","stars": 4,"rating": 4,"reviewContext": {"orderType": "Take out","mealType": "Dinner","pricePerPerson": "$1 to $10","reservation": "Walk-ins only"},"reviewDetailedRating": {"food": 4,"service": 4,"atmosphere": 4},"title": "Joe's Pizza","categoryName": "Pizza restaurant","totalScore": 4.4,"url": "https://www.google.com/maps/place/Joe's+Pizza/...","fid": "0x89c259924a960df1:0x43b20488619b3f43","cid": "4877966330195296067","scrapedAt": "2026-06-01T00:00:00+00:00","language": "en"}
Not every Google review exposes every field. Owner responses, attached review images, detailed sub-ratings, visit context, exact dates, and reviewer stats are returned when Google Maps provides them in the public payload.
Popular use cases
- Monitor Google reviews for a brand, venue, franchise, local business, hotel, restaurant, clinic, agency, or service area business.
- Export Google Maps reviews to CSV, Excel, BigQuery, Snowflake, Airtable, or a CRM.
- Build sentiment analysis datasets from Google review text and star ratings.
- Compare competitors by rating, review volume, review freshness, and common customer complaints.
- Track owner responses and response coverage when Google exposes them.
- Collect reviewer profile URLs for manual QA or compliance-approved research.
- Enrich existing Place ID or CID lists with fresh Google review data.
Speed and scale
The actor uses the Google Maps listentitiesreviews endpoint with cursor pagination. It requests up to 200 reviews per page and uses the cursor from the previous page to continue.
Measured local speed without proxy:
| Place type | Reviews | End-to-end time |
|---|---|---|
| Restaurant place page | 1,000 | about 6.8 seconds |
| Large review-heavy place page | 1,000 | about 6.8-7.1 seconds |
Small runs still request at least 100 reviews from Google internally and then save only the requested number. This makes limits such as 5 or 10 more reliable because Google sometimes returns empty review payloads for very small page sizes.
For multiple places, the actor processes sources conservatively by default to keep review pagination stable.
Run summary
The actor writes a RUN_SUMMARY record to the default key-value store. It includes:
target: planned number of review items for the run.saved: number of saved review items.targetReached: whether the planned target was reached.exhaustionReason:target_reached,sources_exhausted,charge_limit_reached,review_charge_budget_exhausted, orruntime_error_suppressed.sourceStats: per-place detail status, reviews status, fetched count, saved count, and rating distribution.failedSources: places that could not be resolved.reviewBudget: pay-per-event charge budget diagnostics.durationMs: total run duration.
Runtime errors are suppressed by default and written to RUN_SUMMARY, so the run can finish with partial data and structured diagnostics instead of failing without usable output.
API usage
Start a run through the Apify API:
curl "https://api.apify.com/v2/acts/x_guru~google-maps-reviews-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://www.google.com/maps/place/Joe%27s+Pizza/@40.7306597,-74.0021707,17z/data=!3m1!4b1!4m6!3m5!1s0x89c259924a960df1:0x43b20488619b3f43!8m2!3d40.7306597!4d-74.0021707!16s%2Fg%2F1tyyy0n3"}],"maxReviews": 100,"reviewsSort": "newest","language": "en"}'
After the run finishes, export the default dataset as JSON, CSV, Excel, XML, RSS, or HTML from Apify Storage.
Local speed probe
The repository includes a local probe script for quick experiments:
python3 scripts/local_reviews_speed_probe.py --max-reviews 100 --source-concurrency 1 --output local-reviews-speed-c1.jsonpython3 scripts/local_reviews_speed_probe.py --max-reviews 1000 --source-concurrency 3 --output local-reviews-speed-c3.json
For production-like numbers, run the probe on Apify. Direct local IP behavior can differ from cloud runs.
Privacy and compliance
Google Maps reviews can include public reviewer profile data such as reviewer name, profile URL, reviewer ID, Local Guide status, and profile photo. Use the exported data only when your use case and local laws allow collecting and processing this information.
If you only need review text and ratings, turn personalData off. Review IDs, review URLs, review text, rating, and place fields remain available.
Troubleshooting
| Symptom | What to check |
|---|---|
| No sources | Provide at least one startUrls item or one placeIds value. |
place_not_resolved | Use a direct place URL, CID URL, review data URL, or Place ID. Broad search URLs are not expanded by this actor. |
blocked_or_empty | Run on Apify cloud. Direct local IPs may get empty review payloads. |
| Fewer reviews than requested | The place may have fewer reviews, filters may remove reviews, Google may exhaust pagination, or the run budget may limit saved events. |
| Date filter seems loose | Google often returns relative dates; the actor infers dates best-effort. Use reviewsSort: "newest" for date-filtered runs. |
| Missing owner response, images, or detailed ratings | Google Maps does not expose those fields for every review in the reviews RPC. |