How the AI Visibility Score Is Calculated
Every number AEOTrack shows you links here. This page describes the score exactly as the code computes it: which engines are asked, how many times, what counts as a mention, which questions are left out, how one answer becomes a number, how 25 answers become one score, what the ± means, when no score is shown, and what has changed and when.
- Engines and weights
- Why your own chat may answer differently
- Sampling policy
- Which answers count
- Advice-only questions
- What counts as a mention
- Scoring one answer
- From answers to a score
- Worked example
- The other numbers
- The ± range
- Which window each card uses
- When no score is shown
- What is not measured
- Version history
The AI visibility score is a 0 to 100 index of how your brand appears in AI answers to the questions you track. It is not a percentage of anything. A 0 means no answer in your latest check named you or listed your own site as a source. A 100 would mean every engine named you first, cited your site as a source and described you well, on every question. The AEO score (buying questions) and the GEO score (broader topic phrases) share every step below; only what is asked differs.
Engines and weights
Every tracked question is sent, word for word and with no template around it, to each engine on your plan. Every engine is called through its provider's API with live web search on, so the answer is built from pages the engine retrieved that day and not only from what the model memorised in training. Each call is a fresh session: no chat history, no memory and no signed-in account. The engine that answered, the exact provider model, whether the answer was search-grounded and whether it hit the token cap are stored with every answer.
| Engine | Provider and model | Weight | Availability |
|---|---|---|---|
| ChatGPT | OpenAI gpt-5-search-api with web search | 1.3 | every plan |
| Gemini | Google gemini-3.8-flash with Google Search grounding | 1.1 | every plan |
| Claude | Anthropic claude-sonnet-5 with web search | 0.9 | every plan |
| Perplexity | sonar-pro | 0.9 | every plan |
| Grok | xAI grok-4.20 with web search | 0.7 | every plan |
The model in the table is the first choice for each engine. When a provider cannot serve it (an outage, a rate limit, a retired model name), a fallback model from the same provider answers in its place: for example gemini-pro-latest for Gemini, claude-sonnet-4-6 for Claude, sonar for Perplexity, grok-4.5 for Grok, and OpenAI's gpt-5 with its web search tool for ChatGPT. An answer never comes from a different provider. The model that answered is stored with each answer, so a fallback answer can be told apart.
Google AI Mode is switched off by default since 17 October 2026 (version 8): it is not asked, and the answers it gave before stay stored and readable but leave the score, as any switched-off engine's do.
The weights stand in for each engine's share of the people who ask AI assistants questions, so a mention where most people are looking counts for more. They are judgement calls, not calibrated against measured usage: nobody publishes reliable per-engine audience figures, so the ordering (ChatGPT first, Grok last) is our reading of the market and the gaps between the numbers are round. They are the code defaults; a change is annotated on the trend chart and followed by a rescore of the stored answers. An engine that is not on your plan, or that is switched off, is not in your score at all: it is neither counted nor treated as missing.
Why your own chat may answer differently
A check is not a copy of your own chat window, and the two can disagree. This is how a check is run:
- Through the API, in a fresh session. No chat history, no memory, no custom instructions and no signed-in account.
- With web search on. The engine searches the live web for every question.
- With a country hint on some engines. When your account has a country set, ChatGPT, Claude and Perplexity are told that country for their web search. Gemini and Grok take no location in the APIs used here.
- Once per engine per check. One answer is stored, with its date, model and sources.
Your own chat is different in ways a check cannot reproduce. The app you use may remember earlier conversations, knows the account you are signed in to, sees your location, may or may not search the web for a given question, and can run a different model from the API. Small changes in wording change the answer. And the same question asked twice in a row can name different brands, because the engines do not answer the same way every time.
To compare fairly, open a new chat while signed out (or use a temporary chat), type the question exactly as it is tracked, make sure web search is on, and ask more than once. Then open the stored answer in AEOTrack: it shows the full text the engine returned, with the date and the model. If the two still disagree, the stored answer is the record of what was returned on that date, and a manual check gives you a new one.
Sampling policy: one answer per engine per check
It is one live answer per engine per question, with web search on. Each check asks each engine once, at temperature 0.2 (the engines that reject a temperature setting are asked at their default), and the answer is stored whole. Nothing is asked several times and averaged. A scheduled check runs weekly by default; paid plans also check a limited number of pinned questions daily, and the 7-day trial checks every question and topic it tracks daily while you use it. One manual re-check of a question within 24 hours of its last check is free; every other manual check comes out of the plan's monthly allowance of on-demand re-checks.
We used to take three samples per engine per check and we stopped, for a measured reason. Asked the same question three times in the same second at temperature 0.2, ChatGPT returned three byte-identical answers (same hash, same token count), and Gemini's three differed in wording but scored the same. Same-second resampling of a near-deterministic model measures nothing; it tripled the cost and the wall-clock time of every check for no extra signal, and it made the ± band dishonest, because three copies of one answer were being counted as three observations. Dropping to one sample left the score unchanged and widened the range to what the real sample size supports.
The variation that matters to you happens over days, not seconds: the engines re-search the live web and rank a different list next week. That is what the weekly trend measures, and it is why a single check is a reading and the trend is the measurement. The post on why scores change covers how much of that variation is normal, and our study of 8,758 stored answers measures it: where an engine had named a business for a question, the next week’s answer gave the opposite verdict about 1 time in 3, about as often as an answer asked again minutes later.
Which answers count
An answer counts only if the engine returned text and did not cut it off at the token cap. Errored calls (a provider outage, a rate limit) and cut-off answers are excluded whether or not they named you. Until version 5, a cut-off answer that named you was kept and a cut-off answer that did not was dropped, which favoured the engines that cut off most; that is fixed. Since version 8, when an engine's newest check of a question failed, the score uses that engine's last usable answer to the question from the last 90 days instead of dropping the engine, so a provider outage does not read as a fall; a failed answer itself never counts as a 0. Cut-off answers are reported as inconclusive in the engine coverage strip, so you can see how much of an engine's output the score could not use. Below three usable answers no score is shown at all: "not enough data yet" is more honest than a number whose range spans half the scale.
Advice-only questions
Some questions never get a brand in the answer from any engine. "How do I write a privacy policy?" gets a how-to, not a shortlist, and no business is named, yours or anyone's. Until version 6 those answers scored 0 and pulled the headline number down as if you had lost a recommendation you were never in the running for. Since version 6 (27 September 2026) a question whose newest check names no business on any engine is advice-only: it is left out of the headline score, the mention rate and the range, and the count of such questions is shown next to the score so the exclusion is visible. The answers are still stored and readable, and the question comes back into the score the moment any engine names any business for it. A question where the engines name competitors and not you is not advice-only; it is a real 0, and it stays in.
Onboarding flags likely advice-only questions before the first check and offers a naming question in their place, because a question nobody wins tells you nothing about who is winning. After two or more checks the app also flags a question whose answers cannot name a business like yours, and offers a buyer question in its place: see A question that doesn't fit.
What counts as a mention
An answer names you when one of your brand terms appears as a whole word or whole phrase in its text. The terms are the label of your registrable domain (example for example.com and for shop.example.com; a site on a shared host such as acme.github.io or acme.myshopify.com is acme, never the host's name, since version 7), the brand name you set, and every alias you add. Formatting is stripped and accents are folded first, so **ID**fy, Id-fy and Alvéole match as a reader would read them.
- Plain words need to be written as a name. A brand that is also an ordinary word (Profound, Notion, Scale) only counts when the answer capitalises it somewhere or writes it in domain form (
profound.com). "A profound impact" is not a mention of Profound. - Scripts without capitals are self-evidently names. A brand written in Devanagari, Chinese, Japanese, Korean, Arabic or Thai is matched as a name without a capital-letter test, since none exists (from 27 September 2026; before that these brands could not be matched at all).
- Names written apart are found. Since version 7 (12 October 2026) a brand term that runs a name's words together, as a domain does (
xclusiveinteriors), matches where the answer writes the name apart ("Xclusive Interiors"), "&" and "and" are one spelling ("Marks & Spencer", "Marks and Spencer"), a one-word name may carry "&" ("AT&T"), and a capital inside a word is evidence of a name ("iLook"). Since version 9 the same goes for your domain label without a get- or try- prefix or an -app or -hq suffix, and in the singular or the plural ("Think Dirty" forthinkdirtyapp.com, "Keystone Design" forkeystone-designs.com), for the opening words of a bold or list entry, and for names of up to five words; never for a single ordinary word ("Measure" forgetmeasure.iois the verb). - Your site’s own names count. Since version 9 the names your homepage gives itself (its structured data, its site name and its title, when they fit your domain) are added to your aliases, where you can see, edit or remove them; a name you remove is never added back. The name you confirm for your business when you set it up is added the same way.
- Close is not enough when the answer writes it as a word. Since version 7 a word that is only close to your brand, and that the same answer also writes in lower case, is vocabulary rather than a garbled name: "trade" is not a mention of Tradex.
- One-letter garbles are tolerated for longer names. A single-word term of six or more characters also matches at one edit ("Idfy" written "Idfi"), never onto a common English word.
- Aliases are the sanctioned way to catch other spellings. If engines write "AEO Track" for "aeotrack", add the alias; stored answers are re-read against it immediately. When the answers write a name for you that does not count yet, for example one they link to your site, the app asks "Is this you?" and adds it only if you say yes.
- A link alone is not a mention. Since version 6 an answer that contains only your URL (as a source footnote, a citation marker or a bare link) without writing your name in the text does not count as naming you. Since version 9 that includes a link whose visible text is your address; your address written in the prose itself ("
acme.co.ukis the usual pick") still counts, whatever its suffix. The link still counts towards the citation part of the per-answer score and the citation rate, and since version 10 it does so whether or not the answer names you; a mention is the engine telling the reader who you are.
A namesake with its own site is not you. Since version 9 a match does not count when the only terms that matched spell the name of another company whose site the answer cites, links or writes, and nothing in the answer ties it to your site: an answer recommending a company of the same name, with that company’s own website beside it, is about that company. A more specific alias still counts, so a business that shares a word with a better-known one should add its full name as an alias. When answers tie your name to another company’s site, the app says so and asks you to confirm your business: see Answers about a different business with your name.
Competitors are matched with the same rules over their name, their name without its legal suffix ("Henan Lutine Industry" for "Henan Lutine Industry Co.,Ltd"), their website label and their first word, so a rival is never found by a looser test than you are. Since version 9 a single word of theirs (the first word, or a one-word website label) counts on its own only when it is distinctive: never a place, an everyday or category word, a first name, a word of your own brand, questions or topics, or a word two of your competitors share. A place, a directory or an everyday word is not a competitor: see Competitors that aren't competitors.
Scoring one answer
Each usable answer gets a 0 to 100 score. Named earns a presence floor of 25 points, plus up to 75 for how you were named: how high in the answer's list, whether the engine used your own site as a source, and how it described you. Not named, but with your own site among the answer's sources, earns the citation part alone (since version 10): 75 x 0.30 = 22.5, with no presence floor, rank or tone, because there is no passage naming you to rank or rate. That stays below the 25 any named answer earns, so being named always counts for more than being only read. Neither named nor cited is 0.
score = F + (100 - F) x ( 0.45 x prominence
+ 0.30 x citation
+ 0.25 x sentiment ) if named
score = (100 - F) x 0.30 = 22.5 if not named, and one of
the answer's sources is
on your own domain
score = 0 otherwise
F = 25 (presence floor)
prominence = max(0.5, 1 / log2(position + 1)) in the list that names you
(#1 = 1.00, #2 = 0.63, #3 and below = 0.50);
0.5 when you are named outside a ranked list
citation = 1.0 if one of the answer's sources is on your own domain,
0.5 if your bare domain appears in the prose, else 0
sentiment = (s + 100) / 200, where s is -100 to 100, rated by a model on
the passage that names you; unrated = 0.5
Rank is read from the list in the answer that names you: bullets, numbered items, bold or heading items, table rows and, since version 6, lists written as prose ("the main options are Acme, Globex and Initech" ranks Acme first, Globex second, Initech third). An answer that names you with no list of any kind gives the unranked 0.5. Since version 8 a place in a list is never worth less than that: before it, #5 of a list scored 47.4 against 51.25 for a passing mention, so moving up into a list could lower the score. Sentiment is a model's judgement of tone, not a count, and the app says so wherever it shows it.
From answers to a score
- Per question: the engine-weighted mean of the per-answer scores from the newest check of that question, over the engines that gave a usable answer. Only the newest usable answer per question and engine is used; when an engine's newest check failed, its last usable answer from the last 90 days stands in (version 8).
- Advice-only questions out: a question whose newest check names no business on any engine is set aside and counted beside the score (see above).
- Branded questions apart: since version 9 a question that contains your brand name, or a near-spelling of it, is left out of the headline score and scored on its own as the branded score, shown beside it. A buyer who already types your name tells you little about whether AI recommends you. If every scored question is branded, they all count, and the app says the headline is branded-only.
- Per website: a recency-weighted mean of the remaining question scores. A question's weight halves every 30 days from its newest usable answer and reaches zero at 90 days, so the score is your visibility lately rather than a mixture of vintages.
- Gate: fewer than three usable answers and the score is withheld.
The per-question step is what the Visibility Tracker's Score column and the question drawer's ring show, and the drawer's "How this score was built" panel lists every engine's line of it. The per-website step is the number on the Dashboard.
Worked example: 25 answers, two mentions, a score of 5
Acme tracks 5 questions on 5 engines: 25 answers, one per engine per question. Two answers name Acme, both as a bare name-drop (not in a ranked list, no citation of acme.com, tone unrated). Every other answer names other brands, so none of the five questions is advice-only and all five stay in the score.
- Each of the two mentions scores 25 + 75 x (0.45 x 0.5 + 0.30 x 0 + 0.25 x 0.5) = 25 + 75 x 0.35 = 51.25. The other 23 answers neither name Acme nor list acme.com as a source, so they score 0.
- Question A was named by ChatGPT (weight 1.3). Its question score is (1.3 x 51.25) / (1.3 + 1.1 + 0.9 + 0.9 + 0.7) = 66.6 / 4.9 = 13.6.
- Question B was named by Perplexity (weight 0.9): (0.9 x 51.25) / 4.9 = 9.4.
- Questions C, D and E score 0.
- All five were checked this week, so their recency weights are equal: (13.6 + 9.4 + 0 + 0 + 0) / 5 = 4.6, shown as 5 / 100. Named in 2 of 25 answers: mention rate 8%.
The same 25 answers with Acme cited as a source and ranked #1 in those two answers would score 25 + 75 x (0.45 x 1.0 + 0.30 x 1.0 + 0.25 x 0.5) = 91.25 each, and the website score would be about 8. Getting named on a third question is worth more than perfecting the two you have: that is why the improvement plan puts "get onto the sources" above every other task.
The other numbers beside the score
- Mention rate: usable answers that named you, divided by all usable answers, from the same newest checks the score reads.
- Citation rate: answers with one of your own URLs among their sources, divided by all usable answers. Since version 10 an answer counts whether or not it names you; until then only answers that named you were counted.
- Where any brand is named: answers that named you, divided by answers that named you or any competitor you track. Blank, not 0, when no answer named any tracked brand. It is a share of names, so an answer that only lists your site as a source does not count in it.
- Branded score: the same composite over the questions that contain your brand name or a near-spelling of it, marked with a badge. Since version 9 they are shown beside the headline and never in it; until then they stayed in the headline and a separate non-branded score left them out, so that non-branded score is now the headline itself.
- Demand-weighted score: the same composite with each question's weight multiplied by 1 to 3 on a log curve of related Search Console demand. A second number, never the headline in disguise.
- Share of voice: your share of mentions among the brands you track, question-weighted, over every check in the last 30 days. Tracking more competitors pushes it down without your visibility changing.
The ± range: what to expect between two checks
Every score carries a ± range. Read it as the range to expect between two checks: a move that stays inside it is normal variation, not a change in your visibility, and a real move is one outside the range. Statistically it is a 95% interval on the score itself, not on any one of its ingredients; three estimates are computed and the widest is shown:
- A question-level bootstrap. The tracked questions are resampled with replacement 2,000 times with their engine answers intact, and the score recomputed each time. This measures how much the number depends on which questions happen to be in the set.
- A within-answer bootstrap. The answers inside each question and engine cell are resampled. With one answer per cell, which is every check since the sampling policy above, this estimate is zero wide; it is kept for accounts with older multi-sample checks.
- A floor from the mention rate. A Wilson interval on how often you were named, rescaled onto the score. At zero mentions the floor uses what a first mention would earn, so a 0 is never shown as "0 ±0".
The range is re-centred on the score and clamped to 0 to 100. The bootstrap has a fixed seed, so the same stored answers always produce the same range. The trend chart and the "within noise" label apply the same rule over time. Score-change alerts fire only when a move is at least your threshold and the two checks' ranges no longer overlap, never across a check where engines were dark, and no score-drop alert is sent in the first 48 hours after an account’s first answer. The week-to-week study shows why: one answer flips often by chance.
Which window each card uses
Different cards answer different questions, so they read different windows. Each card says which, in the same words:
| Where | Rows | Window |
|---|---|---|
| AI visibility score, mention rate, "Your result at a glance" | latest check per question and engine | recency-weighted, nothing older than 90 days |
| Engine by engine card | all checks | last 90 days |
| Share of voice, competitors page, share-of-voice rank | all checks | last 30 days |
| Question drawer (share of voice, citations, responses) | all checks | 30 days by default, selectable |
| "Named by AI" badge | all checks | last 30 days |
| Trend chart | one point per check | last 90 days; change measured only between points with the same scoring version, a full engine panel and the same question set |
When no score is shown
A blank is a state, not a 0, and the app names which one. The states are:
- Not enough data yet. Fewer than three usable answers in the window. The first check of a new website usually clears this within the hour; a website whose engines all errored does not.
- Advice-only. Every question in the set is advice-only (no engine named any business for any of them), so nothing is left to score. The count is shown; replace a question with one buyers ask by name and a score appears at the next check.
- Stale. No usable answer in the last 30 days. The last score stays readable, marked as of its date, and the trend chart draws no line across the gap. A check that runs, or a re-check, clears it.
- Not measured. An engine that is not on your plan or is switched off, and a question that is paused or retired, show as "not measured" rather than as 0. They are absent from the score, the mention rate and the range, and the engine coverage strip says so; a 0 is reserved for an engine that answered and did not name you.
- Inconclusive. An engine whose answer errored or was cut off at the token cap for a question. Also absent from the score (see "Which answers count"); shown so you can see how much of an engine's output the score could not use.
Each state carries its own label wherever a score would appear, and none of them is averaged into anything.
What is not measured
- Google AI Overviews and Google AI Mode.
- Persona, device, sign-in or conversation memory: every call is an API call with no history. The only location signal is the country set on your account, sent to ChatGPT, Claude and Perplexity. See why your own chat may answer differently.
- Question volume, in the headline score. Only the demand-weighted score weights questions, and only from Search Console.
- The free audit's 0 to 100 number is a site hygiene check of the homepage, not this score. Its AI check is one question on two engines, shown with both full answers.
Version history
| Version | Date | What changed |
|---|---|---|
| 1 | before August 2026 | mentioned / total, unweighted, no window |
| 2 | August 2026 | the composite above; a Wilson interval on the mention rate |
| 3 | August 2026 | same score; the range became a bootstrap on the composite itself |
| 4 | 6 September 2026 | inputs: plain-word brands need capital or domain-form evidence, bold and numbered rankings are read, sentiment rated per engine; every stored answer re-flagged and every website rescored once |
| 5 | 22 September 2026 | inputs: cut-off answers excluded whether or not they named you, sentiment rated on the passage that names you and blank when unrated, up to 50 sources stored per answer; range: question-level bootstrap added, non-zero floor at a score of 0 |
| 6 | 27 September 2026 | aggregation: questions where no engine names any business (advice-only) are left out of the headline score, the mention rate and the range, with the count shown beside the score; inputs: an answer that carries only your URL, with no name in the text, no longer counts as a mention; rank is read from lists written as prose as well as from bullets, numbers and tables; every stored answer re-read and every website rescored once |
| 7 | 12 October 2026 | inputs: brand names written as separate words are found ("Xclusive Interiors" for xclusiveinteriors), "&" and "and" are one spelling, a capital inside a word marks a name, a word only close to the brand that the answer also writes in lower case is not a mention, and a site on a shared host is tracked under its own label; every stored answer re-read and every website rescored once, with no emails or alerts |
| 8 | 17 October 2026 | per-answer: a ranked mention is never worth less than an unranked one (prominence floored at 0.5); inputs: an engine whose newest check failed uses its last usable answer from the last 90 days instead of dropping out; Google AI Mode switched off by default, its stored answers kept; every stored answer re-read and every website rescored once, with no emails or alerts |
| 9 | October 2026 | aggregation: questions that contain your brand name or a near-spelling of it leave the headline score and are scored beside it as the branded score (all of them count when nothing else is tracked); inputs: a name that the answer ties only to another company’s own site is not a mention, a link whose text is your address is not a mention while your address in the prose counts on any suffix, your domain label’s other spellings and the opening words of a list entry are read, your homepage’s own names become aliases, and a competitor’s single word counts on its own only when it is distinctive; no score-drop alert in an account’s first 48 hours; every stored answer re-read and every website rescored once, with no emails or alerts |
| 10 | 27 October 2026 | per-answer: an answer that lists your own site among its sources earns the citation part (22.5) even when it does not name you, below the 25 floor of any named answer; side numbers: the citation rate counts every answer that lists your site, named or not, while the share where any brand is named still counts names only; every website rescored once, with no emails or alerts |
Two changes on the same day as version 6 did not move the version because they change matching, not the formula: brand terms come from the registrable domain rather than the first label of a subdomain, and names in scripts without capitals are matched (both 27 September 2026, with stored answers re-read).
Related reading: How much do AI recommendations move week to week? (study) · What the ± on a score means · Branded and near-brand questions: why the headline leaves them out · What an AI visibility score should measure · Why your score changes · How to track AEO
See the arithmetic on your own brand
Start your 7-day free trial: every answer stored and readable, every score with its sample and its range, no credit card required.
Start free trial →