Google Maps Reviews Scraper
Pricing
Pay per event
Google Maps Reviews Scraper
Scrape Google Maps reviews for any place URL or place ID. One row per review with rating, text, date, author, photos and the owner's reply. Sort by newest, stop at a start date.
Pricing
Pay per event
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Get the reviews of any place on Google Maps. Give the Actor place URLs or place IDs and it returns one dataset row per review: star rating, review text, date, reviewer, photos and the owner's reply. Export to JSON, CSV or Excel, or call it from your own code and AI agents.
What you can do with it
- Collect the reviews of one place or many places in a single run.
- Track reputation: pull the newest reviews of your own locations or your competitors' locations.
- Get only recent reviews with a start date. The run stops as soon as it reaches older reviews.
- Sort by newest, most relevant, highest rated or lowest rated.
- Analyse sentiment, themes and complaints in the review text, or read the owner replies to see how a business responds.
- Feed reviews with the place name, address, overall rating and total review count into a dashboard or a data warehouse.
Input
| Field | What it does |
|---|---|
startUrls | Google Maps place URLs (see the table below). |
placeIds | Place IDs (ChIJ...) or data IDs (0x...:0x...), one per entry. |
maxReviewsPerPlace | Reviews to collect per place. Default 100, maximum 5000. |
reviewsSort | newest (default), relevant, highest or lowest. |
reviewsStartDate | ISO date such as 2026-10-01. Older reviews are skipped and the place stops early. Setting it sorts newest first. |
language | Language code such as en or de. Default en. |
Provide at least one place in startUrls or placeIds. A place that appears twice is scraped once.
Example 1: the 20 newest reviews of one place
{"startUrls": [{ "url": "https://www.google.com/maps/place/?q=place_id:ChIJOUaXTwcKkEcRoKwC-x6RFew" }],"maxReviewsPerPlace": 20,"reviewsSort": "newest","language": "en"}
Example 2: two places, 60 reviews each
{"placeIds": ["ChIJLU7jZClu5kcR4PcOOO6p3I0", "ChIJOUaXTwcKkEcRoKwC-x6RFew"],"maxReviewsPerPlace": 60,"reviewsSort": "newest","language": "en"}
Example 3: only reviews since a date
{"placeIds": ["ChIJOUaXTwcKkEcRoKwC-x6RFew"],"maxReviewsPerPlace": 500,"reviewsStartDate": "2026-09-25","language": "en"}
Supported URL formats
| Format | Example |
|---|---|
| Place URL copied from the address bar | https://www.google.com/maps/place/Mansour+Schuh+Bahr/@47.466452,9.047944,17z/data=!3m1!4b1!4m6!3m5!1s0x479ac55fafb1e33b:0x810a2425a912180a!8m2!3d47.466452!4d9.047944!16s |
| Place ID link | https://www.google.com/maps/place/?q=place_id:ChIJOUaXTwcKkEcRoKwC-x6RFew |
Place ID (placeIds) | ChIJOUaXTwcKkEcRoKwC-x6RFew |
Data ID (placeIds) | 0x47900a074f974639:0xec15911efb02aca0 |
| Short link | https://maps.app.goo.gl/... |
Search result pages and links that only carry a CID cannot point to a single place. Open the place in Google Maps and copy its full URL instead.
Output
One dataset row per review. Duplicates are removed before anything is charged, so the number of rows is the number of reviews you pay for.
| Field | Meaning |
|---|---|
place_id | Place ID of the place (ChIJ...). |
data_id | Data ID of the place (0x...:0x...). |
place_name | Name of the place. Can be empty when Google gives no place details. |
place_url | Link to the place. |
place_address | Address of the place. |
place_rating | Overall rating of the place. |
place_review_count | Total number of reviews of the place on Google. |
review_id | Stable ID of the review, useful to deduplicate across runs. |
name | Reviewer name. |
profile_link | Link to the reviewer's Google Maps profile. |
author_review_count | Number of reviews the reviewer has written. Empty for some reviewers. |
rating | Stars, 1 to 5. |
text | Review text. Empty for rating-only reviews, which are common. |
published_at | Review date as YYYY-MM-DD. |
published_at_iso | Review timestamp in ISO 8601 (UTC). |
review_url | Link to the single review on Google Maps. |
reviewer_id | Numeric ID of the reviewer, taken from the profile link. |
author_photo_count | Number of photos the reviewer has posted. Empty for some reviewers. |
is_local_guide | true when the reviewer is a Google Local Guide, otherwise false. null when the review source does not carry the flag. |
original_language | Language code of the review as written, for example de. |
translated_text | Google's translation of the review, when Google offers one. Empty otherwise. The translation language is chosen by Google. |
translated_language | Name of the language of translated_text. Empty when there is no translation. |
detailed_ratings | Per-aspect details such as Service or Food for restaurants, or room and price answers for hotels. A list of {key, name, value, rating}. value is always text (the answer, or the number as text). rating is the 1 to 5 star value for numeric aspects and null for choice answers. It is null when the reviewer gave none. |
response_from_owner | The owner's reply as plain text. Empty when the owner did not reply. |
photos | List of photo URLs attached to the review. Only present on reviews with photos. |
scraped_at | When the row was collected (UTC). |
Sample row (the review text is shortened to one sentence):
{"place_id": "ChIJOUaXTwcKkEcRoKwC-x6RFew","data_id": "0x47900a074f974639:0xec15911efb02aca0","place_name": "Old Crow","place_url": "https://www.google.com/maps/place/?q=place_id:ChIJOUaXTwcKkEcRoKwC-x6RFew","place_address": "Old Crow, Schwanengasse 4, 8001 Zürich","place_rating": 4.7,"place_review_count": 1321,"review_id": "Ci9DQUlRQUNvZENodHljRjlvT21WRk4yMVRRMmRpZUdaWmF6WlhjWGxHVDFObWIwRRAB","name": "Dave Westover","profile_link": "https://www.google.com/maps/contrib/110923814826171809789/reviews?hl=de-CH","author_review_count": 199,"rating": 5,"text": "There is a 23 (A5) page cocktail list.","published_at": "2026-10-15","published_at_iso": "2026-10-15T14:10:43Z","response_from_owner": null,"scraped_at": "2026-10-25T11:16:12Z"}
Pricing
Pay per event. You pay only for what the run delivers.
| Event | When it is charged | Price |
|---|---|---|
reviews-start | Once per run, together with the first review. A run that returns no review is not charged. | $0.00005 |
review-result | Once per review row in the dataset. | $0.30 per 1,000 reviews |
Worked examples: 100 reviews cost $0.03005. 1,000 reviews cost $0.30005.
To cap spending, set a maximum total charge on the run. The run stops when the next review would exceed the cap and keeps everything it has already delivered. The pricing box on the actor page always shows the current rates.
Use with AI agents (MCP)
Connect this Actor to any MCP-compatible AI client, such as Claude Desktop, Claude.ai, Cursor, VS Code, LangChain or LlamaIndex.
Example prompts once connected:
"Use
google-maps-reviews-scraperto get the 50 newest reviews of this place and summarise the main complaints: https://www.google.com/maps/place/?q=place_id:ChIJOUaXTwcKkEcRoKwC-x6RFew"
"Use
google-maps-reviews-scraperfor place IDs ChIJLU7jZClu5kcR4PcOOO6p3I0 and ChIJOUaXTwcKkEcRoKwC-x6RFew, 60 reviews each, and compare the average rating."
"Use
google-maps-reviews-scraperto collect reviews since 2026-09-25 for this place and list the 1 and 2 star reviews with the owner's reply."
Configure the MCP server with this Actor preconfigured at mcp.apify.com?tools=santamaria-automations/google-maps-reviews-scraper:
{"mcpServers": {"apify": {"command": "npx","args": ["mcp-remote","https://mcp.apify.com/?tools=santamaria-automations/google-maps-reviews-scraper","--header","Authorization: Bearer <YOUR_API_TOKEN>"]}}}
See the auto-generated API tab on the actor page for language-specific examples (cURL, JavaScript, Python and more).
FAQ
How do I find the place URL?
Open the place in Google Maps and copy the URL from the address bar, or use the Share button and copy the short link. You can also take the place_id or data_id from the output of the Google Maps Scraper and paste it into placeIds.
Why is a field empty?
text is empty for reviews that only carry a star rating. response_from_owner is empty when the owner did not reply. photos appears only on reviews with photos. author_review_count is empty for some reviewers. translated_text and translated_language are filled only for reviews Google translated. detailed_ratings is null when the reviewer answered none of the optional questions.
Why did I get fewer reviews than I asked for?
The place has fewer reviews than your limit, Google returned an incomplete page (the run status then says so), your reviewsStartDate cut the list, or the run reached its maximum total charge. The run status message says how many reviews were delivered.
How do I get only new reviews?
Set reviewsStartDate to the date of your last run, for example 2026-10-18. Reviews are collected newest first and the place stops at the first older review. You can also deduplicate on review_id across runs.
How do I stop at a budget?
Set a maximum total charge on the run. The run stops when the next review would exceed it and keeps the reviews already delivered. You can also lower maxReviewsPerPlace.
In which language are the dates and place names?
Place names follow language. published_at is always a calendar date.
Related actors
- Google Maps Scraper: search Google Maps for businesses and get address, phone, website, rating and more. Use it to build the list of places for this Actor.
Support
- Questions or issues? Email contact@nanoscrape.com, we typically reply within 6 hours, or open a ticket in the Issues tab on the actor page.
- Need a field that is missing? Email contact@nanoscrape.com with an example place and the field you need.