# We ran our audit on 5 AI-visibility vendors. One passed.

> We pointed our 5-signal GEO checker at five companies that sell AI-visibility tracking. Scores: 100, 70, 55, 55, 40. Four fail their own medicine — and the failures are the same ones we see everywhere

Source: https://geoplaybooks.com/blog/2026-07-12-vendors-own-audit/

# We ran our audit on 5 AI-visibility vendors. One passed.

On July 12, 2026 we pointed our [5-signal checker](/check/) at five companies whose product is AI-visibility tracking. The scores came back **100, 70, 55, 55 and 40 out of 100**. One vendor passes cleanly; four fail parts of the audit they'd flag on a client's site. We're not naming them — the point isn't a scoreboard, it's what the failures teach.

For calibration: geoplaybooks.com itself holds **5/5 PASS** on the same signals — verified signal-by-signal the same day (200 + ~20,000 chars of server-rendered text, explicit AI-bot allowances in robots.txt, a spec-valid llms.txt with 100% described links, an Organization/Person/WebSite entity graph, and answer-first structure under every H2). We eat the medicine we prescribe.

## What the five probes found

> 4/5 vendors fail at least one signal 3/5 serve no llms.txt at all 4/5 have no JSON-LD on the homepage

The anonymized breakdown:

- **Vendor A — 100/100.** The exception that proves it's doable: a spec-valid llms.txt with 180 described links, clean schema, answer-first pages.

- **Vendor B — 70/100.** Ships an llms.txt, but it's a junk export: 86 links, **2% with descriptions**. A file that exists and says nothing is a map with no street names.

- **Vendors C and D — 55/100 each.** No llms.txt, no JSON-LD schema. Engines can fetch their pages but can't classify who they are.

- **Vendor E — 40/100.** A client-rendered marketing site: almost no server-side text, no H1/H2 structure a bot can segment, and /llms.txt answers with an HTML page instead of a file.

> Dogfood test · July 12, 2026 Five AI-visibility vendors on our 5-signal checker — one passes geoplaybooks.com (us) 100 Vendor A 100 Vendor B 70 Vendor C 55 Vendor D 55 Vendor E 40 Same five probes as the free checker · vendors anonymized · reproducible on any domain in ~20s.

Every result is reproducible — run any domain through the [free checker](/check/) and you'll see the same five probes we used (they're also callable by AI agents via our [MCP server](/blog/2026-07-12-mcp-server/)).

## Why do visibility vendors fail visibility audits?

The pattern matches what we see across all logged runs, not just vendors. In [Checker Finds #1](/blog/2026-07-12-checker-finds-1/), 13 of 13 domains passed robots.txt — and more than half failed schema. The gap is organizational, not conceptual: robots.txt is a one-line decision, while entity schema and server-side rendering are engineering work that marketing sites — often single-page apps shipped by growth teams — rarely get budgeted for. Knowing the playbook and shipping the playbook are different jobs.

There's a useful lesson in Vendor B, too: **an llms.txt is not a checkbox.** The spec's one-line descriptions are the whole point — they're what lets a crawler decide whether to fetch a page without fetching it. An export with 2% coverage technically "has llms.txt" and practically has nothing.

## The 5-minute version for your own site

- Fetch your homepage with `curl` — if the response has almost no text, retrieval bots see the same emptiness. (Fix: server-side rendering; our [GEO playbook](/generative-engine-optimization/) covers it.)

- Check robots.txt **and** your WAF — the block that matters usually lives at the CDN layer, invisible in robots.txt ([AI crawler playbook](/ai-crawlers/)).

- Lint your llms.txt with the [validator](/tools/llms-txt-validator/) — aim for 100% described links, not mere existence. No file yet? The [generator](/tools/llms-txt-generator/) builds one in the browser.

- View source and search for `application/ld+json` — no Organization/Article schema means engines can't classify you.

- Read the first paragraph under each H2 aloud: if it isn't a self-contained 40–80-word answer, it won't be extracted.

Or let the machine do it: the [checker](/check/) runs all five in about 20 seconds, and the audit ladder [starts at $49](/audit/) when you want the page-by-page version.
