All documentation

Reference

Metrics defined

Every number in the product, with its exact formula and denominator, including the run metrics of the two Google engines and how often answers cite any source.

How to read any number here

Three facts are worth knowing before you look at a single number on this page.

A metric with no data reads as no data, never as zero. Every rate-shaped metric here is built by a shared _rate helper that returns value: None whenever its denominator is zero, so a quiet project or an empty date range shows nothing, not a false 0%.

For a metric that reports an observation count, below 30 observations a number is provisional. The platform-wide floor is MIN_OBSERVATIONS = 30: a metric built from fewer observations than that is still shown, but the sample behind it is too small to read as settled.

Two counts labelled observations are not the same denominator. observations on brand visibility counts every analysed answer; on brand position it counts only the answers that named you; on share of voice it counts distinct answers naming a tracked brand family, summed across every active tracked family, so one answer naming two different families is counted twice there. Never compare an observations count from one metric against an observations count from another.

Collected versus analysed answers

Every metric on this page divides by one of two populations of answers.

A collected answer is a completed prompt execution: the engine ran and returned a result. A run where Google showed no AI answer is not a collected answer, and so is in neither population (see Runs and the Google engines). An analysed answer is a completed execution whose mentions have also been extracted, marked by mentions_extracted_at being set: the platform has read the answer's text and recorded who it names. On ChatGPT (app) and Gemini (app), the text it reads has each source link blanked out whose text is a bare domain and that directly follows the passage it supports (such as [example.com](https://...) after a full stop, which both apps write; the passage can also end in the punctuation of another script, such as 。, । or ؟, a closing bracket or a closing quotation mark), so a site named only in such links never counts as a mention of a brand. A domain link at the start of a line, a list item or a quoted line, right after opening bold, or after an ordinary word, is part of the sentence and is still read, as is a link whose text is a name, such as a product or a place. In a language written without sentence punctuation, such as Thai, a source link after a passage follows a word, so it is read too. The stored answer is unchanged (api/services/brand_mentions.py#mention_text). Brand visibility, brand position and share of voice below all count mentions recorded this way.

Mention extraction is a separate step that runs after collection, so analysis lags behind it. The analysed population for a given window is therefore always a subset of the collected population for that same window, never larger.

Citation and retrieval data do not wait for that later step. The engine's citations and retrieved pages are recorded during collection itself, at the same time the answer's text is saved, before mention extraction ever runs. That is why domain coverage and citation rate below divide by the collected population instead of the analysed one.

The table below places all six metrics against the population each one uses.

