Skip to content
Subscribe

AI Search · GEO

How to Track AI Citations in ChatGPT and Perplexity

Getting cited by an AI engine is the new ranking — but unlike a Google position, there's no dashboard that shows it to you. This is the measurement method we actually run on this site: a fixed query set, the two engine APIs that return real citation URLs, the one engine that doesn't, and what the numbers do and don't tell you.

Short version: you track AI citations by asking each engine a fixed set of target queries on a schedule and checking whether your domain appears in the sources it returns — for the two engines that expose citations through an API (Perplexity and OpenAI/ChatGPT) you can automate this; for Google AI Overviews there is no API, so you check it by hand and log the gap honestly. The output isn’t a ranking, it’s a hit rate: on how many of your target questions does an answer engine name you. This post lays out the exact method we run on this site, the API mechanics for each engine, the numbers we’re actually seeing, and — importantly — what the metric can and can’t tell you.

Why citation tracking is a different problem from rank tracking

Rank tracking is a solved, commoditized problem: a query has a stable-ish SERP, a position is a number, and a hundred tools will chart it for you. AI citations break every one of those assumptions.

An answer engine doesn’t return a ranked list of ten blue links — it returns a synthesized paragraph with a handful of cited sources, and which sources it picks varies run to run, model to model, and with the exact phrasing of the prompt. There’s no public “position” to read off a page. Being cited is closer to a coin flip weighted by how retrievable and quotable your page is than to a stable rank. That’s exactly why it has to be measured rather than assumed, and why “we got cited once in ChatGPT” is an anecdote, not a metric.

It also matters more than it used to. As the Phase 1 write-up of running our own GEO playbook found, citations are increasingly the whole payoff of AI search: the answer is synthesized inline, the user often never clicks, and the citation is the brand impression you get in exchange for being the source. If that’s the currency, you need a way to count it.

What “being cited” actually means to each engine

The word “citation” hides three quite different mechanisms, and the method has to match each one:

  • Perplexity is retrieval-first by design. Every answer ships with an explicit, ordered list of source URLs — it’s the closest thing to a machine-readable citation feed that exists. Its sonar model returns a citations array (or search_results) directly in the API response.
  • ChatGPT / OpenAI cites through annotations. When you run a query with web search enabled, the model attaches url_citation annotations to the message — the URLs it actually pulled and referenced. This is a ChatGPT-side / Bing-derived index signal, and it’s exposed through the Responses API’s web_search_preview tool.
  • Google AI Overviews is the awkward one. AIO appears in the live SERP, cites sources in an expandable panel, and has no API. There is no honest way to script it. You either check it manually in a browser or you don’t track it — and if you don’t, you say so rather than quietly implying zero.

The practical consequence: two of the three big surfaces can be tracked automatically with real, first-party citation data, and the third has to be spot-checked by a human. Any tool or method that claims to track “Google AI Overview citations” at scale is either scraping the SERP (fragile and against terms) or estimating — treat those numbers as softer than the API-sourced ones.

The method we run on this site

The approach is deliberately boring, because boring is what survives as a scheduled job. It has four moving parts.

1. Fix a query set. Pick the questions where you have a real shot at being cited — for a small site that’s your differentiated, specific angles, not head terms. We track ten: a stable baseline of four (context density, Kyle Roof for the AI era, auditing E-E-A-T with LLMs, parasite SEO) kept verbatim so the numbers stay comparable over time, plus six practitioner-framework and GEO questions that map to our strongest pages (Koray’s topical maps, “how do you get cited by ChatGPT and Perplexity,” the GEO definition, HCU 302 recovery, Diggity’s programmatic SEO, local ranking factors for AI search). The set is fixed on purpose — the moment you change the questions, you lose the ability to compare this month to last.

2. Ask each engine through its API. For Perplexity, POST the query to sonar and read the citations array. For OpenAI, call the Responses API with the web_search_preview tool and collect every url_citation annotation off the returned message. Both give you an ordered list of real URLs — no scraping, no guessing which link was “probably” the source.

3. Match your domain and record the position. Walk the returned citation list in order and check whether your domain appears. If it does, you have two facts worth logging: that you were cited at all (the hit) and where in the source list you landed (a rough proxy for how central you were to the answer). If it doesn’t, that’s a zero for that query this run — which is data too.

4. Log it append-only, over time. Write one record per (run, query, engine) to a flat file, and keep a summary of the latest run for the scorecard. The single number that matters is the hit rate — cited on N of your target queries — tracked as a line over weeks, not a snapshot. A one-off run tells you almost nothing; the trend tells you whether your GEO work is landing.

A four-step citation-tracking loop: fix a target query set, ask each answer engine through its API, match your own domain in the returned citation URLs and note its position, then log the hit rate over time to watch the trend.
The tracking loop we run as a scheduled job. The engine APIs return an ordered list of real source URLs, so step three is an exact domain match, not a guess — and the metric that matters is the hit rate over time, not any single run.

None of this needs a paid platform. It’s roughly a hundred lines of script and two API keys, and it runs in under a minute.

What our numbers actually look like

Because we run this, we can report real figures rather than describe the method in the abstract. On the most recent scheduled run, across the ten-query set: OpenAI cited RankingHacks on 3 of 9 answerable queries, Perplexity on 2 of 10 — five citations in total. A run a week earlier landed proportionally more. These are small numbers on a small, deliberately-scoped query set, and they bounce run to run; that variance is the point of tracking the trend instead of a single reading.

