For the complete documentation index, see llms.txt. Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.
Skip to content

The GEO measurement guide · chapter 1

What AI visibility tools can and cannot measure

An AI visibility tool can observe what an engine answered to the questions it asked, on the engines, countries and days it read: who was named, which links were attached and in what order. It cannot see who asked, how many people saw an answer, or whether a mention led to a visit or a sale.

7 days free · card required

Our month, by what kind of number it is
  • Answers read, ChatGPT and Perplexity

    Our month
    4,374
    Kind
    observed
  • Runs that failed and were left out

    Our month
    105
    Kind
    observed
  • Answers that named Attensira

    Our month
    180
    Kind
    observed
  • Days with no reading

    Our month
    8 of 31
    Kind
    a gap, not a zero
  • Claude, Gemini, AI Overviews

    Our month
    not read
    Kind
    a gap, not a zero
  • People who saw those answers

    Our month
    no data
    Kind
    nobody can measure
  • Visits a mention caused

    Our month
    no data
    Kind
    nobody can measure
Analyst agentAnalyst · reads this workspace's answersattensira.com workspace, Attensira MCP · · 30 days
Karl-Gustav KallasmaaKarl-Gustav Kallasmaa, Founder & CEO

Last updated

Key facts

What did our own workspace actually observe last month?

Start with the receipts, because the clearest way to see the boundary of measurement is to look at a real dataset and ask what each number is a count of.

Attensira tracks attensira.com on ChatGPT and Perplexity. The table at the top of this page is what the workspace held for the 30 days to 4 October 2026, read over the Attensira MCP that morning, sorted by what kind of number each line is. ChatGPT gave 2,274 of the answers and Perplexity 2,100; 61 and 44 runs failed.

Every number marked observed is an observation. A question was sent to a real consumer surface, an answer came back, and we stored the text and its links. You could open any one of those 4,374 answers and check it.

Now look at what the table cannot say.

  • It cannot say how many people asked. The 4,374 answers are answers to questions we asked, on a schedule. None of them is a question a buyer asked.
  • It cannot say how many people saw Attensira named. There is no impression count anywhere in this data.
  • It cannot say whether any of those 90 mentions led to a visit, a trial or a sale.
  • It cannot say anything about the 8 days with no reading, or about Claude, Gemini and Google AI Overviews, which this workspace does not read. Those are not zeros. They are holes.

The rest of this chapter goes through each side of that line in turn: what a tool can observe, what it can only estimate, and what nobody can measure today.

What does an AI visibility tool observe directly?

Four things, all of them about answers to questions the tool chose.

Whether a brand was named. The tool reads the answer text and checks for the brand name. Attensira's method is a whole-word match of the name and a host-aware match of the domain. That is a real observation, with one known bias covered below.

Which links were attached, and in what order. Engines attach sources as footnotes, side panels or inline links. A tool can record every URL, the domain it belongs to and where it sat in the list.

Which other brands were named, and in what order. The same answer that leaves you out usually names someone else. That list is often more useful than your own rate, because it tells you who is winning the question.

What the surface returned, on a given day, in a given country. This depends on how the tool reads. Attensira reads the consumer surfaces of ChatGPT, Perplexity, Google AI Overviews and Gemini the way a person would, from a browser in the country being tracked, and uses the model APIs only as a labelled fallback. Claude has no consumer reader, so its answers come from the API with the country stated in the question rather than from a local search.

That distinction matters more than most buyers realise. An answer from a model's API is not what someone sees when they type into chatgpt.com: the model version, system prompt and retrieval can all differ. A tool that reads only APIs is measuring a proxy and should say so.

What looks measured but is really an estimate?

Several numbers in this category look like observations and are not.

"AI search volume" or "prompt volume." No engine publishes how often a question is asked. A volume figure is a model built from keyword data, panels or clickstream, then translated into prompts. It may be useful for prioritising, but it is not a count of anything an engine did, and two vendors' figures for the same question will rarely agree.

"AI impressions." Same problem. Google counts appearances in AI Overviews and AI Mode inside overall Web search traffic in Search Console, not as a separate line. The assistants publish nothing. An impression estimate multiplies an invented volume by a measured rate and presents the product as a fact.

A single "visibility score." A score blends rates, positions and weights into one number, and the weights are the vendor's opinion. When it moves, you cannot tell which ingredient moved. Attensira does not compute one; it reports each rate with its sample size instead.

A percentage with no sample size. A rate of one in three can mean one answer out of three or a thousand out of three thousand. Without the count, the number cannot be checked. Every rate in Attensira arrives as two values, the rate and the number of answers behind it, and below 20 answers the dashboard shows the count instead of the percentage.

None of these are useless. They are estimates, and an honest report labels them as estimates and keeps them apart from the observed numbers.

Why is a dash different from a zero?