Metric Numerator Denominator Direction
Brand visibility analysed answers naming your brand analysed answers higher is better
Brand position (mean of each answer's earliest self mention order) answers that named you lower is better
Share of voice distinct answers naming your brand family sum, over every active tracked brand family, of its own distinct-answer count higher is better
Domain coverage collected answers that retrieved your domain collected answers higher is better
Citation rate collected answers that cited your domain collected answers higher is better
Answers citing sources collected answers that cited at least one source, of any domain collected answers, except Claude, Grok and pre-Sonar Perplexity answers, and Gemini (app) answers whose only sources are Google product or place links neither: it describes the engine, not you

Brand visibility

Brand visibility is analysed answers naming your brand, divided by analysed answers. It is the headline read on how often your brand shows up by name in the answers the platform has actually examined. Because the denominator is the analysed population, not the collected one, brand visibility says nothing about answers still waiting on mention extraction; see Collected versus analysed answers above.

Brand position

Brand position is the mean of each answer's earliest self mention order, so a lower number is better: position 1 beats position 9. It is computed only over the answers that named you; an answer where your brand never appears contributes nothing to the average, which is what makes brand position a different question from brand visibility rather than a variant of it. A brand named once in position 1 and once in position 9 averages 5.

Share of voice

Share of voice is distinct answers naming your brand family, divided by the sum, over every active tracked brand family, of that family's own distinct-answer count. A brand family is a top-level brand, yours or a competitor's, plus its sub-brands; an answer naming a brand and one of its own sub-brands together still counts once for that family, never twice (api/services/brand_metrics.py#brand_share_of_voice). The denominator is a sum, not a count of distinct answers in the window: an answer naming two different tracked families, yours and a competitor's, adds to both families' own counts, so the sum across families can be larger than the number of distinct answers it was built from. For a project with no sub-brands this is identical to counting mention records directly, because the platform keeps at most one mention record per brand per answer on both the paths that can create one: extraction's own dedupe collapses repeated model output for the same resolved brand into a single row before anything is saved (api/services/brand_mentions.py#normalize_mentions), and re-attributing a past untracked mention onto a brand skips a row when that brand already has a mention record for the same answer (api/services/brand_families.py#reattribute_untracked). A third path, promoting a parent's existing alias into a new sub-brand, keeps the invariant by construction: it moves the parent's own mention rows for that name onto the sub-brand rather than creating new ones (api/services/brand_families.py#create_sub_brand). State plainly what the denominator means: it is relative to the competitors you chose to add to the project and have not paused, so adding a competitor can lower your share of voice without anything changing in the answers themselves, and pausing one can raise it the same way. Untracked brands the platform notices but you have not added to the roster are excluded entirely, so the roster you build is what sets this denominator. This is the single most misreadable number in the product.

Domain-citation share of voice

The Competitors screen shows a second number also called share of voice, built from a different population than the mention-based one above. Competitors covers where it appears on the screen; this section covers what it actually counts.

Domain-citation share of voice is one domain's citation count, divided by the citation count of every active competitor row tracked on the project, plus your own (api/routers/pages.py#competitors_page). A competitor row that is not active contributes to neither side of that division: the list of domains the sum is built from is filtered to active rows before the total is taken. That denominator is domain citation counts, not mention records of tracked brands, so this is a different figure from Share of voice above even though the product uses the same name for both. Like the mention-based figure, it is relative only to the competitors you have chosen to track: adding a competitor moves every share on the screen, because the set being divided now has one more member even though no answer changed, and an untracked brand never enters this denominator either.

Both figures treat an inactive competitor the same way, whether it became inactive by being paused or by being removed: its citations and its mentions stop counting at once, while the rows already recorded for it are kept.

  • Domain-citation share, pausing a competitor: corrects itself on the next load. The row set behind the chart and its total is filtered to active competitor rows, so a paused competitor's citations leave the shared total at the same moment its bar does, and the visible shares sum to 100 percent (api/routers/pages.py#competitors_page).
  • Domain-citation share, removing a competitor: the same result by a different route. Deleting a competitor is a hard delete of its row (api/routers/competitors.py#remove_competitor), so the very next load rebuilds the row set and the shared total without it.
  • Mention-based share, pausing or resuming a competitor: the query behind it counts only pairs whose family's top-level brand is active (api/services/brand_metrics.py#brand_share_of_voice, #share_of_voice_by_entity); a sub-brand's own active flag is not checked here, so an archived sub-brand's past mentions keep counting for as long as its family's top-level brand does. A top-level brand's active flag mirrors its competitor row's, and pausing, resuming or adding a competitor updates that mirror in the same save (api/routers/competitors.py#update_competitor, #add_competitor, #_sync_brands, api/services/brand_mentions.py#sync_brand_entities_for_project), so the next load of any screen, the Explorer and its brand filter included, already leaves the paused family out. The mentions already recorded are kept, just not counted while the competitor is paused.
  • Mention-based share, removing a competitor: the same, at once. Deleting a competitor leaves its brand entity with no competitor row to point back at (api/models/brand_entity.py), and the same save forces that entity inactive (api/routers/competitors.py#remove_competitor), so its mentions stop counting from the next load. The mention rows themselves are never deleted.

Domain coverage

Domain coverage is collected answers that retrieved your domain, divided by collected answers. Retrieval is not citation: an engine can pull one of your pages into its context while composing an answer without ever linking to it in that answer. Domain coverage counts that retrieval regardless of whether a citation followed, which is why it is a separate number from citation rate below, not a softer read of the same one.

Citation rate

Citation rate is collected answers that explicitly cited your domain, divided by collected answers. Citing means the answer named your domain as a source; an engine reading your page while forming its answer without linking to it is the weaker signal captured by domain coverage above, not by this metric.

Answers citing sources

Answers citing sources is collected answers that cited at least one source, of any domain, divided by collected answers (api/services/explorer/metrics.py#METRICS, #_statement). It is not the citation rate, which counts only your own domain. Claude and Grok answers and Perplexity answers collected before Sonar have no value: their saved citations include every search result, not only the sources the answer cites (for Grok, every URL in xAI's list of the sources its search came across, api/services/llm.py#run_grok), so they are left out of both sides of the division, and a query with this metric says so in a note (api/services/collection.py#SURFACES_WITHOUT_ANSWER_CITATIONS, api/services/explorer/metrics.py#_runs). Gemini (app) answers whose only sources are Google product or Google Maps place links are left out of both sides too: they list sources, but none is a web page counted as a citation, so a local answer that listed only places would otherwise read as an answer citing nothing. They still count as answers that used web search among the answer features (api/services/collection.py#SURFACES_WITH_UNCITED_SOURCES). The note reads: "Answers citing sources leaves out Claude and Grok answers and Perplexity answers collected before Sonar: their saved citations include every search result, not only the sources the answer cites. It also leaves out Gemini (app) answers whose only sources are Google product or Google Maps place links: they list sources, but none is a web page we count as a citation." An answer with no sources is one where the engine showed none; on ChatGPT (app) and Gemini (app) that usually means it did not search, because the app decides for itself whether to (see How ChatGPT (app) is collected and How Gemini (app) is collected).

Answer features

Seven rates say which structured parts engines put inside their answers: answers using web search, and answers with shopping, local businesses, ads, video, images or tables. Each is checked answers where the feature was present, divided by checked answers, counted only on the engines that report that feature (api/services/explorer/metrics.py#_statement, api/services/response_features.py#SUPPORTED_FEATURES). An engine that does not report a feature has no value, never 0%, and an answer not checked yet, or whose searches were not recorded, is in neither side. Which engine reports what, and how each is counted, is on Answer features.

Why two numbers on the same screen disagree

You can see brand visibility read 50 percent and citation rate read 10 percent on the very same screen, for the same window, and both can be correct at once, because they divide by different populations.

Take one concrete window: 100 collected answers, 80 of which have been analysed. Your brand is named in 40 of those 80 analysed answers. Your domain is cited in 10 of the full 100 collected answers.

Brand visibility divides by the analysed population: 40 of 80 is 50 percent. Citation rate divides by the collected population: 10 of 100 is 10 percent. Neither is wrong and neither is a rounding of the other. They are two different questions, over two different denominators, exactly as the table above lists.

Runs and the Google engines

Google AI Overviews and Google AI Mode add an outcome the chat engines, ChatGPT (app) and Gemini (app) never have: the request succeeded, but Google showed no AI answer (see When Google shows no AI answer). Such a run has no text and no citations, and it is not an answer: every metric above reads completed answers only, so it never enters brand visibility, brand position, share of voice, domain coverage or citation rate, on either side of the division (api/services/explorer/metrics.py#_runs, api/services/execution_reads.py#completed_execution_scope). A Google engine whose runs in a window all showed no AI answer has no value for those metrics there, not 0%.

Three metrics count runs instead, a run being a completed answer or a run where Google showed no AI answer (api/services/explorer/metrics.py#METRICS, #RUN_METRICS):

Metric Numerator Denominator Direction
AI answer shown rate Google runs that showed an AI answer Google runs (Google AI Overviews and Google AI Mode) neither: it describes the engine, not you
First-page organic rate Google AI Overviews runs where the domain appears on the first page of organic results Google AI Overviews runs higher is better
Organic position sum, over those ranking runs, of the domain's best organic position in the run Google AI Overviews runs where the domain appears on that first page lower is better
  • AI answer shown rate is the shown rate. It counts only the runs of the two engines that can show no AI answer, Google AI Overviews and Google AI Mode: ChatGPT (app), Gemini (API), Gemini (app), Perplexity, Claude and Grok always answer, so they have no value for it, and a query with this metric carries the note "AI answer shown rate counts only the Google engines' runs: other engines always answer, so they have no value." (api/services/explorer/metrics.py#_statement, api/services/collection.py#NO_ANSWER_SURFACES).
  • First-page organic rate and organic position read the first page of organic results kept for every Google AI Overviews run, including runs where no Overview was shown. They measure your own domain, or each domain when domain is a breakdown or a filter. A run with no organic result for the domain still counts in the rate's denominator, so a domain that never ranks reads a measured 0%; its organic position has no value, because there is no position to average (api/services/explorer/metrics.py#_organic_statement). Google AI Mode has no organic results, so neither metric has a value for it.

Retrieval coverage (domain coverage above) leaves Google, ChatGPT (app) and Gemini (app) answers out of its denominator: those engines report only the sources the answer cites, never a list of pages retrieved, so counting them would read as a measured zero (api/services/collection.py#SURFACES_WITHOUT_RETRIEVAL). Google AI Overviews, Google AI Mode, ChatGPT (app) and Gemini (app) have no value for it.

The same metrics in the Explorer

Brand visibility, brand position, share of voice, domain coverage and citation rate on this page are computed by the same definition the Explorer uses, so the formulas above hold there unchanged (api/services/explorer/metrics.py#compute_raw). The Explorer calls domain coverage retrieval coverage. It adds the two answer counts, positive and negative sentiment, a citation rate for any cited domain, the three run metrics above and the seven answer-feature rates, and lets you break any of them down or filter them by engine, model, country, city, persona, language, intent, buying stage, theme, branding, tag or prompt, and, for the metrics they apply to, brand family or cited domain (api/services/explorer/dimensions.py#DIMENSIONS).

  • Explorer: these metrics broken down and filtered your own way
  • Brands and sub-brands: what a brand family is and the once-per-answer rule share of voice, visibility and position follow
  • Key terms: what a mention, a citation, and retrieval each mean
  • Troubleshooting: what to check when a number reads as no data
  • Glossary: plain-language definitions of the terms behind these metrics

Last verified 2026-09-29

Start monitoring your AI visibility.

See how AI search engines talk about your brand.

Free to start. No credit card required.