Google Maps Reviews Scraper
Pricing
from $0.30 / 1,000 review scrapeds
Google Maps Reviews Scraper
Scrape Google Maps reviews by URL, data ID, Place ID, CID, or business name. Get rating, text, date, owner response, photos, and privacy-safe reviewer hashes.
Pricing
from $0.30 / 1,000 review scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
1
Bookmarked
13
Total users
7
Monthly active users
2 days ago
Last modified
Categories
Share
Google Maps Reviews Scraper — Ratings, Text, Owner Replies
What it does: Extract Google Maps reviews in structured JSON — rating, text, reviewer hash or reviewer details, date, owner reply, photos, and a rating-derived sentiment bucket. Accepts Google Maps place URLs, internal data IDs/CIDs, Place IDs, or a business name plus location.
When to use it: reputation monitoring, competitive review research, sentiment analysis, AI-agent workflows that need review data for a specific place. Do NOT use it for finding business lead contact info — that lives in khadinakbar/google-maps-leads-scraper.
Output at a glance
| Field | Type | Example |
|---|---|---|
reviewId | string | ChZDSUhNMG9nS0VJQ0FnSURwLVlPajJBRRAB |
placeName | string | Joe's Pizza |
placeUrl | string | https://www.google.com/maps/place/... |
placeAddress | string | 7 Carmine St, New York, NY 10014 |
placeRating | number | 4.6 |
placeReviewCount | integer | 12,847 |
rating | integer (1–5) | 5 |
text | string | Best slice in the Village — the classic is unreal. |
publishedAtText | string | a month ago |
publishedAt | ISO-8601 | 2026-03-25T13:24:00.000Z |
ownerResponse | string|null | Thanks for visiting! |
sentimentHint | string | positive / neutral / negative |
photos | string[] | image URLs attached to the review |
likesCount | integer | 3 |
reviewerName | string|null | null unless includePersonalData: true |
reviewerHash | string|null | stable privacy-safe reviewer hash |
reviewUrl | string | permalink to this review |
extractionSource | string | listugcposts or boq |
scrapedAt | ISO-8601 | timestamp of extraction |
sentimentHint is rating-derived (4–5 positive, 3 neutral, 1–2 negative) — not ML-based. Feed the text into your own NLP pipeline for true sentiment.
Pricing — $0.30 per 1,000 reviews
| Event | Price | When charged |
|---|---|---|
| Actor start | $0.00005 | One-time per GB of memory at run start |
| Review scraped | $0.0003 | Per individual review pushed to the dataset |
Typical costs:
- 100 reviews: ~$0.03
- 500 reviews: ~$0.15
- 5,000 reviews: ~$1.50
No tiered games. Same price whether you're on Apify FREE or DIAMOND. Cheaper than most competitors (compass FREE tier charges $0.60/1K, api-ninja $0.30/1K, memo23 effectively $0.32/1K including its $0.07 start fee).
Inputs
You must provide one of:
startUrls— array of Google Maps URLs (place URLs, search URLs, CID URLs).dataIds— array of internal Maps data IDs/CIDs in0x...:0x...format.placeIds— array of Place IDs (e.g.,ChIJ...).searchQuery+ optionallocation— business name and city/region; the scraper clicks through to the first matching place.
Optional parameters:
| Param | Default | Notes |
|---|---|---|
maxReviews | 100 | Cap per place. Google typically exposes up to ~4,000 reviews even for very popular places. |
reviewsSort | newest | newest | mostRelevant | highestRanking | lowestRanking |
reviewSearchQuery | empty | Optional keyword filter inside reviews. Best with direct Google Maps URLs. |
language | en | UI language for Google Maps; affects relative-date labels. |
countryCode | US | Google region hint for place/review requests. |
includePersonalData | false | GDPR toggle — when false, reviewerName, reviewerUrl, and reviewerPhotoUrl are nulled. Enable only if you have a legitimate basis under your applicable privacy law. |
proxyConfiguration | Apify Residential | Optional. The actor uses Chrome TLS impersonation and can route through Apify proxy when needed. |
Usage
Via the Apify UI
Paste a Google Maps URL into startUrls, set maxReviews, and hit Start.
Via the Apify API (Node.js)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/google-maps-reviews-scraper').call({startUrls: [{ url: 'https://www.google.com/maps/place/Joe%27s+Pizza/@40.7299934,-74.0025633,17z' },],maxReviews: 200,reviewsSort: 'newest',language: 'en',includePersonalData: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Fast direct mode with a Maps data ID
{"dataIds": ["0x89c259a9b3117469:0xd134e199a405a163"],"maxReviews": 100,"reviewsSort": "newest","includePersonalData": false}
Via the Apify API (Python)
from apify_client import ApifyClientclient = ApifyClient(token="APIFY_TOKEN")run = client.actor("khadinakbar/google-maps-reviews-scraper").call(run_input={"startUrls": [{"url": "https://www.google.com/maps/place/Joe%27s+Pizza/..."}],"maxReviews": 200,"reviewsSort": "newest",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["rating"], item["text"])
Via MCP (AI agents)
The actor is exposed on Apify MCP as apify--google-maps-reviews-scraper. Claude, GPT, and other agents can call it directly with a Google Maps URL to pull reviews for reasoning.
https://mcp.apify.com?tools=khadinakbar/google-maps-reviews-scraper
Use cases
- Reputation monitoring — watch a single location's newest reviews.
- Competitive analysis — pull ratings and text from a competitor's flagship store.
- Sentiment mining — feed
textinto an NLP pipeline;ratinggives a clean supervised label. - Owner-reply auditing — agencies verifying their clients are replying to negatives.
- AI agent research — chain with
khadinakbar/google-maps-leads-scraperto pull business + reviews in one flow.
Frequently asked
How many reviews can I get per place? Google typically caps accessible reviews at ~3,500–4,000 even for places with tens of thousands. Use maxReviews to set your own cap.
Is this compliant? The scraper reads publicly visible reviews. includePersonalData defaults to false so reviewer names and profile URLs are stripped by default. If you enable it, you are responsible for your legal basis (GDPR Article 6 / equivalent in your jurisdiction).
Why don't dates match exactly? Google shows relative dates ("a month ago"). publishedAt is an ISO approximation derived from that label — not a precise timestamp. The source of truth is publishedAtText.
My run returned 0 reviews — what happened? Most common causes: (1) the URL or Place ID resolves to the wrong place, (2) the place has no visible reviews, (3) Google returned no reviews for that sort/filter combination. Re-run with a direct Google Maps place URL or a 0x...:0x... data ID if in doubt.
Can I schedule this? Yes — use Apify Schedules to run daily or weekly and diff the dataset against the previous run.
Legal
The Actor extracts publicly available reviews from Google Maps. You are responsible for complying with Google's Terms of Service and all applicable data-protection laws (GDPR, CCPA, etc.) when using the extracted data. The author is not affiliated with Google.
How it works
The actor resolves each input into a Google Maps internal data ID, then uses browser-free Google review RPC endpoints with Chrome TLS impersonation. Direct place URLs usually use the richer listugcposts path; data IDs, Place IDs, and search-query resolutions can fall back to the BOQ review endpoint when Google does not return the primary review feed. This avoids the brittle headless-browser place panel that Google often strips in cloud environments.