{
 "generated_at": "2026-09-03T02:42:02+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": 204,
   "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=111",
   "type": "application/json",
   "title": "What changed since your cursor — poll this instead of re-downloading this document",
   "cursor_param": "since",
   "head_cursor": 111,
   "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": "service-desc",
   "href": "https://www.pathwren.workers.dev/openapi.json",
   "type": "application/json",
   "title": "Every read endpoint, described formally"
  }
 ]
}