Skip to content

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.

DecisionOptionsRule of thumb
Which metricsMention Frequency, Share of Voice, Answer Inclusion Rate, Brand SentimentStart with Mention Frequency and AIR, which do not require a competitor set. SOV requires a defined competitor set
Unit of one mentionSentence level / answer level / phrase levelUse sentence-level deduplication by default. Declare the unit and keep it consistent across runs
Competitor setClosed (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 setThe engines your audience usesTreat the engine set as a reported variable and name each engine included
Time window and cadenceFor example, a weekly sample with a 7-day windowAnswers 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.yaml states 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:

EngineProgrammatic mention extraction?What you getNote
Perplexity (Sonar API)NoThe 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 removedExtract mentions from the answer text. See Perplexity AI
ChatGPT (OpenAI Responses API, web_search)NoAnswer text, url_citation annotations, and sources[]. The last two contain citation data, not brand mentionsExtract mentions from the answer text. See ChatGPT Search
Google AI OverviewsNoThere is no official content API; Search Console includes this traffic in aggregate “Web” totals without per-citation attributionExtract 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 stepExtract mentions from the answer text. See Google Gemini
Bing CopilotNoIt provides answer text and a sources panel but no public mention APIExtract 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 in detector_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:

VendorWhat they call a “mention”Detector visibilityWhere to read
Otterly.AIBrand Mentions (answer-level binary) / Share of Voice (raw-count share)Private detector; public formulasBrand Report KPI Definitions
Ahrefs Brand RadarAI Share of Voice, impression-weighted (Google search volume)Private detector; published methodologyBrand Radar methodology
ProfoundVisibility Score / Share of VoiceNot disclosedHow to Track Your Visibility in AI Search
BrightEdgeAI brand-mention share variants based on its SEO SOV patentNot disclosedSOV 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.yaml and 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_verified rate 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

References

Academic:

  1. Aggarwal, P. et al. (2024). GEO: Generative Engine Optimization. KDD ‘24. arXiv:2311.09735 · ACM DL
  2. Liu, N., Zhang, T., Liang, P. (2023). Evaluating Verifiability in Generative Search Engines. Findings of EMNLP ‘23. arXiv:2304.09848
  3. 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):

Vendor KPI methodologies (summarized in GEO Metrics §3.4):

Frequently asked questions

How is mention tracking different from citation tracking?
Both workflows use a frozen prompt set, a defined engine set, a fixed schedule, and a consistent log, but they detect different things. Citations appear in 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 mention tracking requires an alias dictionary, disambiguation rules, a deduplication unit, and sentiment tagging. Most errors occur in this detection step.
Should I deduplicate mentions at the sentence level or the answer level?
Use sentence-level deduplication by default. It reflects how many distinct sentences discuss the brand, works well when an LLM judge reviews ambiguous matches, and supports common analytical comparisons. When comparing your results to vendor reports, also calculate answer-level results from the same log because most vendors report whether a brand appeared anywhere in an answer. Keep the unit consistent between runs.
Can I use a vendor tool (Otterly, Profound, Ahrefs) instead of building a detector?
Yes, and most teams should consider that option. Evaluate vendors by their metric definitions. Otterly publishes its SOV formula, while Ahrefs Brand Radar weights mentions by Google search volume to estimate impressions. Profound and BrightEdge do not publish the internal logic of their detectors. Compare the definitions in GEO Metrics §3.4, because two products labeled 'Share of Voice' may measure different things.
How do I avoid false positives when my brand name is also a dictionary word?
Use three checks in order. First, add lowercase dictionary forms, URL collisions, and common-noun matches to the negative list in brands.yaml. Second, require a related product, domain, or topic phrase in the same or previous sentence before accepting an ambiguous match. Third, send the remaining ambiguous cases to a documented LLM judge and record its verdict and rationale. Together, these checks form a three-stage process. Because names can have several meanings, precision is usually harder than recall in mention tracking.
Does Aggarwal's '+40%' headline apply to mention tracking?
No. Aggarwal et al.'s study measures the position-adjusted impression produced by on-page rewrites, which reflects whether content was used. Brand mention tracking measures whether a brand was named without a link. These measures capture different things. The reported increase of up to 40% was a per-method, per-domain result on 2023–24 engines, not a general forecast for mention metrics. See Brand Mentions for why mentions matter and Aggarwal et al. 2024 for the limits of that finding.

Related playbooks & wiki

Sources

Primary

  1. GEO: Generative Engine Optimization (Aggarwal et al., KDD 2024) · arXiv / KDD '24 · 2024-08-25
  2. GEO: Generative Engine Optimization (KDD '24 Proceedings) · ACM SIGKDD · 2024-08-25
  3. Perplexity API — Chat Completions Reference · Perplexity
  4. Perplexity API — Changelog (citations field deprecation) · Perplexity
  5. OpenAI — Web Search tool (Responses API) · OpenAI
  6. Google Search Central — AI features and your site · Google
  7. Grounding with Google Search (Gemini API — groundingChunks / groundingSupports) · Google
  8. Otterly.AI — Brand Report KPI Definitions · Otterly.AI
  9. Ahrefs Brand Radar Methodology · Ahrefs
  10. Profound — How to Track Your Visibility in AI Search · Profound

Secondary

  1. BrightEdge — What Share of Voice Really Means for Search in 2026 · BrightEdge
  2. Evaluating Verifiability in Generative Search Engines (Liu et al. 2023) · arXiv / EMNLP '23 Findings
  3. C-SEO Bench: Does Conversational SEO Work? (Puerto et al. 2025) · arXiv / NeurIPS '25 D&B
Last updated: 2026-05-20 Authors: Ray Yang Topic: Practice