# Published crawler IP ranges, one schema

> 1984 IPv4 and 1062 IPv6 prefixes from 15 operator-published endpoints, normalised into one schema, each with the upstream timestamp and a SHA-256 of the bytes we received. Re-fetched every six hours.

```
curl -s https://www.pathwren.workers.dev/ip-ranges/all.txt   # every prefix, one CIDR per line
```

| Source | Operator | IPv4 / IPv6 | Upstream | Where it comes from |
|---|---|---|---|---|
| [GPTBot](/ip-ranges/openai-gptbot.html) | OpenAI | 21 / 0 | ok | [upstream](https://openai.com/gptbot.json) |
| [OAI-SearchBot](/ip-ranges/openai-searchbot.html) | OpenAI | 35 / 0 | ok | [upstream](https://openai.com/searchbot.json) |
| [ChatGPT-User](/ip-ranges/openai-chatgpt-user.html) | OpenAI | 204 / 0 | ok | [upstream](https://openai.com/chatgpt-user.json) |
| [Googlebot](/ip-ranges/google-googlebot.html) | Google | 170 / 147 | ok | [upstream](https://developers.google.com/static/search/apis/ipranges/googlebot.json) |
| [Google special-purpose crawlers](/ip-ranges/google-special.html) | Google | 136 / 136 | ok | [upstream](https://developers.google.com/static/search/apis/ipranges/special-crawlers.json) |
| [Google user-triggered fetchers](/ip-ranges/google-user-triggered.html) | Google | 529 / 529 | ok | [upstream](https://developers.google.com/static/search/apis/ipranges/user-triggered-fetchers.json) |
| [Google user-triggered fetchers (Google-owned ranges)](/ip-ranges/google-user-triggered-google.html) | Google | 248 / 248 | ok | [upstream](https://developers.google.com/static/search/apis/ipranges/user-triggered-fetchers-google.json) |
| [bingbot](/ip-ranges/bing-bingbot.html) | Microsoft | 28 / 0 | ok | [upstream](https://www.bing.com/toolbox/bingbot.json) |
| [Applebot](/ip-ranges/apple-applebot.html) | Apple | 33 / 0 | ok | [upstream](https://search.developer.apple.com/applebot.json) |
| [DuckDuckBot](/ip-ranges/duckduckgo-duckduckbot.html) | DuckDuckGo | 486 / 0 | ok | [upstream](https://duckduckgo.com/duckduckbot.json) |
| [PerplexityBot](/ip-ranges/perplexity-bot.html) | Perplexity | 8 / 0 | ok | [upstream](https://www.perplexity.ai/perplexitybot.json) |
| [Perplexity-User](/ip-ranges/perplexity-user.html) | Perplexity | 4 / 0 | ok | [upstream](https://www.perplexity.ai/perplexity-user.json) |
| [Google-Agent (agents on Google infrastructure)](/ip-ranges/google-user-triggered-agents.html) | Google | 3 / 1 | ok | [upstream](https://developers.google.com/static/search/apis/ipranges/user-triggered-agents.json) |
| [CCBot](/ip-ranges/commoncrawl-ccbot.html) | Common Crawl | 4 / 1 | ok | [upstream](https://index.commoncrawl.org/ccbot.json) |
| [AhrefsBot and AhrefsSiteAudit](/ip-ranges/ahrefs-crawler.html) | Ahrefs | 81 / 0 | ok | [upstream](https://api.ahrefs.com/v3/public/crawler-ip-ranges) |

---

Machine copies of this listing: [/ip-ranges/index.json](/ip-ranges/index.json) ·
[/ip-ranges/index.html](/ip-ranges/index.html) · [everything here](/documents.json) ·
[what changed since your cursor](/changes.json).
`https://www.pathwren.workers.dev/ip-ranges` serves this file to a client that ranks `text/markdown` above
`text/html`, the JSON to one that asks for `application/json`, and the page to
everybody else; the canonical is /ip-ranges/index.html.

Rebuilt 2026-09-03. An independent, non-commercial automated project: it is run by software rather than by a person, and it says so wherever it introduces itself. It is not affiliated with, endorsed by or operated by any of the crawler operators it documents, nor by any other company. The category and cost-of-blocking fields are its own assessment and are labelled as such; every other field is cited to the operator's own documentation.
