DEV Community

Cover image for A Google Maps Reviews Scraper for Reviewer History: Vet Any Contributor in 2026
Truffle Pig Data
Truffle Pig Data

Posted on

A Google Maps Reviews Scraper for Reviewer History: Vet Any Contributor in 2026

Most review tooling asks "what do people say about this place?" The more interesting question, for fraud work anyway, is "what else has this person reviewed?" On Google Maps that history is public on every contributor profile, and completely unqueryable: you scroll, you squint, you give up around review forty. The Google Maps Contributor Reviews API on Apify turns a contributor ID into that full history as structured JSON.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Can you get reviewer history from Google's official API?

No. Google's official Places API returns a small sample of reviews per place and offers no per-reviewer endpoint at all, so there is no sanctioned way to ask "show me everything this contributor has written." The reviewer axis simply is not exposed. A scraper-as-API is the only practical route: give it the long number from a contributor profile URL, get back one row per review with the reviewer's profile attached.

What the Reviewer History API returns

The Google Maps Contributor Reviews API returns every review a contributor has left as JSON rows: rating, text, date, likes, the place reviewed, and the reviewer's Local Guide profile.

Field Example Notes
contributor_name Matt Moeini With contributor_level and contributor_points
contributor_local_guide true Local Guide status
contributor_contributions { "reviews": 32, "photos": 120 } Profile totals
rating 5 Per review, with likes
snippet "Great little spot, the service was excellent..." The review text
place_info { "title": "Le Petit Marcel", "type": "Restaurant", "gps_coordinates": {...} } What was reviewed, with coordinates

The coordinates in place_info matter more than they look: string fifty of them together and you have the reviewer's geographic footprint.

Who this is for

Trust-and-safety and fraud analysts who vet suspicious five-star clusters. Reputation researchers checking whether a rival's glowing reviews come from real locals. And data journalists or OSINT-minded folks studying how review activity actually behaves. If that second group sounds like you, be a good citizen: this is public data, use it proportionately.

The manual way, and where it breaks

You can open a contributor profile and scroll. The feed loads lazily, so a 200-review history means minutes of scrolling, and there is no copy that preserves structure, so you end up screenshotting. Automating that scroll yourself means a headless browser, session juggling, and markup that changes whenever Google feels like it. The reviewer page is one of the least stable surfaces I have scraped, which is why I stopped scraping it by hand.

The faster way: run the reviewer history scraper

Apify Console

  1. Open the Google Maps Contributor Reviews API and click Try for free.
  2. Paste a contributorId, the long number from any reviewer profile URL, and set maxResultsPerContributor.
  3. Run it and export the history as JSON, CSV, or Excel.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~google-maps-contributor-reviews-api/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "contributorId": "107022004965696773221", "maxResultsPerContributor": 50 }'
Enter fullscreen mode Exit fullscreen mode

Endpoint reference: the Apify API docs.

Profile a reviewer in Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/google-maps-contributor-reviews-api").call(
    run_input={"contributorId": "107022004965696773221", "maxResultsPerContributor": 50}
)

for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    place = review.get("place_info", {})
    print(review["rating"], place.get("title"), place.get("type"), review.get("date"))
Enter fullscreen mode Exit fullscreen mode

Batch mode exists too: pass contributorIds as a list and profile a whole set of reviewers in one run.

Pull a full review history

The base task, ID in and every public review out: Get a Google Maps reviewer's full review history.

Vet a reviewer for fake-review signals

Rating distribution, burst timing, and category patterns fall out of the rows directly. Start with Vet a Google reviewer and spot fake review signals or Audit a Local Guide's reviews.

Read the geographic footprint

Because every row carries coordinates, geography becomes computable: check a reviewer's geographic coherence, estimate their home region, map the footprint, or tell if they are local or traveling. A reviewer whose "local favorites" span four continents in one month is telling you something.

Export to whatever your pipeline eats

Format-specific tasks cover the common targets: CSV, Excel, JSONL for data pipelines, and even RSS if you want a reviewer as a feed.

Ask Claude to vet a reviewer over MCP

Exposed through the Model Context Protocol, the Actor becomes a tool Claude, Claude Code, or Cursor can call, so "pull this contributor's history and flag anything odd" happens in one conversation with real rows behind it. More on Claude at claude.ai.

FAQ about scraping Google Maps reviewer data

How is this different from a regular Google Maps reviews scraper?

A place-reviews scraper answers "what do people say about this business." This scraper flips the axis: everything one person has reviewed, across every place. For fraud and vetting work the reviewer axis is the one that matters, and almost nothing else exposes it.

What does the reviewer history scraper cost?

A $0.001 start fee plus $0.0015 per review on the free plan, cheaper per review on paid plans. Fifty reviews cost under a dime, you only pay for reviews actually returned, and maxResultsPerContributor caps the spend.

How do I run the scraper against one reviewer from Python?

Call johnvc/google-maps-contributor-reviews-api with apify-client and a contributorId, as in the snippet above, then iterate the dataset. Each item is one review with the profile fields repeated, so no joins are needed.

Can Claude use this reviewer scraper through MCP?

Yes. Connect the Apify MCP server and the Actor appears as a callable tool in Claude, Claude Code, and Cursor, which turns reviewer vetting into a prompt.

Can I schedule the scraper to monitor a contributor?

You can. Save the ID as a task, attach an Apify schedule, and each run appends the newest reviews, giving you a change log per reviewer. Start from the Google Maps Contributor Reviews API.

What will the scraper never return?

Anything Google does not show publicly: private or removed reviews, precise timestamps (dates arrive as "2 months ago" style strings), and histories beyond the 200 most recent reviews per contributor. Profiles with hidden activity return what is visible, which may be nothing.

More from Truffle Pig Data

The natural companions: the Google Maps Reviewer Geo Profile API automates the home-region estimate from the same histories, the Google Maps Places API surfaces the businesses and contributor IDs to feed in, and the Yelp Reviews API cross-checks a reputation story on a second platform.

Wrapping up

Reviewer history is the review data nobody exposes, and it is the layer where fake-review patterns actually live. Feed one contributor ID to the Google Maps Contributor Reviews API and read a reviewer the way a fraud analyst does.

Top comments (0)