platform to group_by and each row is computed over that engine’s answers alone. The API and the dashboard run the same code, so the same range and filters give the same number.
Which answers count
- Answers collected successfully on a day inside the range (UTC).
- Not Google result pages that showed no AI Overview. They are dropped before anything is counted, from the numerators and from
answers. - When you pass a
filter, only answers matching it.
Formulas
Mention rate
An answer names you when it uses your brand name or one of its aliases. 0–1.Citation rate
Ten links to your site in one answer count once. For a competitor, “its site” is the domains on its competitor entry. 0–1.Prompt coverage
A prompt named on any day, on any engine, in the range counts as covered. That is why coverage over a month is usually higher than coverage on any one day. 0–1.Visibility Score
The three rates are rounded to two decimals (whole percentage points) first, and the score is rounded to a whole number. 0–100.Share of voice
Each brand counts at most once per answer. Tracked brands are you and every competitor on the site’s list. 0–1.Average position
Position is the order in which an answer first names each tracked brand: the first is 1. Lower is better. Rounded to one decimal;null when the brand was never named.
Rank
Order by Visibility Score among you and your confirmed competitors, within each group of rows. 1 is best.Citation share
Counts every link, so a page linked twice in one answer counts twice. Rounded to four decimals. 0–1.Sentiment
The same forneutral and negative. The three add up to 1 (give or take rounding). Answers not yet judged count as neutral.
Worked example
A site with five prompts collects 24 answers in a week. Four are Google result pages with no AI Overview, so 20 answers count.Reproducing the numbers from raw answers
POST /v1/answers returns one row per answer with everything the formulas need:
This example computes the four headline figures for a range and checks them against the visibility report.
Python’s
round() rounds halves to the nearest even number, so on an exact half (0.125) it can land one point away from the report. The report rounds halves up.Compared with Profound
If you are moving code across from Profound’s API:- Profound’s
visibility_scoreis a 0–1 share of answers that mention any brand. Ours is the 0–100 composite above. - Profound computes each metric per engine, then averages across engines. Ours pools every answer; group by
platformfor per-engine figures. - Profound counts days in US Eastern time. Ours are UTC.