What we measure

Whether the engines selected for your report mention and recommend your brand in their answers to approved buyer questions, which competitors they name, and which sources they cite. The free scorecard queries ChatGPT and Gemini. Paid reports use the engines, model versions, question count and passes selected in the configurator. Each stored response is the record of what ran: the report names its engine and model wherever the provider returned that information, and states when it is unavailable. Older reports retain their original answers and model records; their scope may differ from a report ordered today.

Grounding — and why it matters

Every API answer is generated with the engine's live web-search tool enabled, and the model decides whether to use it. An answer is grounded when the engine searched the web or cited a web page for it. It is not grounded when we recorded no search and no cited page, so it may have answered from what it learned in training. If it did, that answer shows what the model remembers, not what a real user sees today. API answers have live search available; a surface read from the consumer product, such as Google AI Overviews or AI Mode, is labeled captured on the report. Neither is a capture of every consumer interface or a personalized result. Each engine's grounding status is labeled on the report, so you always know which one a number came from.

How the audit runs

We generate buyer-intent questions across four types (best-of, comparison, problem-led, category-explainer), which you review and edit before anything runs. Each approved question is asked to each engine three times (AI answers vary between runs); a custom report bought as a single pass asks once, and its report says so. We store every raw answer. A separate extraction pass reads each answer and records which brands were mentioned, in what order, with what sentiment, and which domains were cited.

The metrics

  • Mention rate — share of samples that mention your brand.
  • Share of AI Voice — your mentions ÷ all tracked-brand mentions.
  • Average rank — where your brand appears among named brands, when mentioned.
  • Recommendation rate — share of your mentions that are positive endorsements.
  • Citation share — share of cited sources that are your own domains.
  • Volatility — how much the three passes disagreed; not measured on a single-pass report.
  • Unprompted visibility — mention rate and Share of AI Voice computed only over questions whose text names no tracked brand. A comparison question that names you (or a competitor) leads the engine toward the tracked set, so branded questions are scored separately and can never inflate the unprompted numbers.
  • Source Map — every domain the engines cited while answering, ranked by how many answers cited it, labeled yours / competitor's / third-party. This is the list of sources that actually decide your category's answers — and the ranked outreach list for getting into them.
  • Recognition ladder — mention rate grouped by question specificity, from questions that name a brand down to fully generic category questions. The deepest rung where you're still named is your recognition boundary; monthly re-runs show it moving.
  • New-brand readiness — when unprompted visibility is 0%, the report adds a prerequisites checklist run against your own domain: site reachability, AI-crawler access in robots.txt, schema.org structured data, llms.txt, and whether any answer cited your domain at all.

Dashboard scores

Two composite scores appear on the dashboard. Both are published here in full, because a score whose formula you cannot check is an opinion with a decimal point. Every input is one of the metrics above, under whatever filter the page is showing — but read the scope on each line below before plugging the dashboard’s own numbers in. Two of the three components are measured over the unprompted questions only, and the “Share of AI voice” card is not: that card answers over every question in scope, so it is a different number from the one this formula takes.

Visibility index, 0–100:

visibilityIndex = 100 × Σ(weight × component) ÷ Σ(weight)

  unprompted mention rate   weight 0.5
      over questions naming no tracked brand
  share of AI voice         weight 0.3
      over those same unprompted questions
      (NOT the all-question figure on the "Share of AI voice" card)
  citation share            weight 0.2
      over every source citation in scope, not per answer

A component whose own denominator is empty is dropped and the remaining weights are renormalized — it never contributes a zero, because “we could not measure your citations” is not “you have no citations”. Those denominators are the three the formula names and nothing adjacent: unprompted answers that came back, tracked-brand mentions inside them, and source citations. An engine that failed every unprompted call leaves the first at nought, so the mention rate is dropped rather than read as a rate of zero. The gauge caption names each component that was dropped. The index is refused outright, and reads “insufficient data”, in three cases: fewer than 5 counted answers in scope, no component measurable at all, or fewer than 2 components measurable — renormalizing down to one leaves a single measurement wearing a composite’s name. The tier words are labels on that measured number, at Leading ≥ 75, Strong ≥ 50, Building ≥ 20, Low ≥ 0, and each describes the weighted average of the three. A tier word is shown only when all three components were measured; under renormalization the score stands on its own.

Sentiment score, 0–100 with 50 = neutral:

sentimentScore = 50 × (1 + (positive − negative) ÷ classified)

  classified = positive + neutral + negative

Counted per mention of your brand, not per answer. A mention whose sentiment is absent or off-vocabulary leaves both the numerator and the denominator and is disclosed as unclassified. Below 5 classified mentions the score is refused and reads “insufficient mentions”. The scale stays symmetric even though real answers skew positive — a brand the engines dislike has to be able to score below 50, and the number has to mean the same thing for you as for a competitor.

Average position is the mean first-mention rank across answers that named you; lower is better, and a delta chip shows a rank improvement as an improvement rather than as a negative number. Share of AI voice is zero-sum across you and your run-tracked competitors only. Watch-only brands — scored retroactively from answers already stored — are excluded from it, and every watch-only figure carries the count of answers it was measured across.

AEO health, 0–100, on the Sources page:

healthScore = round(100 × passing ÷ checked)

  checks: site reachable · robots.txt per AI crawler
          (GPTBot, ClaudeBot, PerplexityBot, Google-Extended)
          · schema.org JSON-LD on the homepage · llms.txt / agents.md

A probe that never completed is recorded as unchecked — excluded from both the numerator and the denominator, never a pass and never a fail. Fewer than 3 checked results shows no score at all. These are named checks against your homepage, robots.txt and llms.txt, not a site crawl; the panel prints that scope beside the gauge. When a re-check fails, the panel keeps the last completed results with their timestamp and says the newer attempt failed — it never silently shows stale numbers as current, and never shows a failure as zero.

Monthly re-runs

Subscription audits re-run automatically each month with the same approved questions, so month-over-month movement compares like with like. The report's “Since last audit” section shows Share of AI Voice movement, per-engine mention-rate movement, and every question whose outcome changed. An engine added since the previous run is labeled “new” rather than counted as movement.

Movement is only movement when both runs answered comparable amounts. Failed engine calls are excluded from every rate, so a run that lost part of its corpus to an outage produces rates over fewer samples. Comparing those with a later, fuller run would turn the outage's repair into a “change” — the same lie as counting a failed call as a non-mention. So when the share of answered samples differs by ten points or more, on a whole run or on one engine, we show both counts, mark the move †, refuse to colour it as a gain or a loss, and decline to attribute it. The arithmetic is still printed; only the claim about what it means is withheld.

The assistant

The in-dashboard assistant answers questions about your own stored audit data and nothing else. It is built to quote numbers only from tool calls over the same computed metrics the dashboard renders — under the same filters, with the same sample counts and the same “insufficient data” refusals. It holds no market data, no traffic estimates, and no prompt-volume figures. Where it proposes an action (a fix item, an action plan, a re-run), the action runs only after you confirm it on a card that states what will run — the assistant itself can execute nothing. Its prose is AI-generated; the numbers behind that prose are measured.

Honesty

We invent no statistics. Every number in a report is computed from stored AI answers you (or we, as admins) can inspect. AI answers are probabilistic and change between runs — treat every figure as a dated snapshot, not a guarantee.