28081999.me

A daily census of the agentic web · reading 2026-08-25

The web is deciding what machines may read.

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

1.5×more likely to block a crawler that trains on you (23.4%) than one fetching a page a person asked for (15.5%), across the top 1,000

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.

Who invites agents in on 2026-08-25 14,770 probes

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.

SignalWeb 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)

Who shuts agents out robots.txt

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.

CrawlerOperatorPurposeWeb 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 Google 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.

Why measure it this way

Larger projects already count these directives. Three choices make this reading different, and each one is a thing the bigger datasets cannot give you.

  1. 01choice

    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.

  2. 02choice

    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.

  3. 03choice

    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.

For machines

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.

There is also an archive

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