AI Visibility Prompts: How to Build a 50-Prompt Tracking Set
AI visibility prompts decide what your tracking measures. Build a 50-prompt set with the right intent mix, branded share and topics, then lint it with a script.
Your prompt set is the measuring instrument. Build it from questions real buyers type, mostly unbranded, spread across learn, consider and purchase stages, grouped into 4–8 topics of at least 3 prompts each. Then freeze it. In our data, prompts that named the brand got it mentioned in 100% of answers; prompts that didn't, in 7.5%. Get the mix wrong and the score is fiction.
Most AI visibility reports fail before the first answer comes back. The prompts lean branded, sound like marketing copy, or cluster on the one topic the brand wins. This guide is a production checklist for building a set that measures what buyers actually see.
Reference set: the 50 prompts BugViso's AI Visibility Tracker drafted for bugviso.com (website-audit software). They were answered by ChatGPT, Gemini, Perplexity and Claude in two runs on 2026-10-20, against five anonymised competitors.
The Pre-Flight Matrix
| Tier | Check | Pass condition |
|---|---|---|
| P0 | Unbranded share | At least 50% of prompts don't name you; 65–80% is better |
| P0 | Correct labels | Every prompt marked branded names you; no unbranded prompt does |
| P0 | Frozen set | One version per reporting period; edits create a new version |
| P1 | Intent mix | Learn, consider and purchase each at least 15% of the set |
| P1 | Topic coverage | 4–8 buying themes, at least 3 prompts each |
| P1 | Real phrasing | One question, about 6–25 words, as a buyer would type it |
| P1 | No near-duplicates | No two prompts are paraphrases of each other |
| P2 | Competitor prompts | "Alternatives to X" prompts capped at about 10% |
| P2 | Facts you can check | Branded prompts cover pricing, plans and policies so accuracy can be measured |
The rest of this post explains each tier with data, then gives you a linter that checks the set automatically.
Tier P0: Branded vs Unbranded Prompts
A branded prompt names your brand ("how much does BugViso cost"). An unbranded prompt is the open question a buyer asks before they know you ("which website audit tools let unused scans roll over to the next month").
They measure different things. Here's what our two runs returned:
| Prompt type | Answers | Brand named | Own site cited |
|---|---|---|---|
| Branded | 120 | 100% | 97.5% |
| Unbranded | 280 | 7.5% | 10.7% |
Branded prompts tell you how engines describe you: sentiment, accuracy, which of your pages they cite. Unbranded prompts tell you whether engines recommend you. Only unbranded prompts belong in a visibility score.
Our reference set had 35 unbranded and 15 brand-naming prompts (30%). If all 50 were pooled into one rate, the brand's mention rate would read 35.3% instead of 7.5%. That's a nearly fivefold inflation from one labelling decision.
💡 Rule: score visibility on unbranded prompts only. Keep branded prompts, but report them in their own section for sentiment and accuracy.
Labels must match the text
A prompt labelled unbranded that names you leaks the answer. A prompt labelled branded that doesn't name you hides a real recommendation. Check labels against the text, including aliases and your domain. The linter below does this.
Tier P1: Intent Mix
Buyers ask different questions at different stages, and engines answer each stage differently. The tracker tags each prompt as learn, consider or purchase. Across the 280 unbranded answers:
| Intent | Example from the reference set | Unbranded answers | Brand named | Any competitor named | Tracked brands per answer |
|---|---|---|---|---|---|
| Learn | "how do agencies use website audits to prove SEO results to clients" | 80 | 0.0% | 27.5% | 0.89 |
| Consider | "best website audit plan for an agency that needs around 300 audits a month" | 120 | 9.2% | 52.5% | 1.23 |
| Purchase | "is a $19 a month website audit plan worth it for an indie developer" | 80 | 12.5% | 30.0% | 0.82 |
Three things follow:
- Consider prompts are where shortlists form. Engines named a competitor in over half of them. That's the most competitive part of the set.
- Learn prompts expose authority gaps. Our brand was never named on them, while competitors were in 27.5%. Engines cite established vendors' guides when explaining a topic.
- Purchase prompts favour specific strengths. A challenger with a clear price point or feature shows up most here.
A set with no learn prompts would hide the authority gap. A set with only purchase prompts would flatter a niche brand.
Intent also affects stability. Re-asked 23 minutes later, learn prompts kept the same tracked-brand set 87% of the time, consider prompts only 68% (answer consistency study). Consider-heavy sets need more runs for the same precision.
A reasonable default mix for the unbranded part is roughly 30% learn, 40% consider, 30% purchase. Our reference set landed at 26 / 46 / 28 across all 50 prompts.
Tier P1: Topics
Group prompts into the buying themes of your category. The reference set had seven:
| Topic | Prompts |
|---|---|
| SEO and technical website checks | 9 |
| Pricing and free reports | 8 |
| Audit scan quotas and rollover | 8 |
| White-label agency reports | 8 |
| AI search readiness and crawler access | 8 |
| Core Web Vitals and performance testing | 6 |
| Accessibility and mobile testing | 3 |
Topics turn a single score into a map of strengths and gaps. They also need a minimum size. With 4 engines and a week of daily runs, a three-prompt topic collects 84 answers, which gives an interval of roughly ±6 points at a 10% rate. Keep at least 3 prompts per topic, and more for themes that matter commercially. The sample-size math is in how often to track AI visibility.
Tier P1: Phrasing Like a Buyer
Engines treat a prompt as a conversation starter: they rewrite it into search queries and answer what they think you meant. Prompts written like ad copy produce answers no buyer ever sees.
| ❌ Avoid | ✅ Use instead | Why |
|---|---|---|
| "best crm" | "what's the best CRM for a 10-person agency that bills hourly" | Real buyers add context; 2-word queries are search-engine habits |
| "why is Acme the best audit tool" | "which audit tool is best for agencies with 50 clients" | Leading questions name you and assume the answer |
| "Acme vs Globex vs Initech vs Umbrella features pricing reviews" | "is Acme or Globex better for a small agency" | One question per prompt |
| "best tool in [city]" | "best accounting firm for startups in Austin" | Placeholders aren't questions |
| "what is a website audit" and "website audit meaning" | Keep one | Paraphrases double-count one question |
Keep prompts in the language and market of the buyers you serve, and include a location only for businesses that serve an area. For the content side of matching buyer questions, see writing content AI assistants quote.
Tier P2: Competitor Prompts and Checkable Facts
Competitor prompts ("alternatives to Competitor A that crawl in a real browser and write fixes with AI") measure how often you're offered as the replacement. They're useful in small doses. Too many, and the set measures your rivals' branded demand instead of yours. Our reference set had one; cap them at about 10%.
Branded prompts should cover the facts buyers check: price, plans, quotas, refunds, integrations. In our data, every one of the 10 claims flagged inaccurate was about pricing, plans or quotas, and 9 of the 10 came from branded prompts. The AI brand accuracy audit shows what those errors looked like.
Lint Your Prompt Set
Save the set as CSV with prompt, intent and branded (1/0) columns (read with Python's csv module). Run this standard-library linter with your brand and competitor names:
#!/usr/bin/env python3
"""Lint an AI visibility prompt set before you start tracking it.
Usage: python3 prompt_set_lint.py prompts.csv --brand "Acme" [--competitor "Globex" ...]
prompts.csv columns: prompt, intent (learn/consider/purchase), branded (1/0).
"""
import argparse, csv, re
from collections import Counter
from itertools import combinations
STOP = set("a an the and or for to of in on with is are do does what which how best my i me our you your it be can should".split())
def tokens(s):
return {w for w in re.findall(r"[a-z0-9$]+", s.lower()) if w not in STOP}
def main():
ap = argparse.ArgumentParser()
ap.add_argument("csv"); ap.add_argument("--brand", required=True)
ap.add_argument("--competitor", action="append", default=[])
ap.add_argument("--dup", type=float, default=0.6, help="token Jaccard at or above this = near-duplicate")
a = ap.parse_args()
rows = list(csv.DictReader(open(a.csv, newline="", encoding="utf-8")))
names = [a.brand, *a.competitor]
named = lambda p: [n for n in names if re.search(r"(?<![\w-])" + re.escape(n) + r"(?![\w-])", p, re.I)]
problems, rival = [], []
intents = Counter(r["intent"] for r in rows)
branded = [r for r in rows if r["branded"] == "1"]
print(f"prompts: {len(rows)} branded: {len(branded)} ({100 * len(branded) / len(rows):.0f}%)")
print("intent mix: " + ", ".join(f"{k} {v} ({100 * v / len(rows):.0f}%)" for k, v in intents.most_common()))
if len(branded) / len(rows) > 0.35:
problems.append("more than 35% branded prompts: they name you by construction and inflate visibility")
for it in ("learn", "consider", "purchase"):
if intents[it] / len(rows) < 0.15:
problems.append(f"intent '{it}' is under 15% of the set")
for r in rows:
hits = named(r["prompt"])
if r["branded"] == "0" and a.brand in hits:
problems.append(f"marked unbranded but names {a.brand}: {r['prompt']!r}")
elif r["branded"] == "0" and hits:
rival.append(r["prompt"]) # "alternatives to X" prompts: fine in moderation
if r["branded"] == "1" and a.brand not in hits:
problems.append(f"marked branded but doesn't name {a.brand}: {r['prompt']!r}")
words = len(r["prompt"].split())
if words < 5 or words > 30:
problems.append(f"{words} words (aim for 5-30, like a real question): {r['prompt']!r}")
print(f"competitor-named prompts: {len(rival)}")
if len(rival) / len(rows) > 0.2:
problems.append("over 20% of prompts name a competitor: they measure rivals' branded demand, not yours")
toks = [(r["prompt"], tokens(r["prompt"])) for r in rows]
for (p1, t1), (p2, t2) in combinations(toks, 2):
j = len(t1 & t2) / len(t1 | t2) if t1 | t2 else 0
if j >= a.dup:
problems.append(f"near-duplicate ({j:.2f}): {p1!r} ~ {p2!r}")
print(f"\n{len(problems)} issue(s)")
for p in problems:
print(" -", p)
if __name__ == "__main__":
main()On our reference set (competitor names masked):
prompts: 50 branded: 15 (30%)
intent mix: consider 23 (46%), purchase 14 (28%), learn 13 (26%)
competitor-named prompts: 1
0 issue(s)And on a deliberately bad four-prompt set:
prompts: 4 branded: 1 (25%)
intent mix: consider 2 (50%), purchase 1 (25%), learn 1 (25%)
competitor-named prompts: 0
5 issue(s)
- 4 words (aim for 5-30, like a real question): 'best crm for agencies'
- marked unbranded but names Acme: 'is Acme worth it'
- 4 words (aim for 5-30, like a real question): 'is Acme worth it'
- marked branded but doesn't name Acme: 'what is a CRM and why do small agencies need one'
- near-duplicate (1.00): 'best crm for agencies' ~ 'what is the best crm for agencies'The near-duplicate check compares content words with the Jaccard index after removing stop words, which is why "best crm for agencies" and "what is the best crm for agencies" score 1.00. Lower --dup to be stricter. Matching uses Python's re look-arounds (re module), so add your domain and product names as extra --competitor-style checks if buyers use them.
Validation Protocol Before You Freeze
- Run the linter and fix every issue.
- Read every prompt aloud. If you wouldn't type it into a chat box, rewrite it.
- Check topic sizes: at least 3 prompts each, more for revenue-critical themes.
- Do one test run and read a sample of answers per engine. Prompts that return refusals or off-topic answers need rewording.
- Freeze and record the version. Every report should state the prompt version it was measured on.
How BugViso Builds and Checks Prompt Sets
BugViso's AI Visibility Tracker drafts the set for you, then enforces these rules in code rather than trusting the model:
- Drafted from your site and your brief. The tracker reads the site, you confirm a short brand brief (what you sell, for whom, key facts, at least 3 competitors), and 50 prompts are drafted from it by default.
- A target mix. Roughly 70% discovery prompts (about 30% learn, 40% consider, 30% purchase), 20% branded and 10% comparison.
- Automatic checks. Discovery prompts naming your brand, alias or domain are rejected. Near-duplicates (token Jaccard ≥ 0.8), placeholders like
[city], links and leading "why is X the best" questions are removed. Every topic keeps at least 3 prompts. - A freeze gate. At least 10 prompts, at least 50% unbranded and at least 3 competitors before tracking starts.
- Review before tracking. On first setup you review the set by topic or as a list: add, edit, move or delete prompts, or redraft, then start tracking. Prompts you add are classified automatically from the names they contain.
- Versioned sets. A tracked set is frozen; edits open a new version, and reports compare like with like.
You can see the review screen and the topic view on the AI visibility tracker page.
High-Risk Oversights
Letting the brand team write the prompts. They write questions the brand wins. Draft from buyer language: sales calls, support tickets, search queries, review sites.
Tracking only the topics you're strong in. The learn-stage gap in our data (0% vs 27.5% for competitors) is the most useful finding in the set. A flattering set would have hidden it.
Changing prompts to chase a better score. Swapping a lost prompt for an easier one breaks the trend and the honesty of the number. Fix the content, keep the prompt.
Forgetting the market. "Best accountant near me" means nothing without a location, and an English-only set misses buyers who ask in other languages. Track each market as its own brand setup.
FAQ
How many prompts should I track for AI visibility?
Around 50 is a good default: enough for 4–8 topics of 3+ prompts each and a stable headline when multiplied by engines and runs. More prompts improve topic coverage; more runs improve precision.
Should AI visibility prompts include my brand name?
Some should, but score them separately. In our data, branded prompts named the brand 100% of the time, so they can't measure visibility. Use them to check accuracy and sentiment.
What are good prompts for tracking brand mentions in ChatGPT?
Questions buyers ask before they know you: "best X for Y", "which X does Z", "is $N a month worth it for X". Keep them to one question of about 6–25 words, in the buyer's own words.
How do I find the prompts my buyers use?
Start from sales and support conversations, on-site search, and the questions on your FAQ and comparison pages. Then group them into buying themes and fill gaps per intent stage.
Can I change my prompt set later?
Yes, but treat each change as a new version. Comparing scores across versions mixes two instruments. Change prompts at the start of a reporting period and note it in the report.
Conclusion
A prompt set with mostly unbranded buyer questions, a balanced intent mix and frozen versions is the difference between an AI visibility number and a vanity metric, which is why BugViso's AI visibility tracking drafts, checks and versions the set before the first 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.