Brand Mention Tracking
Quick facts
- Difficulty
- Intermediate
- Time
- About half a day to build the detector, then roughly 30 minutes per week
- Prerequisites
- GEO Metrics, Brand Mentions, Citation vs Mention vs Link
- What this is
- This is a practical workflow for counting unlinked brand mentions in AI answer text
- How detection differs
- Citation tracking reads URL fields from the engine, while mention tracking requires a detector for brand names in the answer text
- Core metrics
- The workflow uses four metrics: Mention Frequency, Share of Voice, Answer Inclusion Rate, and Brand Sentiment
- Metric definitions
- GEO Metrics defines every metric used in this workflow
- Estimated effort
- Expect about half a day to build the detector, followed by roughly 30 minutes each week
1. What brand mention tracking is
A repeatable brand mention tracking system uses a frozen prompt set, queries a defined set of engines on a fixed schedule, and checks each sampled answer for your brand names and those of your competitors. After each match is verified and recorded in a consistent schema, the data forms a time series showing how often your brand appears, where it appears in an answer, and whether the surrounding sentiment is positive, negative, neutral, or comparative.
Citation and mention tracking use the same collection process but require different detection methods. Citations appear in URL fields such as Perplexity’s search_results[], OpenAI’s url_citation annotations, and Gemini’s groundingChunks. Major engines do not provide an equivalent field for brand names in generated prose, so you must build the mention detector and control its errors. AI Citation Tracking describes how to collect citation data. Brand Mentions explains why unlinked mentions matter, Citation vs Mention distinguishes the outcomes, and GEO Metrics defines the formulas.
Three characteristics make mention tracking more difficult than citation tracking:
- No engine API provides a
mentions[]field. This applies to Perplexity (Chat Completions reference), OpenAI (Responses API web search), Google AI Overviews (Search Central: AI features), and Gemini (Grounding with Google Search). These systems identify source URLs and sometimes the text spans supported by citations, but they do not label brand entities in generated prose. - You must define what counts as one mention (§4.3). The answer “Acme is fast. Acme integrates with X. Acme costs less.” can be counted once per answer, once per sentence, or once per occurrence, depending on the unit you choose.
- Brand names can be ambiguous. “Apple” may refer to the company or the fruit, “Meta” may be a company name or a modifier, and competitors may share sub-brand names. These collisions make precision harder to maintain than recall. Citation matching is less ambiguous because it compares exact URL strings.
2. Decide before you measure
Five decisions shape how to interpret every result. Record them before collecting data so the results remain comparable.
| Decision | Options | Rule of thumb |
|---|---|---|
| Which metrics | Mention Frequency, Share of Voice, Answer Inclusion Rate, Brand Sentiment | Start with Mention Frequency and AIR, which do not require a competitor set. SOV requires a defined competitor set |
| Unit of one mention | Sentence level / answer level / phrase level | Use sentence-level deduplication by default. Declare the unit and keep it consistent across runs |
| Competitor set | Closed (a predefined set) / open (every brand named) | Use a closed set for stable SOV reporting; use an open set for landscape analysis. State the mode in every report |
| Engine set | The engines your audience uses | Treat the engine set as a reported variable and name each engine included |
| Time window and cadence | For example, a weekly sample with a 7-day window | Answers change quickly, so treat the time window as part of the metric |
The four mention metrics are defined in GEO Metrics: Share of Voice in §3.4, Mention Frequency in §3.6, Answer Inclusion Rate in §3.7, and Brand Sentiment in §3.9. Use GEO Metrics for the formulas for any additional metrics.
3. Step 1: Build the prompt set and competitor set
Begin with 30–50 prompts based on real user intents. Balance them across categories, freeze and version the set, and store it under version control as data rather than configuration. AI Citation Tracking §3 explains how to create and maintain this prompt set.
Mention tracking also requires a competitor set, which citation tracking does not strictly need. Choose one of two modes:
- Closed: a defined set of N competitors. The SOV denominator remains stable, so results are comparable across runs.
- Open: every brand mentioned in any answer. This provides a broader view of the market, but the denominator changes between runs. Re-establish the baseline before comparing SOV results.
A Share of Voice result has no clear meaning without a declared competitor set. This is one reason vendor SOV figures disagree: Otterly publishes its formula, Ahrefs weights mentions by impressions, and Profound and BrightEdge do not disclose their methods. GEO Metrics §3.4 compares these definitions. Record the mode and member list, and version both.
Create a brands.yaml file alongside prompts.csv:
# brands.yaml (versioned alongside prompts.csv)
my_brand:
canonical: "Acme"
aliases: ["Acme Inc.", "Acme Corp", "Acme.ai"]
negative: ["acme"] # dictionary-word collision
disambiguation: ["SaaS", "CRM", "acme.com"] # required-context terms
parent: null
brands_set_v: v1
added_date: 2026-05-20
competitor_set:
mode: closed
members: [my_brand, competitor_a, competitor_b, ...]
competitor_set_v: v1
4. Step 2: Start with the manual method
Run the process by hand before automating it. Manual sampling establishes a reference for what a mention looks like on each engine, helps you evaluate a tool you may later purchase, and gives you the evidence needed to debug an inaccurate detector. The same manual-first principle applies to citation tracking, while mention tracking requires additional checks.
4.1 Define rules for aliases, capitalization, and boundaries
Store the canonical name and its aliases in brands.yaml. Define and freeze four boundary rules:
- Capitalization: use case-insensitive matching by default, but preserve the original capitalization in the log. This provides useful context for sentiment because “ACME LAUNCHED” reads differently from “acme launched.”
- Possessives and plurals: include forms such as “Acme’s” and “Acmes” by default. Exclude a form only through an explicit entry in the negative list.
- Hyphenation and spacing: accept variants such as “Acme AI,” “Acme.AI,” and “Acme-AI” unless
brands.yamlstates otherwise. - URLs and email addresses in the prose: exclude them. A URL containing the brand string is a citation event rather than a mention in the answer text.
Store these rules with brands.yaml and version them together.
4.2 Disambiguate names to protect precision
Brand names may also be dictionary words, such as “Apple”; geographic names, such as the Amazon River; people’s names; or sub-brands shared with competitors. False positives silently inflate Mention Frequency and distort SOV. This is a common source of hidden error in tools whose detectors cannot be audited.
When an alias is ambiguous, require a related product, domain, or topic phrase in the same sentence or the preceding sentence. Add the rule to the disambiguation: field in brands.yaml instead of hard-coding it. Use an LLM judge only for cases that remain ambiguous after this check.
4.3 Choose and document the deduplication unit
The deduplication unit has a major effect on the result. The same answer can produce three different numbers under these options:
- Sentence level: count one mention for each sentence containing a match. This distinguishes separate statements about the brand and is the default.
- Answer level: count no more than one mention per brand in each answer. This is closest to the question most vendors ask: “Was the brand mentioned in the answer?” Otterly’s headline Brand Mentions KPI belongs to this group (see Otterly Brand Report KPI Definitions) and corresponds to the Answer Inclusion Rate view.
- Phrase level: count every occurrence. This raises Mention Frequency and is useful only in the uncommon case where you need to measure density within a sentence.
Name the deduplication unit in every report header, just as AI Citation Tracking §7 requires a position definition of A, B, or C. Preserve the raw occurrence count for each sentence in the log schema below. You can then calculate results for all three units without changing the underlying data.
4.4 Record sentiment during detection
Tag every retained mention as pos, neg, neu, or comparative. Use comparative when the answer evaluates one brand against another, as in “X is faster than Acme.” The following heuristics cover many cases without a machine-learning detector:
- Look for a positive or negative adjective within four tokens of the brand name in the same sentence.
- Look for comparative phrases such as “faster than,” “unlike,” or “compared to” in the sentence containing the mention or in an adjacent sentence.
- Check the brand’s position in a table-form answer about “X vs Y” or “alternatives to X.”
The aggregation formula for Brand Sentiment appears in GEO Metrics §3.9. Record the tag when you detect the mention because the derived log will not retain enough context for later tagging. If you omit sentiment at this stage, you must sample the answers again.
4.5 Verify every mention
Apply the same verification discipline used for citation_verified in AI Citation Tracking §4.1. Set mention_verified = true only when both conditions below are met:
- The matched name refers to your entity rather than another meaning.
- The sentence discusses the brand rather than mentioning it incidentally. For example, exclude “Acme.com” when it appears inside a competitor’s URL, and exclude a sentence whose caveat contradicts the interpretation being tested.
Report verified and unverified counts separately. Liu et al. 2023 found that use and attribution can diverge in generated search answers. Similarly, a generated mention reflects the engine’s output, not verified evidence about your entity. Use verified mentions for the primary SOV figure and show unverified mentions separately. Otherwise, a vendor detector that you cannot audit may silently inflate the result.
Use the following mention-log row schema. Its fields can be reconciled with the citation-log schema in AI Citation Tracking §4, allowing you to join the logs and test whether a brand received any form of attribution.
run_date date the sample was taken (UTC)
prompt_id FK -> prompts.csv
prompt_set_v version tag of the frozen prompt set
brands_set_v version tag of brands.yaml + competitor set
engine perplexity | chatgpt | google-aio | gemini | ...
brand_id FK -> brands.yaml (my_brand or competitor_x)
unit sentence | answer | phrase (the dedup unit)
occurrence_count int, within-unit hits (>= 1)
mention_position 1-indexed position in the answer text
sentiment pos | neg | neu | comparative
mention_verified true | false (see §4.5)
detector_v rule pack version + (optional) judge model + prompt
snippet the sentence(s) the mention appears in
5. Step 3: Automate the validated workflow
Automate the process only after validating it manually, as described in AI Citation Tracking §5. Citation tracking can read the URL fields supplied by an engine. Mention tracking requires you to create and maintain the detector that reads the answer text.
5.1 What each engine provides
None of these engines provides a field that identifies brands in the answer text:
| Engine | Programmatic mention extraction? | What you get | Note |
|---|---|---|---|
| Perplexity (Sonar API) | No | The answer is returned as a string, with brand names embedded in the prose. search_results[] contains citation data; the legacy citations[] field has been deprecated and removed | Extract mentions from the answer text. See Perplexity AI |
ChatGPT (OpenAI Responses API, web_search) | No | Answer text, url_citation annotations, and sources[]. The last two contain citation data, not brand mentions | Extract mentions from the answer text. See ChatGPT Search |
| Google AI Overviews | No | There is no official content API; Search Console includes this traffic in aggregate “Web” totals without per-citation attribution | Extract mentions from the answer text. See Google AI Overviews |
| Gemini (Google Search Grounding) | Partial: groundingSupports identifies text spans supported by sources, not brand entities (docs) | groundingChunks contains sources and groundingSupports contains cited text spans. Brand spans require an additional NLP step | Extract mentions from the answer text. See Google Gemini |
| Bing Copilot | No | It provides answer text and a sources panel but no public mention API | Extract mentions from the answer text. See Bing Copilot |
In every case, mention extraction must be added to the engine output. Use the following three-stage approach.
5.2 Build the detector in three stages
The stages increase in cost and complexity. Stage 2 is sufficient for most production runs. Use stage 3 as a periodic quality check unless the brand has highly ambiguous aliases.
- Stage 1: rule-based matching. Use an alias dictionary, regular expressions with word-boundary anchors, the boundary rules from §4.1, and the negative list. This approach is inexpensive, deterministic, and auditable, but it misses paraphrases such as “the team behind X” and handles name collisions poorly.
- Stage 2: rule-based matching with heuristic disambiguation. Add a co-occurrence check based on
brands.yaml.disambiguation. Accept an ambiguous match only when a confirming phrase appears in the same or preceding sentence. This is the default for most brands. - Stage 3: an LLM judge for unresolved cases. Send cases that remain ambiguous after stage 2 to a separate, low-cost model identified in your methodology. You can also run this stage periodically as a quality check. A suitable prompt is:
Is "Acme" in this sentence referring to the SaaS company or another sense? Return yes/no/uncertain + 1-sentence reason.Pin the model and prompt, and include both versions indetector_v. Use stage 3 on every run only when aliases have a high collision risk. Examples include Apple, Amazon, and Meta.
An LLM judge must not change counts silently between runs. When you change the model or prompt, increment detector_v and establish a new baseline, just as you would after changing a prompt set in AI Citation Tracking §3.
The following engine-independent pseudocode writes results to the schema from §4:
for engine in engines:
for prompt in prompt_set_v: # frozen, versioned
answer = engine.ask(prompt) # fresh session, no history
for s in split_sentences(answer):
for brand in brands_set_v:
hit, occ = rule_match(s, brand.aliases, brand.negative)
if hit:
ok = disambiguate(s, brand) and llm_judge(s, brand) # 5.2 stages
tag = tag_sentiment(s, brand)
log.append(run_date, engine, prompt.id, prompt_set_v,
brands_set_v, brand.id, "sentence",
occ, position(s, answer), tag,
mention_verified=ok, detector_v=detector_v, snippet=s)
5.3 Evaluate vendors by metric definition
If you buy a tool, choose one whose definition of a mention fits your reporting needs. GEO Metrics §3.4 lists the formulas used by these products:
| Vendor | What they call a “mention” | Detector visibility | Where to read |
|---|---|---|---|
| Otterly.AI | Brand Mentions (answer-level binary) / Share of Voice (raw-count share) | Private detector; public formulas | Brand Report KPI Definitions |
| Ahrefs Brand Radar | AI Share of Voice, impression-weighted (Google search volume) | Private detector; published methodology | Brand Radar methodology |
| Profound | Visibility Score / Share of Voice | Not disclosed | How to Track Your Visibility in AI Search |
| BrightEdge | AI brand-mention share variants based on its SEO SOV patent | Not disclosed | SOV in 2026 |
Do not place SOV figures from two vendors in the same report as though they measured the same thing. Ahrefs’ impression-weighted SOV and Otterly’s raw-count SOV answer different questions. Results from Profound and BrightEdge cannot be independently tested without access to their methods. GEO Metrics §3.4 explains these differences.
6. Step 4: Normalize, store, and calculate changes
Keep raw answers unchanged and calculate metrics from the stored data. If a result is wrong, correct the calculation logic rather than editing an output cell. The following three queries implement formulas defined in GEO Metrics:
-- Mention Frequency (GEO Metrics §3.6)
SELECT engine, brand_id,
SUM(occurrence_count) FILTER (WHERE mention_verified) AS mentions
FROM mention_log
WHERE prompt_set_v = 'v3' AND unit = 'sentence'
GROUP BY engine, brand_id;
-- Share of Voice, closed competitor set, raw count (GEO Metrics §3.4)
WITH m AS (
SELECT brand_id, SUM(occurrence_count) AS n
FROM mention_log
WHERE prompt_set_v = 'v3' AND mention_verified
AND brand_id IN (SELECT member FROM competitor_set_v3)
GROUP BY brand_id
)
SELECT brand_id, n * 1.0 / SUM(n) OVER () AS sov FROM m;
-- Answer Inclusion Rate (GEO Metrics §3.7)
SELECT engine,
COUNT(DISTINCT prompt_id) FILTER
(WHERE brand_id = 'my_brand' AND mention_verified) * 1.0
/ COUNT(DISTINCT prompt_id) AS air
FROM mention_log
WHERE prompt_set_v = 'v3'
GROUP BY engine;
These queries run unchanged in DuckDB over a mention_log.parquet file, so they do not require a relational database.
Is the change meaningful? Before reporting a change, confirm each item below:
- Was the prompt-set version identical in both samples?
- Were the versions of
brands.yamland the competitor set identical in both samples? - Was the detector version, including the rule pack, judge model, and judge prompt, identical?
- Is the underlying sample large enough? With fewer than roughly 30 mentions, apply the same small-sample caution that GEO Metrics §3.7 gives for AIR.
- Did an engine change behavior between runs?
- Did the
mention_verifiedrate change? An increase in unverified mentions does not represent an improvement.
7. Step 5: Report results with full context
Include the following context with every reported number so readers can interpret it and compare it with later results:
- Prompt-set version, such as
v3 - Brand-set version, competitor-set mode (closed or open), and member list
- Detector version, including the rule pack, LLM judge model, and judge prompt
- Engine set, naming the exact engines rather than referring to “AI”
- Time window, such as a 7-day window sampled weekly
- Deduplication unit: sentence, answer, or phrase
- Sentiment scheme version
A statement such as “Share of Voice was 18%” cannot be interpreted or compared reliably without this context.
Connect metric changes to business outcomes cautiously. A change in Mention Frequency does not prove a change in revenue; GEO ROI Models explains how to evaluate that relationship. Layer 6 of a GEO Audit reviews the mention log together with the citation log as evidence of observed outcomes.
8. Validity risks and common pitfalls
Review every item before publishing a report. Problems specific to mention tracking are shown in bold:
- Prompt-set bias: use the method in AI Citation Tracking §3 to avoid a favorable or unstable sample.
- Time-window bias: follow AI Citation Tracking §6 and compare samples from equivalent windows.
- Brand-name collisions: ambiguous names reduce precision. Apply the disambiguation method in §4.2 and use the stage 3 LLM judge in §5.2 when needed.
- Deduplication-unit drift: comparing sentence-level results from one month with answer-level results from another creates a misleading change.
- Competitor-set drift in open mode: the SOV denominator changes as new brands appear in the answer set. Lock and version each set.
- Combining vendor SOV figures: §5.3 and GEO Metrics §3.4 explain why results based on different methods cannot be treated as one metric.
- Ignoring negative mentions: a high Mention Frequency with negative sentiment is not an improvement. Without the sentiment tag from §4.4, the report cannot show the difference.
- Combining languages: English and Chinese mention pools cannot be combined into a single result. See GEO Metrics §7.
- Applying the Aggarwal result to mentions: Aggarwal et al. 2024 measures position-adjusted impression from on-page rewrites, not the prevalence of unlinked brand mentions. Its reported increase of up to 40% is not a forecast for Mention Frequency and should be interpreted within the study’s stated limits.
- Generalizing from one participant’s gain: C-SEO Bench (Puerto et al. 2025) finds that many conversational SEO rewrites become less effective under competition. A SOV gain measured in isolation may not persist after competitors optimize for the same prompt set.
9. Further reading
- Definitions: GEO Metrics · Brand Mentions · Citation vs Mention
- Business context: GEO ROI Models
- Citation workflow: AI Citation Tracking
- Periodic review: GEO Audit, which covers this workflow’s results in Layer 6
- Engine details: Perplexity AI · ChatGPT Search · Google AI Overviews
- Research context: Aggarwal et al. 2024
References
Academic:
- Aggarwal, P. et al. (2024). GEO: Generative Engine Optimization. KDD ‘24. arXiv:2311.09735 · ACM DL
- Liu, N., Zhang, T., Liang, P. (2023). Evaluating Verifiability in Generative Search Engines. Findings of EMNLP ‘23. arXiv:2304.09848
- Puerto, H. et al. (2025). C-SEO Bench: Does Conversational SEO Work? NeurIPS ‘25 D&B. arXiv:2506.11097
API and platform documentation (verified 2026-05):
- Perplexity: Chat Completions API Reference · Changelog
- OpenAI: Web Search tool (Responses API)
- Google Search Central: AI features and your site
- Google: Grounding with Google Search (Gemini API)
Vendor KPI methodologies (summarized in GEO Metrics §3.4):
- Otterly.AI: Brand Report KPI Definitions
- Ahrefs: Brand Radar Methodology
- Profound: How to Track Your Visibility in AI Search
- BrightEdge: What Share of Voice Really Means for Search in 2026
Frequently asked questions
How is mention tracking different from citation tracking?
Should I deduplicate mentions at the sentence level or the answer level?
Can I use a vendor tool (Otterly, Profound, Ahrefs) instead of building a detector?
How do I avoid false positives when my brand name is also a dictionary word?
Does Aggarwal's '+40%' headline apply to mention tracking?
Related playbooks & wiki
Sources
Primary
- GEO: Generative Engine Optimization (Aggarwal et al., KDD 2024) · arXiv / KDD '24 · 2024-08-25
- GEO: Generative Engine Optimization (KDD '24 Proceedings) · ACM SIGKDD · 2024-08-25
- Perplexity API — Chat Completions Reference · Perplexity
- Perplexity API — Changelog (citations field deprecation) · Perplexity
- OpenAI — Web Search tool (Responses API) · OpenAI
- Google Search Central — AI features and your site · Google
- Grounding with Google Search (Gemini API — groundingChunks / groundingSupports) · Google
- Otterly.AI — Brand Report KPI Definitions · Otterly.AI
- Ahrefs Brand Radar Methodology · Ahrefs
- Profound — How to Track Your Visibility in AI Search · Profound
Secondary
- BrightEdge — What Share of Voice Really Means for Search in 2026 · BrightEdge
- Evaluating Verifiability in Generative Search Engines (Liu et al. 2023) · arXiv / EMNLP '23 Findings
- C-SEO Bench: Does Conversational SEO Work? (Puerto et al. 2025) · arXiv / NeurIPS '25 D&B