2
5 Comments

What a Google Maps reviews scraper taught me about fake stars

I do a fair amount of local research. Vetting a contractor before I hire, or sizing up how a competitor's storefront is really doing. For a long time I did what everyone does: read the star average, skim the top few reviews, move on.

caption

Then I got burned by a profile that looked spotless. A clean 4.7, a couple hundred reviews, nothing obviously wrong. It fell apart only when I clicked into a few of the five-star accounts. Several had reviewed that one business and nothing else, ever. One had left glowing reviews for six unrelated businesses in the same week, in cities hundreds of miles apart. The average never showed me any of that. The reviewers did.

That is the thing a star average hides. It tells you what people said. It says nothing about who said it.

The part that doesn't scale by hand

You can check a reviewer manually. Click the name, wait for the profile, scroll the history, form an impression. It takes under a minute for one person. The trouble is that a suspect profile is never one reviewer, it is a pattern across ten or twenty of them, and you are trying to hold all of that in your head while you scroll. For a business with two hundred reviews you are not going to hand-check the people behind them. And whatever impression you form is gone the moment you close the tab. You cannot sort it, count it, or come back next month to see what moved.

What I actually wanted was the reviewer as data

What I kept reaching for was structured output. One row per review, and behind it the reviewer's own profile: their Local Guide level, their points, how many total contributions they have made, how long they have been active.

Once a reviewer is rows instead of a page you scroll, the questions get boring to answer, which is the point. How many of a business's five-star reviews come from accounts with no other history. Whether one reviewer keeps turning up across a cluster of competing businesses. Whether the timing is bunched into a few days or spread across years. None of that shows up in the average. All of it is obvious once each reviewer is a set of rows you can filter.

Building it was less about the reviews than about the reviewer behind them. Any scraper can grab the text of a review. The signal I cared about sits one level up, in the history of the person leaving it, which is what separates a real regular from an account that exists to post a single rating.

Where it stands

It is public on Apify now as a reviewer-history API. Today it is at 56 users and a bit over 800 runs, and last month it returned somewhere around 160,000 review rows for the people using it. You give it a contributor and it hands back every review that reviewer has left, each with the rating, text, date, photos, and the place, plus the profile stats that tell you whether the account is a fixture or a throwaway.

A run costs a tenth of a cent to start, and every ten reviews it pulls run about a cent and a half, so a heavy reviewer with a few hundred reviews behind them costs well under a dollar to pull in full. I run the profiles I care about on a schedule and let the history stack up, because a single snapshot cannot tell you that a reviewer who was quiet for two years suddenly posted forty reviews last month.

A couple of honest limits, because they matter more than the pitch. You start from a reviewer, not from the open web, so this is for going deep on the people behind a profile, not for scraping all of Google. Some contributors keep their history private, and a review that has been deleted is gone. A brand-new account gives you almost nothing to read, which is a signal in its own right but never proof on its own.

If you want the technical write-up instead of the story, there is one on Dev.to, and a shorter walkthrough on Peerlist.

What I would tell another founder

The lesson that stuck: a star average is a claim, and the reviewers are the evidence for it. A 4.6 built by two hundred Local Guides with years of history is not the same number as a 4.6 built by thirty accounts that appeared last spring and reviewed nothing else. They read as identical until you pull the people apart.

I will leave you with the question I still cannot fully answer. Where is the line? A fresh account leaving one honest five-star review is a real first-time customer. A fresh account planted to pad an average looks exactly the same on day one. When you are weighing reviews, do you even look at the reviewer, or do you judge by the average and the wording? And if you do look, what is your actual tell?

on September 7, 2026
  1. 1

    A first-time reviewer can still give a detailed account of the job. If I were choosing a contractor, the work described and its outcome would carry the most weight for me, with reviewer history as useful context.

    1. 1

      Agreed, and if it read as "discount first-timers" then I overstated it. A specific, detailed first review is real signal, and for a single contractor choice I'd read the actual account first too. Where history earns its keep is the borderline case: a glowing but generic review, or a business whose whole five-star wall is first-timers who never posted again. One thoughtful newcomer is fine. Thirty in the same month is the tell. Do you read the text differently when it's specific versus when it's vague?

  2. 1

    The 160k returned rows suggest people are already going beyond one-off curiosity. Do users actually change a business decision after seeing reviewer-history patterns, or is the current value mostly giving researchers more evidence to investigate?

    1. 1

      from where I sit I can't see downstream decisions, so I'd be guessing if I claimed it flips them. In my own use it's the second thing you said. It rarely hands you a verdict; it flags which profiles are worth reading by hand, and the account that goes quiet for two years then posts forty times is the one I open. The rows are cheap enough that "go investigate" is a low bar to clear. What would make a pattern decision-grade for you, rather than just a flag?

      1. 1

        That “go investigate” use case is interesting. I’d be curious to explore what makes a pattern decision-grade. If you’re open to it, what’s the best email to reach you on?