How the scoreboard is scored

Rubric version 3.0.0. Every score on this site states the rubric that produced it.

Where these businesses come from

One query per market to the Google Places API text search endpoint, phrased as the trade and the city, for example "pest control in Tucson, AZ". What comes back is Google's business listings, the records behind Maps, and not the page of web results a person gets from a Google search box. The two overlap; they are not the same set.

Two consequences worth knowing. That endpoint returns at most 60 listings for a query however large the market is, so no scoreboard here is a census. And service-area businesses with no storefront are asked for explicitly, because in the trades a great many plumbers and pest controllers have no address to list, and leaving them out would make "every business in this trade" straightforwardly false.

Pillars

PillarWeight
Reputation30%
Findability25%
Content20%
Trust10%
AI visibility15%

What we measure

How a score is computed

Each pillar is scored 0 to 100, multiplied by its weight in the table above, and added up. Every failed table stake then takes 12 points off that total, and the result is floored at 0. No term in the arithmetic reads the other businesses in the market, so a score describes one business and rank is where the comparison lives.

Rank is position in that order, highest total first, and the sort is stable: rows holding an equal total stay in the order the Places query returned them in. That order is not a measured difference. It affects a real share of this site: 1,990 of the 11,972 rows published here (16.6%) share a total with another row in their own market, across 826 groups of equal scores. Those rows are marked on the market table and on their own page.

Findability, content and trust are each the share of that pillar's own checks that pass, as a percentage. Findability has 4 checks, content 5 and trust 2, so one failed content check costs 20 points of that pillar. Every check a business fails is listed on its own page, so the count can be redone there.

Findability, content, trust and AI visibility are all read from the business's website. Where this scan could not read one, all four score 0 and the scorecard says so: that is an absence of data rather than a measurement. Since 2026-09-03 a listed site that could not be read also fails the working-website table stake, below. A business with no website on its listing, or a listing whose address is not a usable URL, fails no table stake, because there was never a site to check.

AI visibility is the share of its checks that pass, with one further rule: when the site a business's Google listing points to disallows any of the tokens above in its robots.txt, of either kind, this pillar is held at 25 however many checks pass. That is why a scorecard can print 25 above a row of mostly passing lights. Every page where that cap changed the number says so on the page.

Reputation is 30% of every score and is pure arithmetic on two figures Google publishes, the star rating and the review count. In full:

Those constants are the rubric. They move only with a rubric version, and every page that prints a score names the version it was scored under.

Two readings counted in two pillars

AI visibility is 6 checks, and two of them read something a check in another pillar has already read. Both pillars count the result, so those two readings move the total twice. That is what the rubric does. It is set out here because a reader working from the weights table alone would compute the wrong cost for either one.

Nothing else in the rubric is read twice. Where a scorecard lists what the top competitors do that a business does not, each of these two findings is printed once rather than under both names.

Table stakes

HTTPS, mobile readiness, a tappable phone number and a visible booking path are the floor rather than an achievement, so passing them earns nothing and failing one costs 12 points. They are common, not universal: of the 8,121 businesses on this site whose website this scan could read, 1,672 (20.6%) fail at least one. By check: Tappable phone number 1307, Clear booking or quote request 720, Secure connection (HTTPS) 276, Mobile-ready 202.

A listed website that does not load is a fifth failed stake, working website, and costs the same 12 points. Until 2026-09-03 it cost nothing: a site nobody could load carried no table stakes at all, while a site that merely lacked HTTPS lost 12, so the worse outcome scored higher. Correcting that moved 121 of the 1,146 scored rows then on the site. The stored scans were not re-run; the correction is applied when a page is built, so every score that moved can be traced to this one rule.

When a site does not load

Each site gets one paced request. Requests are paced by the server's address rather than by its name, because several businesses can share one machine and a burst at it earns a refusal the businesses did not cause. A transient failure (a connection that drops, a timeout, or a status in the 408, 425, 429, 500 to 504 range) is retried, honouring any wait the server asks for. An answer is never retried: a 404, a 403 and a broken certificate are what the site said, and asking three times does not change them.

Every failure keeps its own reason, and the scorecard prints it. A domain with no DNS record is reported as that, not as a network error. A server that refused this scanner with a 429, 403 or 409 is reported as refusing, since a status is proof a server is there, and the scorecard says the finding is inconclusive; it still scores as a failed website, which is the one place this rubric may be penalising a business for our own traffic. Until 2026-09-02 there was no retry and no pacing, and two scans of the same markets hours apart disagreed about which sites were down: 20 failures were the scanner's own, 8 remain after the fix, and 9 turned out to be listed domains that do not exist.

Limits worth stating

Corrections

Every figure here comes from a public source, and the formula that turns those figures into a score is set out above with its constants. If something is wrong, it gets corrected and the scan is re-run. Report one at team@mainstreetscoreboard.com. There is no charge, and a correction never depends on buying anything. Who makes this.