diff options
| author | hrbrmstr <bob@rud.is> | 2026-09-07 10:09:24 -0400 |
|---|---|---|
| committer | hrbrmstr <bob@rud.is> | 2026-09-07 10:09:24 -0400 |
| commit | 6ce86768d4b2287c23754536e33fcf262578a0a5 (patch) | |
| tree | 3a28b28feb7931e13eb712afa9121c6a9784d3e7 /ip-sources.json | |
Diffstat (limited to 'ip-sources.json')
| -rw-r--r-- | ip-sources.json | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/ip-sources.json b/ip-sources.json new file mode 100644 index 0000000..0bfeab4 --- /dev/null +++ b/ip-sources.json @@ -0,0 +1,283 @@ +{ + "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`, `<page>.html.md` and `<page>.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" + ] +}
\ No newline at end of file |
