{
 "slug": "commoncrawl-ccbot",
 "label": "CCBot",
 "operator": "Common Crawl",
 "operator_slug": "commoncrawl",
 "upstream_url": "https://index.commoncrawl.org/ccbot.json",
 "fetched_at": "2026-09-01T21:38:56+00:00",
 "http_status": 200,
 "ok": true,
 "error": null,
 "source_created": "2026-08-11T13:40:00Z",
 "sha256": "0a4c3b6707326d7f083139a979062604a57edfbb251bd29f23f5a86c5107ea30",
 "covers": [
  "ccbot"
 ],
 "ipv4_count": 4,
 "ipv6_count": 1,
 "links": [
  {
   "rel": "self",
   "href": "https://www.pathwren.workers.dev/ip-ranges/commoncrawl-ccbot.json",
   "type": "application/json"
  },
  {
   "rel": "changes",
   "href": "https://www.pathwren.workers.dev/changes.json?since=105",
   "type": "application/json",
   "title": "What changed since your cursor — poll this instead of re-downloading this document",
   "cursor_param": "since",
   "head_cursor": 105,
   "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 700 bytes, 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"
  }
 ],
 "ipv4": [
  "18.97.14.80/29",
  "18.97.14.88/30",
  "18.97.9.168/29",
  "3.41.188.32/29"
 ],
 "ipv6": [
  "2600:1f28:365:8000::/56"
 ]
}