Methodology

What we measure, how we measure it, what counts as an observation versus an inference, what we deliberately do not measure, and how to check our work.

Methodology version 2026-08-10.1 · machine-readable at /v1/methodology

The short version

Once a week we read the robots.txt and homepage response headers of the Tranco top 50,000 domains using our own identified, cryptographically signed crawler. We record what each site tells AI crawlers: who is blocked, who is allowed, whether a price or payment wall is quoted, and what changed since last week. We publish the aggregates free and the per-domain detail to subscribers.

The distinction that matters most. “GPTBot is disallowed in this site’s robots.txt” is an observation. “15.3% of the scanned web blocks GPTBot” is a derivation from those observations. “A site of this size could charge $0.05 per crawl” is an inference — our judgement, not a measurement. We label all three differently everywhere they appear, and we never present the third as the first.

What we measure

SignalHowType
Robots stance
per crawler, per domain
GET /robots.txt with our identified user agent; parse User-agent / Disallow / Allow groups. Values: blocked, allowed, partial, unlisted, no_robots.observed
Observed priceRecorded only when a site returns a price in a machine-readable payment response — HTTP 402 with a crawler-price or payment header, or an equivalent x402 offer. We publish the quote and the domain that gave it.observed
Payment signalsStatus codes and headers on identified-crawler requests: 402 responses, TollBit-style token walls, licensing redirects, payment:free declarations.observed
EnforcementCompares a site’s declaration against what an identified crawler actually receives. Publisher panel only (~49 domains), so directional, not projectable.observed
(panel)
Block ratesShare of parsed domains blocking each crawler. Denominator is domains successfully parsed, never the nominal top-N.derived
Country editionsSegmented by country-code TLD, published where at least 8 domains are present. ccTLD is a proxy for country, not for publisher nationality or audience.derived
Trends & moversDifference between consecutive weekly snapshots in our archive.derived
Suggested price band
checker only
Our judgement, anchored to observed quotes and the domain’s rank. Labelled as judgement wherever it appears.inferred

What we do not measure

How we identify ourselves

Our crawler sends a truthful user agent and signs every request cryptographically, so any site can verify that traffic claiming to be ours really is:

User-Agent: CrawlPriceIndexBot/1.0 (crawl-economy measurement;
            robots.txt study; contact: hello@crawlpriceindex.com)
Signature-Agent: "https://crawlpriceindex.com"
Signature-Input: sig=("@authority" "signature-agent");created=…;keyid="…";tag="web-bot-auth"

Signatures follow RFC 9421 under the Web Bot Auth profile. Our public key directory is served at /.well-known/http-message-signatures-directory. We have applied to Cloudflare’s verified bots programme using signature verification.

Crawl etiquette

Coverage and freshness

Known limitations

Corrections

If we get something wrong, we fix it in the next weekly edition and record it in the machine-readable corrections array with the date, what changed and why. We do not silently amend past editions. Report an error to hello@crawlpriceindex.com and it will be acknowledged in the next edition.

Reproduce our work

Every figure we publish is regenerated weekly from a full sweep. To check any headline number yourself:

# the aggregates behind the homepage
curl -s https://crawlpriceindex.com/index.json

# how we measure, machine-readable
curl -s https://api.crawlpriceindex.com/v1/methodology

# any domain's stance, free
curl -s "https://api.crawlpriceindex.com/v1/check?domain=example.com"

# and the site's own robots.txt, to check us against the source
curl -s https://example.com/robots.txt

If our stance for a domain disagrees with that site’s live robots.txt, that is a bug and we want to hear about it. Subscribers get the full per-domain dataset as JSON or CSV, with a per-customer watermark.

Independence

The Crawl Price Index is funded by subscriptions. We take no payment from AI companies, publishers, CDNs or licensing platforms in exchange for coverage, ranking or inclusion. We link to Cloudflare, TollBit and RSL as setup routes for site owners with no commercial relationship to any of them. Our own site publishes machine-readable licensing terms and charges AI training crawlers, at a price derived from the index itself — disclosed in rsl.xml.