How the AI visibility score is computed
The score is one number between 0 and 100 describing how often AI assistants name your business when asked questions you should be an answer to. This page defines it precisely enough that you could reproduce it yourself — including where it is weak.
Last updated: August 24, 2026
1.What the score measures
We ask several public AI assistants a set of questions a customer might realistically ask, and we count two things in each answer: whether your business is mentioned by name, and whether your site is cited as a source. The score is the average of those counts across engines, expressed out of 100.
That is the whole idea. It is a measurement of observed behaviour, not a model of it. It does not know why an assistant answered the way it did, and it does not predict what it will answer tomorrow.
What the score is not: a ranking, a guarantee, a prediction of revenue, or anything an AI vendor recognises. Nobody outside Tunnel uses this number. It is useful because it is measured the same way every day, so its movement means something even where its absolute value does not.
2.Which engines we query
Five engines, all of them assistants a customer might actually use, and all of them ones we can genuinely reach:
| Engine | Probe model tier | Citation list |
|---|---|---|
| OpenAI (ChatGPT) | Cost tier | No — mentions only |
| Anthropic (Claude) | Cost tier | No — mentions only |
| Google (Gemini) | Cost tier | No — mentions only |
| xAI (Grok) | Cost tier | No — mentions only |
| Perplexity | Cost tier | Yes — returns source URLs |
Perplexity is the only engine that hands back a list of the sources it used, which makes it the only high-quality citation signal we have. When probes are routed through a single aggregator, that list is not available and citations fall back to your domain appearing in the answer text.
One thing about how we ask matters more than which models we ask. We send every question with web search switched on, because that is how people use these assistants: you ask, and the product looks things up before it answers. So what we measure is what an assistant can find and say about you today, not what a model happened to memorise. Until August 2026 we asked without search, and it made us wrong in one direction only. Putting the same five questions to the same models twice, one business went from being named zero times by three engines to being named by two of them — and the model size made no difference, only the searching did. A scan that under-reports is worse than no scan, because it tells a business it is invisible to assistants that in fact name it first.
Which means a zero from us is still the pessimistic reading, though less so than before August 2026. A zero now says the assistants we asked did not name you when they looked — not merely that a model failed to recall you. What remains of the gap is the consumer product itself, which has personalisation and a ranking of its own that we cannot reproduce. The error still runs in one direction, and it is the direction that makes us look wrong rather than you look bad. The bill is no longer unmeasured: five questions across four engines cost $0.57 with search against $0.205 without, on our own invoice, which is why a repeat check is something your plan schedules rather than something that happens every day.
3.Which questions we ask
Five queries per run, chosen one of two ways:
- From your keywords. If you have attached keywords to the site, we use your top five. This is deterministic, it is your choice of battleground, and it costs no model calls.
- Generated from your own content. Otherwise a model writes five queries from your crawled business identity and FAQ, covering the shapes that trigger AI answers: a definition query, a recommendation query, a how-to about the problem you solve, a pricing query, and a comparison or alternatives query.
Two adjustments are then applied. A branded query is anchored with your domain, because a business whose name is an ordinary word ("Tunnel") would otherwise be answered about something else entirely. And if your business is local, we add one brand-free location query — the question a customer actually asks, with no clue that you exist. That one is the hardest and the most honest.
Every run records the exact queries it used and where each one came from, so a score you disagree with can be traced to the questions that produced it. Both are shown on your own score in the dashboard, together with what each question returned: which assistants answered it, which of them named you, and whether the question already contained your name. That last one decides whether the row can be read at all — an assistant repeating a name we handed it looks identical to one that knew, so those rows are marked unreadable rather than counted as visibility. And a count is always out of the assistants that answered that question: one we hold no key for is left out of the row, never counted as an assistant that did not know you.
Which brings us to the part that is easy to leave out. Whichever of the routes above a question arrives by, the sentence itself is written by a model or by a fixed template of ours. Attaching a keyword decides what a question is about; it does not put the question in a customer's words. No query we send to an assistant is phrased by the person you are trying to reach.
And none of them is evidence that anybody asked. A question can be plausible, or chosen by you, without a single real person ever having put it to an assistant. Making that different means buying search-demand data, and we have not: the licensing terms of the free sources do not permit it, and we will not build a paid feature on a number we cannot cite. We also cannot fill the gap from our own traffic, because we decided not to store the text of what agents ask us.
This is the single largest weakness in the score, and it is not a bug in the calculation — the arithmetic is exactly as described. It is that the questions are a reasonable guess at demand rather than a measurement of it. Treat the score as "how visible am I on these questions", never as "how visible am I to the market".
4.What counts as a mention
Answer text is normalised before matching: Unicode-decomposed, diacritics stripped, lowercased, punctuation flattened to spaces. So *"Cofetăria Bună"* matches *"cofetaria buna"*.
We then look for your brand and for the brand with a trailing legal suffix removed (SRL, S.R.L., LLC, Ltd, GmbH, SA, PFA and similar). Variants shorter than four characters are discarded — a two-letter brand that matches everywhere is worse than no signal.
A single-word brand gets a stricter rule. "Tunnel", "Slack" or "Delta" appear in ordinary sentences all the time, so for these the same answer must also contain a corroborating anchor — your hostname or its distinctive label — before the mention counts. Multi-word names are specific enough to trust on their own.
This is deliberately conservative. A false positive is worse than a miss here: it tells you that you are visible when you are not, and you would stop working on the thing that needs work.
5.What counts as a citation
A citation is stronger than a mention: the assistant pointed at you as a source rather than merely naming you.
- If the engine returned a list of sources, we look for your exact host or a subdomain of it.
- Otherwise we look for your bare domain appearing in the answer text.
Only Perplexity currently returns a source list, so for the other engines a citation means your domain was written out in the answer.
6.The formula
Every engine is asked every query. For each engine we count mentions and citations across those queries, then:
engineScore = ((mentions × 0.6 + citations × 0.4) / queries) × 100
probeScore = mean(engineScore) over the 5 engines
overall = min(100, probeScore + rootLlmsTxtBonus)Mentions are weighted 0.6 and citations 0.4. A single answer that both names you and links you scores the full 1.0 for that query; being named without a link scores 0.6.
rootLlmsTxtBonus is 3 points, awarded when your site serves the llms.txt we generate from your own domain root rather than only from our endpoint. It is a bonus, never a gate: not doing it costs nothing, and it cannot push a score above 100.
Alongside the score we record two rates that are easier to reason about than the composite: mention rate and citation rate, each the percentage of all engine-query probes that hit.
7.Grades
| Grade | Score |
|---|---|
| A | 85 and above |
| B | 65 – 84 |
| C | 50 – 64 |
| D | 35 – 49 |
| F | below 35 |
We publish the bands as they are implemented rather than as they would look best. An A is genuinely hard — it means being named in almost every answer, by almost every assistant — but it is reachable, which it was not before the engine set was cut to the five we can measure.
8.How often it runs
The sweep runs hourly and picks up whatever has passed its own plan's interval. Those intervals are every 3 days on Business and Custom, every 7 days on Pro, and once on Free — a single check when you join, with no repeat. Beyond that schedule, Pro and Business can run a check on demand for one token.
This paragraph used to say the opposite: that every plan ran every 24 hours and that charging for a faster cadence would be selling noise. Half of it still holds — assistant answers do not move fast enough for an hourly check to tell you anything, so nothing here is priced by the hour. The half that was wrong assumed cost did not constrain us. With web search on, one run of five questions across five assistants costs us about $0.89, so a daily check on a free account was $27 a month against no revenue. What changed is the FREQUENCY, not the method: every check still asks with search on, because a cheaper check that under-reports is worse than a rarer honest one.
Every run stores its delta against the previous run, so you can see movement rather than only a level. It withholds that delta whenever the two readings were not taken the same way: a changed formula, a changed set of questions, or a different AI model answering for an engine. You are told which of those it was. A missing comparison is not a comparison of zero.
9.The accuracy audit
Separately from the score, every run diffs what the engines *said* against the ground truth we crawled from your site. It reports three kinds of finding:
- Phone mismatch — an assistant gave a contact number that is not yours.
- Lookalike citation — an assistant cited a domain that resembles yours but is not.
- Uncited mention — you were named with no source attached.
Stubbed responses are excluded from the audit, because an empty answer can only produce fake findings. You are notified when findings first appear, not on every run that re-confirms them.
10.Known limitations
Stated plainly, because you will find them anyway:
- The score covers assistants we can query. An assistant with no public way to ask it a question is not in the score at all. We would rather leave a gap than fill it with a number we did not measure — but it is a gap, and if your customers live on an assistant we cannot reach, the score is silent about them.
- We probe an API, not the consumer product. Since August 2026 we send every question with web search switched on, which removes the larger half of this limitation. It was worth removing: asking without search made us report a business as named by nobody when two assistants named it first, and the model size turned out to be irrelevant — only the searching mattered. What remains is still real. The model behind ChatGPT's web interface is not identical to the one we can call, and the consumer product has personalisation and a ranking of its own that we cannot reproduce. The error still leans the same way, towards showing you as less visible than you are, but by much less than it did.
- Probe models are cost-tier models. We use the cheap tier of each vendor so that scheduled sweeps across every customer stay affordable. A larger model may answer differently — though when we tested it, retrieval decided whether a business was named and model size did not.
- Five queries is a small sample. Scores move for reasons that are noise, not signal. Watch the trend over a fortnight, not the delta between two days.
- Mention matching is textual. An assistant that describes your business perfectly without naming it scores zero, and correctly so — but it is still a loss the number does not capture.
- Citations are mostly unavailable. Four of the five engines return no source list, so their citation counts depend on the model writing out a URL.
- Answers are non-deterministic even at temperature 0.
11.Reproducing it yourself
Nothing here needs our software. Ask five assistants the same five questions, count the answers that name you, count the ones that link you, apply the formula above. If your number differs materially from ours, the queries are the first place to look — they are recorded on every run and visible in your dashboard, each one showing which assistants answered it and which named you. So the comparison is question by question, not one number against another.
We would rather you checked. A score you cannot audit is a score you should not pay for.
12.Changes to this methodology
Changing the formula changes every customer's history, so we treat this document as part of the product. When the calculation changes, this page changes with it and the date above moves.
Questions about any of it: contact@tunnelpowered.com. Related reading: the agent and landline documentation.