Prompt Coverage vs Mention Rate: Which AI Metric to Report

Prompt coverage vs mention rate: our brand covered 11 of 35 buyer prompts (31%) but was named in only 7.5% of AI answers. Learn which to report, and when.

BugViso

14 min read

Report mention rate as the headline and prompt coverage as the breadth check next to it. Mention rate is the share of AI answers that name you, so it tracks what buyers actually see. Prompt coverage is the share of tracked prompts where you appear at least once, so it shows how many buyer questions you've reached at all. On the same 280 answers, our brand had a 7.5% mention rate and 31% prompt coverage.

Those two numbers describe the same answers, yet they tell different stories. This post shows why they diverge, where coverage misleads, and a decision table for which to put in front of a client. It also includes a script that prints both metrics for every brand and engine.

Data used: 35 unbranded buyer prompts × ChatGPT, Gemini, Perplexity and Claude × 2 runs on 2026-10-20 (280 answers, web search on, 8 answers per prompt), collected by BugViso's AI Visibility Tracker for bugviso.com against five anonymised competitors, A–E.

The Two Metrics Side by Side

Mention ratePrompt coverage
Formulaanswers naming you ÷ answersprompts with ≥1 answer naming you ÷ prompts
Unitone answerone prompt (all its samples, all engines)
Our brand7.5% (21 of 280)31.4% (11 of 35)
Category leader (A)25.4% (71 of 280)51.4% (18 of 35)
Answers the questionHow often does a buyer see us?How many buyer questions do we show up for at all?
Grows with more samples?No (it converges)Yes (more chances to appear once)
Best useHeadline, trend, comparisonsBreadth check, finding untouched topics

Our coverage is 4.2 times our mention rate. The leader's is only twice its mention rate. That ratio is the first thing to look at, because it tells you whether a brand's visibility is broad and deep or thin and scattered.

Depth: The Number Hiding Between Them

The gap between the two metrics has a name: depth, the average number of answers that name you on a prompt you cover. Each prompt here had 8 answers (4 engines × 2 runs).

BrandMention ratePrompts coveredDepth (of 8)
Competitor A25.4%18 of 353.94
Competitor D14.6%12 of 353.42
Competitor C18.6%16 of 353.25
Competitor B22.5%20 of 353.15
Competitor E12.9%13 of 352.77
BugViso7.5%11 of 351.91

When the leader covers a prompt, about half of the answers to it name the leader. When our brand covers a prompt, it typically appears in two answers out of eight, often from a single engine. A covered prompt with depth 1 is a foothold. It isn't a position you hold yet.

Depth also exposes concentration. Our 21 mentions came from 11 prompts, but the top 3 prompts produced 52% of them and the top 5 produced 71%. The other 24 prompts produced none. Six of our 11 covered prompts rest on a single answer each.

The Rankings Disagree

Sort the six brands by each metric and the order changes:

RankBy mention rateBy prompt coverage
1Competitor A (25.4%)Competitor B (20 prompts)
2Competitor B (22.5%)Competitor A (18)
3Competitor C (18.6%)Competitor C (16)
4Competitor D (14.6%)Competitor E (13)
5Competitor E (12.9%)Competitor D (12)
6BugViso (7.5%)BugViso (11)

Both swaps are real and both mean something. Competitor B shows up on more questions than A, but less often on each. Competitor D is named heavily on a narrow set of prompts, and E is named lightly on a wider set.

A client report that shows only one metric will crown a different leader depending on which one you choose. That's the strongest argument for showing both.

Per Engine, Coverage Can Look Healthy While Mentions Don't

EngineMention ratePrompt coverage
ChatGPT8.6% (6 of 70)5 of 35
Gemini4.3% (3 of 70)2 of 35
Perplexity17.1% (12 of 70)8 of 35
Claude0.0% (0 of 70)0 of 35
Any engine7.5%11 of 35

The "any engine" coverage of 11 prompts is larger than any single engine's, because each engine covers different prompts. Coverage pooled across engines rewards spreading thin. A prompt counts as covered even if three engines ignore you and the fourth names you once.

That's why the per-engine numbers matter more than the pooled one. On Claude, our coverage is zero. A pooled 31% hides that completely.

Coverage by Topic Shows Where to Work

Coverage earns its place when you split it by topic. Here are our brand and the leader across the seven topics the prompts were grouped into:

