aboutsummaryrefslogtreecommitdiff
path: root/ip-sources.json
diff options
context:
space:
mode:
Diffstat (limited to 'ip-sources.json')
-rw-r--r--ip-sources.json283
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