Use case4 min read2026-07-27

Track the citations behind AI answers

Every grounded AI answer carries a second, quieter ranking: the list of sources it cited. That list decides whose page supplied the answer — and it is where GEO is actually won, because a brand that never gets cited is living off the model's memory, one retraining away from vanishing. Citation tracking is the job of recording that list, per query, per engine, over time. AgentGEO returns it structured on every fetch — sources[] with title, URL and position — so the tracker is a loop and a file, not a scraping project.

Read this page with an AI

The deliverable: a dated table of (query, engine, cited URL, position) rows. From it you can answer the questions that matter — which of your pages earn citations, which competitors' pages own the queries you want, and what changed since last month.

How citation tracking works

  1. Fetch the answer as data. POST /v1/fetches with the query and the engines in surfaces. Every delivered record carries sources[] — already deduplicated and ordered, no HTML to parse.
  2. Normalize and store. Reduce each URL to its host, keep the position, stamp the date. Append to a CSV or a table — the format matters less than never overwriting history.
  3. Diff runs. New host in the top three? A competitor published something the engines like. Your host gone? The page they cited moved, or someone displaced it. The diff is the alert.
One query, every cited source
curl -s https://api.agentgeo.org/v1/fetches \
  -H "Authorization: Bearer ag_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"query": "best crm for small business", "surfaces": ["chatgpt", "perplexity"]}' \
  | jq -r '.answers[] | .surfaceKey as $s | .sources[] | [$s, .position, .url] | @tsv'

That one-liner already prints the engine, the rank and the URL for every citation. A production tracker adds a query loop, host normalization and a dated output file — the per-language guides walk through the full script in Python, Node and cURL.

Match your brand against answerText, but match your site against the host in sources[].url — never against source titles. A competitor's "Acme vs Northwind" review matches a title search for Acme and looks like a citation you earned. It isn't.

Let your agent run it

Over MCP, the geo-citations skill — shipped inside agentgeo-mcp and served live by the API — gives any connected agent this exact workflow: fetch, extract hosts, rank, diff against the last run. Ask "who does Perplexity cite for our money queries?" and the agent pulls the records and answers with the table.

One line to install
claude mcp add agentgeo -- npx -y agentgeo-mcp --key ag_live_...

Alternatives

Citation reports exist inside GEO dashboards like Otterly — fine if a marketer reading a UI is the end state. If the citations need to land in a database, a client report or an agent's context window, you want them as records, not screenshots. Scraping them yourself is the other route, and citations are the exact field DIY scrapers break on: they render late, behind click-to-expand UI, with markup that changes without notice.

More use cases

Citations feed share-of-voice monitoring and the Perplexity-specific version of this job, tracking Perplexity citations — see all use cases.

FAQ

Direct answers to the questions this page raises.

A source the engine attached to its answer — title, URL and position — as opposed to a brand mention, which is your name appearing in the answer prose. An answer can mention you without citing you and cite you without mentioning you; the two need separate tracking.

All six can, but not on every answer. ChatGPT cites mostly when it browses (web_search: true nudges it), Perplexity numbers its sources on nearly everything, and Google AI Overviews attaches references only when an overview appears at all. Store answers with zero sources too — the absence is data.

No. It returns each engine's own list, in the engine's own order, with position preserved. Ranking across engines, weighting by query value, alerting on changes — that logic lives in your code or your agent, where you can change it.

No — every plan is paid, and a workspace fetches nothing live until it has one. What costs nothing: the human-run audit, and ag_test_ keys, which return labelled demo records at zero credits.

Keep reading

Where this page leads next.

Run these checks on your own brand

Two ways in. Send a URL and a person runs the fetches for you, free — or connect your agent over MCP, on a plan, and run them yourself. Either way you get the raw answers and their citations, never a score.