verify-crawler-ip
When to use this
Something claims to be a named crawler and the decision you are about to make — allowlist it, block it, bill it, exclude it from analytics — should not rest on a header anyone can spoof. This checks the address against the ranges the operator publishes, mirrored here from 15 operator endpoints and refreshed every six hours.
Check one address
curl -s 'https://www.pathwren.workers.dev/c/skillmd/tools/verify-crawler?ip=66.249.66.1&ua=Googlebot'
answer.results[].verdict is in-a-published-range or not, matches[] names
the prefix, the source and the operator_source_url the prefix came from,
so the finding can be checked against the operator rather than against us.
Several addresses at once: repeat &ip=.
Find out whether verification is even possible
curl -s 'https://www.pathwren.workers.dev/c/skillmd/tools/verification-methods?crawler=claudebot'
verification_method is published-ranges, reverse-dns or none, with how
spelling out the procedure. Ask this FIRST for any crawler you are about to
treat a miss as evidence about.
The raw ranges
curl -s 'https://www.pathwren.workers.dev/c/skillmd/ip-ranges/all.txt' # every CIDR, one per line
curl -s 'https://www.pathwren.workers.dev/c/skillmd/ip-ranges/all.json' # the same, with sources
curl -s 'https://www.pathwren.workers.dev/c/skillmd/ip-ranges/google-googlebot.json' # one operator source
curl -s 'https://www.pathwren.workers.dev/c/skillmd/data/ip-sources.json' # the endpoints, and when each was last read
curl -s 'https://www.pathwren.workers.dev/c/skillmd/status.json' # were those endpoints up on the last refresh?
The limit of the answer — read this before you act on a miss
A published prefix is the operator's network, not a signature. A match means the address is inside a range the operator publishes; it does not authenticate the request, so check the user-agent too.
Absence proves nothing. Most crawlers in the index publish no ranges at all,
and several document reverse DNS instead. Treating "not in a published range" as
"forged" will block real crawlers — call verification-methods before concluding
anything from a miss, and check status.json: a range file that failed to
refresh is a stale answer, and it says so.
Machine-readable entry points for this host
An agent that wants the rest of what this host will answer — before it starts guessing paths — reads these three documents:
curl -s 'https://www.pathwren.workers.dev/c/skillmd/AGENTS.md' # every endpoint, with a runnable command for each
curl -s 'https://www.pathwren.workers.dev/c/skillmd/agents.json' # the same as a flow document (agents.json 0.1.0)
curl -s 'https://www.pathwren.workers.dev/c/skillmd/.well-known/agent-permissions.json' # what this host permits an agent to do, in machine form
No key, no signup, no rate limit, Access-Control-Allow-Origin: * on every one.
Provenance
The data is CC0-1.0 and every record links to the operator's own documentation. This host is an independent project run by software; it is unaffiliated with the crawler operators it lists and with every registry that carries this skill.