How we measure AI visibility
Every number on our dashboards and reports comes from persisted, re-checkable measurements. This page states exactly what we measure, where the numbers come from, what we do NOT measure, and how we handle the run-to-run volatility of AI answers.
What we measure
Four KPIs, computed deterministically from stored answer transcripts. A “scored answer” is an answer an engine actually returned for a tracked prompt this period — the denominators below count real answers, never the configured prompt count.
- Mention rate = answers containing ≥1 brand mention ÷ all scored answers this period.
- Citation rate = answers citing the client’s own domain ÷ all scored answers this period (the same denominator as mention rate).
- Share of answer = brand mentions ÷ (brand + competitor mentions) — the denominator is the combined mention count of the brand and every tracked competitor across the same answers.
- Average position = the mean first-appearance rank of the brand across the answers that mention it; when the brand never appears we report that explicitly instead of a fabricated 0.
Engines measured — and the gaps we disclose
We measure each client’s configured answer engines through their APIs, routed via the OpenRouter aggregator. Engines that exist only as a user interface expose no API to query: they are not measured, and every dashboard view and report names them as an explicit coverage gap — never a silent omission.
What we measure is each engine's API, not its consumer app: the app may personalise, remember earlier turns, use your location, or run a different retrieval stack, so the two can cite different sources for the same question. We query logged out, with no location and no memory, so a reading describes the engine rather than a person using it.
Automated interaction with a consumer UI surface may conflict with that provider's terms of service. Where an operator explicitly opts in, we capture AI Overviews / Copilot at low volume, from the operator's own signed-in browser session, with no captcha solving, proxying or fingerprint evasion, and every such answer is disclosed as UI-captured — never presented as API-measured.
- ai_overviews — UI-only surface, not measured (explicit coverage gap)
- copilot — UI-only surface, not measured (explicit coverage gap)
Cadence
Each client is measured on a fixed cadence — weekly or monthly, set per client. Every KPI, comparison, and delta is scoped to its measurement period, and each report states the period it covers.
Sampling and confidence intervals
Where a prompt is asked more than once in a period, the rate pools every repeat; a per-prompt interval is computed over that prompt's own repeats; an engine's overall rate carries a prompt-clustered interval, which counts each prompt once however often it was repeated, while a cross-engine interval for a single prompt stays withheld because a handful of engines is too few to estimate its spread from; and the Recommended reading is judged on the first repeat only.
AI answers are non-deterministic: the same prompt on the same engine can return a different answer minutes later. A single run is a sample, not a truth.
Repeat sampling is available for core prompts — the highest-value buyer queries — at up to R runs per engine (default 3) where a client has it configured. Where more than one sample per (prompt, engine) pair was actually stored, we report how many of those runs mentioned the brand together with a 95% Wilson confidence interval: the uncertainty range the true mention rate plausibly falls within given that sample size.
Sample size: a single run per (prompt, engine) pair — n=1 — is the default; repeat sampling runs only for prompts a client has flagged as core. Every dashboard and report states the sample size its own figures were computed from, so a confidence interval is never implied where only one sample was stored.
A metric from a single run carries no interval at all — it is labeled “directional — single run”. When a budget stop leaves fewer samples than configured, we state the actual n of R configured runs used — a partial sample is never presented as a full one, and a prompt with no samples yet is marked explicitly rather than shown as 0%.
Why we sample: AI answers are volatile
Independent research documents large run-to-run variance in AI recommendations — the reason a single run is reported as directional rather than as a precise figure, and the reason repeat sampling exists for core prompts at all:
Collection method
Collection method: API-based. We query engine APIs and store the raw transcripts we score — no synthetic extrapolation, and no UI capture other than the opt-in, disclosed case described in the engines section. Any number we publish can be traced back to a stored transcript.
When the client is a person
Some campaigns measure a person, such as a founder or an expert, instead of an organisation. For a person the headline is the Known stage: whether the engines recognise them when asked who they are, and whether they get the facts right. No new metric is introduced for this; the definitions below say how the existing figures read for a person.
- Known rate = recognised ÷ probed answers: of the identity answers the engines actually returned this period, the share that recognised the person. A probe an engine skipped or failed to answer is not in the denominator; it is disclosed as a coverage gap.
- Fact accuracy = correct ÷ (correct + wrong), summed over every fact-sheet item the engines' answers were checked against. A fact an answer neither confirms nor contradicts is absent: absent verdicts stay out of both the numerator and the denominator, and with no correct or wrong verdict at all no figure is shown.
- Namesake flag: an answer is flagged when one of the operator's namesake markers (words that belong to other people with a similar name) appears within 120 characters of the person's name, or anywhere in the answer when the name does not appear. A flagged answer is never counted as recognised: one that names the person reads as confused (or stays not recognised when the engine disowns the name), and one that never names the person stays not recognised. Every flagged answer is shown in the report, so the flag can be checked by a human.
- Owned surfaces = the person's entity home and their listed profiles, nothing else. A citation is owned when its URL is the entity home or a page under its path (the path must match exactly, so example.com/team/jane-doe-2 is not under example.com/team/jane-doe), or when it is exactly one of the listed profile URLs (letter case and a trailing slash are ignored, and a page below a profile is not the profile).
- Shared host: when the entity home is a page on a site the person shares with an organisation, only the entity home and the profiles count as the person's. Other pages on that host are never counted as the person's citations, and host totals are split into the person's own pages and the other pages on the host. An affiliated organisation's site is never counted as the person's own and never as a rival.
- LinkedIn posts are not counted as owned surfaces: only the listed profile URL is owned, and a post is a different page.
- Perplexity cannot read LinkedIn, so a LinkedIn profile can be cited by some engines and not by others. A LinkedIn page is never accepted as the source for a fact about the person, because it cannot be fetched to check it.