Google Maps Reviews Scraper
Pricing
from $0.60 / 1,000 review extracteds
Google Maps Reviews Scraper
Extract public reviews from Google Maps place URLs with structured reviewer, rating, text, and place metadata.
Pricing
from $0.60 / 1,000 review extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Share
Extract Google Maps reviews from public place URLs and save clean review records to an Apify dataset.
The actor is built for Google Maps place review monitoring, local SEO research, reputation analysis, and customer-feedback collection. It accepts Google Maps place URLs, resolves the place, requests review pages, and outputs one dataset item per review.
Value proposition
Turn public Google Maps place reviews into structured datasets without manually opening each listing. Use it to monitor reputation, compare locations, audit customer feedback, and feed review data into BI, SEO, or support workflows.
Who is it for
This Google Maps Reviews Scraper is useful for local SEO teams, agencies, franchise operators, reputation managers, market researchers, and product teams that need structured public review data for places they monitor.
What data can you get
- Scrapes Google Maps reviews for one or more places.
- Supports result limits across the whole run and per place.
- Supports review sort order: most relevant, newest, highest rating, or lowest rating.
- Saves reviewer name, rating, review text, language, published time, reviewer profile URL, and place metadata.
- Uses retries and proxy configuration for more stable Google Maps sessions.
- Charges per saved review so small runs stay inexpensive.
Input
Provide one or more Google Maps place URLs in startUrls.
Recommended URL format is a full Google Maps place URL that contains the 0x...:0x... place data identifier, for example:
{"startUrls": [{"url": "https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163!8m2!3d40.7484405!4d-73.9856644!9m1!1b1"}],"maxItems": 50,"reviewsPerPlace": 50,"sort": "mostRelevant"}
Input fields
startUrls— Google Maps place URLs to process.maxItems— maximum number of review records saved across all places.reviewsPerPlace— maximum number of reviews saved for each input place.sort— review sort order:mostRelevant,newest,highestRating, orlowestRating.language— Google UI language code used for requests. Default isen.country— Google region code used for requests. Default isUS.pageSize— page size for fallback review requests.requestDelayMillis— delay between review page requests.maxRequestRetries— bounded retries for stale sessions or placeholder responses.proxyConfiguration— Apify Proxy or custom proxy settings.
Output
Each dataset item is one Google Maps review.
Important output fields:
placeTitle— place name from the Google Maps URL/session.placeAddress— place address when available.placeUrl— canonical Google Maps place URL used by the run.placeDataId— Google Maps internal place data identifier.placeRating— overall place rating when available.reviewId— unique review identifier.reviewerName— public reviewer display name.reviewerUrl— reviewer profile or reviews URL.reviewerPhotoUrl— reviewer avatar URL when available.rating— review rating from 1 to 5.text— full review text.publishedAt— review publish timestamp when available.ownerResponse— owner response when available.language— detected/source review language when available.scrapedAt— timestamp when the actor saved the item.
Example output
{"placeTitle": "Empire State Building","placeAddress": "Empire State Building, 20 W 34th St., New York, NY 10001","placeDataId": "0x89c259a9b3117469:0xd134e199a405a163","reviewerName": "A Google User","rating": 5,"text": "Great view and a classic New York experience.","publishedAt": "2026-05-29T01:25:39.874Z","language": "en","scrapedAt": "2026-07-09T15:58:28.897Z"}
Pricing
This actor uses pay-per-event pricing.
| Event | Store tier | Price |
|---|---|---|
| Run start | All tiers | $0.005 per run |
| Review extracted | Free | $0.00115 per saved review |
| Review extracted | Bronze | $0.001 per saved review |
| Review extracted | Silver | $0.00078 per saved review |
| Review extracted | Gold | $0.0006 per saved review |
| Review extracted | Platinum | $0.00048 per saved review |
| Review extracted | Diamond | $0.0004 per saved review |
You can control cost with maxItems and reviewsPerPlace. For example, set maxItems to 100 to stop after 100 reviews even if the input places have many more reviews.
Example inputs
Scrape latest reviews for one place
{"startUrls": [{ "url": "https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163!8m2!3d40.7484405!4d-73.9856644!9m1!1b1" }],"maxItems": 25,"reviewsPerPlace": 25,"sort": "newest"}
Scrape a small sample from multiple places
{"startUrls": [{ "url": "https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163!8m2!3d40.7484405!4d-73.9856644!9m1!1b1" }],"maxItems": 10,"reviewsPerPlace": 10,"sort": "mostRelevant"}
API usage
You can run the actor from the Apify API or client libraries. Pass the same JSON input you would use in the Apify Console.
Apify CLI
$apify call fetch_cat/google-maps-reviews-scraper --input-file input.json
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/google-maps-reviews-scraper').call({startUrls: [{ url: 'https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163' }],maxItems: 10});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('fetch_cat/google-maps-reviews-scraper').call(run_input={'startUrls': [{'url': 'https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163'}],'maxItems': 10,})print(run['defaultDatasetId'])
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~google-maps-reviews-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856644,17z/data=!4m8!3m7!1s0x89c259a9b3117469:0xd134e199a405a163"}],"maxItems":10}'
After the run finishes, download results from the default dataset.
MCP
You can use this actor through the Apify MCP server by passing the same JSON input fields. Keep maxItems low for interactive assistant workflows and increase it for scheduled monitoring.
Remote MCP URL
Use the hosted Apify MCP endpoint with the actual actor slug:
https://mcp.apify.com/?actors=fetch_cat/google-maps-reviews-scraper
For Claude-compatible clients, add the remote server with the actor slug:
$claude mcp add --transport http apify "https://mcp.apify.com/?actors=fetch_cat/google-maps-reviews-scraper"
Configure your MCP client to send your Apify API token as a bearer token. Example configuration for clients that support remote HTTP MCP servers:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=fetch_cat/google-maps-reviews-scraper","headers": {"Authorization": "Bearer ${APIFY_TOKEN}"}}}}
Example prompts showing MCP usage
Prompt: "Run the Google Maps Reviews Scraper for this place URL and return the five newest negative reviews."
Prompt: "Monitor this Google Maps location and summarize recurring complaints from the latest 20 reviews."
Prompt: "Extract reviews for this place and group them by rating and language."
Legality
This actor extracts publicly available Google Maps review data. You are responsible for using the results lawfully, respecting applicable privacy rules, Google terms, and any compliance requirements for your jurisdiction or organization.
Tips for best results
- Use full Google Maps place URLs whenever possible.
- Keep
maxItemsmodest for smoke tests. - Use
newestwhen monitoring recent reputation changes. - Use Apify Proxy for cloud runs if direct requests are unstable from your network.
- If a place URL resolves to a limited or ambiguous view, open the exact place in Google Maps and copy the full URL again.
Limitations
Google Maps changes its internal responses regularly. Some places, regions, or sessions can return limited data or placeholder responses. The actor uses retries and fallback requests, but a small number of URLs may still need a more specific Google Maps place URL.
Support
If a run does not return the reviews you expected, include these details when contacting support:
- Apify run ID or run URL.
- The full input JSON used for the run.
- Expected output, such as the place and approximate number of reviews you expected.
- Actual output, including dataset item count and any warning messages.
- One reproducible public URL, preferably the full Google Maps place URL copied from Google Maps.
FAQ
Can I scrape all reviews for a place?
Set a high reviewsPerPlace and maxItems. Very large places can have many pages, so start with a smaller test first.
Why did a run return fewer reviews than expected?
Google may return fewer reviews for a session, place, language, sort order, or region. Check the input URL and try a full place URL with the internal 0x...:0x... identifier.
Does this require my own Google API key?
No. The actor does not require a Google Maps Platform API key.
Can I use proxies?
Yes. Use the proxyConfiguration input. Apify Proxy is enabled by default in the schema.
Related actors
- Google Play Reviews Scraper — collect app reviews from Google Play.
- Trustpilot Reviews Scraper — collect company reviews from Trustpilot.
- Yandex Maps Reviews Scraper — collect reviews from Yandex Maps places.
- Apple Maps Places Scraper — collect Apple Maps place data for local research.
Development
npm installnpm run buildnpm start