Google Maps Reviews Scraper
Pricing
from $0.21 / 1,000 review-scrapeds
Google Maps Reviews Scraper
Scrape Google Maps reviews for any place using URLs, Place IDs or names. Get review text, rating, exact timestamp, edited flag, owner reply, reviewer photos and stats, and restaurant or hotel detail scores. Sort four ways, or schedule it for only new reviews. $0.30 per 1,000 reviews.
Pricing
from $0.21 / 1,000 review-scrapeds
Rating
0.0
(0)
Developer
BonCross API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
What is Google Maps Reviews Scraper?
Google Maps Reviews Scraper gets you the reviews of any place on Google Maps, each with the exact time it was posted where the page only says "a month ago". Paste a Maps link, a Place ID or just the name and city of a restaurant, hotel, shop or attraction. You get the review, the reviewer, the owner's reply and the photos, with the place's own details on the same row.
Where it's strong:
- Dates you can sort and chart. Each review has a timestamp to the millisecond, Google's relative label and an edited flag. In a 360-review check across four places, all 360 had exact timestamps.
- It's fast on a portfolio. 80 places at 60 reviews each (4,800 reviews) took 9 seconds, and 150 places took 19.
- One export is enough. Place name, address, categories, rating, phone, website, coordinates and plus code ride along on each review at no extra charge.
- A daily watch costs almost nothing. Reviews you've already had and reviews your rating filter drops are free, and a place with nothing new costs $0.0005.
- $0.30 per 1,000 reviews on the Free plan and $0.21 on Business, with proxy usage and platform usage included.
BonCross Verified means we tested this actor against the live site before release and kept the record:
- 22 of 22 live checks on its inputs and filters passed on 7 October 2026
- 13 places run the same day by name, link and Place ID: 300 reviews, 1 error row
- Charges matched the rows: 12 places, 300 reviews, 1 checked
- A place with no reviews gets a row saying so
What you can do with it:
- Read the full text of a review and its star rating
- See whether a review was edited after it was posted
- Read the owner's reply where the business has answered
- Collect the reviewer's name, profile, review count, photo count and Local Guide status
- Pull the detailed scores Google collects for restaurants and hotels
- Sort by newest, most relevant, highest or lowest, and filter by rating
- Return only the reviews you haven't had in earlier runs
How much does it cost?
| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
actor-start, per run | $0.001 | $0.001 | $0.001 | $0.001 |
place-resolved, per place given by name; a URL, Place ID or cid skips it | $0.001 | $0.001 | $0.001 | $0.001 |
place-checked, per place given by URL, Place ID or cid that returns no review (none on the place, or all filtered out or already seen) | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
review-scraped, per review returned | $0.0003 | $0.00027 | $0.00024 | $0.00021 |
Enterprise plans pay the Business price.
$0.30 per 1,000 reviews on the Free plan, $0.21 on Business. That's the whole price, with proxy usage and platform usage included. Filtered, duplicate and previously-seen reviews are free.
Two sizes of run, worked through:
- A scheduled check of one place by URL, 20 newest reviews: $0.001 + 20 × $0.0003 = $0.007 ($0.0052 on Business).
- A review archive for a chain, 200 locations by Place ID at 500 reviews each: $0.001 + 100,000 × $0.0003 = $30.001 ($21.001 on Business).
Apify's Free plan includes $5 of credits a month, which is about 710 of those 20-review checks, or about 16,000 reviews in larger runs.
If you paste names, each one costs $0.001 to look up. Links and IDs skip that fee, which is one more reason to keep a list of Place IDs for anything you check often.
What data is in each review?
| Review text | ⭐ Star rating |
| 🕑 Exact timestamp | Relative date as Google shows it |
| Edited flag | 👍 Helpful votes |
| 💬 Owner's reply | 📷 Review photos |
| 👤 Reviewer name and profile URL | Reviewer's review and photo counts |
| Local Guide status | 🔗 Review id and review URL |
| 🍽 Food, service and atmosphere scores | 🏨 Rooms, service and location scores for hotels |
| What was ordered and meal type | Trip type and travel group for hotels |
| Place name, categories and rating | 📍 Address, coordinates and plus code |
| ☎️ Place phone and website | Place ID, feature id and cid |
How to scrape Google Maps reviews
You don't write any code. Create a free Apify account, open Google Maps Reviews Scraper, and then:
- Paste your places, one per line: Maps links, Place IDs or names with the city.
- Pick a sort order and how many reviews you want from each place. Add a rating filter if you only want the complaints or the praise.
- Click Start. When the run finishes, download the reviews as Excel, CSV, JSON, XML or HTML.
⬇️ Input
Put one place per entry in "Places". Any of these works: a /maps/place/ URL, a ?cid= URL, a place_id: URL, a bare Place ID (ChIJ…), a feature id (0x…:0x…), a numeric cid, or a plain name. A name goes through Google Maps search and the first result is used. Add the city ("Café de Flore, Paris"), and paste a link or Place ID when you need to be certain which business you get.
Got a long list of links? Start URLs loads them in bulk from a file, a Google Sheet or a remote list, and is combined with whatever you put in Places.
You have two limits. "Max reviews per place" (1 to 20,000, default 100) applies to each place on its own: ten places at 50 each returns 500. "Maximum results for the whole run" caps the total. Nothing past it is fetched or charged for, and 0 means no cap.
"Sort" takes Google's four orderings: newest (the default), most relevant, highest and lowest. "Minimum rating" and "Maximum rating" (0 to 5, where 0 is off) drop reviews outside the band, and you aren't charged for the ones dropped.
"Include place summary on every review" is on by default and costs nothing extra. "Language" (default en) sets Google's interface language, which localises dates, labels and the place details. Review text stays in the language the reviewer wrote it in.
The newest 100 reviews of a place by URL
{"places": ["https://www.google.com/maps/place/Eiffel+Tower"],"maxReviewsPerPlace": 100,"sort": "newest","language": "en"}
Several places by Place ID, feature id and name
{"places": ["ChIJCar0f49ZwokR6ozLV-dHNTE","0x89c2597777397641:0x4387a82ee10d3e3b","Jardin Majorelle, Marrakech"],"maxReviewsPerPlace": 60}
Complaints only
{"places": ["ChIJCar0f49ZwokR6ozLV-dHNTE"],"sort": "lowest","maxRating": 2,"maxReviewsPerPlace": 300}
A daily only-new monitor of a portfolio
{"places": ["ChIJCar0f49ZwokR6ozLV-dHNTE", "ChIJQXY5d3dZwokROz4N4S6oh0M"],"sort": "newest","maxReviewsPerPlace": 60,"dedupStoreName": "my-locations-reviews","includePlaceInfo": false}
For developers
maxReviewsPerPlaceis the per-place limit andmaxItemsthe run-wide one. Error rows don't count towardmaxItems.- Scan guards: when a rating filter or the dedup store keeps nothing, a place's scan stops after five requests in a row with no review kept, and at three times the requests its limit needs (at least 20).
- With
sort: newestanddedupStoreNameset, a place's list stops at the first review an earlier run returned.dedupStoreNameis the name of a key-value store that remembers what you've had. minRatingabovemaxRatingis refused before the run starts.- A place given by URL or ID that returns no review bills the
place-checkedfee and writes a row saying so. A name has already paidplace-resolved. An error row is free. includePlaceInfo(defaulttrue) reads the place's Maps listing once and addsplaceName,placeId, address, categories, rating, phone, website, coordinates and plus code to each review record.maxConcurrency(Parallel requests, default32, 1 to 32) sets how many requests run at once across the whole run. Lower it only if a run reports errors.delayMs(Delay between requests, default0, up to 10,000) adds an optional pause before each request, in milliseconds.- A run that's moved to another server or restarted carries on where it stopped, without writing or charging any review twice.
⬆️ Output
You get one record per review, viewable as a table or as JSON in the Output tab. With the place summary on, each row repeats the place record, and one export is enough for analysis.
{"input": "Katz's Delicatessen, New York","cid": "0x0:0x313547e757cb8cea","placeName": "Katz's Delicatessen","placeId": "ChIJCar0f49ZwokR6ozLV-dHNTE","placeFid": "0x89c2598f7ff4aa09:0x313547e757cb8cea","placeAddress": "Katz's Delicatessen, 205 E Houston St, New York, NY 10002","placeCategories": ["Deli", "American restaurant", "…"],"placeRating": 4.5,"placeRatingScale": 5,"placePhone": "(212) 254-2246","placeWebsite": "https://katzsdelicatessen.com/","placeLat": 40.722232999999996,"placeLng": -73.98742899999999,"placePlusCode": "P2C7+V2 New York","position": 1,"id": "Ci9DQUlRQUNvZENodHljRjlvT2xwWVRsbEViV2xuVlZaNGQxVnlaQzE1YUhoaVprRRAB","reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2xwWVRsbEViV2xuVlZaNGQxVnlaQzE1YUhoaVprRRAB","url": "https://www.google.com/maps/reviews/…","reviewUrl": "https://www.google.com/maps/reviews/…","source": "Google","sourceId": null,"author": "Dr. Ed Harris","authorAvatar": "https://lh3.googleusercontent.com/…","authorUrl": "https://www.google.com/maps/contrib/100376163683258008326/reviews?hl=en-US","authorId": "100376163683258008326","authorReviewCount": 135,"authorPhotoCount": 43,"authorLocalGuide": true,"postedText": "5 days ago","isEdited": false,"postedAt": "2026-10-02T01:38:23.213Z","postedAtIsApproximate": false,"postedAtMs": 1790905103213,"rating": 5,"ratingScale": 5,"text": "I had previously ordered Katz and had it shipped to Georgia. It was so good, I had to get to NY to try the sandwich fresh from the restaurant. It did NOT disappoint.…","language": "en","likes": 1,"details": { "order_type": "Dine in", "meal_type": "Lunch", "price_per_person": "$30–40", "food": 5, "service": 5, "atmosphere": 5, "noise_level": "Moderate noise", "parking_space": "Difficult to find parking" },"detailsRaw": [ { "key": "GUIDED_DINING_MODE", "label": "Order type", "question": "Did you dine in, take out, or get delivery?", "value": "Dine in" }, "…" ],"ownerResponse": null,"photos": ["https://lh3.googleusercontent.com/…", "…"],"sort": "newest","scrapedAt": "2026-10-07T19:31:10.335Z"}
Notes on a few columns:
idandreviewIdhold the same Google identifier.idis the name used across all BonCross actors, andreviewIdis the review-specific one.sourceis always "Google" on this actor andsourceIdis always null. On Google's hotel pages those two say which partner site a review came from, and a Maps review is always Google's own. Both are kept to give a dataset that combines this actor with Google Hotels Reviews Scraper one shape.- Hotel reviews have three more fields where the reviewer filled them in:
hotelAspects(Rooms, Service and Location scores, each withratingandratingScale),tripTypeandtravelGroup. They're absent on reviews of other kinds of place. detailsholds the reviewer's answers keyed by label (for a restaurant:food,service,atmosphere, meal type and what was ordered).detailsRawkeeps each answer with Google's own question text.ownerResponseanddetailsRawdepend entirely on the place. Measured across four places, owner replies filled 39 of 40 reviews at one hotel, 3 of 40 at another and none at two more. The per-aspect detail filled 34 of 40 at one place and none at another. An empty column there means the business didn't reply. It isn't a missing field.- A place Google lists no reviews for gets one row of its own: the place, an
errormessage saying it has none, and no review fields. If you gave that place as a link or Place ID it costs the $0.0005place-checkedfee, and if you gave a name you've paid the $0.001 lookup and nothing more. - In a CSV or Excel export, nested fields such as
detailsandphotosare flattened into columns.
How many reviews can you get, and how fast?
Up to 20,000 reviews per place per run, and busy places have thousands available.
| Run | Reviews | Run time |
|---|---|---|
| 1 place, 10 reviews | 10 | 3 s |
| 5 places, 300 each | up to 1,500 | 18 to 44 s over seven runs, depending on how quickly Google answered |
| 32 places, 60 each | 1,920 | 7 s |
| 150 places, 20 each | 3,000 | 19 s |
| 80 places, 60 each | 4,800 | 9 s |
These are whole runs on Apify at the default settings, measured on 1 and 2 October 2026. Thousands of places fit comfortably in one run. Each place's reviews are read in order, which is why one place with many reviews takes longer than many places with a few each.
What fills in depends on the place. In a check of five inputs across four places (a Place ID URL, a name, a feature id, a full Maps URL and a name in another country), 90 newest reviews each, 360 reviews returned. All had exact timestamps, 55 had an owner reply and 111 had photos.
Watch new reviews from a schedule, your code or an agent
Reputation monitoring is the commonest setup. Schedule the run daily in Apify, sort by newest, and name an "Only-new store". Each run then hands you only the reviews posted since the last one. A webhook can pass low ratings to Slack as they arrive, or append them to a Google Sheet. Zapier, Make and Airbyte hook in the same way.
The same data serves other jobs: comparing rating trends and complaint themes across rival locations, ranking branches of a chain by rating and review volume, finding the reviews a business never answered, and building dated, rated, multilingual text sets for sentiment analysis or model training.
From your own code, a POST to https://api.apify.com/v2/acts/boncross~google-maps-reviews/run-sync-get-dataset-items with the input JSON in the body returns the reviews when the run finishes. The apify-client package is on NPM for Node.js and on PyPI for Python.
Agents reach it through the Apify MCP server at mcp.apify.com, where it appears as the tool google-maps-reviews. An agent can pass a place name or URL, get dated and rated reviews as JSON, and summarise or classify them in the same session.
FAQ
Do I need proxies or a Google account to scrape Google Maps reviews?
Neither. Proxy usage is included in the event prices and there's nothing to set up. The actor reads what Google shows a visitor who isn't signed in.
Is scraping Google reviews legal?
Web scraping is legal when the data is publicly available, which Google Maps reviews are. This actor reads only what Google serves to a logged-out visitor. Reviews are public content written by other people, and complying with Google's terms and your local law in how you use them is your responsibility.
How do I get only the new reviews each day?
Name an "Only-new store" and schedule the run sorted by newest. Anything you've had before is skipped and not charged. A place given by URL or ID with no new review at all costs only the $0.0005 place-checked fee.
How do I collect only the complaints?
Set "Maximum rating" to 2 and sort by lowest. You pay for the reviews that pass the filter and nothing for the ones it drops.
Why did a name return the wrong business?
A name resolves to Google's first search result. Add the city, or paste the place's Maps URL or Place ID. If Google finds nothing for a name, you get a row that says so, and it isn't charged.
Why does a reviewer show 0 reviews?
authorReviewCount is the number Google shows on the reviewer's profile, which counts written reviews. A reviewer who has only left star ratings can show 0. In one sample of 120 reviews, 23 authors showed 0.
Are reviews translated into my language?
They aren't. Review text is returned in the language the reviewer wrote it in. The "Language" setting localises the place details (such as placeCategories) and Google's labels.
What doesn't it return?
- The place's total review count. Google Maps doesn't provide that number alongside the reviews.
- Review topic chips such as "bathroom, 33 mentions".
- Partner-site reviews shown on Google's hotel pages. Those are collected by Google Hotels Reviews Scraper. This actor returns Google's own reviews only.
- An exact date for the owner's reply. Replies have a relative date, while the review itself has an exact timestamp.
- The Local Guide level. Local Guide status is a true or false flag.
- A separate last-edit timestamp. There's one date per review.
- The score behind "Most relevant". That's Google's own ranking and no column records it.
More from BonCross
- Google Maps Directions Scraper: Google Maps directions as JSON for driving, transit, walking and cycling.
- ikyu.com Reviews Scraper (一休): ikyu.com (一休) reviews for hotels and ryokan.
- Jalan.net Reviews Scraper (じゃらん クチコミ): Jalan (じゃらん クチコミ) hotel reviews, all or only new ones.
- Marriott Reviews Scraper: Guest reviews for any Marriott hotel.
- Rakuten Travel Reviews Scraper (楽天トラベル): Rakuten Travel (楽天トラベル) hotel reviews by hotel number, URL or Japanese name: overall…
- Reddit Scraper: Reddit posts, comment trees, subreddit feeds, user profiles and communities by keyword…
Your feedback
Is a review missing, or is there something on the place page you'd want in the row? Open an issue on the Issues tab in Apify Console. We read them all and reply there.