Crawler IP verification

The Citead team, updated

In short. Crawler IP verification tests whether a request's source address belongs to the ranges published for the claimed crawler.

Definition: Crawler IP verification checks whether the source Internet Protocol (IP) address of a web request belongs to an address range published by the crawler's operator. It supplies evidence of the request's network origin when assessing a claimed crawler identity.

Key facts

Which OpenAI address file applies?

A user agent is the identifier a client sends with a request. OpenAI's Overview of OpenAI Crawlers associates OAI-SearchBot with search and ChatGPT-User with certain user actions in ChatGPT and Custom GPTs. Its published address links are:

  • OAI-SearchBot uses https://openai.com/searchbot.json.
  • GPTBot uses https://openai.com/gptbot.json.
  • ChatGPT-User uses https://openai.com/chatgpt-user.json.

The verification procedure starts with the claimed agent and its corresponding file. Keeping that association in the audit record makes the result interpretable: a searchbot range match answers a different lookup from a GPTBot range match. For an audit, the requested URL, claimed agent and observed address should accompany the comparison result.

How does an address match a published range?

Classless Inter-Domain Routing (CIDR) notation represents a network address and a prefix length separated by a slash. The prefix length specifies the leading address bits that define the network. OpenAI's searchbot.json contains this range entry:

{
  "ipv4Prefix": "104.210.140.128/28"
}

The comparison tests membership in the range. Comparing the request address with the literal text 104.210.140.128/28 would miss the network operation represented by the prefix.

Python's ipaddress documentation describes network objects as containers of addresses. The following implementation applies that membership test to a downloaded searchbot.json. It takes the observed request address as its command line argument:

import ipaddress
import json
import sys

with open("searchbot.json") as source:
    published = json.load(source)
address = ipaddress.ip_address(sys.argv[1])
networks = (
    ipaddress.ip_network(prefix)
    for item in published["prefixes"]
    for key, prefix in item.items()
    if key in ("ipv4Prefix", "ipv6Prefix")
)
print(any(address in network for network in networks))

A True result records membership in the downloaded list. A False result records no match in that copy. For a repeatable check, the audit record should retain the downloaded file, its creationTime value and the retrieval date alongside the result.

How does Google document the same check?

Google's verification guide separates common crawlers, special-case crawlers and user-triggered fetchers. It links common-crawlers.json for common crawlers such as Googlebot and provides separate lists for other categories.

The same guide offers a manual method: a reverse Domain Name System (DNS) lookup finds the hostname associated with an address, then a forward lookup checks that hostname against the original address. Selecting the operator's documented method and the relevant crawler category keeps the verification tied to the request being examined.

FAQ

Which file should I use for an OAI-SearchBot request?

Use searchbot.json, the address file linked for OAI-SearchBot in OpenAI's crawler documentation. Keep the file used for the check with the result.

Can I compare an address with a CIDR string directly?

Use a network membership operation. Python's ipaddress module parses a prefix into a network object and supports testing whether an address belongs to it.

How can I verify Googlebot?

Use Google's own published ranges for Googlebot. Google's verification guide links its common crawler list and documents reverse and forward DNS checks as a manual alternative.

Sources

  1. OpenAI, "Overview of OpenAI Crawlers", accessed 17 October 2026
  2. OpenAI, "OAI-SearchBot published IP addresses", accessed 17 October 2026
  3. Python Software Foundation, "ipaddress: IPv4/IPv6 manipulation library", accessed 17 October 2026
  4. Google, "Verify requests from Google crawlers and fetchers", 20 March 2026

Check how a page reads to answer engines. Open the GEO score analyzer

Test a page and see what to fix first

The analysis usually takes less than 10 seconds and needs no account.

400,000+ pages scored in the public benchmark