# Which of these crawlers is who it says it is

Every operator that publishes address ranges or a documented hostname
suffix was checked against it. Addresses are held in memory and never
written anywhere, here or in `extract.py`.

| operator | requests | addresses | verified | requests verified | how |
|---|---|---|---|---|---|
| Googlebot | 1380 | 53 | 34 | 1337 (97%) | published range and reverse DNS |
| ClaudeBot | 1350 | 46 | 45 | 1311 (97%) | published range |
| meta-externalagent | 1344 | 130 | 130 | 1344 (100%) | reverse DNS and registry ownership |
| Bingbot | 1170 | 226 | 225 | 1169 (100%) | published range and reverse DNS |
| Applebot | 788 | 215 | 215 | 788 (100%) | published range |
| GPTBot | 669 | 24 | 23 | 668 (100%) | published range |
| OAI-SearchBot | 179 | 52 | 51 | 178 (99%) | published range |
| CCBot | 132 | 9 | 0 | 0 (0%) | none published |
| Bytespider | 68 | 32 | 0 | 0 (0%) | reverse DNS and registry ownership |
| Amazonbot | 66 | 55 | 55 | 66 (100%) | reverse DNS |
| Claude-User | 9 | 3 | 0 | 0 (0%) | published range |
| ChatGPT-User | 5 | 5 | 4 | 4 (80%) | published range |
| YouBot | 4 | 2 | 2 | 4 (100%) | registry ownership |
| PerplexityBot | 2 | 2 | 1 | 1 (50%) | published range |
| Claude-SearchBot | 1 | 1 | 0 | 0 (0%) | published range |
| Google-Extended | 1 | 1 | 0 | 0 (0%) | published range and reverse DNS |
| Applebot-Extended | 1 | 1 | 0 | 0 (0%) | published range and reverse DNS |

**6870 of 7169 requests (95.8 per cent) came from an address the operator publishes or a hostname it documents.**

Counting only the operators for which any check is possible at all, 6870 of 7037 requests verified, 97.6 per cent.

An unverified request is not proof of impersonation. It can equally be a range published after this window, a proxy the operator uses and does not list, or a file that moved. It is reported because the alternative is to count a claim and call it a measurement.
