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.

Difficulty: Beginner
Time: 5 minutes
Cost: $1 per 1,000 places + $0.30 per 1,000 reviews (FREE tier; Business/GOLD tier is 25% cheaper on places)
Tools: Apify, any HTTP client
Try it on Apify → See the actor page

In this tutorial

  1. What you will build
  2. Prerequisites
  3. Step 1: Get your Apify API token
  4. Step 2: Enable reviews in the input JSON
  5. Step 3: Run it and inspect the reviews
  6. Sort and filter reviews
  7. What the review object looks like
  8. What it costs
  9. FAQ

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

STEP 1

Get your Apify API token

  1. Open the Google Maps Scraper and click Try for free.
  2. Sign up with Google or email.
  3. Click your avatar (top right), open Settings, then Integrations.
  4. Copy the Personal API token.
STEP 2

Enable reviews in the input JSON

The reviews feature is controlled by three input fields. Only the first is required.

Minimal working input:

{
  "searchStrings": ["restaurants in Paris"],
  "maxResultsPerQuery": 20,
  "language": "en",
  "includeReviews": true,
  "maxReviewsPerPlace": 10
}
STEP 3

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.

Tip: for larger jobs (more than a few hundred places) use the async endpoint at /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:

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:

Concrete examples on the FREE tier:

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

Try the scraper on Apify → See all NanoScrape actors