Because one is a result and the other is the absence of one.

  • A rate with its count, for example 0 of 57

    What it means
    The engine was asked 57 times and never named you
    What to do
    A content or presence problem: work on the answer
  • A dash

    What it means
    Nothing was read: the engine is not switched on, the plan does not include it, no reader exists, or every read failed
    What to do
    A coverage problem: fix the setup, then measure

The remedies are opposite. A measured zero says the engines know your category and do not reach for you. A dash says nothing about you at all. Reporting a dash as 0% invents a failure that was never observed, which is why Attensira returns null for an unmeasured cell and shows it as a dash with the reason on hover.

Our own month has both, side by side in the frame below. The zeros are real: on "AI search visibility for agencies" both engines were read and neither named us. The dashes are coverage: our workspace does not read Gemini, Claude or AI Overviews, so a report that listed those engines at 0% would be wrong three times over.

Failed runs follow the same logic. A timeout or a blocked request is not evidence that you were left out, so failed runs are stored for debugging and excluded from the denominator. Our 105 failed runs in the month lowered the sample size, not the rate.

What do a zero and a dash look like side by side?

One of our questions on the two engines we read, and the three we do not. The zeros are results: both engines were asked and neither named us. The dashes are coverage gaps, and a report that showed them as 0% would be wrong three times.

'AI search visibility for agencies' · named Attensira
  • ChatGPT

    Named us
    0 of 57
    What it is
    a measured zero
  • Perplexity

    Named us
    0 of 48
    What it is
    a measured zero
  • Gemini

    Named us
    —
    What it is
    not read
  • Claude

    Named us
    —
    What it is
    not read
  • Google AI Overviews

    Named us
    —
    What it is
    not read
Analyst agentAnalystattensira.com workspace, Attensira MCP · · 30 days

What does mention detection get wrong?

One thing, consistently, and it is worth knowing before you trust your own number.

Detection is a whole-word match. It handles possessives, hyphens and your domain inside a URL, and it will not count "architecture" as a mention of a brand called Arc. It cannot tell your brand from the same word used in its ordinary sense. A brand called Linear is counted every time an answer says something "scales in linear time".

The error only runs one way: brands whose names are common words read high, never low. Averaging more answers does not remove it, because it is systematic rather than random. If your name is a dictionary word, open a dozen stored answers and read them before you quote the rate. If a competitor's name is a common word and yours is not, any comparison between you is tilted in their favour.

What can nobody measure today?

Four things, regardless of vendor.

Who asked. A tool asks its own questions. It never sees a real person's prompt, so it cannot tell you which questions buyers actually type, only how engines answer the ones you chose. That is why the prompt set is the most important decision in the programme.

How many people saw the answer. Engines publish no exposure data for named brands.

What happened next. There is no identity link between an answer a model gave someone and a person who later lands on your site. You can count visits referred from assistants in your own analytics, and you can measure answers, but joining the two into "this mention caused this signup" is an inference. Attensira's documentation says plainly that it cannot tell you a mention produced a visit, a citation a signup, or any of it revenue.

Why the engine chose what it chose. You can see which pages an answer leaned on and how often. You cannot see the ranking function. Any claim that a specific change "caused" a citation is a before-and-after comparison, and the defensible report chapter covers what that comparison can and cannot support.

Does crawler data fill the gap?

It fills a different gap. Crawler data tells you which AI agents fetched which of your pages, counted at the server or the edge, because crawlers do not run JavaScript and never trigger a browser analytics script. It does not tell you whether an answer cited you.

Our own month makes the point. Meta's training agent made about nine in ten of the AI crawler requests to attensira.com, and it feeds no answer engine we track. Meanwhile ChatGPT and Perplexity attached links to attensira.com on just 9 of our 61 questions, 3 of them with our name in the question. Fetching and citing moved independently. Attensira's documentation says not to reconcile the two, and treats crawler counts as directional evidence of coverage, not an audited log, because a user-agent string is self-reported.

The AI crawler guide covers how to read crawler logs properly.

How much of the crawling came from engines we read?

The crawler board for the same month. Nine in ten requests came from Meta's training agent, which feeds no engine we read. ChatGPT's and Perplexity's agents sent about one in twenty. Crawl volume and answer share are different measurements; neither stands in for the other.

AI crawler requests counted at the edge
156,541
30 days
from Meta-ExternalAgent, a training agent
92 in 100
n=156,541 requests
from OpenAI's agents and PerplexityBot
8,417
n=156,541 requests
Analyst agentAnalystattensira.com AI traffic, crawler board by claimed user agent, read over the Attensira MCP on 2026-10-05 · to

How should you report around the boundary?

Three rules keep a report on the right side of the line.

  1. Report observations with their counts. "Named in 90 of 2,274 ChatGPT answers" is checkable. A bare percentage is not.
  2. Label every estimate. If a volume or impression figure appears, say what it was modelled from and keep it out of the same column as observed rates.
  3. Name the holes. List the engines, countries and days that were not read. Our month had 8 days with no reading; a report that drew a smooth line through them would be inventing data.

