{ "generated_at": "2026-09-07T02:48:46+00:00", "note": "Where each operator publishes verifiable IP ranges. Everything not listed here has no published ranges: for those, reverse DNS or nothing.", "sources": [ { "slug": "openai-gptbot", "operator": "OpenAI", "label": "GPTBot", "upstream_url": "https://openai.com/gptbot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/openai-gptbot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/openai-gptbot.txt", "covers": [ "gptbot" ], "ok": true, "ipv4_count": 21, "ipv6_count": 0 }, { "slug": "openai-searchbot", "operator": "OpenAI", "label": "OAI-SearchBot", "upstream_url": "https://openai.com/searchbot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/openai-searchbot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/openai-searchbot.txt", "covers": [ "oai-searchbot" ], "ok": true, "ipv4_count": 35, "ipv6_count": 0 }, { "slug": "openai-chatgpt-user", "operator": "OpenAI", "label": "ChatGPT-User", "upstream_url": "https://openai.com/chatgpt-user.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/openai-chatgpt-user.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/openai-chatgpt-user.txt", "covers": [ "chatgpt-user" ], "ok": true, "ipv4_count": 207, "ipv6_count": 0 }, { "slug": "google-googlebot", "operator": "Google", "label": "Googlebot", "upstream_url": "https://developers.google.com/static/search/apis/ipranges/googlebot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/google-googlebot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/google-googlebot.txt", "covers": [ "googlebot", "googlebot-image", "googlebot-news", "googlebot-video" ], "ok": true, "ipv4_count": 170, "ipv6_count": 147 }, { "slug": "google-special", "operator": "Google", "label": "Google special-purpose crawlers", "upstream_url": "https://developers.google.com/static/search/apis/ipranges/special-crawlers.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/google-special.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/google-special.txt", "covers": [ "googleother", "google-cloudvertexbot", "google-inspectiontool", "storebot-google", "googleother-image", "googleother-video", "apis-google", "adsbot-google", "adsbot-google-mobile", "adsbot-google-mobile-apps", "mediapartners-google" ], "ok": true, "ipv4_count": 136, "ipv6_count": 136 }, { "slug": "google-user-triggered", "operator": "Google", "label": "Google user-triggered fetchers", "upstream_url": "https://developers.google.com/static/search/apis/ipranges/user-triggered-fetchers.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/google-user-triggered.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/google-user-triggered.txt", "covers": [ "feedfetcher-google", "google-read-aloud", "google-site-verification", "google-cws", "google-pinpoint", "googleproducer", "googlemessages", "google-gemininotebook" ], "ok": true, "ipv4_count": 529, "ipv6_count": 529 }, { "slug": "google-user-triggered-google", "operator": "Google", "label": "Google user-triggered fetchers (Google-owned ranges)", "upstream_url": "https://developers.google.com/static/search/apis/ipranges/user-triggered-fetchers-google.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/google-user-triggered-google.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/google-user-triggered-google.txt", "covers": [], "ok": true, "ipv4_count": 248, "ipv6_count": 248 }, { "slug": "bing-bingbot", "operator": "Microsoft", "label": "bingbot", "upstream_url": "https://www.bing.com/toolbox/bingbot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/bing-bingbot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/bing-bingbot.txt", "covers": [ "bingbot" ], "ok": true, "ipv4_count": 28, "ipv6_count": 0 }, { "slug": "apple-applebot", "operator": "Apple", "label": "Applebot", "upstream_url": "https://search.developer.apple.com/applebot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/apple-applebot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/apple-applebot.txt", "covers": [ "applebot" ], "ok": true, "ipv4_count": 33, "ipv6_count": 0 }, { "slug": "duckduckgo-duckduckbot", "operator": "DuckDuckGo", "label": "DuckDuckBot", "upstream_url": "https://duckduckgo.com/duckduckbot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/duckduckgo-duckduckbot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/duckduckgo-duckduckbot.txt", "covers": [ "duckduckbot" ], "ok": true, "ipv4_count": 486, "ipv6_count": 0 }, { "slug": "perplexity-bot", "operator": "Perplexity", "label": "PerplexityBot", "upstream_url": "https://www.perplexity.ai/perplexitybot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/perplexity-bot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/perplexity-bot.txt", "covers": [ "perplexitybot" ], "ok": true, "ipv4_count": 8, "ipv6_count": 0 }, { "slug": "perplexity-user", "operator": "Perplexity", "label": "Perplexity-User", "upstream_url": "https://www.perplexity.ai/perplexity-user.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/perplexity-user.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/perplexity-user.txt", "covers": [ "perplexity-user" ], "ok": true, "ipv4_count": 4, "ipv6_count": 0 }, { "slug": "google-user-triggered-agents", "operator": "Google", "label": "Google-Agent (agents on Google infrastructure)", "upstream_url": "https://developers.google.com/static/search/apis/ipranges/user-triggered-agents.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/google-user-triggered-agents.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/google-user-triggered-agents.txt", "covers": [ "google-agent" ], "ok": true, "ipv4_count": 3, "ipv6_count": 1 }, { "slug": "commoncrawl-ccbot", "operator": "Common Crawl", "label": "CCBot", "upstream_url": "https://index.commoncrawl.org/ccbot.json", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/commoncrawl-ccbot.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/commoncrawl-ccbot.txt", "covers": [ "ccbot" ], "ok": true, "ipv4_count": 4, "ipv6_count": 1 }, { "slug": "ahrefs-crawler", "operator": "Ahrefs", "label": "AhrefsBot and AhrefsSiteAudit", "upstream_url": "https://api.ahrefs.com/v3/public/crawler-ip-ranges", "mirror_json": "https://www.pathwren.workers.dev/ip-ranges/ahrefs-crawler.json", "mirror_txt": "https://www.pathwren.workers.dev/ip-ranges/ahrefs-crawler.txt", "covers": [ "ahrefsbot", "ahrefssiteaudit" ], "ok": true, "ipv4_count": 81, "ipv6_count": 0 } ], "links": [ { "rel": "self", "href": "https://www.pathwren.workers.dev/data/ip-sources.json", "type": "application/json" }, { "rel": "changes", "href": "https://www.pathwren.workers.dev/changes.json?since=132", "type": "application/json", "title": "What changed since your cursor — poll this instead of re-downloading this document", "cursor_param": "since", "head_cursor": 132, "min_poll_seconds": 21600, "how": "Read `cursor` from the response and send it back as `since`. It advances only when something really changed, so an unchanged answer is proof rather than luck — about 2.5 KB, or a 304 with no body if you send back the ETag." }, { "rel": "related", "href": "https://www.pathwren.workers.dev/ip-ranges/all.json", "type": "application/json", "title": "Every operator-published prefix, unioned and grouped by source" }, { "rel": "related", "href": "https://www.pathwren.workers.dev/status.json", "type": "application/json", "title": "Freshness of every upstream IP-range source" }, { "rel": "alternate", "href": "https://www.pathwren.workers.dev/sitemap.md", "type": "text/markdown", "title": "Every page of this host as markdown, in one file", "how": "Any page also answers as markdown at the same address with `.md` — and at `.mdx`, `.html.md` and `.html.mdx`, which are the same bytes. `Accept: text/markdown` on the page itself returns the same document. The HTML page stays canonical and every mirror says so in a Link header." }, { "rel": "service-desc", "href": "https://www.pathwren.workers.dev/openapi.json", "type": "application/json", "title": "Every read endpoint, described formally" } ], "changed_at": "2026-09-07T02:48:50+00:00", "recent_changes": [ "2026-09-07T02:48Z - changed: sources, links; 9177->9176 bytes", "2026-09-06T16:49Z - changed: links", "2026-09-06T15:50Z - changed: links" ] }