Google Maps Reviews Scraper - Exact Dates, Replies & Photos
Pricing
from $0.53 / 1,000 reviews
Google Maps Reviews Scraper - Exact Dates, Replies & Photos
Google Maps reviews by place URL, ID or search: exact dates, owner replies, photos, likes, translations. No login. Export CSV, Excel, JSON, XML.
Pricing
from $0.53 / 1,000 reviews
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Google Maps Reviews Scraper: Google Reviews API with Exact Dates, Owner Replies & Photos
Export Google Maps reviews for any business from its place URL, place ID, or a search like "pizza in Chicago": 5,000 reviews of one restaurant came back in 87 seconds in our last test. Every review carries its exact publish date, the reviewer, likes, photos, the owner's reply, Google's translation, the guided answers (price per person, meal type, wait time), and the Food / Service / Atmosphere scores, with the place's name, address, rating and review total on the same row. No login, no Google API key, no browser. Export to CSV, JSON, Excel, or XML.
The official Google Places API returns at most 5 reviews per place. This Actor reads the same review list the Google Maps "All reviews" window shows, page by page, in Google's own sort orders, and hands back one flat row per review with 40 fields.
| Who uses it | What they export Google reviews for |
|---|---|
| Local SEO and reputation agencies | Review monitoring for every client location, new reviews and owner replies on a schedule |
| Multi-location brands | Google business reviews across all branches, compared by rating, topic and reply rate |
| Market researchers | What customers praise and complain about in a category and a city |
| Data scientists | Review text with ratings, languages and translations for sentiment and topic models |
| Lead generation teams | Businesses with low ratings or unanswered reviews, with website and phone on every row |
What it does
The Actor takes Google Maps place URLs, place IDs (ChIJ...), feature IDs or CIDs, and search terms with a location, alone or together, and returns one row per review.
- โญ Review: rating, full text, language, Google's translation into your language, exact publish time (ISO 8601) and Google's relative date.
- ๐ค Reviewer: name, contributor ID and profile URL, photo, total reviews and photos posted, Local Guide flag.
- ๐ช Owner reply: the business response text and its date.
- ๐ Engagement: likes and all reactions, plus the review's photos.
- ๐งพ Review details: the guided answers Google asks for (price per person, meal type, wait time, parking, recommended dishes) and the Food, Service and Atmosphere scores.
- ๐ Place on every row: name, place ID, feature ID, CID, address, main and all categories, rating, total reviews, coordinates, website and phone.
- ๐ Filters: star ratings, "only reviews newer than" a date, text contains, only reviews with text, only reviews the owner answered.
What you can do with Google reviews data
๐ก Monitor new reviews on a schedule.
Run every morning with sort set to newest and reviewsNewerThan set to "1 day". The run stops reading each place as soon as it reaches older reviews, so a daily check stays small and cheap.
๐จ Catch bad reviews first.
Set starRatings to 1 and 2 with sort "lowestRating" and onlyWithText on. The run reads the lowest reviews first and stops each place when the ratings climb out of range.
๐บ๏ธ Benchmark a category in a city.
Search "dentist" in "Austin, TX" with maxPlacesPerSearch 20 and maxReviewsPerPlace 200, then compare ratings, reply rates and sub-scores across every practice.
๐ Read reviews in any language.
Set language to your language: reviews written in another one come with Google's translation in textTranslated, and the original stays in text.
Why choose this scraper
| What you get | |
|---|---|
| Exact dates | publishedAt is Google's own timestamp to the millisecond, not a guess from "3 weeks ago". |
| The whole review | Owner reply, photos, likes, translation, guided answers and sub-ratings, all on the same row. |
| Place data included | Name, IDs, address, rating, total reviews, website and phone repeat on every review, so one file is enough. |
| Any way in | Place URLs, share links, ChIJ place IDs, feature IDs, CIDs, Maps search URLs, or a search term and a location. |
| Filters that save money | Stars, date, text and owner-reply filters run as reviews are read. Only matching reviews are delivered and billed. |
| Light and fast | Plain HTTP, no browser: up to 60 reviews per request and about 150 MB of memory for a 5,000-review run. |
How it compares
All scrapers below read public Google Maps reviews. Prices are each Actor's public Store price for its main result event, read on September 24, 2026, lowest to highest.
| Actor | Price per 1,000 reviews | Runs |
|---|---|---|
| kaix/google-maps-reviews-scraper | $0.04 | 156,169 |
| curious_coder/google-maps-reviews-scraper | $0.20 | 14,290 |
| solidcode/google-maps-reviews-scraper | $0.25 | 6,077 |
| web_wanderer/google-reviews-scraper | $0.35 (free tier) to $0.22 | 389,899 |
| compass/Google-Maps-Reviews-Scraper | $0.60 (free tier) to $0.15 | 167,893,844 |
| ParseForge | $0.60 (free tier) to $0.534 | new |
Honest ceiling: Google shows signed-out visitors its review list, not every review ever posted. On a landmark with 112,688 reviews, newest-first reached back one year (3,540 reviews); on a busy deli it reached four months in 2,820 reviews and kept going. Every row carries placeTotalReviews, so you always see your coverage.
What a Google Maps review looks like
One unedited row from a verified run on September 24, 2026:
{"imageUrl": "https://lh3.googleusercontent.com/a/ACg8ocJzQH7fx2VaLLQ3hnHSpoqU90iZFahTej5OwYMiP4PEThGQbzM=s64-c-rp-mo-ba12-br100","reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2xGdU5FbHFhMFF5YkhGaU0xTlBjbUU0TWxCWFpFRRAB","reviewUrl": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xGdU5FbHFhMFF5YkhGaU0xTlBjbUU0TWxCWFpFRRAB!2m1!1s0x0:0xe494c5a4cb742aeb!3m1!1s2@1:CAIQACodChtycF9oOlFuNElqa0QybHFiM1NPcmE4MlBXZEE%7C%7C?hl=en-US","rating": 5,"text": "Excellent service. The wait time for our order was long...but worth the wait. Drinks and food ๐","textTranslated": "N/A","language": "en","publishedAt": "2026-09-24T16:31:57.737Z","publishedAtRelative": "3 hours ago","likesCount": 0,"reactionsCount": 0,"ownerResponseText": "N/A","ownerResponseRelative": "N/A","reviewerName": "Mary Downs","reviewerId": "116325683602922945114","reviewerUrl": "https://www.google.com/maps/contrib/116325683602922945114/reviews","reviewerReviewsCount": 28,"reviewerPhotosCount": 21,"isLocalGuide": "Yes","placeName": "Giordano's","placeId": "ChIJh3i0BqYsDogR6yp0y6TFlOQ","placeFid": "0x880e2ca606b47887:0xe494c5a4cb742aeb","placeCid": "16471007048779442923","placeAddress": "130 E Randolph St, Chicago, IL 60601","placeCategory": "Pizza restaurant","placeRating": 4.5,"placeTotalReviews": 26763,"placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJh3i0BqYsDogR6yp0y6TFlOQ","placeLatitude": 41.8851301,"placeLongitude": -87.62376119999999,"placeWebsite": "https://giordanos.com/locations/prudential-plaza-millennium-park/","placePhone": "+13126161200","sortOrder": "newest","inputQuery": "pizza in Chicago, IL","reviewContext": { "Meal type": "Dinner" },"subRatings": { "Food": 5, "Service": 5, "Atmosphere": 5 },"reviewImageUrls": [],"placeCategories": ["Pizza restaurant", "Delivery service", "Takeout Restaurant", "Pizza delivery"],"scrapedAt": "2026-09-24T19:34:12.047Z","error": null}
A review written in another language keeps the original and adds the translation, from the same run:
{ "text": "ุณุงูุฏูุด ุณุชูู ูุญู ูุงู ุฌู ูู ููุฐูุฐ", "textTranslated": "The steak sandwich was beautiful and delicious.", "language": "ar" }
A field the review does not have reads "N/A" (no text on a star-only review, no owner reply), and empty lists are []. A row with error set is an input that could not be read; it is never billed.
Configure the run
Mix place URLs, place IDs and searches in one run. The Input tab lists every option.
New reviews from the last day for two locations, newest first:
{ "startUrls": [{ "url": "https://www.google.com/maps/place/Katz%27s+Delicatessen/data=!4m2!3m1!1s0x89c2598f7ff4aa09:0x313547e757cb8cea" }], "placeIds": ["ChIJh3i0BqYsDogR6yp0y6TFlOQ"], "sort": "newest", "reviewsNewerThan": "1 day" }
The 1 and 2 star reviews with text for the top 10 dentists in a city:
{ "searchTerms": ["dentist"], "location": "Austin, TX", "maxPlacesPerSearch": 10, "sort": "lowestRating", "starRatings": ["1", "2"], "onlyWithText": true }
Pricing
Pay-per-event: $0.60 per 1,000 reviews, dropping to $0.534 per 1,000 on higher Apify plans, plus a run-start fee of $0.005. You pay only for reviews written to your dataset; error rows are free.
| Reviews collected | Approximate cost |
|---|---|
| 100 | $0.07 |
| 1,000 | $0.61 |
| 10,000 | $6.01 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 reviews as a preview. Upgrade your Apify plan to collect up to 1,000,000 reviews per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the Google Maps Reviews Scraper.
- Paste place URLs or place IDs, or enter a search term and a location, pick a sort order and any filters, and click Start.
- Export the reviews as CSV, Excel, JSON, or XML from the Dataset tab, or schedule the run for ongoing review monitoring.
Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live Google reviews through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/google-maps-reviews-scraper"
Then prompt it in plain language:
- "Get this week's Google reviews for our three locations and list every review under 3 stars that has no owner reply."
- "Compare the Food, Service and Atmosphere scores of the top 10 pizza places in Chicago."
- "Summarize what customers say about wait times at this restaurant, in Spanish."
Copy this into ChatGPT, Claude, or Cursor to start:
Use the Apify Actor "parseforge/google-maps-reviews-scraper" to collect Google Maps reviews. Input: { "startUrls": [{ "url": "<google maps place url>" }], "placeIds": ["<ChIJ...>"], "searchTerms": ["<what>"], "location": "<where>", "sort": "<newest|mostRelevant|highestRating|lowestRating>", "reviewsNewerThan": "<30 days>", "maxItems": <n> }. Reviews come back with rating, text, textTranslated, publishedAt, likesCount, ownerResponseText, reviewerName, placeName, placeRating and placeTotalReviews. Call it with the ApifyClient and my APIFY_TOKEN.
Troubleshooting
Why am I getting no results?
The URL may not point at a single place, or the place ID may be wrong; the run writes an error row that says so. A filter can also remove everything: loosen starRatings, reviewTextContains or reviewsNewerThan.
Why fewer reviews than the place total?
Google's review list for signed-out visitors is shorter than the lifetime total, and your filters remove more. Compare your count with placeTotalReviews on any row.
Why did the sort change to newest?
"Only reviews newer than" needs newest-first order to know where to stop, so the run switches to it and says so in the log.
Why does "Most relevant" differ between languages?
Google ranks relevance per language, so the same place returns a different first page in English and in Spanish.
Can I search inside the review text?
Yes, with reviewTextContains. Google offers no review search to signed-out visitors, so the Actor reads the reviews and keeps the matching ones; you pay only for the matches.
FAQ
| Question | Answer |
|---|---|
| Do I need a Google API key or account? | No. It reads Google Maps' public review list, with no login, cookies or key. |
| How is this different from the Google Places API? | The Places API returns at most 5 reviews per place. This returns the full list Google Maps shows, sorted and filtered your way. |
| Are the dates exact? | Yes. publishedAt is Google's own timestamp of the review (or of its last edit), in ISO 8601. |
| Does it include owner replies? | Yes, ownerResponseText and ownerResponseRelative on every review that has one. |
| Can it translate reviews? | Google does: pick language, and reviews in other languages come with textTranslated. |
| Can I filter by stars or date? | Yes: starRatings, reviewsNewerThan, reviewTextContains, onlyWithText and onlyWithOwnerResponse. |
| Which inputs work? | Place URLs, maps.app.goo.gl share links, ?cid= links, Maps search URLs, ChIJ place IDs, feature IDs, CIDs, and a search term with a location. |
| How many places does a search return? | Up to maxPlacesPerSearch. Google stops a single Maps search after a couple of hundred places at most (108 for "restaurants in Chicago, IL" in our test), so split big areas into neighborhoods. |
| How many reviews per run? | Free plan: 10. Paid: up to 1,000,000, bounded by what Google lists for each place and your filters. |
| Do I need a proxy? | Usually not. The run connects directly and switches to Apify Proxy by itself if Google starts refusing. |
| Is this an official Google product? | No. It is unofficial and reads only public Google Maps data. |
Related actors
- Google Maps Contacts Scraper: businesses from Google Maps with the email and phone from their own website.
- Google Maps Shared List Scraper: every place in a shared Google Maps list.
- TikTok Comments Scraper: public comments on TikTok videos.
- YouTube Transcript Scraper: transcripts from YouTube videos.
- Kayak Scraper: flight and hotel prices from Kayak.
Browse the full ParseForge collection for more scrapers.
๐ Need help? Open our contact form with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Google LLC. It collects only publicly available Google Maps data. You are responsible for using the data in compliance with Google's terms and applicable laws, including GDPR and CCPA. Do not use it to identify, profile, or target individuals.
