Google Maps reviews scraper

A Google Maps reviews scraper reads public reviews for one business ID: text, rating, date, author and owner response, up to 100 per page. Export that page, or read it through the API.

Before you run · Live research requires a configured data source. Sample data is clearly labeled. Paid plans are not available yet.

What is a Google Maps reviews scraper?

A Google Maps reviews scraper reads public reviews for one business ID: text, rating, date, author and owner response, up to 100 reviews on a page. It does not search by category. Export that page, or request another page with its own budget.

Fields in each review

Fields vary by review. A field appears only when the data source returns it, and an empty field is not proof that the information does not exist.

How to export Google Maps reviews

  1. Choose the business

    Search in Explore, open a business and choose Review collection under Prepare a follow-up task. You can also choose Review collection and paste a business ID.

  2. Set the page, then run

    Choose the review ordering, an optional review text filter and up to 100 reviews. Check the maximum units, then run.

  3. Fetch more pages and export

    Open Result pages to fetch one more page at a time, each with its own budget. Download CSV, Excel, JSON or JSONL, or combine the pages in one full-chain export.

To run the Google Maps reviews scraper for several businesses, select them in Explore and choose Collect reviews for the selection in Bulk research. Each business becomes one task under one total budget.

Google Maps reviews API

The Google Maps reviews scraper also works over the API: create a review task with a business ID and an explicit unit budget, then read the reviews page by page. Reading stored reviews never runs new research.

In an MCP client, use estimate_job, then create_job with a stable idempotency_key and max_units, and read with get_job_results. For the next page, preview_provider_continuation returns the exact task to authorize.

curl -X POST https://mapsscraper.dev/api/v1/jobs \
  -H "Authorization: Bearer $MAPSSCRAPER_API_KEY" \
  -H "Idempotency-Key: reviews-sample-business-001" \
  -H "X-Max-Units: 1" \
  -H "Content-Type: application/json" \
  -d '{"kind":"reviews","business_id":"sample-business-id","limit":100,"review_options":{"sort_by":"newest"}}'

HTTP/1.1 202 Accepted
{"id":"6f1c2b3a-0000-4000-8000-000000000000","status":"queued","reserved":1}

curl "https://mapsscraper.dev/api/v1/jobs/6f1c2b3a-0000-4000-8000-000000000000/results?offset=0&limit=100" \
  -H "Authorization: Bearer $MAPSSCRAPER_API_KEY"

Sample response, shortened. Values are illustrative, not real business data.

{
  "items": [
    {
      "review_id": "sample-review-id",
      "business_id": "sample-business-id",
      "review_text": "Friendly staff and a short wait.",
      "rating": 5,
      "review_language": "en",
      "author_name": "Sample Reviewer",
      "owner_response_text": "Thank you for visiting.",
      "like_count": 2,
      "_source": {
        "provider": "live_maps",
        "fetched_at": "2026-11-01T12:00:00Z"
      }
    }
  ],
  "count": 1,
  "offset": 0,
  "next_offset": null,
  "provider": "live_maps",
  "coverage": "bounded_sample",
  "fetched_at": "2026-11-01T12:00:00Z"
}

Arguments for the MCP create_job tool

{
  "task": {
    "kind": "reviews",
    "business_id": "sample-business-id",
    "limit": 100,
    "review_options": {
      "sort_by": "newest"
    }
  },
  "idempotency_key": "reviews-sample-business-001",
  "max_units": 1
}

Python example

Run the Google Maps reviews scraper from Python: create a review task, wait for it to finish, read the reviews, then preview the next page. Submitting that page is a separate paid task.

import os
import time
import uuid

import requests

API = "https://mapsscraper.dev/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['MAPSSCRAPER_API_KEY']}"}


def run(task, units):
    # Keep the key: a retry of the same page must send it again.
    key = str(uuid.uuid4())
    job = requests.post(
        f"{API}/jobs",
        json=task,
        headers={**HEADERS, "Idempotency-Key": key, "X-Max-Units": str(units)},
        timeout=30,
    )
    job.raise_for_status()
    job_id = job.json()["id"]
    while True:
        status = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS, timeout=30).json()["status"]
        if status not in ("queued", "running"):
            return job_id, status
        time.sleep(5)


task = {"kind": "reviews", "business_id": "sample-business-id", "limit": 100,
        "review_options": {"sort_by": "newest"}}
units = requests.post(f"{API}/estimate", json=task, headers=HEADERS, timeout=30).json()["units"]
job_id, status = run(task, units)

if status in ("completed", "partial"):
    page = requests.get(
        f"{API}/jobs/{job_id}/results",
        params={"offset": 0, "limit": 100},
        headers=HEADERS,
        timeout=30,
    ).json()
    for review in page["items"]:
        print(review.get("rating"), review.get("review_text"))

    # The next source page is a separate paid task: preview it, then submit
    # its exact task only if you need it.
    preview = requests.get(f"{API}/jobs/{job_id}/continuation", headers=HEADERS, timeout=30).json()
    if preview["available"]:
        run(preview["task"], preview["units"])

Export formats

CSV

Opens in any spreadsheet. Text that starts with =, +, - or @ is prefixed with an apostrophe, so a spreadsheet does not run it as a formula.

Excel (XLSX)

A workbook for Excel or Google Sheets, for results up to about 5 MB. Use JSON Lines for larger results.

JSON

The complete result with each record’s source, fetch time and the task’s coverage.

JSON Lines

One review per line, for large files and data pipelines.

Cost and limits

In the Google Maps reviews scraper, each page of up to 100 reviews reserves one unit, however many reviews it returns. Failed, cancelled and uncertain tasks charge nothing. Reading, exporting and combining pages you already have uses no units.

A chain of pages for one business stops at your workspace page limit, 20 pages by default and at most 100, or when the data source has no next page.

Pricing

Resources

Google Maps reviews scraper questions

Documentation
Is this the Google Places API?

No. MapsScraper.dev is an independent service and is not affiliated with Google. Results come from a third-party business data source and use our own JSON format.

How many reviews can I collect for one business?

Up to 100 reviews per page. Each further page is its own task and budget, until the data source has no next page or your workspace page limit is reached. A business can show more reviews than the data source returns.

Is it legal to scrape Google Maps?

We cannot give legal advice. Whether collecting and using business data is lawful depends on where you are, what you collect, why you use it and the terms that apply. Public availability alone does not establish permission to store, resell or contact people. Read our data policy

Your next list starts with a place.

Explore the workflow with labeled sample records, then connect your workspace for live research.

Explore a sample