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.
Get a free AI-visibility audit → · Read the docs → — No card, no account.
Get my free auditHow citation tracking works
- Fetch the answer as data.
POST /v1/fetcheswith the query and the engines insurfaces. Every delivered record carriessources[]— already deduplicated and ordered, no HTML to parse. - 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.
- 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.
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.
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.
Start from evidence: Get a free AI-visibility audit → · Full endpoint reference →
Get my free audit