Skip to main content
Every report metric is computed for each AI model separately, then averaged across models with equal weight. A model with many runs counts the same as a model with few. score=scoremodel 1+scoremodel 2++scoremodel MM\text{score} = \frac{\text{score}_{\text{model 1}} + \text{score}_{\text{model 2}} + \dots + \text{score}_{\text{model } M}}{M} M is the number of models with at least one brand mention in the period. A model that mentioned other brands but not yours counts in M with a score of 0. Average position is the exception: it is averaged over the models in which your brand appeared. Counts, such as the number of mentions or citations, are summed across models rather than averaged.

Per-model formulas

Visibility score

runs mentioning your brandruns mentioning any brand\frac{\text{runs mentioning your brand}}{\text{runs mentioning any brand}} Any brand named in the answer counts, not only your configured competitors, unless you have excluded it under Configure Competitors in brand settings. Runs in which no brand was mentioned are excluded from both the numerator and the denominator. Returned as 0 to 1 by the API and shown as a percentage in the platform.

Share of voice

mentions of your brandmentions of all brands\frac{\text{mentions of your brand}}{\text{mentions of all brands}} Each brand counts once per run. Returned as 0 to 1 by the API and shown as a percentage in the platform.

Average position

sum of your brand’s positionsruns mentioning your brand\frac{\text{sum of your brand's positions}}{\text{runs mentioning your brand}} The first brand mentioned in an answer is position 1. Lower is better.

Citation share

citations of your domainall citations\frac{\text{citations of your domain}}{\text{all citations}} Returned as 0 to 1 by the API and shown as a percentage in the platform. The same formula applies per page when grouping by page.

Positive and negative sentiment

100×positive claims about your brandall claims about your brand100 \times \frac{\text{positive claims about your brand}}{\text{all claims about your brand}} Negative sentiment is the same with negative claims. Every claim is scored positive or negative, so the two values sum to 100. Both are returned as 0 to 100.

Example: two models

Pooling runs across models first (16 / 30 = 0.53 for visibility) is wrong because each model has equal weight. Averaging daily scores to produce a monthly score is also wrong. A monthly score is computed from all runs in the month. See Conventions & gotchas.

Reproducing metrics from the Answers API

Get Answers returns one row per run. The fields you need: Select the rows for the dates, topics, tags, and regions you want. If you have excluded brands under Configure Competitors, remove them from mentions first. For each metric, compute the fraction below for each model separately, then average the per-model values. Multiply the sentiment values by 100. Count by run_id, join topics and prompts on their ids, match brands by name, and use Eastern Time dates.
The Answers API returns the topic, tags, and brand list as they are configured today, so numbers you rebuild from it change when your configuration changes. See Why past numbers change.