TopicPromptsOur coverageOur answersLeader's coverageLeader's answers
Audit scan quotas and rollover539 of 40512 of 40
Pricing and free reports534 of 40522 of 40
SEO and technical checks635 of 48531 of 48
White-label agency reports523 of 4025 of 40
AI search readiness600 of 4811 of 48
Core Web Vitals and performance500 of 4000 of 40
Accessibility and mobile300 of 2400 of 24

Three topics have zero coverage for us. Two of them are also zero for the leader, because engines answer those questions with free tools: performance answers named Google's PageSpeed Insights or Lighthouse in 39 of 40 cases, and accessibility answers named the open-source axe engine in 19 of 24. That's a different problem from a topic where the leader holds 31 of 48 answers. Coverage by topic separates "nobody owns this yet" from "someone else owns this", and those call for different plans.

The Sample-Count Trap

Prompt coverage has a property mention rate doesn't: it grows every time you add samples, because each new answer is another chance to appear once.

BrandCoverage, run 1Coverage, run 2Coverage, both runsMention rate, both runs
BugViso97117.5%
Competitor A16161825.4%
Competitor B19182022.5%
Competitor E10121312.9%

Our coverage rose from 9 prompts to 11 just by pooling a second run, a 22% jump with no change in what engines say. Our mention rate stayed at 7.1–7.9% across runs, inside its 95% Wilson interval of 5.0–11.2%. If one month's report pools 7 daily runs and the next pools 30, coverage will rise even if nothing improved.

Each answer comes from a fresh web search (see OpenAI's web search tool docs), so a single sample can miss you for reasons that have nothing to do with your site. Classic search behaves the same way: Google notes that results are specific to the time, place, device and history of the searcher (Search Console performance report).

Two fixes: compare coverage only between periods with the same number of samples, or use a sample-proof variant. BugViso's weekly report uses the second option. A prompt counts as won on an engine when the brand appears in at least half of that week's samples.

Brand(prompt, engine) pairs won, of 140Named in both samples
Competitor A4427
Competitor B3924
BugViso156

A won pair is stable by construction. It needs repeated appearances, so a lucky single answer doesn't count. Our brand appeared in both samples on only 6 pairs, a more honest picture of where we're established.

Which Metric to Report: A Decision Table

You want to show…ReportWhy
How visible the brand is overallMention rate, per engine and averagedIt's what buyers see, and it doesn't drift with sample count
Progress month over monthMention rate + won promptsBoth are stable when the sample count changes
Where to create content nextPrompt coverage per topic and engineUncovered prompts are the gaps
Breadth vs depthBoth, plus depthThe ratio shows whether visibility is scattered
Competitive positionMention rate and share of voiceCoverage alone can crown a different leader
A quick win to celebratePrompts gained (won pairs)Real change, not one lucky answer

Coverage is a planning metric. Mention rate is a performance metric. Mixing them up is how reports end up claiming progress that the buyer never sees. For the companion competitive metric, see AI share of voice.

Compute Both Metrics from Your Own Answers

The script below prints mention rate, coverage, depth and won pairs per brand and engine from a CSV export, then shows how coverage changes as runs are added. It needs run, engine, prompt_id and answer columns, plus branded if you have it.

python
#!/usr/bin/env python3
"""Prompt coverage vs mention rate per brand and engine, with depth and the sample-count trap.

Usage: python3 prompt_coverage.py answers.csv --brand Acme --competitor Globex --competitor Initech
answers.csv columns: run, engine, prompt_id, answer, branded (1/0; branded rows are skipped).
"""
import argparse, csv, re
from collections import defaultdict

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}
    rows = [r for r in csv.DictReader(open(a.csv, newline="", encoding="utf-8")) if r.get("branded") != "1"]
    prompts = {r["prompt_id"] for r in rows}
    runs = sorted({r["run"] for r in rows})
    hit = lambda r, n: bool(rx[n].search(r["answer"]))
    print(f"{len(prompts)} unbranded prompts, {len(rows)} answers, runs: {', '.join(runs)}\n")
    print(f"{'brand':<14}{'engine':<12}{'mention rate':>13}{'coverage':>10}{'depth':>7}{'won pairs':>11}")
    for n in names:
        for e in sorted({r["engine"] for r in rows}) + ["ALL"]:
            E = [r for r in rows if e == "ALL" or r["engine"] == e]
            m = sum(hit(r, n) for r in E)
            cov = {r["prompt_id"] for r in E if hit(r, n)}
            pairs = defaultdict(lambda: [0, 0])  # (prompt, engine) -> [hits, samples]
            for r in E:
                p = pairs[(r["prompt_id"], r["engine"])]; p[0] += hit(r, n); p[1] += 1
            won = sum(1 for h, s in pairs.values() if h / s >= 0.5)
            depth = m / len(cov) if cov else 0
            print(f"{n:<14}{e:<12}{100 * m / len(E):12.1f}%{len(cov):>5}/{len(prompts):<4}{depth:7.2f}{won:>6}/{len(pairs):<4}")
        print()
    print("Coverage grows with samples; mention rate doesn't (all engines):")
    for n in names:
        line = []
        for k in range(1, len(runs) + 1):
            E = [r for r in rows if r["run"] in runs[:k]]
            line.append(f"{k} run(s): {len({r['prompt_id'] for r in E if hit(r, n)})} prompts, "
                        f"{100 * sum(hit(r, n) for r in E) / len(E):.1f}%")
        print(f"  {n:<14}" + " | ".join(line))

