CitationBenchTalk to Sales
API referenceResearch

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

MethodPathPurpose
POST/v1/research/ai-citationRun a one-off citation check
GET/v1/research/ai-citation/queriesList monitored queries
POST/v1/research/ai-citation/queriesAdd 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}/historyHistorical timeseries
GET/v1/research/ai-citation/share-of-voiceCross-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"]
}
FieldTypeRequiredDefaultNotes
promptstringyesThe prompt to test
llmsstring[]noall availableSubset to query
samplesnumberno5Samples per LLM (variance smoothing)
trackDomainsstring[]noworkspace primary + competitorsDomains to compute citation rates for
location / languageenumnoworkspace 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

StatusCodeCause
400validation_errorMissing prompt
503llm_unavailableOne LLM down; partial results still returned for the others

Cost

ActionCredits
Per sample (prompt × LLM × 1 sample)0.5
Daily monitoringsum of samples per day × 0.5
GETsfree

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
  }"
done

B. 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.

On this page