# How do Perplexity and ChatGPT decide which sources to cite? AI citations measured over 450 runs and two audits: documentation-shaped pages win

> Two reports dated 2 September 2026 say Perplexity's citations can be manufactured (three sites, 215,128 generated 'best software' pages) and often do not contain the figure they are cited for (34.7% of 1,826). Our self-hosted monitor asked ChatGPT fifteen procurement questions five times each across six snapshots: 1,926 citations, two-thirds to documentation, three competitors' doc domains holding 34.9–40.6% in every snapshot, and our own site cited in 0 of 450 runs while AI crawlers fetched it hundreds of times a day. One selection rule is consistent with all three, though the audits tested Perplexity and we test ChatGPT.

- Published: Sep 3, 2026
- Author: Linden Kern, Chief Scientist
- Tags: ecosystem, gateway
- Canonical: https://pirouter.ai/blog/ai-citations-manufactured-who-gets-cited

---
Two reports published on the same day, 2 September 2026, answer half of this question for
Perplexity: its citations can be manufactured at scale, and about a third of the ones attached
to a number do not contain that number. Our own measurement answers the other half for ChatGPT:
across six snapshots and 450 runs of fifteen procurement questions, roughly two-thirds of its
1,926 citations went to documentation pages, another eighth to terms-of-service and SLA pages,
and three competitors' documentation domains held between 34.9% and 40.6% of all citations in every
snapshot. Put the three datasets side by side and one selection rule is consistent with all of
them — a hypothesis, not a finding, since the two audits tested Perplexity and our instrument
tests ChatGPT: **each engine cites whatever is shaped like a reference document for the exact
question** — a docs
page, a terms page, a directory entry, a buying guide with its ranking in JSON-LD — and it does
not much care who wrote it or how well known the site is. Manufactured pages win by
manufacturing that shape. Documentation wins by having it natively. Our own site, which AI
crawlers fetched several hundred times a day over the same period, was cited in 0 of 450 runs.
The rest of this post reads the two audits carefully, lays out what our instrument saw, and then
spends a whole section on what six snapshots cannot tell you.

## Two audits on the same day, and what each one actually measured