if __name__ == "__main__":
    main()
bash
python3 prompt_coverage.py answers.csv --brand "Acme" --competitor "Globex" --competitor "Initech"

Run it on two exports with the same number of runs if you want to compare coverage between periods. The ALL row's depth uses every engine's answers, so it reads as "answers per covered prompt across the whole run". A depth near 1 means a foothold on each prompt rather than a hold.

How BugViso Reports Prompt Coverage and Mention Rate

The engine scorecard in BugViso's AI Visibility Tracker puts both metrics in the same row for each engine: mention rate, prompt coverage, citation coverage, share of voice and accuracy. The overall row averages mention rate across engines. It counts a prompt as covered when any engine names you, and shows the count ("11 of 35 prompts") next to the percentage so the denominator is never hidden.

Coverage feeds the planning views. Topic segments show which groups of questions you never reach, and the report's prompt table lists every question, which engines named you on it and who they named instead. Mention rate feeds the headline score as its visibility part. The weekly wrap-up pools the week's daily runs and lists prompts gained and lost using the "at least half the samples" rule, which avoids the sample-count trap. The scorecard is described on the AI visibility tracker page.

Misconceptions

"Coverage went up, so we're more visible." Not if the sample count went up too. Check the run count first.

"Coverage of 31% means we appear in a third of answers." It means a third of prompts produced at least one answer naming us. Our answer-level rate was 7.5%.

"Uncovered prompts are lost causes." They're the cheapest place to find content gaps. Engines answer them by citing someone, so read who they cite. Our AI citation gap analysis shows how.

"One engine's coverage is enough." Engines covered different prompts. Pooled coverage hid a zero on Claude.

"More prompts always help." More prompts raise coverage's denominator and its noise. A set of 35–50 well-chosen unbranded prompts measured repeatedly beats 200 measured once.

Frequently Asked Questions

What is prompt coverage in AI visibility tracking?

Prompt coverage is the share of tracked prompts where at least one AI answer names your brand. If 11 of 35 prompts produced one or more answers naming you, your prompt coverage is 31.4%.

What's the difference between prompt coverage and mention rate?

Mention rate counts answers, while prompt coverage counts prompts. A brand named once on each of many prompts has high coverage and a low mention rate. A brand named every time on a few prompts has the opposite profile.

Which is better to report to clients, prompt coverage or mention rate?

Lead with mention rate per engine, because it reflects what buyers see and stays stable as you add samples. Show prompt coverage beside it as a breadth check, with the prompt count.

Why does prompt coverage keep increasing over time?

Each extra run gives your brand another chance to appear once on each prompt, so coverage rises with sample count even when nothing changes. Compare periods with equal run counts, or count prompts won in at least half the samples.

What is a good prompt coverage for a brand?

It depends on your prompt set and competitors. In our category, the leader covered 18 of 35 prompts and the broadest brand 20. Compare against competitors on the same prompts and runs.

Lead With Mention Rate, Plan With Coverage

Mention rate tells you how often buyers see you. Prompt coverage tells you where you haven't been seen yet. Report the first, act on the second, and never compare coverage across different sample counts. BugViso's AI visibility tracking keeps both, per engine, in the same scorecard row.

Found this useful? Share it.

See where your site stands

Run a free BugViso audit for SEO, speed, accessibility and AI search readiness — with fixes you can ship today.