Here is the uncomfortable half of our own number. All 90 mentions on each engine came from our three branded questions: "what is Attensira", "Attensira reviews" and "Attensira vs Profound", each answered 30 times and each naming us 30 times. On every unbranded question in the set, we were named in none of the answers. A headline rate across all 2,274 answers would be true, observed and completely misleading. The observation is sound; the summary is the problem.

The next chapter, sampling and sample size, covers how many answers a number needs before it means anything.

What else do people ask?

Can I see how many people were shown an answer that named my brand?
No. Assistants publish no impression counts for brands named in answers, and Google counts appearances in AI Overviews and AI Mode inside ordinary Web search traffic in Search Console rather than as a separate channel. Any "AI impressions" figure is a model of a number, so ask what it was built from before you repeat it.
Is a measured zero the same as being invisible in AI?
No. A measured zero means you were not named in the answers that were read, for the questions in your set, on the engines and countries you track, in that window. Change any of those and the number can change with nothing about your brand changing. It is a real finding about a narrow question, not a verdict on your presence everywhere.
Why does an engine show a dash instead of a percentage?
Because nothing was read for it. The engine was not switched on for the workspace, the plan does not include it, no reader exists for that surface, or every reading in the window failed. A dash is a gap in coverage and a zero is a result; treating the first as the second invents a failure nobody observed.
Can any tool prove that an AI mention produced revenue?
Not today. There is no identity link between an answer a model gave someone and a person who later visits your site. You can count visits referred from assistants in your own analytics and you can measure answers, but joining the two into "this mention made this sale" is an inference, and a vendor who claims it is selling a correlation with a causal label.
Does an AI crawler visiting my site mean I am being cited?
No. Crawlers and answer engines are different pipelines with different schedules. On our own site, Meta's training agent made about nine in ten AI crawler requests in a month while answers on ChatGPT and Perplexity linked our domain on just 9 of our 61 questions. Fetching is necessary for a fresh citation, never proof of one.

Where do these facts come from?

7 sources, 13 statements: each statement with the page it came from and the day it was checked.

  1. Attensira reads the consumer surfaces of ChatGPT, Perplexity, Google AI Overviews and Gemini the way a person would, uses model APIs only as a labelled fallback, and reads Claude only through its API because it has no consumer reader.

    docs.attensira.com · retrieved

  2. Attensira reports an unmeasured value as null, shown as a dash, and a measured zero as 0, and warns never to render an unmeasured cell as 0%.

    docs.attensira.com · retrieved

    “Never render an unmeasured cell as 0%.”
  3. Attensira documents that it asks prompts on a schedule and does not see the questions real people asked or how many of them there were.

    docs.attensira.com · retrieved

  4. Attensira's limitations page states it cannot tell you that a mention produced a visit, that a citation produced a signup, or that any of it produced revenue.

    docs.attensira.com · retrieved

    “Attensira cannot tell you that a mention produced a visit, that a citation produced a signup, or that any of it produced revenue.”
  5. Attensira documents that mention detection is a whole-word match of the brand name and cannot tell a brand from the same word used in its ordinary sense, so such a brand reads high, never low.

    docs.attensira.com · retrieved

  6. Attensira documents that today's numbers are incomplete until the day closes, because each prompt, model and country runs at most once a day.

    docs.attensira.com · retrieved

  7. Attensira documents that Claude is never read from a location; its answers come from the API with the country stated in the question.

    docs.attensira.com · retrieved

  8. Attensira documents that crawler fetches and model answers are different systems, that a page can be fetched constantly and never cited, and that crawler user agents are self-reported and not verified attribution.

    docs.attensira.com · retrieved

  9. Google documents that sites appearing in AI features are included in the overall search traffic in Search Console, within the Web search type.

    developers.google.com · retrieved

  10. Read over the Attensira MCP on 4 October 2026: in the 30 days to that morning Attensira read 2,274 ChatGPT answers and 2,100 Perplexity answers for attensira.com, took readings on 23 of the window's 31 days, and excluded 61 failed ChatGPT runs and 44 failed Perplexity runs from the denominators.

    docs.attensira.com · retrieved

  11. Read over the Attensira MCP on 4 October 2026: on both ChatGPT and Perplexity, Attensira was named in 90 answers in 30 days, all of them answers to its three branded prompts (30 of 30 each), and in none of the answers to its unbranded prompts.

    docs.attensira.com · retrieved

  12. Read over the Attensira MCP on 4 October 2026, 30 days: answers attached links to attensira.com on 9 of the workspace's 61 tracked prompts, 3 of them branded prompts that contain the name Attensira.

    attensira.com workspace, read over the Attensira MCP on

  13. Read over the Attensira MCP on 5 October 2026 (attensira.com workspace crawler board, 30 days by claimed user agent): 156,541 AI crawler requests, 143,555 of them from Meta-ExternalAgent and 8,417 from OpenAI's agents and PerplexityBot together.

    attensira.com workspace, read over the Attensira MCP on

Want software that does your AI-search visibility work, with you in control of every change?

7 days free · card required