Google Maps Reviews Scraper
Pricing
from $0.02 / 1,000 review extracteds
Google Maps Reviews Scraper
Collect public Google Maps reviews from place URLs, with ratings, text, reviewer details and available place metadata. Export your dataset to CSV, Excel or JSON.
Extract public Google Maps reviews from place URLs into an Apify dataset, with review text, ratings, reviewer details and available place metadata. Use the results for reputation research, location comparisons or feedback analysis, then export to CSV, Excel or JSON.
Google controls how many reviews are available to each request. Limits are ceilings, not guaranteed counts. Owner replies and total review counts are not currently extracted.
Quick start
- Paste a full Google Maps place URL into Google Maps place URLs.
- Set a small total and per-place review limit, then start the Actor.
- Open the dataset and download your results in your preferred format.
{"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": "newest"}
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
Ready-to-run examples
Choose a public example to see its settings before starting a run:
- Compare Newest Google Maps Reviews Across Locations
- Find Lowest-Rated Google Maps Reviews
- Monitor Newest Google Maps Reviews
What you get
One row per extracted public review, with its identifier, rating and text, plus available reviewer, date and place metadata. Optional fields can be null. Owner responses and total place review counts remain null, and the export is a bounded sample of what Google returns rather than a complete review history.
Who is it for?
- Reputation analysts reading public feedback about individual business locations.
- Multi-location operations teams preparing comparable review samples for their own analysis.
- Customer-experience researchers grouping returned review text by topic or rating in another tool.
- Data teams retaining review identifiers and place context for their own repeat-export comparisons.
How you can use the data
- Read a small landmark review sample. Use the existing Empire State Building place URL with ten total reviews and ten per place. Request newest order, then review
rating,textand the available publication fields without assuming every review was returned in that order. - Inspect low-rated feedback. Use a full place URL and request lowest-rating order with a small total and per-place cap. Group the returned text yourself: that order request is not a negative-review filter or a sentiment score.
- Compare locations in your own analysis. Supply the full place URLs you want to study and set both caps explicitly. Keep
placeUrl,placeTitleandreviewIdwith each row before comparing themes in a spreadsheet. Unequal sample sizes or missing reviews do not establish a difference in customer satisfaction. - Keep source and missing-value context. Retain available absolute and relative dates, and inspect each source-associated link before calling it a review permalink. It may point to a reviewer profile. Do not infer an absent owner reply or total review count from the reserved null fields.
Input settings
Use full place URLs rather than broad Maps searches. URLs containing a 0x…:0x… place identifier are recommended. Short share links depend on successful resolution. Bare place IDs are not a separate input mode. Broad search URLs without a place identifier are skipped before requests or manual charges, with a visible warning and a reason in RUN_SUMMARY; valid places in the same batch still run.
Customer max-cost and short-timeout stops preserve saved reviews, warn, and record limitStop in RUN_SUMMARY. Allow at least 40 seconds for useful work. Requests are bounded and processing has a five-minute hard cap. Genuine transport, extraction, storage and billing failures still fail.
| Setting | API key | Purpose |
|---|---|---|
| Google Maps place URLs | startUrls | Required list of places. |
| Maximum reviews | maxItems | Total saved-review ceiling. |
| Reviews per place | reviewsPerPlace | Per-place saved-review ceiling. |
| Sort order | sort | Request mostRelevant, newest, highestRating or lowestRating. |
| Language | language | Requested place-page language. Not a review-language filter. |
| Country | country | Requested place-page region. |
| Page size | pageSize | Advanced review-page size hint. |
| Request delay | requestDelayMillis | Pause between subsequent review pages. |
| Max request retries | maxRequestRetries | Place-resolution attempt limit. |
| Proxy configuration | proxyConfiguration | Apify Proxy is enabled by default. Custom settings are supported. |
The form defaults to 10 total reviews and 10 per place. Set both limits explicitly in API calls and automations. Detailed defaults, choices and limitations appear in each setting's help.
Example inputs
Use the Quick start input as a small first run. Adjust the fields described above for your own data.
Output data
Each dataset row contains one extracted review. This is a synthetic shape-only example, not an observed review:
{"placeUrl": "https://www.google.com/maps/place/Example/","placeTitle": "Example place","placeAddress": null,"placeDataId": "0x0:0x0","placeId": null,"placeRating": null,"placeReviewCount": null,"reviewId": "example-review-id","reviewerName": null,"reviewerUrl": null,"reviewerPhotoUrl": null,"rating": 4,"text": "Illustrative review text, not a real customer review.","publishedAt": null,"relativeDate": "a month ago","ownerResponse": null,"reviewUrl": null,"language": null,"scrapedAt": "2026-10-24T00:00:00.000Z"}
| Fields | Meaning and availability |
|---|---|
placeUrl, placeTitle | Resolved place URL and name when available. |
placeAddress, placeRating | Optional place metadata. May be null. |
placeDataId, placeId | Available place identifiers. |
reviewId, rating, text | Review identifier, star rating and extracted text. |
reviewerName, reviewerUrl, reviewerPhotoUrl | Available public reviewer details. May be null. |
publishedAt, relativeDate | Absolute or relative publication time, depending on the available response. Either may be null. |
language | Available source review language, or null. No translation is performed. |
reviewUrl | Source-associated link. May point to a reviewer profile rather than a review permalink. |
ownerResponse, placeReviewCount | Reserved fields, currently always null. |
scrapedAt | Time the review record was created. |
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
Pay-per-event pricing uses a one-time run-start start charge and an item charge for each review saved to the dataset. A run can incur the start charge even when no reviews are saved. No separate error or status rows are written.
Set both total and per-place caps to bound saved reviews. See the live Pricing tab for current rates and plan discounts.
Tips for best results
- Use a full place URL with a recognizable place identifier. Broad Maps searches and bare place IDs are not separate supported input modes.
- Set total and per-place caps explicitly. Requested counts are ceilings rather than guaranteed samples.
- Check actual returned order before comparing reviews. Preview results may not follow the requested sort, and the Actor does not reorder them locally.
- Keep date and language uncertainty visible. Missing dates or language values should remain unknown rather than be inferred.
- Check run status as well as dataset size. Earlier saved reviews can remain available after a later place or request fails.
Limits and caveats
Google controls review availability and response formats. Limits do not guarantee completeness, and an empty dataset does not establish that a place has no reviews. Reviews without usable text may be omitted, and short-text coverage varies. Owner replies, review photos and total review counts are not extracted.
Sort requests are sent where supported, but available preview results may not follow them and no final local sorting is performed. Lowest-rating order is not a negative-review filter. The Actor returns records rather than sentiment scores or automatic comparison reports.
Language and country are request hints, with no translation or guaranteed review-language filtering. Some available review responses use English/US settings. Optional place, reviewer and publication fields can be null. A source-associated review link can point to a reviewer profile rather than a review permalink.
An unresolved place or failed request can fail the run while earlier saved rows remain available. Short share links depend on successful resolution. This independent public-review scraper is not a Google product and does not require a Google login or Maps Platform API key.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~google-maps-reviews-scraper/runs' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data @- <<'JSON'{"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": "newest"}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!8m2!3d40.7484405!4d-73.9856644!9m1!1b1"}],"maxItems": 10,"reviewsPerPlace": 10,"sort": "newest"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['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!8m2!3d40.7484405!4d-73.9856644!9m1!1b1'}], 'maxItems': 10, 'reviewsPerPlace': 10, 'sort': 'newest'})print(client.dataset(run['defaultDatasetId']).list_items().items)
API and integrations notes
Save the quick-start JSON as input.json:
Read the returned run ID, wait for completion, then retrieve items from its defaultDatasetId through the datasets API.
Example prompt: “Collect up to 10 reviews from this Google Maps place URL, with maxItems and reviewsPerPlace both set to 10 and sort set to newest. Check run status, then summarize the returned text without treating missing reviews as negative evidence.”
MCP and AI agents
You can ask your AI assistant to collect data with Google Maps Reviews Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Google Maps Reviews Scraper. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/google-maps-reviews-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Google Maps Reviews Scraper by Fetch Cat, or give it the identifier fetch_cat/google-maps-reviews-scraper.
Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Use Fetch Cat’s Google Maps Reviews Scraper to collect up to 10 reviews from the Empire State Building place URL in Quick start, capped at 10 for that place, requesting newest order. Show ratings, text and available dates, and flag any ordering or coverage limits.”
- “Collect up to 5 reviews from that same Empire State Building place URL, capped at 5 for the place, requesting lowest-rating order. Group the returned feedback by theme without treating the order as a negative-only filter.”
- “Retrieve up to 5 reviews from the Empire State Building Quick start URL with a per-place cap of 5 and English/US page hints. Keep review IDs, place context and available source-associated links for my own comparison, without translating or inferring missing fields.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
FAQ
Can I export Google Maps reviews to CSV or Excel?
Yes. Open the run's dataset and choose an export format. The API also returns JSON dataset items.
Is this an official Google Maps reviews API?
No. This is an independent scraper of publicly available place reviews, not a Google product. It does not require a Google Maps Platform API key or your Google login.
Can it retrieve all reviews or only negative reviews?
Neither is guaranteed. Limits cap the results, and sorting by lowestRating requests an order rather than applying a negative-review filter. Filter and analyze the returned dataset yourself.
Why are reviews or fields missing?
Availability and response formats vary. Use a full place URL, start with a small sample, and inspect run status and warnings. Reserved fields remain null. Other optional fields depend on the response. Google locale hints do not ensure that all review languages are returned.
Related Actors
- Google Hotels Scraper — research hotel prices and offers.
- Google News Scraper — collect news headline, publisher and feed-link records for broader research, without article bodies.
- Google Autocomplete Scraper — explore search suggestions.
- Trustpilot Reviews Scraper — collect company reviews.
- Yandex Maps Reviews Scraper — research reviews from another map service.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