Review Audit reads a Google Maps place's newest reviews, pulls the full Google history of the reviewers worth a closer look, and tells you how much of the rating the place's own reviewers can explain. What they can't explain gets set aside, and you see the rating without it. It is open source, runs on your machine with your own SerpApi key, and costs about 42 credits a place.

What an audit looks like

Each place you read gets one page: the verdict, the rating without the reviews it can't explain, and the evidence.

An audit of Gull Rock Dinner Cruise, an invented place from the demo
An audit of Gull Rock Dinner Cruise, an invented place from the demo

Every place in these screenshots is invented. Review Audit ships a demo that puts made-up businesses with made-up reviews on real Portland, Maine streets, so the images show the real tool without pointing at a real business. More on that at the end.

Why you can't spot a fake review by reading it

Every business with a rating has an incentive to improve it, and there is a market that will help. On the place page, a review that was paid for or asked for looks exactly like a real one: five stars, a name, a date.

They don't look the same in aggregate. Padded reviews tend to come from accounts that have never reviewed anything else. They arrive together, in office hours, minutes apart. They say the same thing in the same words. None of that is visible from one review, and all of it is visible from 200 of them plus the history of the people who wrote them. That is what Review Audit reads.

What it looks for

Each pattern is measured against the place itself, not against a global rule. A busy lunch spot that gets 30 reviews on a Saturday is not suspicious; a dentist that gets 30 in a week when its normal week is four is.

First-time reviewers

Reviewers with no record like it more than anyone else. Review Audit compares how often first-time accounts give five stars against accounts with 4 to 50 reviews, at the same place. The gap is the finding, not the count. A famous place gets plenty of first reviews; a place where first reviews are five stars far more often than everyone else's has something to explain.

A week with too many five-star reviews

A week carried far more five-star reviews than the place gets. Judged against the place's own median week, and flagged only when it is both at least 2.5 times normal and very unlikely by chance.

Five-star reviews minutes apart

Five-star reviews arrive in batches, minutes apart. More pairs within ten minutes than the hours people actually post at would predict, so a lunch rush is not mistaken for a batch upload.

The same waiter, over and over

Reviews that name the same member of staff, posted in pairs after dinner by people with the same surname, are a different kind of padding: reviews asked for at the table.

Repeated wording and shared reviewers

Reviews that say the same thing in the same words, and groups of accounts that keep reviewing the same places. Two accounts that share other places are usually a couple. Review Audit needs three.

Almost no four-star reviews

Nobody ever gives it four stars. Real places collect a four-star tail: the customer who enjoyed it but waited too long. A wall of fives with nothing beside it means someone is choosing who gets asked.

What it does with what it finds

None of these condemns a single review on its own. What gets set aside is only the excess over what the place's own reviewers explain, and every review set aside is listed with a link back to Google, so you can disagree.

The audits so far, most padded first
The audits so far, most padded first

What the reviews say

Below the findings, each audit also reads the reviews for what they say: what people praise and what they complain about, food/service/atmosphere sub-ratings with and without the set-aside reviews, the hours people post at, where else the reviewers go, and how often the owner replies.

What the reviews say: praise, complaints, sub-ratings and the hours people post at
What the reviews say: praise, complaints, sub-ratings and the hours people post at

Each audit is a single self-contained HTML file, so it can be kept, compared and shared.

Try it in 5 minutes

To install Review Audit, you can use uv tool install command as follows:

uv tool install git+https://github.com/serpapi/reviewaudit
reviewaudit serve

That opens the app. Paste your key from serpapi.com/manage-api-key, search for a place, and press Read the reviews. The free plan's 250 searches a month read about five places.

Searching Google Maps from the app
Searching Google Maps from the app

The read runs in the background and shows each stage, so you can watch where the credits go:

A read in progress, one stage at a time
A read in progress, one stage at a time

There is a CLI too:

export SERPAPI_KEY=...
reviewaudit "<place name> <city>"

How it uses SerpApi

Three SerpApi engines, about 42 calls:

step engine what it gives
1 Google Maps API the place, its photo, hours and Google's lifetime star counts
2 Google Maps Reviews API ×10 the 200 newest reviews, each with the reviewer's review count, Local Guide status, photos, sub-ratings and an exact timestamp
3 Google Maps Contributor Reviews API ×30 everything the reviewers worth checking have ever reviewed

The cheap checks run first, so the 30 paid record lookups go to the reviewers they point at. Every response is cached, so re-reading a place or rebuilding its page costs nothing.

If you build on these APIs yourself

A few things worth knowing:

  • The contributor engine returns relative dates only ("a week ago"); the reviews engine has iso_date. So timing patterns come from the place's reviews, and a reviewer's record is used for what they reviewed, not when.
  • user.reviews on a review counts written reviews. The full record also has rating-only entries, so an account that says "1 review" can have 19 ratings behind it. Review Audit trusts the record.
  • The first page of reviews is 8, the rest 20.

What it can't tell you

It reports patterns worth a closer look, not verdicts on individual reviews, which is why every verdict reads "looks". It also has blind spots, and each audit prints them:

  • A place where everyone gives five stars looks the same whether they mean it or not. A flat 95% is not evidence; the gradient across account depth is.
  • A first review at a famous place is normal. A thin account alone never counts.
  • Hotels carry Tripadvisor and Trip.com reviews with no Google account behind them. Those are left out, and the page says how many.
  • 200 reviews at a very busy place can be two weeks. The audit says so when the window is short, and --reviews 600 reads further back.

About those screenshots

Running a tool like this against real businesses and publishing the results is a different thing from building it. So the repo includes tools/demo.py: a fake Google Maps that answers the same three engines in the same shapes, for businesses that don't exist (every name was checked against Google Maps) on real Portland streets, with invented reviews and reviewers. The padding is written in on purpose, a burst here, a waiter named over and over there, and the real Review Audit finds it. Every image in the README file and in this post comes from it.

Get the code

The code is on GitHub. Issues and pull requests are welcome, especially new patterns with a rationale behind them, and staff-name and stop-word lists for languages beyond English and Turkish.

If you don't have a key yet, the free plan is 250 searches a month, enough for about five places.