Bot signals — AI crawler & agent

OAI-SearchBot IP addresses

OpenAI OAI-SearchBot

Documented AI search crawler egress.

risk.is_airisk.is_crawler Ranges Reviewed

Check an IP

Is this IP really OAI-SearchBot?

Checks the address against what OpenAI OAI-SearchBot publishes, the same evidence behind risk.is_ai.

01 — Verification

How IPAPI.GR verifies OAI-SearchBot.

Only from what OpenAI OAI-SearchBot publishes about itself. No third-party blocklists, no behavioural guesses. Live address counts change with every publication, so check the official file for the current list.

02 — In the response

What a match looks like.

A lookup of a OAI-SearchBot address sets risk.is_ai and risk.is_crawler. The flags come with geolocation and network data in the same response, for Pro API keys.

This publication is AI crawling or retrieval traffic, so it counts as both an AI source and a crawler.

The response says which kind of bot an address belongs to, not which operator. Pair it with the user agent: a request that claims to be OAI-SearchBot but doesn't match is unverified.

GET /api/lookup/{ip}?key=PRO_KEY
{
  // … location and network fields …
  "risk": {
    "is_ai": true,
    "is_crawler": true,
    "is_scanner": false
  }
}

03 — Configuration

Allow, block or verify it yourself.

robots.txt
User-agent: OAI-SearchBot
Disallow: /
Disallowing OAI-SearchBot keeps your pages out of ChatGPT search answers. OpenAI notes changes can take about 24 hours to apply.
nginx + jq
# 1. Build a geo include from the official file (cron, e.g. hourly).
#    Keep the old file if the download fails or comes back empty.
curl -fsS https://openai.com/searchbot.json \
  | jq -r '.prefixes[] | (.ipv4Prefix // .ipv6Prefix // empty) | "\(.) 1;"' \
  > /etc/nginx/oai-searchbot-ranges.conf.new && [ -s /etc/nginx/oai-searchbot-ranges.conf.new ] && mv /etc/nginx/oai-searchbot-ranges.conf.new /etc/nginx/oai-searchbot-ranges.conf \
  && nginx -t -q && nginx -s reload

# 2. In the http block: 1 when the client IP is in the published ranges.
geo $oai_searchbot_ip {
    default 0;
    include /etc/nginx/oai-searchbot-ranges.conf;
}

# 3. A request that claims to be OAI-SearchBot from any other address is an impostor.
map "$http_user_agent:$oai_searchbot_ip" $fake_oai_searchbot {
    default 0;
    "~*(OAI-SearchBot).*:0$" 1;
}

# In the server block:
if ($fake_oai_searchbot) { return 403; }
Built from openai.com/searchbot.json, a JSON file with a prefixes array.

04 — Questions

About OAI-SearchBot.

Where does OAI-SearchBot publish its IP addresses?

OpenAI OAI-SearchBot publishes its addresses at https://openai.com/searchbot.json. IPAPI.GR reads that publication directly, not a third-party copy.

How often is the OAI-SearchBot list refreshed?

IPAPI.GR re-fetches it every hour. If a refresh fails, the previous entries expire after at most 24 hours instead of being trusted forever.

Which risk flag does OAI-SearchBot set?

A matching address sets risk.is_ai and risk.is_crawler in the lookup response. The risk flags are returned for Pro API keys.

Verify OAI-SearchBot on every request.

Pro: 40,000,000 requests a day with is_ai, is_crawler and is_scanner in every lookup.