Google Maps Reviews Scraper avatar

Google Maps Reviews Scraper

Pricing

Pay per event

Go to Apify Store
Google Maps Reviews Scraper

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

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

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

FieldWhat it does
startUrlsGoogle Maps place URLs (see the table below).
placeIdsPlace IDs (ChIJ...) or data IDs (0x...:0x...), one per entry.
maxReviewsPerPlaceReviews to collect per place. Default 100, maximum 5000.
reviewsSortnewest (default), relevant, highest or lowest.
reviewsStartDateISO date such as 2026-10-01. Older reviews are skipped and the place stops early. Setting it sorts newest first.
languageLanguage 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

FormatExample
Place URL copied from the address barhttps://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 linkhttps://www.google.com/maps/place/?q=place_id:ChIJOUaXTwcKkEcRoKwC-x6RFew
Place ID (placeIds)ChIJOUaXTwcKkEcRoKwC-x6RFew
Data ID (placeIds)0x47900a074f974639:0xec15911efb02aca0
Short linkhttps://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.

FieldMeaning
place_idPlace ID of the place (ChIJ...).
data_idData ID of the place (0x...:0x...).
place_nameName of the place. Can be empty when Google gives no place details.
place_urlLink to the place.
place_addressAddress of the place.
place_ratingOverall rating of the place.
place_review_countTotal number of reviews of the place on Google.
review_idStable ID of the review, useful to deduplicate across runs.
nameReviewer name.
profile_linkLink to the reviewer's Google Maps profile.
author_review_countNumber of reviews the reviewer has written. Empty for some reviewers.
ratingStars, 1 to 5.
textReview text. Empty for rating-only reviews, which are common.
published_atReview date as YYYY-MM-DD.
published_at_isoReview timestamp in ISO 8601 (UTC).
review_urlLink to the single review on Google Maps.
reviewer_idNumeric ID of the reviewer, taken from the profile link.
author_photo_countNumber of photos the reviewer has posted. Empty for some reviewers.
is_local_guidetrue when the reviewer is a Google Local Guide, otherwise false. null when the review source does not carry the flag.
original_languageLanguage code of the review as written, for example de.
translated_textGoogle's translation of the review, when Google offers one. Empty otherwise. The translation language is chosen by Google.
translated_languageName of the language of translated_text. Empty when there is no translation.
detailed_ratingsPer-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_ownerThe owner's reply as plain text. Empty when the owner did not reply.
photosList of photo URLs attached to the review. Only present on reviews with photos.
scraped_atWhen 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.

EventWhen it is chargedPrice
reviews-startOnce per run, together with the first review. A run that returns no review is not charged.$0.00005
review-resultOnce 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-scraper to 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-scraper for place IDs ChIJLU7jZClu5kcR4PcOOO6p3I0 and ChIJOUaXTwcKkEcRoKwC-x6RFew, 60 reviews each, and compare the average rating."

"Use google-maps-reviews-scraper to 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.

  • 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.