A daily census of the agentic web · reading 2026-08-25
Every morning, 2,110 fixed origins are asked two questions: do you publish anything written for an AI to read, and do you let AI read you at all. The answers are resolved to a decision per crawler, recorded with who served the policy, and frozen.
The finding
That gap is a choice, and it is the axis the IETF working group on AI preferences is currently arguing about. See the full reading, the method, and the prior work this builds on.
Origins publishing files written for machines rather than people. Measured against a frozen cohort, so a change in the number means a change in adoption.
| Signal | Web head Tranco top 1,000 n=1,000 | Web tail sampled to rank 100k n=1,000 | AI-native model & dev platforms n=110 |
|---|---|---|---|
| Any agent-facing signal | 10.8% (108) | 5.8% (58) | 74.55% (82) |
| llms.txt (apex domain) | 8.8% (88) | 4.9% (49) | 58.18% (64) |
| llms.txt (docs subdomain) | 3.4% (34) | 1% (10) | 43.64% (48) |
| .well-known/mcp.json | 0.5% (5) | 0.3% (3) | 7.27% (8) |
| .well-known/agents.txt | 0.2% (2) | 0.2% (2) | 0% (0) |
| ai.txt | 0.2% (2) | 0.1% (1) | 0% (0) |
| ai-plugin.json (deprecated) | 0.6% (6) | 0.3% (3) | 0.91% (1) |
Share of origins whose robots.txt disallows each crawler at the site root. Training crawlers and answer-engine fetchers are separated, because refusing to be trained on is a different decision from refusing to be cited.
| Crawler | Operator | Purpose | Web head Tranco top 1,000 | Web tail sampled to rank 100k | AI-native model & dev platforms |
|---|---|---|---|---|---|
| GPTBot | OpenAI | training | 23.85% (119) | 22.92% (116) | 2.11% (2) |
| ChatGPT-User | OpenAI | user-fetch | 15.63% (78) | 8.7% (44) | 1.05% (1) |
| OAI-SearchBot | OpenAI | search | 13.23% (66) | 7.51% (38) | 1.05% (1) |
| ClaudeBot | Anthropic | training | 24.25% (121) | 21.15% (107) | 2.11% (2) |
| Claude-User | Anthropic | user-fetch | 15.43% (77) | 6.32% (32) | 1.05% (1) |
| CCBot | Common Crawl | training | 26.85% (134) | 21.94% (111) | 3.16% (3) |
| Google-Extended | training | 21.04% (105) | 20.75% (105) | 3.16% (3) | |
| PerplexityBot | Perplexity | search | 19.04% (95) | 8.7% (44) | 1.05% (1) |
| Bytespider | ByteDance | training | 25.65% (128) | 22.73% (115) | 4.21% (4) |
| Applebot-Extended | Apple | training | 20.24% (101) | 18.58% (94) | 1.05% (1) |
| meta-externalagent | Meta | training | 22.04% (110) | 19.76% (100) | 2.11% (2) |
| Amazonbot | Amazon | search | 18.64% (93) | 20.36% (103) | 2.11% (2) |
Denominator is origins that served a parseable robots.txt: head 499/1,000 · tail 506/1,000 · ai_native 95/110. A site counts as blocking when the group that applies to that crawler disallows the root, with an exact user-agent match taking precedence over the wildcard group.
Roughly half the ranked strata return no robots.txt, and that is expected rather than
a gap: Tranco ranks by DNS resolution volume, so its head contains a great many CDN and infrastructure
hostnames like akamaized.net, googleapis.com,
apple-dns.net and gtld-servers.net, which are not
browsable websites and correctly serve nothing at the apex. Rates are computed over origins that
answered, never over the whole stratum, so infrastructure hostnames cannot dilute the result.
Larger projects already count these directives. Three choices make this reading different, and each one is a thing the bigger datasets cannot give you.
A decision, not a count of directives.
The largest public dataset records how many Allow and
Disallow lines each crawler has and discards the paths, which makes
Disallow: / indistinguishable from Disallow: /admin/.
This resolves precedence and reports allow, partial, or full block.
Crawlers separated by what they are for.
Refusing to be trained on is a different decision from refusing to be read on a person's behalf. Blending the two hides the only interesting thing in the data.
Who wrote the policy is recorded too.
One CDN ships a managed robots.txt to millions of zones
that permits search and denies training. If most blockers sat behind it, the headline would be measuring a
vendor default. So every origin's CDN is recorded, and the share is published rather than assumed away.
No key, no account, no rate limit. Every endpoint is a static file on a CDN.
curl https://28081999.me/api/census/latest.json curl https://28081999.me/api/census/series.json
Also llms.txt, openapi.json, .well-known/mcp.json and .well-known/agents.txt, served at the paths this census probes.
A second, quieter thing this machine does, kept because it costs nothing and the record is unbroken.
Alongside the census it records what the most people looked up, what developers argued about, and what was published, once a day, frozen. 298 days so far with no gaps, 2025-11-01 to 2026-08-25. Unlike the census it is an aggregation of public APIs and anyone could rebuild it, which is why it is not the point of this site.
Browse the archive Compute a model's knowledge gap Latest day