Guide · 9 min read
How to track citations across ChatGPT, Claude, Perplexity, Gemini.
What it takes to programmatically poll the four major LLM surfaces, capture citations with full provenance, and turn the raw responses into an auditable citation graph.
Why these four surfaces
Most AI-search citation tracking conversations focus on ChatGPT and Perplexity. We treat all four as primary because the AI-search market is genuinely four-horse:
- ChatGPT — largest user base; cites via SearchGPT integration + Bing index
- Claude — fastest-growing; cites via Anthropic's own retrieval + sometimes browsing
- Perplexity — citation-native; every answer includes inline sources
- Gemini — Google-owned, integrated with Search + Google AI Overviews
Polling only one or two surfaces means missing significant signal. Brand mentions can be citation-rich on Perplexity but absent on Claude (or vice versa) — knowing which surface treats you as a source is itself actionable intelligence.
Perplexity — API primary path
Perplexity exposes a paid API (Sonar / Pro tiers, ~$0.005/call at current pricing). The API returns answers with structured citation arrays — model + query + cited URLs + paragraph quoted. This is the cleanest surface to poll.
We send each test query to the API, parse the citations field, match against your tracked domain, record the position of the citation in the response, and snapshot the surrounding paragraph for provenance.
Claude — Anthropic API + claude.ai fallback
Anthropic's API serves Claude's canonical text responses with citation support via tool use. For surfaces that require the browsing tool, we fall back to authenticated claude.ai session-based polling — which preserves the same URLs / paragraphs structure but adds session-management overhead.
We record the model version (Opus / Sonnet) since responses can vary materially between versions.
ChatGPT — browser automation primary
OpenAI's public API doesn't cleanly expose the SearchGPT-integrated citations that appear in chat.openai.com. For Free + Pro tiers we use authenticated browser automation against the canonical chat surface, capture the response, and parse the cited URLs.
Team and Enterprise tiers can opt into an API-based polling path when we have OpenAI API tools that mirror the chat surface citations (some functionality is API-available; some still requires browser automation).
Gemini — Vertex AI + gemini.google.com
Google Vertex AI provides programmatic access to Gemini models. For surfaces with grounded-with-search citations, we use Vertex AI with the search grounding tool enabled. For surfaces that require the gemini.google.com web app behavior, we fall back to authenticated browser automation similar to ChatGPT.
The provenance model
Every citation we record carries:
- Timestamp (ISO 8601 UTC)
- Model name + version (e.g.
claude-3-7-opus-20260301) - Query text (verbatim what we sent)
- Response excerpt (the paragraph containing the citation)
- Cited URL (the exact URL the LLM linked to)
- Position in response (paragraph 1, 2, etc.)
- Other URLs cited in the same response (your competitors, where applicable)
Provenance lets you audit any reported citation event. Pro tier gets CSV export of every row; Team gets API access to the same data so you can wire citation events into your existing monitoring stack.
Polling cadence by tier
- Free — weekly poll, Saturday 04:00 UTC. 3 sites × 5 queries = 60 LLM citation checks per month.
- Pro — daily poll, 04:00 UTC. 25 sites × 50 queries = 37,500 LLM citation checks per month.
- Team — every 4 hours. Unlimited sites + unlimited queries within fair-use bounds.
- Enterprise — hourly poll or custom (down to 15 minutes for time-sensitive surfaces).
Higher cadence catches drift events sooner. When ChatGPT stops citing your /signal/AAPL page mid-week because a competitor was elevated, daily polling notices in 24 hours; weekly polling notices in 7 days. For pages worth ranking for, the difference compounds.
Score your own site against this guide.
The free Citation Readiness Score runs every signal from this guide against any URL. ~90 seconds, no signup.