EXPERIMENT_017 // LLM.CITATION.AUDITOR
Enter a brand name and audit which sources Perplexity and ChatGPT actually cite when asked about it — a footprint map of publications, review sites, and URLs each model draws on, built entirely on live queries with no cached results.
LOADING EXPERIMENT...
Type a brand name and the experiment sends the same three citation-eliciting questions to Perplexity and ChatGPT in parallel, then renders a footprint map: a centre node for the brand, one node per model, and a node for every source each model actually cited or named. Perplexity's citations come natively from the API; ChatGPT has no citation field, so a separate structured pass reads its free-text answers and extracts the sources and URLs it referenced. If a provider times out, its node is labelled and the audit continues with the rest — every run carries a visible timestamp because AI answers are non-deterministic snapshots, not a fixed ground truth.
HOW IT WORKS
Three identical citation-eliciting prompts — a source-seeking question, a third-party-coverage question, and a verification question — are sent to Perplexity (model `sonar`) and OpenAI (`gpt-5.4-mini`) in parallel via `@diabolicallabs/llm-client`, reusing the multi-provider fan-out pattern established by EXP_009 (Agentic Reliability Dashboard).
Perplexity returns a native `citations` array on every response — the toolkit's only provider that does. ChatGPT has no equivalent field, so its three free-text answers are fed into a single structured extraction call (temperature zero) that pulls out named sources and any literal URLs mentioned, plus whether the brand was discussed at all.
Results render as a node-link graph via React Flow (already used for EXP_007's ADK Visualizer and EXP_008's Orchestration Map): the brand at the centre, a node per provider showing whether it mentioned the brand, and a node per cited source, clickable through to the URL where one exists.
A provider that times out or errors gets a visibly dimmed, labelled node instead of being silently dropped, and the run header shows a partial-run flag. Only a total failure across every provider surfaces as an error — a single failed provider never blocks the rest of the audit.
WHAT THIS PROVES
AI citation behaviour is provider-specific and needs provider-specific extraction, not a single universal parser: Perplexity exposes citations as structured data, while every other frontier model currently only states its sources in prose, which means genuinely auditing an AI answer's sourcing requires two different technical approaches side by side, not one.
A brand's presence in AI-generated answers is a live, queryable signal rather than a fixed profile — the same two questions run an hour apart can surface different sources, which is precisely the volatility a GEO practice needs to monitor rather than assume away.