Two details from the raw data are more instructive than the headline count:

  • The engine chooses which of your pages to cite, and it’s not always the one you’d expect. Asked about Kyle Roof strategies for the AI era, Perplexity cited our Kyle Roof post directly, but OpenAI reached for a different page on the site (a logic-and-testing piece) as the better-matched source for the same question. If you only tracked “did my target page get cited,” you’d have scored that a miss — when the site was actually cited, just via another URL. Track the domain, then note the page.
  • The two engines disagree constantly. Overlap between OpenAI’s and Perplexity’s citations on the same question is the exception, not the rule. They run different retrieval stacks over different indexes, so a page can be a Perplexity favorite and invisible to ChatGPT, or vice versa. Tracking only one engine gives you a badly biased picture.

We also see the citation URLs come back with a ?utm_source=openai parameter attached on the ChatGPT side — a small but useful confirmation that when a citation does convert to a click, it’s tagged and shows up cleanly in analytics.

What the metric does — and doesn’t — tell you

Citation hit rate is a lagging brand metric, not a traffic metric. It answers “is an answer engine willing to name us as a source on the questions we care about,” which is the right lead indicator for GEO. It does not tell you anyone clicked. As the Phase 1 diagnosis on this site made painfully clear, you can earn citations and still see near-zero referral clicks, because the whole design of an AI answer is to satisfy the user without a click. So citation tracking belongs alongside two other dashboards, never instead of them:

  • Search Console for classical impressions, position, and CTR — the page-1 breakthrough work happens here.
  • Analytics referral data (filtered for chatgpt.com, perplexity.ai, gemini.google.com, and the utm_source tags) for the clicks that citations do convert.

Read together, the three answer three different questions: are we cite-eligible (citation tracker), are we click-eligible (Search Console), and are the citations actually sending anyone (referrals). Optimizing one in isolation is how you end up widely cited and starved of traffic — or the reverse.

Roll your own, or buy a tool?

A category of paid “AI visibility” and “answer engine monitoring” tools now exists to do exactly this — track your share of citations across engines, chart it over time, and compare you to competitors. They’re legitimately useful if you’re tracking hundreds of queries, want prompt-variation coverage, or need share-of-voice benchmarking against rivals for a client report.

For a solo publisher, though, the calculus is the same as it is for llms.txt: don’t pay for what a small script gives you for free. A fixed ten-to-twenty-query job hitting two APIs covers the “am I trending up” question completely, keeps your data first-party, and costs cents in API calls. Buy the platform when the query volume or the client-reporting need actually justifies it — not because tracking citations sounds like it requires a tool. Spend the saved budget on the thing that moves the number: being genuinely differentiated on the questions you track, which is the entire playbook for getting cited in the first place.

My take

The sites that will win AI search are the ones treating citations as a measured KPI today, while most publishers are still arguing about whether GEO is real. You can’t improve what you can’t see, and right now the citation feed is nearly invisible unless you go get it — two APIs, a fixed question list, and a cron job. Build that first, watch the trend for a few weeks before you trust any single reading, and pair it with Search Console and referral data so you never confuse “cited” with “clicked.” Then point your content effort at the questions where the hit rate is stubbornly zero — that’s your gap list, generated from real answer-engine behavior instead of a keyword tool’s guess.

For the other half of this — what to actually change on the page to move these numbers — see how to get cited by ChatGPT and Perplexity and the rest of the AI Search · GEO channel.

Frequently asked questions

How do I check if ChatGPT or Perplexity cites my website?

Ask each engine a fixed set of target questions and inspect the sources it returns. Perplexity’s sonar API returns an ordered citations array; OpenAI’s Responses API returns url_citation annotations when you enable the web_search_preview tool. Check whether your domain appears in that list, and log the hit and its position on a schedule so you can watch the trend rather than react to a single run.

Can I track Google AI Overviews citations automatically?

No. Google AI Overviews has no public API for its cited sources, so there’s no honest way to automate it. Check AIO manually in a browser for your key queries and record it separately — and be skeptical of any tool claiming automated AIO citation tracking, since it’s either scraping the SERP or estimating.

What’s the difference between an AI citation and a Google ranking?

A Google ranking is a stable position in a list of links for a query. An AI citation is whether an answer engine names your page as a source inside a synthesized answer — which varies run to run and engine to engine, and often comes with no click. Citation tracking measures brand-as-source visibility; rank tracking measures click opportunity. They’re complementary, not interchangeable.

How often should I run a citation check?

Weekly is plenty for a small site. Citations bounce run to run, so a single reading is noisy — the signal is the multi-week trend in your hit rate. Keep the query set fixed between runs so the numbers stay comparable, and only expand the set deliberately when you want to widen coverage.


Method and figures are first-hand: the tracker described here runs on RankingHacks against a fixed ten-query set using the Perplexity sonar and OpenAI Responses APIs; Google AI Overviews is checked manually. Related reading on RankingHacks: How to Get Cited by ChatGPT & Perplexity, We GEO-Optimized Our Own Site, What Is GEO?, Does llms.txt Actually Work?, LLM SEO, Explained, How AI Engines Decide Who to Trust, GEO-Audit Your Own Site.