Every number on the research page comes from one of two places: our own sampling pipeline, or the pilot data file we publish. This page names both, lists the steps that turn an answer into a row, and states the three limitations we know about.
Sources
The table lists the sources used by the pages that carry a “Last verified” line. The first three are this site's own records; the fourth is the model documentation for the API used by the free check and the pilot.
| Source | URL | Used for | Last checked |
|---|---|---|---|
| VisibleDiagnostic method note | visiblediagnostic.com/method/ | Sampling rules, stability labels, free-check proxy, disclosure | 2026-11-02 |
| Pilot data set (raw CSV) | visiblediagnostic.com/assets/data/ai-visibility-variance-pilot-2026-11-01.csv | Every set, Jaccard value, top-1 and count on the research page | 2026-11-02 · shipped with this build |
| VisibleDiagnostic privacy page | visiblediagnostic.com/privacy/ | 180-day contact retention and 120-day event counters quoted on the homepage | 2026-11-02 |
| Perplexity API model documentation | docs.perplexity.ai/docs/agent-api/models | Model id and API surface for the free check and the pilot | 2026-11-02 |
The CSV is a new file in this build, so its URL starts returning 200 when this build is live; the other three URLs returned 200 on 2026-11-02. No external publication is used to produce a number: the data is first-party by design, and the research page says so.
How it works
- Free check.
api/check.jsturns the brand, category, audience and up to two competitors into three questions, sends each toperplexity/sonarthrough OpenRouter once, and scores the result with100 × (0.65 × mentionRate + 0.15 × citationRate + 0.2 × positionScore). The answers are rendered in the browser and are not written to the lead store. - Paid diagnostic. Ten buying questions are agreed at kickoff and asked three times each in logged-out sessions over three days: 30 dated answers. Mentions, positions and citations are read and classified, then the same questions are re-run at day 60. The method note lists the labels and the things the report will not claim.
- Pilot sampling. 5 categories × 3 question types = 15 queries; each query is run three times, giving 45 answers. The sampling script and the answers are the internal record; the published CSV is the derived table, and the research page is generated from it.
- Brand-set extraction. For each category the run script holds a fixed six-name candidate list. Each answer is searched case-insensitively for those names; a brand joins the set once if it appears at least once, and its first character position determines order. Brands outside the list are not counted. This is the step that makes the sets reproducible and the step that limits them.
- Jaccard and top-1. For each query, the three run sets produce three pairs. Each pair scores
|A ∩ B| / |A ∪ B|; empty-versus-empty is 1.0 and empty-versus-non-empty is 0.0. The per-query mean is the mean of the three pair scores. Top-1 is the candidate with the smallest first-character position; it is “stable” only when all three runs return the same top-1. - Publication check.
scripts/build-eeat-pages.pyreads the CSV, recomputes every set, Jaccard value, top-1 and count, and compares them with the CSV's ownjaccard_mean,top1_stable,identical_setandbrands_countcolumns. A mismatch stops the build; the page is never allowed to drift from the file it links. - Route registration. The same builder appends the new URL to
sitemap.xmlandllms.txtonce.npm run verify(scripts/check-static.mjs) then checks title, description, canonical, one H1, JSON-LD, internal links and sitemap coverage. - Retention.
worker/worker.jswrites lead records with anexpirationTtlof 180 days and event counters with 120 days. Free-check answers are not in either record. The homepage and privacy page quote those values.
Step 2's reading and classification is manual. Step 4's matching is scripted. Neither is presented as more than a dated record of what the sampled surface said.
Known limitations
- This is a record, not advice. The diagnostic reports what an assistant said on the sampled dates. It is not legal, financial or investment advice, and it is not a forecast of traffic, ranking or revenue.
- The primary source is us. The pilot CSV is our own record and its raw answer text is not published, so a reader can re-run the arithmetic but not re-read the wording. The paid diagnostic's workbook is a dated internal record too; ask for the rows behind any number in it.
- Dated by design, stale by nature. The pilot is a single 3-repetition run dated 2026-11-01. The paid audit is dated from its own sampling days. Models, prompts and retrieval sources change; a page that describes the method is not evidence of what an assistant says today.
Corrections go through /corrections/. The pilot's numbers and their limits are on the research page.