How Perplexity picks sources, and how to track the URLs

The short answer: Perplexity rewrites your question into searches, pulls a short ranked list of candidate pages from its own index, and sometimes fetches a live page on top of that. It then cuts the candidates into passages and cites the ones it actually used. Selection happens twice, once at retrieval and once at writing, and only the first step has a number attached to it in Perplexity's own documentation.
That two-stage shape is the part most advice skips, because it treats Perplexity as a results page with a new coat of paint.
To see which URLs an answer used: open the sources list beside the answer, where each numbered marker carries its URL, or call the Agent API and read the search_results item in the output array of the response. The next section has both methods and the limits of each.
How to see which URLs Perplexity used
This is the task most people arrive with, so here it is before the mechanism. There are two places to read the source set, and they answer slightly different questions.
In the product, read it off the answer. Each cited passage carries a numbered marker, and the sources list beside the answer holds the URL behind each number. That is the set for that run, on that day, and nothing more. Ask the same question tomorrow and the list can differ, which is why a single screenshot is not a record of anything.
In the API, read it out of the response body. Use the Agent API, which is the endpoint Perplexity directs new work to. It returns a typed output array with one item per step the model took, including a search_results item carrying the sources and a message item carrying the answer text. The older Sonar chat completions response returned a citations array of bare URLs alongside a search_results array of objects holding a title and a url, and Perplexity ended support for that endpoint on 27 September 2026, so treat it as a description of older scripts rather than a path to build on. We read both in Perplexity's API reference on 15 October 2026. The practical consequence is that a script can collect source URLs for a list of questions, repeatedly, without anyone taking screenshots.
Keep the two apart when you report them. The API is a product Perplexity sells to developers, and Perplexity does not publish how closely its consumer answers follow it, so an API source list is evidence about the API and the product's own sources panel is evidence about the product. Neither is a measurement until you have run the same question several times.
Your own logs answer a third version of the question, which is when Perplexity came to you rather than whom it cited. Match the requesting addresses against the two published IP files described below and you can see which of your URLs were fetched, and by which of the two agents.
Two fetchers, two sets of rules
Perplexity documents two user agents and they behave differently. PerplexityBot is the indexer. Its job, in Perplexity's own wording, is to surface and link websites in search results, and it respects robots.txt. Perplexity-User is the live fetcher: when someone asks a question and the system decides it needs the page right now, that agent goes and gets it, and Perplexity says it generally ignores robots.txt because a human asked for it.
So a site can block the indexer and still be read live. A site can also allow everything and remain uncited, because access was never the binding constraint. Before you argue about either, separate the two in your logs.
Perplexity publishes the IP ranges for both agents as JSON. We fetched each file once, on 12 October 2026, and read the creationTime field Perplexity puts at the top of it. perplexitybot.json carried a creation time of 7 February 2025 and listed eight IPv4 prefixes: six single addresses, one /30 and one /29. perplexity-user.json carried 17 October 2025 and listed four prefixes: two single addresses, one /30 and one /29. That is one reading of two files on one day, taken by hand, not a history of them. Perplexity can change either file without telling anyone, so re-read them rather than trusting ours.
Both lists are short, which makes them cheap to check against. Match the requesting IP to the published prefixes before you believe a user agent string, because the string is trivial to forge. We cannot tell you what share of self-declared Perplexity traffic in your log is genuine, because without the IP match nothing in the request settles it, and that is the argument for doing the match rather than a figure we are withholding. Where an engine publishes no such list the check is not available at all, which is one reason the how each AI engine picks the sources it cites breakdown starts with logs rather than content.
The candidate list is short
Perplexity's Search API is the clearest public view of the retrieval layer it sells, and the parameters are documented. max_results accepts 1 to 20 and defaults to 10. A warning on the same page caps search_domain_filter at 20 domains. Each result comes back as a small object: title, url, snippet, date and last_updated, and the sample responses on that page show the two date fields coming back null.
Read that as a budget, with the caveat stated plainly. Those parameters document the API Perplexity sells to developers. Perplexity has not published the candidate count behind its consumer answers, so reading ten as the shape of the assistant is an inference from the one number it does document, not a fact about the product you use in a browser. What the documentation does settle is that inside a single API search the set is small: the eleventh best page for a query that returns ten results is in the same position as the four hundredth. Getting into a short set is a different problem from moving up a rank.
The null dates are worth a second look for the same reason. If your page exposes no machine-readable published or updated date, the retriever hands the model a source with an empty freshness field. Perplexity does not document what the model then does with that, so we cannot tell you an undated page loses a question where recency matters; we can say it arrives carrying less than a dated one does. Putting a real datePublished and dateModified in your markup, and a visible date that agrees with them, costs an afternoon and removes the question.
It cites a wider set than the traditional engines
Here is the part worth planning around, stated at the size of the evidence behind it. Perplexity spreads its citations across a longer tail of domains than Google and Bing do in the published measurements, which gives a mid-sized site a real chance. On the one public comparison we can open, it is not the system that reaches furthest down.
A December 2025 arXiv preprint on source coverage ran 55,936 queries across six AI search engines and two traditional ones, and logged 280,699 cited sources from Perplexity. Taking the six AI engines together, it found that only 38 percent of the domains they cited also appeared in the traditional engines, which is a figure for the group and not for Perplexity alone. Its Table 2 gives the Tranco rank of Perplexity-cited domains: median 1,362, mean 48,208. A median that low with a mean that high describes a system that leans on well-known sites for the easy half of questions and reaches deep into obscurity for the rest.
That same table is the correction to a comparison this post used to draw. Perplexity's median of 1,362 sits below Copilot's 3,912 and Gemini's 3,805 in the preprint, and a lower Tranco rank means a more popular domain, so on that measure those two cited less popular sources than Perplexity did. Perplexity is more dispersed than the traditional engines in that study. It is not the most dispersed system in it.
An analysis of news citation patterns, posted as an arXiv preprint in July 2025, found a similar shape in a narrower slice. It did not run a controlled query set. It analysed over 24,000 conversations and 65,000 responses collected from a public head-to-head arena for AI search, so the prompts are whatever the people using that platform typed. In that data the Perplexity model family cited 1,430 unique news domains, against 881 for Google's and 707 for OpenAI's, and its top twenty news sources accounted for 28.5 percent of all its citations against 67.3 percent for OpenAI's. Those are model families, on one platform, over one collection window in 2025.
Two practical readings follow, both bounded by those two studies. First, a page that is genuinely the better answer to a narrow question has a real chance here without a famous domain, and the concentration numbers are the reason to believe it. How that compares with Google AI Mode depends on the measure you pick: the same table puts AI Mode's median Tranco rank at 1,809 against Perplexity's 1,362. Second, the long tail is also a warning. The set of sources behind two runs of the same question will not be identical, so one screenshot proves nothing.
What actually gets a passage picked
Retrieval gets you into the candidate set. The second selection, inside the answer, is about whether a passage can be lifted and attributed without risk. Perplexity documents none of this, so what follows is a pattern from the audits this studio runs, not a specification. We have not counted it against a control, and we are not going to attach a number to it.
Pages that keep winning that step, in the audits we have run, tend to share a few unglamorous properties. The claim sits near a heading that matches the sub-question, not four hundred words below it. Numbers carry their unit, their date and their source in the same sentence, so a quoted fragment stays true when it is torn out of context. Lists and small tables survive extraction better than long paragraphs, which is what we would expect if chunking cuts on structure, though Perplexity publishes nothing about how it chunks. And the page says one thing rather than three contradictory things in different sections. We infer that last one from which pages get cited in the answers we collect; we cannot see the model resolving anything.
Corroboration appears to carry weight on contested commercial questions. When several documents say the same thing, the shared claim is cheaper to assert, and in the answers we collect the sources that already hold the consensus get cited again. This is read off the outputs, not observed in the system, and we cannot rule out that the same sources would appear for unrelated reasons. Which third parties fill that role varies by sector, and the third-party sources AI engines keep citing list is a better starting point than guessing.
The failure modes we see most
Four things come up again and again in the audits this studio runs. That is a note of what we keep finding on client sites, not a ranked set of causes measured against a control, and from outside nobody can attribute a specific lost citation to a specific one of them. All four are checkable in an afternoon, which is the point.
A client-rendered page. If the answer only exists after JavaScript runs, the fetcher may hold an empty shell. Compare curl output against what the browser shows.
A redirect chain. Each hop is a chance to drop, and a chain that ends in a canonical mismatch can mean the cited URL is not the URL you wanted cited. The mechanics are in redirect chains and lost sources.
A blanket bot rule. We have repeatedly found security and bot-management configurations that block the indexer while letting the live fetcher through, which produces the confusing pattern of occasional citations with no stable presence. We have not surveyed which products ship which default, so check your own rules rather than assuming them.
An answer buried under preamble. Extraction behaves as though it cuts on structure rather than following your narrative build. If the first passage containing the claim is the ninth passage on the page, it competes against pages whose first passage contains it.
Run these yourself before paying anyone. The self-check walks through ten of them, in order, with no tooling required.
Honest limits
This post does not establish how Perplexity ranks anything. Perplexity has published no ranking specification, and nothing in its developer documentation describes how relevance is scored, so anyone quoting you the weights is guessing. The documented part is the plumbing: the two agents, the two IP files, the result object and the API's result ceiling. The candidate count behind consumer answers, the cost of a missing date, and what makes one passage quotable are inferences, the last two drawn from audits we have neither counted nor controlled, and a careful reader should push on exactly those three.
The figures carry their own limits. Our IP counts are one hand-read of two files on 12 October 2026, not a history of them. Both studies cited here are arXiv preprints rather than peer-reviewed papers, one of them measuring model families on a public arena platform rather than the consumer products, and both describe engines as they stood in 2025. The engine also keeps changing: a publisher revenue programme now sits alongside the free index, the browser product has changed how some fetches originate, and the mix between indexed retrieval and live fetching is not something an outsider can observe. Treat any number here, ours included, as a reading from a particular month.
FAQ
Does blocking PerplexityBot remove me from Perplexity? It removes you from the index that feeds most answers. It does not reliably stop Perplexity-User, which Perplexity says generally ignores robots.txt because a person initiated the request. Blocking is therefore a partial measure with a full cost.
How many sources does one answer draw on? Perplexity has not published the number for its consumer answers. What is documented is the Search API it sells, which returns ten results by default and twenty at most per search. A complex question may run several searches, so the pool is larger than one search, but how much larger is not something an outsider can read off the documentation.
Is being cited by Perplexity easier than ranking on Google? Easier is the wrong word, but the distribution is less concentrated. In one July 2025 arXiv preprint, built from public arena conversations rather than a controlled query set, the Perplexity model family cited 1,430 unique news domains against 881 for Google's, and its top twenty outlets took 28.5 percent of all its citations. That is news sources on one platform in 2025, not a general rule, but a narrow and genuinely better page has room.
Why do two identical questions return different sources? Retrieval is re-run each time, the index moves, and the model samples. We cannot see which of the three is doing the work in a given case. Run any question at least five times across a week before you call a result a pattern.
How do I track which URLs Perplexity used? Two places. In the product, the sources list beside the answer carries the URL behind each numbered marker, for that run. In the API, the Agent API returns a search_results item inside its output array; the retired Sonar chat completions endpoint returned a citations array and a search_results array instead. Perplexity does not publish how closely consumer answers follow the API, so keep the two sets of evidence apart rather than averaging them.
Does Perplexity cite sources? Yes. Answers carry numbered markers tied to the pages the answer drew on, and both the the Agent API response returns those sources as structured fields with their URLs. What Perplexity does not publish is how the sources were ranked or chosen, so the list tells you what was used and not why.
Sources
Every URL below was opened and re-read on 12 October 2026, except the API reference, which we read on 15 October 2026.
- Perplexity, crawler and user agent documentation: docs.perplexity.ai/guides/bots
- Perplexity, PerplexityBot IP ranges: www.perplexity.com/perplexitybot.json (
creationTime7 February 2025; eight IPv4 prefixes when read on 12 October 2026) - Perplexity, Perplexity-User IP ranges: www.perplexity.com/perplexity-user.json (
creationTime17 October 2025; four IPv4 prefixes when read on 12 October 2026) - Perplexity, Search API quickstart, for
max_results, the 20-domainsearch_domain_filtercap and the result object: docs.perplexity.ai/docs/search/quickstart (the search control guide now redirects here, so it is not listed separately) - "Source Coverage and Citation Bias in LLM-based vs. Traditional Search Engines", arXiv preprint, December 2025, Table 1 and Table 2: arxiv.org/html/2512.09483v1
- "News Source Citing Patterns in AI Search Systems", arXiv preprint, July 2025, Table 1 and the concentration figures: arxiv.org/html/2507.05301v1
- Perplexity, Agent API reference, read 15 October 2026: the
outputarray with itssearch_resultsandmessageitems: docs.perplexity.ai/api-reference/agent-post - Perplexity, Sonar chat completions API reference, read 15 October 2026: the
citationsarray of URLs and thesearch_resultsobjects carryingtitleandurl, and the notice that support for this endpoint ended on 27 September 2026: docs.perplexity.ai/api-reference/chat-completions-post - Schema.org Article type, datePublished and dateModified: schema.org/Article