Google Maps Reviews Scraper: Extract All Reviews at Scale
Pull every review for every business Google Maps returns for your query. Author name, star rating, publication date, review text, owner response. One opt-in flag on the NanoScrape scraper, priced at $1 per 1,000 places plus $0.30 per 1,000 reviews. No Places API quota, no per-request rate limits.
In this tutorial
What you will build
A one-request scrape that returns every place matching your search query, each populated with the full set of available reviews. For a typical search returning 50 businesses, you get 50 rows with a user_reviews array on each. Use maxReviewsPerPlace to cap the count per place, or set it to 0 to pull everything Google has.
The reviews come from the same actor that scrapes the base business data, so you get both in one request. Base rate is $1 per 1,000 places (FREE tier) with a $0.30 per 1,000 reviews add-on that only kicks in when you turn reviews on.
Prerequisites
- A free Apify account. Sign up at the actor page. The free tier gives you $5 of usage credit every month, which covers about 5,000 places from this scraper.
- An HTTP client (curl, Postman, or any language's fetch). Or use one of the integrations at the end of this tutorial (n8n, Make, Zapier, Apify SDK, MCP).
Get your Apify API token
- Open the Google Maps Scraper and click Try for free.
- Sign up with Google or email.
- Click your avatar (top right), open Settings, then Integrations.
- Copy the Personal API token.
Enable reviews in the input JSON
The reviews feature is controlled by three input fields. Only the first is required.
includeReviews: true: turn on review extraction. Adds about 300 ms per place. Billed at $0.30 per 1,000 reviews.maxReviewsPerPlace: cap the number of reviews pulled per place. Default is 25. Set to0to pull every review the place has. Higher values increase both runtime and cost.reviewsSort: one ofmost_relevant(default),newest,highest_rating,lowest_rating.
Minimal working input:
{
"searchStrings": ["restaurants in Paris"],
"maxResultsPerQuery": 20,
"language": "en",
"includeReviews": true,
"maxReviewsPerPlace": 10
}Run it and inspect the reviews
Simplest run: POST the input to the sync endpoint. Results return in the same response body, typically within 10 to 30 seconds for 20 places with reviews.
curl -X POST \
"https://api.apify.com/v2/acts/santamaria-automations~google-maps-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchStrings": ["restaurants in Paris"],
"maxResultsPerQuery": 20,
"language": "en",
"includeReviews": true,
"maxReviewsPerPlace": 10
}'Each item in the response array is a full business record with 30-plus fields, and each record now has a user_reviews array populated with the reviews we requested.
/runs instead of /run-sync-get-dataset-items. The sync endpoint has a 5-minute timeout.Sort and filter reviews
The reviewsSort option changes which reviews Google surfaces first:
- most_relevant (default): Google's own ranking. Weighted mix of recency, helpfulness, and quality signals.
- newest: most recent first. Best for monitoring fresh sentiment.
- highest_rating: 5-star reviews first. Useful for pulling testimonial-style content.
- lowest_rating: 1-star reviews first. Best for competitor analysis or complaint monitoring.
To only pull reviews from a specific time window, add reviewsNewerThan in YYYY-MM-DD format. The scraper automatically switches to newest sort and stops as soon as it hits an older review, so the run is fast and cheap:
{
"searchStrings": ["cafes in Berlin"],
"maxResultsPerQuery": 50,
"includeReviews": true,
"reviewsNewerThan": "2026-06-01"
}What the review object looks like
Every entry in user_reviews has the same shape:
{
"name": "Marie Dupont",
"profile_link": "https://www.google.com/maps/contrib/114798109881286611060",
"rating": 5,
"text": "Excellent cuisine, warm atmosphere.",
"published_at": "2025-12-10",
"response_from_owner": null
}The parent record also includes reviews_per_rating, a breakdown of the full-history review distribution across the five stars. This is included in the base place-scrape (no per-review fee) and is useful for computing average sentiment cheaply when you don't need individual review text.
What it costs
Pay-per-event pricing. Three charge events:
- Place scraped: $0.001 per place (FREE / BRONZE tier). $0.00075 per place on GOLD, PLATINUM, and DIAMOND (25% cheaper). Includes all 30+ fields per place.
- Review extracted: $0.0003 per review, only when
includeReviewsis on. Same price across all tiers. - Actor start: $0.00005 per GB of memory used at start. Trivial for typical runs.
Concrete examples on the FREE tier:
- 50 places with 10 reviews each: $0.20 ($0.05 places + $0.15 reviews).
- 1,000 places with 25 reviews each: $8.50 ($1.00 places + $7.50 reviews).
- 1,000 places with no reviews: $1.00.
For comparison, Google's Places API charges roughly $17 per 1,000 place-detail requests and caps reviews at 5 per place. For 1,000 places with 10 reviews each, this actor costs $8.50 versus Places API's ~$17 (and you get up to your chosen review cap, not just 5).
FAQ
How many reviews can I extract per place?
As many as Google has for that place. The maxReviewsPerPlace parameter controls the cap on your side. Set it to 0 for no cap and the actor will pull every review Google exposes. Note this scales linearly with cost at $0.30 per 1,000 reviews.
Do reviews cost extra?
Yes. When includeReviews: true, each review extracted is billed at $0.0003 (that is $0.30 per 1,000 reviews). The base place-scrape rate ($1 per 1,000 places) covers rating summaries and the star-distribution breakdown, but individual review objects are the review add-on's job.
How fresh are the reviews?
Every scrape hits Google Maps live. Reviews are as fresh as what Google is currently showing at the moment of the request.
Can I use this to monitor my competitors' reviews?
Yes. Set reviewsSort to newest and reviewsNewerThan to the date of your last check. Run on a schedule to get only the new reviews since your last run.
Is scraping Google Maps reviews legal?
Reviews on Google Maps are publicly visible data. Scraping public data is generally permitted in most jurisdictions, though the specifics depend on where you and your users are located and what you do with the data. GDPR applies when review authors are named. Consult a lawyer for specific compliance questions.
Related resources
- Google Maps Scraper on Apify: full actor documentation, all input parameters, complete field reference.
- NanoScrape actor page: quick-reference specs, pricing, use cases.
- How to Scrape Google Maps with n8n: n8n workflow tutorial for the same actor, with a downloadable template.