AnswerLine Start free

, GEO · Brand Monitoring

Mentions vs citations: the two numbers in AI answers

An AI answer can mention your brand, cite your page as a source, do both or do neither. The two events have different causes, sit in different response fields and need different fixes, so a single visibility score that blends them hides the decision you have to make.

Definitions

A mention is your brand or product name in the answer text the user reads. A citation is a URL on a domain you control in the answer’s list of sources: the engine presents your page as evidence. An inline citation is a citation attached to a specific passage, shown as a chip or footnote next to the claim it supports.

A mention shapes what the reader believes. A citation gives the reader a path to your page and indicates which content the engine relied on. Neither implies the other.

One answer, two different events to count A stylised AI answer shows a brand name inside the prose and a numbered citation chip, with a list of sources beneath it. The brand name in the prose is a mention, counted from result.text and, on ChatGPT, result.entities. The source list is a citation, counted from result.sources url, while result.citationPills records which chip points at which source. the answer as the reader sees it your brand 1 sources[] 1 2 result.text, entities[] named in the prose the reader sees sources[].url, citationPills[] your page listed as the evidence Mention Citation

An answer can produce either event without the other, which is why one blended visibility score hides the fix you need.

Where each signal lives in the response

Signal Field Engines
Mention in prose result.text, result.markdown (with include.markdown) ChatGPT, Perplexity, Gemini, Copilot, Grok, AI Mode
Extracted entities result.entities[] ({type, name}) ChatGPT only
Citation result.sources[].url, with position ChatGPT, Perplexity, Gemini, Copilot, Grok, AI Mode
Inline citation chip result.citationPills[] with url, domain, citationPillId, position ChatGPT, Perplexity, Gemini, Copilot, AI Mode

Details that affect counting:

For Google AI Overviews the equivalent data comes from POST /v1/monitor/google with include.aioverview; see monitoring Google AI Overviews.

Why the two diverge

Each of these explanations can be checked against your own data.

The four quadrants and what to do

State Meaning First fix
Mentioned and cited You are the recommendation and the evidence Defend: keep the cited page current, watch for competitors entering the sources
Mentioned, not cited Known, but others describe you Publish evidence pages that answer the prompt’s question with your specifics
Cited, not mentioned Your page informs answers that credit others Tie claims on the cited page to your product by name, add comparison and use-case pages
Neither Invisible for this intent Find the fan-out searches, create pages that rank for them, earn third-party coverage

Mentioned, not cited

Look at which domains are cited when you are named. They are the pages telling your story. If they are accurate and favorable, support them (keep review profiles current, answer the forum questions). If they are outdated or wrong, publish a page on your domain that states the current facts plainly, since you cannot edit theirs. Reddit in AI citations covers the case where the storyteller is a discussion thread.

Cited, not mentioned

Read the passages your page is cited for, using citationPills[] to find the claim each chip supports. Usually the cited page is generic: it explains a topic without saying your product does it. Make the connection explicit on the page, and build the pages a recommendation needs: comparisons, pricing, use-case pages, structured data.

Measure both, per answer

import re
from urllib.parse import urlparse

def on_domain(url: str, domains: list[str]) -> bool:
    host = (urlparse(url).hostname or "").lower()
    return any(host == d or host.endswith("." + d) for d in domains)

def classify(result: dict, aliases: list[str], domains: list[str]) -> dict:
    text = result.get("text") or ""
    pattern = re.compile(r"\b(" + "|".join(re.escape(a) for a in aliases) + r")\b", re.IGNORECASE)
    in_text = bool(pattern.search(text))
    in_entities = any(pattern.search(e.get("name", "")) for e in result.get("entities", []))  # ChatGPT only
    sources = [s for s in result.get("sources", []) if s.get("url")]
    ours = [s for s in sources if on_domain(s["url"], domains)]
    mentioned, cited = in_text or in_entities, bool(ours)
    return {
        "mentioned": mentioned,
        "cited": cited,
        "best_position": min((s["position"] for s in ours if "position" in s), default=None),
        "quadrant": {(True, True): "both", (True, False): "mentioned_only",
                     (False, True): "cited_only", (False, False): "neither"}[(mentioned, cited)],
        "other_domains": sorted({urlparse(s["url"]).hostname or "" for s in sources if s not in ours}),
    }

