All documentation

Metrics defined

Every number in the product, with its exact formula and denominator.

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. Volatility has no observation count of its own; its floor is a minimum number of days, covered in its own section below.

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 mention records, not answers at all. 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. 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.

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 your mention records mention records of all active tracked brands 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
Volatility (sample standard deviation of daily brand visibility, in points) n/a lower is steadier

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 your mention records, divided by mention records of all active tracked brands. State plainly what that 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 now 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, while the rows already recorded for it are kept. The two figures still reach that result by different routes, and only one of the four cases takes effect on the very next load:

  • 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 a competitor: the query behind it counts only mention records belonging to an active brand entity (api/services/brand_metrics.py#brand_share_of_voice, #share_of_voice_by_entity), and an entity's active flag mirrors its competitor row's. That mirroring is applied when the project's entity roster is next rebuilt, which happens on the next mention-extraction pass rather than at the moment you press pause (api/services/brand_mentions.py#sync_brand_entities_for_project), so this one lands a run later. The mentions already recorded are kept, just not counted.
  • Mention-based share, removing a competitor: the same path. Deleting a competitor leaves its brand entity with no competitor row to point back at (api/models/brand_entity.py), and the same roster rebuild forces such an entity inactive, so its mentions stop counting from that rebuild onward. 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.

Volatility

Volatility is the sample standard deviation of the daily brand visibility series, expressed in points, not percent: a volatility of 4 means the daily figure typically swings about 4 points around its average, not four percent of it. Lower is steadier: a brand holding a stable position, not necessarily a higher one. Volatility needs at least five days of data in the window to mean anything; below that, the platform shows no value at all. That five-day floor is separate from the 30-observation threshold above: this one is about how many days a trend line has to move on, not how many answers went into a single count.

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.

  • 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-08-11

Start monitoring your AI visibility.

See how AI search engines talk about your brand.

Free to start. No credit card required.