# Mention Rate and Share of Voice — AI Visibility and LLM Brand Discovery

Source: https://www.geekswithgeeks.com/en/ai-visibility/meas-mention-rate

> Compute how often you appear and how you compare with competitors, with honest uncertainty.

## Rate, share and range

Run each prompt several times, on the assistants your customers use, and record the answers. **Mention rate** = answers that name your brand ÷ total answers. **Share of voice** = your mentions ÷ all brand mentions in the category. Because outputs are non-deterministic, report a **range** (a confidence interval), not just one number: 5 mentions in 10 answers is 50%, but the plausible range is roughly 24% to 76%. More runs narrow the range. Always note the assistant, whether web search was on, the date and the location or language.

## Mention rate with a Wilson interval, run

I ran this on ten made-up answers to the same question. Acme Tasks is named in 5 of 10 (50%) with a 95% range of 0.24 to 0.76. Treat this data as invented for demonstration.

```python
import re, math
answers = [
 "For project tracking, consider Asana, Trello or Acme Tasks.",
 "Top picks: Jira, Trello, and ClickUp.",
 "Acme Tasks is a lightweight option; also see Todoist.",
 "Many teams use Notion or Asana.",
 "Try Acme Tasks if you want simple boards.",
 "Jira and Monday.com lead for enterprises.",
 "Trello and Acme Tasks are good for small teams.",
 "Asana, ClickUp and Basecamp are popular.",
 "Acme Tasks or Todoist suit individuals.",
 "Consider Linear, Jira or Asana.",
]
brand = re.compile(r"\bAcme Tasks\b", re.I)
k = sum(bool(brand.search(a)) for a in answers); n = len(answers)

def wilson(k, n, z=1.96):
    p = k / n; d = 1 + z * z / n
    c = (p + z * z / (2 * n)) / d
    h = z * math.sqrt(p * (1 - p) / n + z * z / (4 * n * n)) / d
    return round(c - h, 2), round(c + h, 2)

print(k, n, k / n, wilson(k, n))
```

Output:

```
5 10 0.5 (0.24, 0.76)
```

## Share of voice and order of mention, run

Using the same ten answers: Acme Tasks has 5 of 20 brand mentions (share of voice 0.25), Asana 4 (0.2). In the first answer the order of mention is Asana, Trello, Acme Tasks. Order can matter because users read top items first.

```python
import re
brands = ["Acme Tasks", "Asana", "Trello", "Jira", "ClickUp", "Todoist", "Notion"]
cnt = {b: sum(bool(re.search(r"\b" + re.escape(b) + r"\b", a, re.I)) for a in answers)
       for b in brands}
total = sum(cnt.values())
print(cnt, {b: round(cnt[b] / total, 2) for b in ("Acme Tasks", "Asana")})

def order(answer, names):
    pos = [(m.start(), n) for n in names
           if (m := re.search(r"\b" + re.escape(n) + r"\b", answer, re.I))]
    return [n for _, n in sorted(pos)]

print(order(answers[0], brands))
```

Output:

```
{'Acme Tasks': 5, 'Asana': 4, 'Trello': 3, 'Jira': 3, 'ClickUp': 2, 'Todoist': 2, 'Notion': 1} {'Acme Tasks': 0.25, 'Asana': 0.2}
['Asana', 'Trello', 'Acme Tasks']
```

**Quiz:** Why report a range rather than a single mention-rate number?

- [ ] Ranges look more complicated
- [x] Answers vary run to run, so one number can mislead
- [ ] Assistants always return identical answers
- [ ] Single numbers are illegal

*Answer:* Answers vary run to run, so one number can mislead. Sampling noise means small samples give wide plausible ranges that should be shown.