Pass result from a synchronous response or response.result from a completed task. aliases should include product names and common spellings; domains should include every domain and subdomain you control (docs, blog, help center).

Turn answers into rates

Across a prompt set on one engine and market:

mention_rate   = answers where mentioned / answers
citation_rate  = answers where cited / answers
gap            = mention_rate − citation_rate

Also keep the four quadrant counts. The gap summarizes; the quadrants tell you where the work is.

Worked example, with illustrative numbers: a 50-prompt category set on one engine returns: 10 answers mention and cite you, 20 mention only, 2 cite only, 18 do neither.

The engine names you often but rarely uses your pages to do it. Collecting other_domains for the 20 mentioned-only answers shows which sites supply that evidence, which is the work list.

A negative gap, such as a 20% mention rate with a 40% citation rate, means your content is informing answers that recommend others. A citation-only dashboard shows that as healthy.

Running it as a program

  1. Fix the prompt set and report by intent cluster (prompt set design). Branded prompts will show high mention rates by construction; keep them out of category metrics.
  2. Run each engine and market separately. Retrieval differs by engine, so the quadrants do too. Set country on every request.
  3. Submit runs as async tasks. Per the billing page, a task costs $0.0006 on ChatGPT, $0.0006 on Gemini and $0.00206 on AI Mode at the Starter tier. A 40-prompt set on ChatGPT and Gemini in one market is 40 × $0.0012 = $0.048 per run; adding AI Mode makes it 40 × $0.00326 = $0.1304.
  4. Repeat runs. Answers vary between runs, so report rates over several runs, with counts (sampling vs census).
  5. Track movement between quadrants from one period to the next. A prompt moving from mentioned-only to both is the best evidence that an evidence page worked.

The share-of-voice framework adds citation share and answer rank on top of these two rates, and measuring brand mentions in ChatGPT covers shopping-card presence.

Find the claims your pages are cited for

For the cited-only quadrant, the useful question is which passages of the answer your pages support. On engines that return citationPills[], group the entries by chip and keep the chips that include your domain:

from collections import defaultdict

def our_chips(result: dict, domains: list[str]) -> list[list[dict]]:
    chips = defaultdict(list)
    for pill in result.get("citationPills", []):
        chips[pill["citationPillId"]].append(pill)
    return [entries for entries in chips.values()
            if any(e["domain"] == d or e["domain"].endswith("." + d) for e in entries for d in domains)]

A chip that cites your page alongside two competitors’ pages supports a shared claim; a chip that cites only your page is a claim the engine took from you alone. Compare the chip’s label with the text around your brand (or its absence) in result.text to see whether the answer credits you for it. Where result.markdown is requested with include.markdown, it keeps the answer’s structure, which makes locating the passage easier.

Pitfalls

Try it on your own prompts with the quickstart, or see the ChatGPT engine page for the full response.

Questions

What is the difference between a mention and a citation in an AI answer?

A mention is your brand named in the answer's text. A citation is a page on your domain listed as a source the answer used. Readers see a mention; they can click a citation.

Can a brand be cited without being mentioned?

Yes. An engine can use your page as evidence for a general claim without naming you in the answer, for example citing your guide on a topic while recommending other products. That is a common and fixable gap.

Which API fields show mentions and citations?

Mentions come from result.text (or result.markdown) on every AI engine, plus result.entities on ChatGPT. Citations come from result.sources[].url on every AI engine, and result.citationPills[] shows inline citation chips on ChatGPT and Gemini.

What is the mention-citation gap?

Mention rate minus citation rate across a prompt set. A large positive gap means engines name you but rely on other sites to describe you; a negative gap means your pages inform answers that do not name you.

Which should I improve first, mentions or citations?

Start with the quadrant holding the most prompts in your commercial clusters. Mentioned but not cited usually calls for evidence pages on your own domain; cited but not mentioned calls for pages that tie your claims explicitly to your brand and products.

Try it on your own prompts

100 free requests on any engine, no card. One POST returns the answer, sources and citations as JSON.

Keep reading