Research · AI Citation API — Track ChatGPT, Perplexity, Claude, Gemini & AI Overview Citations
CitationBench's AI citation tracking API monitors when ChatGPT, Perplexity, Claude, Gemini, and Google AI Overviews cite your domain or competitors — per prompt, per LLM, per day with variance smoothing.
Track when ChatGPT, Perplexity, Claude, Gemini, and Google AI Overviews cite your domain — or your competitors'. Per prompt, per LLM, per day. The GEO half of CitationBench.
Conceptual overview
A citation query is a prompt you want to monitor. For each query, CitationBench samples each LLM multiple times per day (because LLM outputs vary), parses out which domains were cited, and tracks the results over time.
Three things make this hard, and we handle each:
- Variance: Same prompt, different answer. We sample many times and report rates, not single observations.
- Cited-vs-mentioned: Just naming a brand isn't the same as linking to it. We distinguish citations (with URLs) from mentions (brand-only).
- Position effects: Being cited first matters more than fifth. We rank citations within each response.
Endpoints
| Method | Path | Purpose |
|---|---|---|
| POST | /v1/research/ai-citation | Run a one-off citation check |
| GET | /v1/research/ai-citation/queries | List monitored queries |
| POST | /v1/research/ai-citation/queries | Add a new query (and start daily monitoring) |
| GET | /v1/research/ai-citation/queries/{id} | Get one query + latest results |
| PATCH | /v1/research/ai-citation/queries/{id} | Update LLMs / samples / cadence |
| DELETE | /v1/research/ai-citation/queries/{id} | Stop monitoring |
| GET | /v1/research/ai-citation/queries/{id}/history | Historical timeseries |
| GET | /v1/research/ai-citation/share-of-voice | Cross-query share-of-voice rollup |
POST /v1/research/ai-citation
A one-off check (no persistent monitoring). Useful for ad-hoc questions.
POST /v1/research/ai-citation HTTP/1.1
{
"prompt": "What's the best project management software for engineering teams?",
"llms": ["chatgpt", "perplexity", "claude", "gemini", "google_aio"],
"samples": 5,
"trackDomains": ["acme.com", "monday.com", "asana.com", "linear.app"]
}| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
prompt | string | yes | — | The prompt to test |
llms | string[] | no | all available | Subset to query |
samples | number | no | 5 | Samples per LLM (variance smoothing) |
trackDomains | string[] | no | workspace primary + competitors | Domains to compute citation rates for |
location / language | enum | no | workspace default | — |
Response (final)
{
"invocationId": "inv_***",
"agentId": "agt_***",
"skill": "research.ai_citation",
"status": "SUCCEEDED",
"creditsUsed": 10,
"result": {
"prompt": "What's the best project management software for engineering teams?",
"samplesPerLlm": 5,
"perLlm": [
{
"llm": "chatgpt",
"samples": 5,
"citations": [
{
"domain": "linear.app",
"rate": 1.0,
"avgPosition": 1.2,
"ourBrand": false
},
{
"domain": "asana.com",
"rate": 0.8,
"avgPosition": 3.4,
"ourBrand": false
},
{
"domain": "monday.com",
"rate": 0.6,
"avgPosition": 2.8,
"ourBrand": false
},
{
"domain": "acme.com",
"rate": 0.2,
"avgPosition": 5.0,
"ourBrand": true
}
],
"mentions": [{ "brand": "ClickUp", "rate": 0.4 }],
"exampleResponses": [
{
"text": "For engineering teams, the top picks are Linear, Asana, and monday.com ...",
"citedDomains": ["linear.app", "asana.com", "monday.com"]
}
]
},
{ "llm": "perplexity", "...": "..." },
{ "llm": "claude", "...": "..." },
{ "llm": "gemini", "...": "..." },
{ "llm": "google_aio", "...": "..." }
],
"shareOfVoice": {
"acme.com": 0.16,
"linear.app": 0.41,
"asana.com": 0.22,
"monday.com": 0.21
}
},
"raw": "Sampled each LLM 5 times. ChatGPT cites Linear nearly every time. Acme appears 1/5 times in ChatGPT and 4/5 in Perplexity (where our docs are well-indexed) ...",
"files": [
"agent-workspace/raw-responses.jsonl",
"agent-output/citation-summary.csv"
]
}POST /v1/research/ai-citation/queries
Add a query for ongoing daily monitoring.
curl -X POST .../v1/research/ai-citation/queries -d '{
"prompt": "What is the best project management software for engineering teams?",
"llms": ["chatgpt", "perplexity", "claude", "gemini", "google_aio"],
"samplesPerDay":3,
"trackDomains": ["acme.com", "monday.com", "linear.app", "asana.com"],
"tags": ["category-query", "high-priority"]
}'Returns the new query record. The system samples it on a daily schedule (next sample within 24h).
{
"queryId": "aiq_***",
"prompt": "What is the best project management software for engineering teams?",
"llms": ["chatgpt", "perplexity", "claude", "gemini", "google_aio"],
"samplesPerDay": 3,
"tags": ["category-query", "high-priority"],
"createdAt": "2026-05-24T08:00:00Z",
"nextSampleAt": "2026-05-25T08:00:00Z"
}GET /v1/research/ai-citation/queries/{id}/history
Historical timeseries — citation rate per LLM per day, plus brand share-of-voice over time.
curl -G .../v1/research/ai-citation/queries/aiq_***/history \
--data-urlencode "since=2026-04-24T00:00:00Z" \
--data-urlencode "groupBy=day"{
"queryId": "aiq_***",
"groupBy": "day",
"series": [
{
"date": "2026-05-24",
"perLlm": {
"chatgpt": {
"ourRate": 0.2,
"topCitedDomain": "linear.app",
"totalSamples": 3
},
"perplexity": {
"ourRate": 0.8,
"topCitedDomain": "acme.com",
"totalSamples": 3
}
},
"shareOfVoice": { "acme.com": 0.16, "linear.app": 0.41 }
}
]
}GET /v1/research/ai-citation/share-of-voice
Cross-query rollup.
curl -G .../v1/research/ai-citation/share-of-voice \
--data-urlencode "since=2026-05-01T00:00:00Z" \
--data-urlencode "tag=category-query"{
"summary": {
"acme.com": { "rate": 0.18, "delta30d": +0.04, "queriesIncluded": 12 },
"linear.app": { "rate": 0.39, "delta30d": -0.02, "queriesIncluded": 12 },
"monday.com": { "rate": 0.22, "delta30d": 0.0, "queriesIncluded": 12 }
}
}MCP
> Check who ChatGPT and Perplexity cite for "best PM software for engineering teams".Claude calls research.ai_citation.check.
> Track this prompt daily for me.Claude calls research.ai_citation.queries.create.
> What's our share of voice this month across all monitored queries?Claude calls research.ai_citation.share_of_voice.
Errors
| Status | Code | Cause |
|---|---|---|
| 400 | validation_error | Missing prompt |
| 503 | llm_unavailable | One LLM down; partial results still returned for the others |
Cost
| Action | Credits |
|---|---|
| Per sample (prompt × LLM × 1 sample) | 0.5 |
| Daily monitoring | sum of samples per day × 0.5 |
| GETs | free |
A typical query monitored across 5 LLMs at 3 samples/day costs 7.5 credits/day (~225/month).
Use cases (string things together)
A. Monitor your top 30 brand queries daily
PROMPTS=("what is the best ..." "alternatives to monday.com" "...")
for P in "${PROMPTS[@]}"; do
curl -X POST .../v1/research/ai-citation/queries -d "{
\"prompt\": \"$P\",
\"samplesPerDay\": 3
}"
doneB. Alert on share-of-voice drops
curl -X POST .../v1/webhooks -d '{
"url": "https://hooks.our-portal.com/geo-alerts",
"events": ["ai_citation.share_of_voice.dropped"]
}'C. Citation reclamation via the citation_hunter skill
The skill chains research.ai_citation.check → on drop, produce.refine (with the citation-loss context) → publish + reindex.
curl -X POST .../v1/agent/invoke -d '{
"skill": "citation_hunter",
"input": { "queryIds": ["aiq_***"], "reclamation": "auto" }
}'D. Compare yourself to competitors per LLM
The perLlm block shows which LLMs love which competitors. If you're losing in ChatGPT but winning in Perplexity, that's a different remediation than losing everywhere.
Related
- API: Research · keyword
- API: Production · refine
- Concept: Agent
- Playbook: Track ChatGPT citations daily
Discuss
Crawl Reddit and discussion forums to surface ranked pain points, verbatim buyer quotes, and source-cited insights — structured outputs your content tools can reference for authenticity.
Content gap
Compare your content library against competitor coverage to surface missing topics, keyword gaps, and weaker pages — ranked by lift with suggested briefs ready to queue into bulk content production.