AI Share of Voice: How to Measure It Across 4 AI Engines
AI share of voice measures how often AI engines name you versus rivals. Get the formula, a worked example on 280 real answers, a script, and pitfalls to avoid.
AI share of voice is the share of all tracked-brand appearances in AI answers that belong to your brand, an adaptation of the classic share of voice metric from advertising. You count it once per answer, on prompts that don't name you. In 280 real unbranded answers from ChatGPT, Gemini, Perplexity and Claude, our brand held 7.4% share of voice. The category leader held 25.0%.
The formula is simple. The traps aren't. The same 280 answers give our brand 7.4%, 10.1% or 21.4% share of voice depending on which competitors you count. This post shows the formula, the companion metrics, a worked example on real data, and a script that computes everything per engine.
Data used: 35 unbranded prompts × 4 engines × 2 runs on 2026-10-20, web search on, collected by BugViso's AI Visibility Tracker for bugviso.com (website-audit software) against five anonymised competitors, A–E.
The Formula
For a set of answers and a set of tracked brands (you plus competitors):
appearances(b) = number of answers that name brand b at least once
share_of_voice = appearances(you) / Σ appearances(every tracked brand)
mention_rate = appearances(you) / number of answersThree rules make the number mean something:
- Count once per answer. An answer that names you four times is still one appearance. Otherwise long answers (Gemini's median is 548 words) outweigh short ones (Perplexity's is 152).
- Use unbranded prompts only. A prompt like "is BugViso worth it" names you by construction. In our data, every engine named the brand in 100% of branded answers.
- Fix the competitor set before you start. The denominator is "every tracked brand", so the list decides the result.
Share of Voice vs the Metrics It Gets Confused With
| Metric | Formula | Answers the question | Our brand (all engines) |
|---|---|---|---|
| Mention rate | answers naming you ÷ answers | How often do buyers see us? | 7.5% |
| Share of voice | your appearances ÷ all tracked appearances | Of the recommendations made, how many are us? | 7.4% |
| Average position | mean rank of your first mention among tracked brands | When named, are we first or an afterthought? | 1.19 |
| #1 slot share | answers where you're named first ÷ answers naming any tracked brand | How often do we lead the shortlist? | 18 of 123 |
| Prompt coverage | prompts with ≥1 mention ÷ prompts | How many buyer questions do we show up for? | 11 of 35 |
Mention rate and share of voice look identical here (7.5% vs 7.4%) because our 280 answers contained 284 tracked-brand appearances, almost exactly one per answer. That's a coincidence of this dataset. Per engine, the two metrics split apart.
Worked Example: Share of Voice per Engine
This is the output of the script below on our 280 unbranded answers. Each block is one engine, with brands sorted by appearances.
[chatgpt] 70 unbranded answers, 38 tracked-brand appearances
brand mention rate share of voice avg position #1 slot
Competitor A 15.7% 28.9% 1.36 7
Competitor C 12.9% 23.7% 1.78 3
BugViso 8.6% 15.8% 1.17 5
Competitor B 7.1% 13.2% 2.20 2
Competitor D 5.7% 10.5% 1.50 2
Competitor E 4.3% 7.9% 1.00 3
[gemini] 70 unbranded answers, 100 tracked-brand appearances
brand mention rate share of voice avg position #1 slot
Competitor A 42.9% 30.0% 2.00 16
Competitor B 34.3% 24.0% 1.71 10
Competitor C 25.7% 18.0% 1.89 4
Competitor D 18.6% 13.0% 3.62 1
Competitor E 17.1% 12.0% 2.25 5
BugViso 4.3% 3.0% 1.00 3
[perplexity] 70 unbranded answers, 48 tracked-brand appearances
brand mention rate share of voice avg position #1 slot
BugViso 17.1% 25.0% 1.25 10
Competitor A 12.9% 18.8% 1.33 6
Competitor D 12.9% 18.8% 1.89 3
Competitor B 10.0% 14.6% 2.43 0
Competitor C 8.6% 12.5% 1.83 3
Competitor E 7.1% 10.4% 1.00 5Claude named our brand in none of its 70 unbranded answers, so its share was 0.0%. Competitor B led there with 27.6%.
Reading the example
The denominator moves per engine. ChatGPT made only 38 tracked-brand appearances in 70 answers, while Gemini made 100. That's why our 8.6% mention rate on ChatGPT becomes a 15.8% share: there were few recommendations to share. On Gemini, a 4.3% mention rate is only a 3.0% share, because Gemini names many brands per answer.
Share of voice reveals the engine where you lead. On Perplexity our brand had the highest mention rate (17.1%) and the highest share (25.0%). The pooled all-engine figure of 7.4% hides that completely.
Position needs context. Our average position of 1.00–1.25 looks excellent. The reason: engines name a small brand mainly on niche prompts where it's the obvious answer, and then they name it first. The leader's position on Gemini is 2.00, but it was named in 30 Gemini answers to our 3. Never report position without the mention rate next to it.
The Competitor Set Decides the Number
Here are the same 280 answers with three different competitor lists. Our mention rate is 7.5% every time.
| Competitor set | Tracked appearances | Our share of voice | Leader's share |
|---|---|---|---|
| All five (A–E) | 284 | 7.4% | 25.0% (A) |
| Three biggest (A–C) | 207 | 10.1% | 34.3% (A) |
| Two smallest (D, E) | 98 | 21.4% | 41.8% (D) |
Track only small rivals and your share of voice triples, with no change in what buyers see. This is the most common way AI share-of-voice reports mislead, and the cheapest one to prevent:
- Pick competitors from real deals, meaning the brands you lose to, not the ones you'd like to be compared with.
- Freeze the list for the reporting period. Adding a competitor mid-quarter lowers everyone's share retroactively.
- Report the list with the number. "7.4% share of voice against five named competitors" is a claim a client can check. The AI visibility report template puts it in the method notes.
Share of Voice by Buyer Intent
The tracker tags each prompt with an intent stage: learn (understanding the problem), consider (comparing options) or purchase (choosing). Split by stage, the same answers tell a sharper story:
| Intent stage | Unbranded answers | Tracked appearances | Our share | Leader's share |
|---|---|---|---|---|
| Learn | 80 | 71 | 0.0% | 26.8% (B) |
| Consider | 120 | 147 | 7.5% | 26.5% (A) |
| Purchase | 80 | 66 | 15.2% | 25.8% (B) |
Our brand is absent from learn-stage answers, where engines explain concepts and cite established vendors' guides. It gains ground as questions get more specific. At the purchase stage ("which pay-per-report tool is best for a solo consultant"), its share is twice the overall figure.
That pattern is typical for a challenger with specific strengths. It also tells you what to fix: the learn-stage gap closes with explainers and guides that engines cite, not with more product pages. A single blended share of voice (7.4%) would never have shown it.
Pooled vs Engine-Averaged Share of Voice
There are two ways to combine engines, and they disagree:
| Method | How | Our brand | Competitor A |
|---|---|---|---|
| Pooled | Add every answer from every engine, then divide | 7.4% | 25.0% |
| Engine-averaged | Compute share per engine, then average the four | 11.0% | 24.8% |
Pooling lets the engine with the most tracked appearances (Gemini, 100) outweigh the one with the fewest (ChatGPT, 38). Averaging gives each engine equal weight, which matches the fact that each engine is its own channel with its own users. We prefer engine-averaged for headlines, with the per-engine table always attached.
Compute AI Share of Voice from Your Own Answers
Export answers as CSV with engine and answer columns, plus branded (1/0) if you have it. The script reads it with Python's csv module, so quoted multi-line answers are handled. The script skips branded rows, counts each brand once per answer, and ranks brands by the order of their first mention.
#!/usr/bin/env python3
"""AI share of voice per engine: mention rate, share of voice, average position, #1 slot.
Usage: python3 share_of_voice.py answers.csv --brand "Acme" --competitor "Globex" --competitor "Initech"
answers.csv columns: engine, answer; an optional `branded` column (1/0) - branded rows are skipped.
"""
import argparse, csv, re
from collections import Counter, defaultdict
def first_offsets(text, rx):
hits = {}
for name, pattern in rx.items():
m = pattern.search(text)
if m:
hits[name] = m.start()
return hits
def main():
ap = argparse.ArgumentParser()
ap.add_argument("csv"); ap.add_argument("--brand", required=True)
ap.add_argument("--competitor", action="append", default=[])
a = ap.parse_args()
names = [a.brand, *a.competitor]
rx = {n: re.compile(r"(?<![\w-])" + re.escape(n) + r"(?![\w-])", re.I) for n in names}
data = defaultdict(lambda: {"answers": 0, "mentions": Counter(), "pos": defaultdict(list), "first": Counter()})
with open(a.csv, newline="", encoding="utf-8") as f:
for r in csv.DictReader(f):
if r.get("branded") == "1":
continue # branded prompts name the brand by construction
for key in (r["engine"], "ALL"):
d = data[key]
d["answers"] += 1
hits = first_offsets(r["answer"], rx)
for rank, name in enumerate(sorted(hits, key=hits.get), 1):
d["mentions"][name] += 1 # once per answer
d["pos"][name].append(rank)
if rank == 1:
d["first"][name] += 1
for key in sorted(data, key=lambda k: (k == "ALL", k)):
d = data[key]
total = sum(d["mentions"].values())
print(f"\n[{key}] {d['answers']} unbranded answers, {total} tracked-brand appearances")
print(f"{'brand':<16}{'mention rate':>13}{'share of voice':>16}{'avg position':>14}{'#1 slot':>9}")
for n in sorted(names, key=lambda n: -d["mentions"][n]):
m = d["mentions"][n]
pos = sum(d["pos"][n]) / len(d["pos"][n]) if d["pos"][n] else float("nan")
print(f"{n:<16}{100 * m / d['answers']:>12.1f}%{100 * m / total if total else 0:>15.1f}%"
f"{pos:>14.2f}{d['first'][n]:>9}")
if __name__ == "__main__":
main()python3 share_of_voice.py answers.csv --brand "Acme" \
--competitor "Globex" --competitor "Initech" --competitor "Umbrella"The ALL block is the pooled figure. To get the engine-averaged figure, average the per-engine share of voice values yourself. Exact-name matching is deliberately simple. Engines also write domains and product names, so add those as aliases as described in our brand mention detection guide.
Where AI Share of Voice Comes From
Share of voice is an outcome. The inputs are the sources engines read: 76% of unbranded citations in our data were third-party pages (which sources AI engines cite). A competitor that owns the comparison articles owns the shortlists.
To move share of voice:
| Lever | What to do | Which engines it moves first |
|---|---|---|
| Own pages | State the category, audience, prices and differentiators in plain HTML, following helpful, people-first content guidance | ChatGPT, Perplexity (they cite vendor sites) |
| Third-party coverage | Get onto the comparison and "best tools" pages engines cite for your prompts | Gemini, Claude (they recommend from lists) |
| Consistent facts | Make every page agree on prices and plans | All engines; it protects sentiment and accuracy |
| Entity clarity | One brand name, one domain, consistent Organization markup (schema.org/Organization) | All engines; it reduces missed and wrong matches |
For the citation side, see the AI citation gap analysis. It lists the sources that recommend your rivals but not you.
How BugViso Calculates Share of Voice
In BugViso's AI Visibility Tracker, share of voice is one of five parts of the 0–100 visibility index:
| Part | Weight | Definition |
|---|---|---|
| Visibility (V) | 35 | answers mentioning the brand ÷ successful answers |
| Share of voice (S) | 20 | brand appearances ÷ all tracked-brand appearances, once per answer |
| Position (P) | 20 | 100 × (1 − (avg rank − 1)/(N − 1)), 0 if never mentioned |
| Citations (C) | 15 | answers citing the brand's own domain ÷ successful answers |
| Sentiment (T) | 10 | mean sentiment over answers mentioning the brand |
Each part is computed per engine on unbranded prompts, then averaged over engines, so no single engine dominates. Refused and empty answers are excluded, not counted as misses. Brands are ranked by index, and the leaderboard, per-engine scorecard and segments by intent and topic all show share of voice next to mention rate.
On the first of our two runs, the tracker scored our brand S = 12.4 with V = 7.9, for an index of 26.5, rank 5 of 6. The breakdown and the answers behind it are on the AI visibility tracker page.
Pitfalls
Counting raw mentions. When a tracked brand was named, it was named 2.18 times per answer on average (up to 9). Counting every mention rewards verbose engines and repetitive answers.
Mixing branded prompts in. Engines named the brand in every branded answer. Add one branded prompt for every four unbranded ones, and our mention rate would jump from 7.5% to about 26%, level with the category leader's unbranded rate.
Ignoring answers with no tracked brand. 157 of our 280 unbranded answers named none of the six brands. They don't enter share of voice, but they're why mention rate matters: share of voice is "of the recommendations made", not "of the buyers asking".
Comparing across competitor lists. A share from a five-competitor report can't be compared with a share from a three-competitor report, as the table above shows.
Reading one run as a trend. Shortlists change on re-asks. In our repeat test, 40% of non-empty shortlists changed within 23 minutes (are AI answers consistent). Pool runs before comparing periods.
FAQ
What is AI share of voice?
The share of all tracked-brand appearances in AI answers that are yours, counted once per answer on prompts that don't name you. If engines made 284 tracked-brand recommendations and 21 were you, your share of voice is 7.4%.
How is AI share of voice different from mention rate?
Mention rate divides by answers; share of voice divides by recommendations. On engines that name few brands per answer, your share is higher than your mention rate. On engines that name many, it's lower.
What is a good AI share of voice?
It depends on how many competitors you track. With five competitors, an equal split is 16.7%. Compare yourself with the leader on the same list and the same prompts, not with a generic benchmark.
Should branded prompts count toward share of voice?
No. Branded prompts named the brand in 100% of answers in our data. Track them separately to check accuracy and sentiment, not visibility.
How many answers do I need for a reliable share of voice?
Enough for the brand's appearances to be stable. At a 10% rate, 200 answers gives roughly ±4 points. Pool a week of runs for anything you present as a trend.
Can share of voice fall while mention rate rises?
Yes. If engines start naming more brands per answer, everyone's mention rate can rise while your share of the recommendations falls. That's why a report needs both: mention rate for reach, share of voice for competitive position.
Conclusion
AI share of voice is only meaningful with a fixed competitor list, unbranded prompts and once-per-answer counting, reported per engine, which is how BugViso's AI visibility tracking computes it on every run.
See where your site stands
Run a free BugViso audit for SEO, speed, accessibility and AI search readiness — with fixes you can ship today.