The first report is from a site called Trellner Research. On 2 September it put 380
buyer-intent software categories — "CRM software" through "museum collection management
software" — to `perplexity/sonar` and `perplexity/sonar-pro` through OpenRouter, one prompt per
category per model, 760 calls in all, each asking for a ranked top five as JSON with every
product's official homepage. That produced 7,534 citations across 2,055 distinct domains, and
the report looked every domain up in the Tranco top-million list for 1 September and in the
Wayback Machine ([Manufactured sources behind AI recommendations](https://trellner.com/reports/manufactured-sources-behind-ai-recommendations/)).

The distribution is the finding. 59.8% of citations point at domains ranked worse than
#100,000 on Tranco; 23.4% point at domains not in the top million at all; the ten most-cited
domains take only 17.3% between them, so this is not a story about a few famous sites. The top
of the list is g2.com (291 citations), reddit.com (261) and then guideflow.com (194) — a vendor
of interactive product demos whose marketing blog was cited across 96 of the 380 categories,
none of which it competes in. Wikipedia was cited three times in 7,534.

Further down sit three sites — wifitalents.com, worldmetrics.org and gitnux.org — with 181
citations between them, 2.4% of the total, in 41 categories. The report's case that they are
one operation rests on shared registrar and registration window, a shared pair of Cloudflare
nameservers, an identical page template, and blogs of exactly six posts each about the other
brands in the set. Their sitemaps list 70,731, 71,684 and 72,713 pages under `/best/<something>-software/`
respectively — 215,128 generated buying guides. None of the three domains existed before
December 2023. Two of them give their homepage the HTML title "Facts & Grounding Page", and the
report's dry observation is that grounding "is not a term buyers use"; it is the name of the
retrieval step these pages are addressed to.

The report is unusually explicit about what it does not show, and I will hold it to that.
It covers Perplexity only; "nothing here should be read as a claim about any other engine."
The two model tiers returned a byte-identical citation list in 289 of 380 categories, so they
are "one search stack sampled twice", not two measurements. There was one prompt wording, one
run per category, and no repeat sampling. The categories are the authors' own list, not a
sample of what buyers ask. And, in its words, "we have not shown that any of this changes the
answers" — nobody removed the manufactured sources and re-ran the question. Common control of
the three sites is inferred from infrastructure and template; the report does not know who
operates them, and neither do I.

The second report, from Haus Research, measured something different on the same day: not
where citations come from but whether they hold up. It asked 310 factual questions about 210
technology companies — founding year, latest funding round, headcount, entry price,
headquarters, revenue, disclosed breaches, current CEO, acquisitions, uptime SLA — at
temperature 0 to the same two Perplexity models, with GPT-4.1 plus a web plugin as a control
([Perplexity citation audit](https://hausresearch.com/reports/perplexity-citation-audit/)).
The Perplexity models mark claims inline as `[n]`, which is what makes an audit possible: each
marker is a specific assertion that this sentence came from that URL. There were 2,511
markers. Of the 1,826 attached to a sentence stating a figure, 34.7% pointed at a page that
either would not open to an ordinary reader or opened and contained none of the numbers in the
sentence. Scored per claim instead of per marker, 14.4% of 872 claims fail. Only 1.3% of URLs
were dead; the large categories are gated pages (16.1% — logins, paywalls, bot walls) and
readable pages that simply do not say it. The clean example is a price: asked for Vercel's
cheapest paid plan, the model answered "$20/month" and cited Vercel's plans page, which the
report says names the plans and does not contain the string.

Two of Haus's secondary findings matter for what follows. Half of the dead URLs were pages
"minted per company per question type" — `/directory/<company>-offices`, `/plans/<company>`,
`/sla/<company>` — published at scale to catch exactly the query asked and taken down as
cheaply as they went up. And the GPT-4.1 control behaved differently in a way the report
records without much comment: it cited 2.0 sources per answer against Perplexity's 9.8, and
36.4% of them were the company's own domain against 23.4%. Haus also lists its limits: one
snapshot, English-language questions about technology companies, models reached through
OpenRouter rather than the consumer product, and a fetcher identified as a bot, which inflates
the gated share. Its own summary of scope is the right one: "We are not measuring whether
Perplexity is right. We are measuring whether the thing it offers as proof functions as proof."

I should say what I do not know about these two. Neither site names an author I could find.
When the reports reached Hacker News, several commenters said the prose reads as
machine-written, one noted that trellner.com is itself outside the Tranco million the report
leans on, and another doubted the shared-nameserver inference; the threads stood at 206 and
104 points when I collected them on 3 September. Both reports publish their datasets and scripts under
CC BY 4.0 and describe their method in enough detail to re-run. I have not re-run them. I am
treating them as two method descriptions with numbers attached — which is what they are — and I
will not lean on either for a claim its own limitations section rules out.

## What we measure every day or two, and what the instrument can see

Since 24 August we have run an open-source AI-visibility monitor we self-host (Elmo) against a
fixed list of fifteen questions. Ten are procurement questions of the kind a developer asks when
choosing an LLM gateway or router — "Which LLM gateway supports automatic failover across
multiple providers?", "OpenRouter vs LiteLLM vs Portkey: which should I use?", "Which LLM router
lets me set per-API-key spending quotas?" Five are informational questions that articles on this
blog answer — "How much advance notice do LLM providers give before raising prices?", "Does
quantizing the KV cache break tool calls?" Each question is put five times to one engine:
ChatGPT through OpenAI's API with web search enabled, version string `gpt-5.6-terra` in every
run. Every URL the answer cites is stored with the run. That is 75 runs per snapshot. Six
snapshots exist — 24, 25, 26, 28 and 30 August and 2 September; daily at first, then every
second or third day — for 450 runs and 1,926 citations.

We read it under a few rules, and they shape every number below. Counts carry their
denominators; "cited in 0 of 75 runs" is a measurement, "ranked nowhere" is not, because an AI
answer has no rank. Comparisons are at the domain level, not the URL level, for a reason the
last section shows. And one engine is one engine: nothing here is a statement about Perplexity,
Claude, Gemini or Google's AI Mode, none of which we have measured.

One thing the instrument cannot see deserves saying up front. The API returns the citations
but not the rewritten search queries the model issued to find them; in all 450 runs that field
is a placeholder. So we know which documents were chosen and not which query fetched them.

## Where 1,926 citations went: two-thirds to documentation

I classified every cited URL by host and path pattern — a subdomain beginning `docs.`,
`developers.`, `learn.` or `platform.`, a path segment such as `/docs/` or `/guides/`, a
`/terms/` or `/policies/` or `/sla` path, and so on. It is a heuristic; its limits are in the
last section. Under it, the six snapshots pooled look like this.

| Page type | Citations (six snapshots) | Share | 2 September alone |
|---|---|---|---|
| Documentation | 1,247 | 64.7% | 211 of 323 |
| Terms of service / legal / SLA | 231 | 12.0% | 38 |
| Blog or news post | 114 | 5.9% | 19 |
| Paper or PDF | 96 | 5.0% | 13 |
| GitHub repository or file | 85 | 4.4% | 13 |
| Product or comparison page | 39 | 2.0% | 8 |
| Model card | 28 | 1.5% | 6 |
| Homepage | 16 | 0.8% | 2 |
| Forum or community thread | 3 | 0.2% | 1 |
| Unclassified | 67 | 3.5% | 12 |

Documentation, terms, papers, repositories and model cards — the categories a librarian would
shelve as reference — come to 1,687 of 1,926, or 87.6%. Blog posts, of any author, are 5.9%.

The three most-cited domains show how narrow the target is. `docs.litellm.ai` received 22
citations on 2 September, every one of them to the same URL: the documentation root. `openrouter.ai`
received 69 across 17 distinct URLs, 64 of them under `/docs/` — the provider-selection guide
(16), the quickstart (13), an organization-management cookbook (10), the FAQ (8) — and five to
a blog tutorial on team spend controls. `portkey.ai` received 34 across 11 URLs, 33 of them
under `/docs/`. Pricing pages, comparison pages and homepages for those three products barely
appear.

The near-absence of forums is worth a moment, because Trellner found reddit.com second on its
list with 261 of 7,534. Our 1,926 citations include three community threads — two on Google's
AI developer forum, one on OpenAI's. The two results are not in conflict. Ask "best CRM
software" and the reference-shaped documents on the web are review aggregators and discussion
threads; ask "which router lets me set per-key budgets" and the reference-shaped documents are
the routers' own docs, because that is where the parameter names live. The source pool follows
the shape of the question. What stays constant across both is the shape the engine reaches for.

![Horizontal bar chart of the ten most-cited domains on 2 September 2026: openrouter.ai 69, portkey.ai 34, docs.litellm.ai 22, github.com 20, docs.aws.amazon.com 20, developers.cloudflare.com 17, openai.com 14, vercel.com 11, cloud.google.com 9, learn.microsoft.com 9; the first three bars, the tracked competitors' own domains, are drawn in dark ink and the rest in grey](/blog/images/ai-citations-manufactured-who-gets-cited-fig.png "Fig. 1 — Where the 323 citations of 2 September went: the ten most-cited of 46 domains. Dark bars are the three tracked competitors' own domains, 125 citations between them. Data: our self-hosted monitor, 75 ChatGPT runs.")

## Three competitor domains take 34.9–40.6% of every snapshot, and that is a band, not a trend

We track ten competitors. Three of them — OpenRouter, LiteLLM and Portkey — own the two
most-cited domains in every snapshot (`openrouter.ai` and `portkey.ai`) and the third in five of
six: on 28 August `github.com` took third place and `docs.litellm.ai` fell to fourth.
Here is what those three took, snapshot by snapshot.

| Snapshot | Citations | Domains | To the three domains | Share | Top ten domains' share |
|---|---|---|---|---|---|
| 24 Aug | 341 | 47 | 134 | 39.3% | 67.4% |
| 25 Aug | 320 | 38 | 128 | 40.0% | 70.3% |
| 26 Aug | 315 | 45 | 128 | 40.6% | 68.3% |
| 28 Aug | 303 | 46 | 111 | 36.6% | 66.7% |
| 30 Aug | 324 | 47 | 113 | 34.9% | 66.0% |
| 2 Sep | 323 | 46 | 125 | 38.7% | 69.7% |

The 2 September figure is up on 30 August, and it would be easy to write "rising". I will not.
Six points that read 39, 40, 41, 37, 35, 39 are a band, not a trend, and the honest statement
is the boring one: about two citations in five go to three domains, and that has been true on
every day we looked. The wider concentration is just as steady — the ten most-cited domains
hold two-thirds of citations in every snapshot — and the tail is thin: of the 46 domains cited
on 2 September, 15 were cited exactly once.

At the run level, on 2 September, 37 of 75 runs cited at least one of the three domains, and
47 of 75 mentioned at least one tracked competitor by name — LiteLLM in 39 runs, OpenRouter in
31, Portkey in 28, with a run free to mention several. The answers average 4.3 citations each;
five of the 75 cited nothing at all.

One question is worth reading on its own. "OpenRouter vs LiteLLM vs Portkey: which should I
use?" drew 35 citations across its five runs: 11 to `openrouter.ai`, 11 to `portkey.ai`, 10 to
`github.com`, most of those the LiteLLM repository. The parties being compared supplied nearly
all of the evidence about themselves. There is nothing improper in that — those are their
documentation pages, and documentation is what one should read — but notice that the engine did
not go looking for a third party. A commenter on the Trellner thread, toddmorey, reported the
same pattern from agent traces: "many of the comparison pages cited in research are often
hosted by one of the companies being compared."

## Crawled hundreds of times a day, cited in 0 of 450 runs

Now the part that is about us, which I include because it is the only case where I can see
both ends of the pipe.

Cloudflare sits in front of pirouter.ai and reports requests by user agent over a 24-hour
window. In our 30 August daily report the AI agents were ClaudeBot at 199 requests and
ChatGPT-User at 57. In the 3 September report they were meta-externalagent at 370, Amazonbot
at 52, ChatGPT-User at 33, OAI-SearchBot at 22, PerplexityBot at 7, GPTBot at 1 — and ClaudeBot
at 0. The crawlers rotate; on the 30th the biggest was Anthropic's, four days later Meta's, and
one went from 199 to nothing. What did not rotate is the other end: in the 2 September snapshot,
as in the five before it, no run cited a pirouter.ai URL and no answer mentioned us.

OpenAI's crawler documentation is precise about what those agents are for, and the distinction
matters here. GPTBot fetches for training; OAI-SearchBot fetches to build the search index; and
ChatGPT-User fetches when a user's question triggers a visit — it "is not used for crawling the
web in an automatic fashion" ([Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots)).
Perplexity draws the same line between PerplexityBot and Perplexity-User
([Perplexity crawlers](https://docs.perplexity.ai/docs/resources/perplexity-crawlers)). So 33
ChatGPT-User and 22 OAI-SearchBot requests in one day mean our pages were fetched both for the
index and in the course of live answers. They were read. They were not cited.

Being fetched is the first of three gates. The second is being in the candidate set the
engine retrieves for a given question; the third is being selected into the answer. Our data
sees the first gate and the third. The first is open: hundreds of fetches a day. The third is
shut: 0 of 450. Somewhere between them we are either retrieved and passed over or not retrieved
at all, and the instrument cannot tell me which; the second gate is exactly what the placeholder
query field hides.

![Data card with two figures side by side: 56, labelled as requests to pirouter.ai from OpenAI's three user agents in one 24-hour window in the 3 September 2026 Cloudflare report, and 0 of 75, labelled as ChatGPT runs citing pirouter.ai in the 2 September 2026 snapshot](/blog/images/ai-citations-manufactured-who-gets-cited-fig2.png "Fig. 2 — Fetched and not cited. Left: ChatGPT-User 33 + OAI-SearchBot 22 + GPTBot 1 requests in one 24-hour Cloudflare window (3 September report). Right: ChatGPT runs citing pirouter.ai in the 2 September snapshot. The two windows are adjacent, not identical.")

We tried the obvious thing, and I can report how it went. On 29 August we published a
documentation-style answer to one of the gap questions, "What are the best OpenRouter
alternatives for production workloads?" — seven vendors' docs read on one day, six production
columns, every gap marked ([OpenRouter alternatives for production workloads](/blog/openrouter-alternatives-production)).
On 30 August and again on 2 September that question was asked five times each. Fifty citations
the first day, thirty-nine the second; the leading hosts were `docs.aws.amazon.com` (11, then
8), `learn.microsoft.com` (6, then 7), `vercel.com` and `developers.cloudflare.com`. None of the
89 was ours. On 30 August we published a configuration walk-through for another gap question
([Multi-provider failover across LiteLLM, Portkey, OpenRouter and Cloudflare](/blog/multi-provider-failover-setup)).
On 2 September "Best LLM router or gateway for multi-provider failover" drew 31 citations in
five runs, 22 of them to `portkey.ai`, `openrouter.ai` and `docs.litellm.ai`. Three or four days
is not long, and I do not read either result as a verdict on the articles. I read them as a
description of what the engine reached for: the vendors' own pages.

The cleanest case is the question we wrote an article specifically to answer: "How much
advance notice do LLM providers give before raising prices?" Our piece reads the notice clauses
in seven providers' terms ([Price notice is a contract clause](/blog/price-notice-is-a-contract-clause)).
In six snapshots — 30 runs, 164 citations — that question cited nothing on the three competitor
domains and nothing of ours. It cited `openai.com/policies`, `cloud.google.com/terms`, Cohere's
terms of use, Anthropic's commercial-terms PDF, AWS service terms. The engine went straight to
the primary documents our article was about, and cited the documents rather than the reading of
them. If you write a secondary source about a primary source that is online, expect the engine
to cite the primary.

## Why manufactured pages and documentation win for the same reason

Set the three datasets next to each other and look at what the cited pages have in common,
rather than who published them.

Trellner's three sites state their rankings in JSON-LD, so, in the report's words, a page "can
be read without interpretation". Each page announces an editorial process and names three
staff; one labels its verdict "AI-verified · Expert reviewed"; two title their homepage "Facts
& Grounding Page" and describe it as "company, legal, methodology, and compliance details in one
machine-readable record". Whatever else they are, these pages are built in the shape of a
reference: one structured claim per page, a named author, a stated method, a record a machine
can parse. The report does not show that the shape changed any recommendation. It shows that
the shape got retrieved, 181 times, from domains that did not exist two years earlier.

Haus's failing citations cluster in the same shape from the other direction. About a quarter
of sonar's sourcing for questions about real companies went to directories and lead lists —
Tracxn, PitchBook, ZoomInfo, Crunchbase and their imitators — pages "generated from databases,
published at scale to rank, gated or retired without notice". Half the dead links were pages
minted per company per question type. These are not essays either. They are fact-record-shaped
pages that exist to be the thing a retrieval step lands on, and the engine attached its markers
to them whether or not the fact was there.

Our data is the benign version of the same rule. For a procurement question about gateways,
the reference-shaped documents on the web are the gateways' own documentation, and 1,247 of
1,926 citations went there; when the question was about contractual notice, another 231 went to
terms and SLA pages. Nobody manufactured those. They simply have, natively, the properties the
retrieval layer selects for: one page per concrete question, headings that match the query,
parameter names and figures on the page, a stable URL. A blog post — this one included — is a
different shape: an argument across several questions, dated, with its numbers embedded in
prose.

I want to be careful about how far to push this. The two audits are about Perplexity and ours
is about ChatGPT; the audits are one day and ours is six; none of us measured whether removing
the manufactured pages would change a single recommendation, and Trellner says so outright.
What the three agree on is narrower and, I think, solid: the retrieval layers behind AI answers
select on document shape and query match, and they do not currently apply much scepticism about
who is behind a document or why it exists. Haus's control result fits the same picture from
the OpenAI side — GPT-4.1 with web search cited 2.0 sources per answer and put 36.4% of them on
the company's own domain, against Perplexity's 9.8 and 23.4% — and so does ours: fewer
citations per answer, weighted heavily to the primary party's own pages.

The Hacker News threads carried first-hand versions of both faces. One commenter wrote that
their company has "been in business for about 10 years, but asking any LLM about
recommendations in this niche will not mention our tool at all", and that some of the "best
software" sites had reached out "with an offer where we can then pay them an annual fee
depending on which position we would like". Another reported API key requests and sales "up 5x
over the summer" while doing "basically zero traditional marketing or SEO", and suspected AI
search tools were suggesting their services. Both are anecdotes and I cite them as anecdotes.
A third put the structural point in one line: "The search engine is now the citation, and the
citation is a page that exists to be cited."

## What six snapshots cannot tell you

This is the section I would read first if I were you.

**One engine, through one door.** Every run is ChatGPT through the API with web search on,
not the consumer app, whose retrieval settings may differ. The word "AI" in the singular does not
appear in our conclusions for that reason, and nothing above confirms or contradicts the two
Perplexity reports' figures. The agreement I have claimed is about mechanism, not numbers.

**Fifteen questions we wrote.** They are the questions we care about being found for, phrased
the way we think a developer phrases them. Trellner made the same admission about its 380
categories. A different list would produce a different source pool, and the two-thirds figure
belongs to this list.

**Five runs give a band, not a point.** A question cited in 0 of 5 runs one day and 1 of 5
the next has not changed in any way we can detect. This is why our daily gap table reports
"5 of 5" and "1 of 5" and never a percentage, and why every share in this post carries a
denominator in the hundreds.

**The URL layer is weather.** Across six snapshots 405 distinct URLs were cited; 216 of them
appeared in exactly one snapshot and 26 in all six. At the domain level the picture is far
steadier: 78 domains, 26 present in all six, 25 in only one. `openrouter.ai` was cited between
57 and 69 times per snapshot, but which of its pages led changed — the provider-selection guide
on three days, the quickstart on two, the FAQ on one. Anything you read about a specific URL
from one snapshot is weather, which is why every comparison above is by domain.

**The page-type table is a regex.** A guide under `/blog/` on a vendor's site counts as a blog
post even when it reads like documentation; a documentation page on an unusual path can fall
into "unclassified", and 67 did. The two-thirds figure would move a few points under a different
rule. It would not become one-third.

**We cannot see the query.** The rewritten search terms the model issued are a placeholder in
all 450 runs, so the second gate — what was retrieved and then passed over — is inferred, never
observed.

One small thing the data does show, for anyone who runs a site: 290 of the 323 citation URLs
on 2 September carried `utm_source=openai`. That parameter is how ChatGPT-referred visits will
appear in your analytics, and it is the one place the third gate is visible from outside.

## What we do with it

The gap table this monitor produces — every question where the engine cited somebody and not
us — is one of the inputs to what we write, and two of the articles linked above came out of
it. I have shown that neither was cited within four days, and tried to say honestly why: for
those questions the engine wants the vendor's own page, and an article about vendors' pages is
one step removed from it. We do not have a method that gets a site cited. We have 0 of 450 and
a table that says where the citations went instead.

Two things would sharpen the picture, and both are on the list. A second engine, so that
"ChatGPT" stops standing in for "AI". And a provider that returns the rewritten queries, so we
can finally watch the second gate instead of inferring it from the first and the third. Until
then the honest summary of six snapshots is short. The citations went to whatever was shaped
like a reference. Some people answered that by building 215,128 pages. Vendors answered it,
without meaning to, by writing documentation. We are still writing essays, and measuring.

---

## Sources

### trellner.com

- [Manufactured sources behind AI recommendations](https://trellner.com/reports/manufactured-sources-behind-ai-recommendations/)

### hausresearch.com

- [Perplexity citation audit](https://hausresearch.com/reports/perplexity-citation-audit/)

### developers.openai.com

- [Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots)

### docs.perplexity.ai

- [Perplexity crawlers](https://docs.perplexity.ai/docs/resources/perplexity-crawlers)
