← All use cases

AI citation tracking with character-level receipts.

Citations are the currency of AI search: being cited is the new ranking, and losing a citation is the new dropping off page one. Tracking them requires more than a list of links — you need to know whether a source was actually cited or merely retrieved, how much of the answer it backs, and when that changes. Answer engines do not announce citation changes; only captures reveal them.

The workflow, end to end.

Real endpoints, real field names — nothing below is pseudocode.

  1. step 1 / 4

    Capture the answers whose citations you track

    Submit your query set to the citation-bearing surfaces. Perplexity and AI Overviews are the densest citers; ChatGPT cites when it browses; Claude (official API) returns cited sources with verbatim quote snippets.

    POST /v1/search
    curl -sS -X POST "https://api.aisearchapi.dev/v1/search" \
      -H "Authorization: Bearer $AISEARCH_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "query": "is retinol safe during pregnancy",
        "surfaces": ["perplexity", "google_ai_overview", "chatgpt", "claude"],
        "regions": [{ "country": "US" }]
      }'
  2. step 2 / 4

    Read the roled source list

    evidence.sources distinguishes cited (in the answer), retrieved (fetched but unused) and related (surfaced alongside) — with a cited boolean and stable ids the answer blocks reference. "Retrieved but never cited" is its own actionable state most trackers cannot even see.

    Envelope excerpt — evidence.sources
    "sources": [
      { "id": 0, "url": "https://yoursite.com/guide",
        "title": "…", "role": "cited", "cited": true,
        "charRanges": [[0, 141]],
        "quote": "verbatim snippet the surface quoted" },
      { "id": 1, "url": "https://competitor.com/post",
        "title": "…", "role": "retrieved", "cited": false }
    ]
  3. step 3 / 4

    Measure citation depth, not just presence

    charRanges give the exact character spans of the answer each source backs — citation share. sources[].quote (where the surface exposes it, e.g. Claude’s cited_text) gives the verbatim passage. answer.blocks[].referenceIds tie every paragraph to its sources.

  4. step 4 / 4

    Diff over time and alert on citation events

    Key stored source lists by (query, surface, region) and diff runs: citation gained, citation lost, role demoted from cited to retrieved, citation share shrinking. Each event carries the capture’s screenshot and proof-of-page as the receipt.

The Envelope fields that do the work.

Every surface returns the same canonical Envelope, so these fields mean the same thing whether the capture came from ChatGPT, Perplexity or an AI Overview.

evidence.sources[].role

cited / retrieved / related — three different competitive positions, not one flat link list.

evidence.sources[].charRanges

Citation share: how much answer text each source actually backs.

evidence.sources[].quote

The verbatim passage quoted, where the surface exposes it — provenance-grade citation data.

answer.blocks[].referenceIds

Block-level citation mapping — which paragraph cites whom.

job.artifacts

Screenshot + proof-of-page per capture: a citation claim you can show, not just assert.

Honest limits

Citation richness varies by surface and the Envelope reflects it rather than papering over it: quote appears only where a surface exposes verbatim snippets, and charRanges only where spans are observable. Claude citations come from the official API today (api_surrogate), not the consumer UI. An answer with no citations is reported as exactly that — sources can be empty, and absent surfaces complete as surface_absent.

Terms used here, defined precisely: Provenance · Envelope · AI Overview

Asked precisely.

What counts as a "citation" in the Envelope?

A source with role:"cited" and cited:true — meaning the answer actually used it, with charRanges tying it to specific answer text where observable. Sources the engine fetched but did not use are role:"retrieved", and links merely displayed alongside are role:"related". The distinction is load-bearing for tracking.

Can I track citations of my competitors, not just my own site?

Yes — evidence.sources lists every source in the answer, whoever owns it. Filtering by domain is your side of the work; a full citation-set diff per query per surface is one stored list per capture.

How do I catch a lost citation quickly?

Schedule the query set at your cadence and diff the source lists per run; a disappearance is an alertable event the same hour the capture runs. Webhooks push each terminal Envelope so your alerting is event-driven rather than poll-based.

Do all surfaces provide character ranges and quotes?

No, and we do not fabricate them. charRanges and quote are populated when the surface exposes enough structure to observe them; otherwise they are empty or absent. The Envelope always tells you what was observed rather than inflating sparse surfaces to look rich.

Build it on the capture layer.

500 free credits, charged only on successful captures — the whole workflow above runs on two endpoints.