OAI-SearchBot vs ChatGPT-User vs GPTBot: Which Does What

ChatGPT-User is the OpenAI user agent that fetches a web page when a person asks ChatGPT something and ChatGPT decides to read that page to answer. It is not a scheduled crawler. OAI-SearchBot builds the index behind ChatGPT search, and GPTBot collects content that may be used to train OpenAI's models.
Quick answer: OpenAI runs three separate agents that show up in most server logs. GPTBot crawls for model training, OAI-SearchBot crawls so pages can appear and be linked in ChatGPT search, and ChatGPT-User fetches pages on demand because a user's request triggered it. OpenAI says GPTBot and OAI-SearchBot follow robots.txt independently, so you can block training while staying eligible for search. ChatGPT-User is different: because a person initiated the visit, OpenAI says robots.txt rules may not apply to it.
The Three OpenAI Agents and What Each One Does
Most site owners treat OpenAI as one crawler with one behavior. That assumption breaks the first time you open an access log and see three user agents hitting the same URLs for three different reasons. The split is deliberate. It gives publishers separate controls instead of one on/off switch.
GPTBot: The Training Collector
GPTBot collects content that may be used to train OpenAI's generative AI foundation models, according to OpenAI's crawler documentation. A GPTBot hit is a long-term signal about material that could end up in future models. It is not a citation, and it does not mean a human saw your page.
OAI-SearchBot: The Search Indexer
OpenAI describes OAI-SearchBot as the agent "used to surface websites in search results in ChatGPT's search features." This is the one that matters if your goal is showing up in answers with a link attached. When OAI-SearchBot reads a page, it is building the inventory ChatGPT search can draw from later.
ChatGPT-User: The Live Fetcher
ChatGPT-User does not crawl on a schedule. OpenAI states it "is not used for crawling the web in an automatic fashion." Someone typed a prompt, ChatGPT decided a page was worth reading, and the fetch happened in that moment. That makes a ChatGPT-User hit the closest thing to direct user intent you will see in OpenAI traffic. OpenAI also says ChatGPT-User is not used to decide whether content may appear in search, so its visits tell you about demand, not indexing.
Side-by-Side Comparison
| User agent | Trigger | What it does | robots.txt |
|---|---|---|---|
| GPTBot | Automated crawl | Collects content that may be used to train OpenAI's models | Applies |
| OAI-SearchBot | Automated crawl for the search index | Surfaces sites in ChatGPT search results | Applies |
| ChatGPT-User | A person's request inside ChatGPT | Fetches a page to answer that specific request | May not apply, per OpenAI |
User-Agent Strings to Look For
OpenAI publishes the full strings on its bots page. At the time of writing they read:
- GPTBot:
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot - OAI-SearchBot:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot - ChatGPT-User:
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot
Version numbers change, so match on the token (GPTBot, OAI-SearchBot, ChatGPT-User) rather than the whole string. OpenAI also publishes IP ranges for each agent at openai.com/gptbot.json, openai.com/searchbot.json and openai.com/chatgpt-user.json. Checking a request's IP against the operator's own list is the standard way to tell a real OpenAI visit from a spoofed user agent.
robots.txt Rules for Each Agent
OpenAI's documentation says each setting is independent, and gives the example of allowing OAI-SearchBot to appear in search while disallowing GPTBot to signal that content should not be used for training. A typical rule set looks like this:
User-agent: GPTBot Disallow: / User-agent: OAI-SearchBot Allow: /OpenAI notes that it can take about 24 hours after a robots.txt change for its systems to adjust. It also says that if both GPTBot and OAI-SearchBot are allowed, it may use the results of one crawl for both purposes to avoid duplicate crawling. So a site that allows both may see fewer total OpenAI hits than it expects, and that is not a problem.
ChatGPT-User is the exception. Because the visit is user-initiated, OpenAI says robots.txt rules may not apply. If you need to stop those fetches, a server-level rule is more reliable than a robots.txt line. Our guide to robots.txt for AI crawlers covers the syntax for the wider set of bots.
Why the Difference Matters for AI Visibility
Blocking GPTBot while allowing OAI-SearchBot is the setup OpenAI itself uses as its example. You keep content out of training without removing yourself from ChatGPT search. Get it backwards and you feed the model while vanishing from the answer surface.
Each agent's activity also means something different. More GPTBot requests suggest OpenAI is refreshing training material from your site. More OAI-SearchBot requests suggest the search index is being updated, often after you publish or edit. A ChatGPT-User hit tells you a real question led someone's ChatGPT session to your URL. Three signals, three conclusions. If you want more of that last kind, our guide on how to get cited by ChatGPT covers the content side.
What Prompt Sampling Can and Cannot Show You
Prompt-based tracking works by asking models questions and checking whether your brand appears in the answer. That is useful for spotting answer patterns. It is not a record of what happened on your site.
A prompt sample cannot tell you which URLs were fetched, how often, or whether the request returned a 200 or a 403. It cannot tell you that OAI-SearchBot keeps reading your pricing page while GPTBot never touches it. Those are server facts, and they only exist in server traffic.
Server-side measurement answers one question: what did AI crawlers actually do on my domain? Prompt sampling answers another: what is a model saying right now? Both are fair questions. Treating the second as a stand-in for the first is where agencies get caught out, usually when a client asks why AI visibility looks strong but nothing else has moved.
How to Read OpenAI Agents in Server Logs
The raw material is the user agent on each request, plus the URL and the status code. A workable process:
- Filter requests containing GPTBot, OAI-SearchBot and ChatGPT-User.
- Check the source IP against OpenAI's published list for that agent.
- Segment by URL so you can see which pages attract search indexing versus training collection.
- Track status codes. A 200 means the page was served, a 403 means a rule blocked it, and repeated 429 or 5xx responses mean your server is pushing bots away.
- Build a baseline over several weeks. Single-day spikes are noise until you know your normal pattern.
- Compare activity against publishing dates to see how quickly each agent returns after an update.
On WordPress you can do this from raw access logs or with a plugin that reads real server traffic. The point is to work from actual requests rather than inference. Our AI crawler tracking guide goes further on setup.
Common Misreadings That Skew the Data
- Assuming GPTBot traffic equals visibility. Training and search are separate systems with separate agents.
- Assuming zero GPTBot hits means something broke. If you blocked GPTBot on purpose, zero is the system working.
- Assuming a ChatGPT-User hit means training. It means a user request pulled the page in real time.
- Assuming one robots.txt rule controls all of OpenAI. Each agent is controlled on its own, and ChatGPT-User may ignore robots.txt entirely.
One more pattern to watch: after blocking GPTBot, total OpenAI traffic drops and it looks like a loss. What actually dropped was the training crawler. If OAI-SearchBot and ChatGPT-User traffic holds, your search presence is intact.
Set Up Tracking That Survives Scrutiny
Start with a defined question. If it is "am I being used for training," watch GPTBot. If it is "am I eligible for ChatGPT search," watch OAI-SearchBot. If it is "are real questions reaching my content," watch ChatGPT-User.
Then keep the reporting honest. Show the user agent, the URL, the timestamp and the status code. Avoid rolled-up totals that hide which bot did what, because those are the numbers that fall apart under client questions.
citAEOtion shows exactly which OpenAI agents reach each page on your WordPress site, verified from real server traffic, per crawler and per status code. citAEOtion is a $99 Lifetime Deal, or you can book a 20-minute walkthrough to see it on your own data.
Frequently Asked Questions
Does blocking GPTBot also block OAI-SearchBot?
No. OpenAI states that each robots.txt setting is independent, so a rule aimed at GPTBot does not affect OAI-SearchBot. To stay out of training while remaining eligible for ChatGPT search, disallow GPTBot and allow OAI-SearchBot. OpenAI says changes can take about 24 hours to take effect.
What does ChatGPT-User in my logs mean?
It means a person asked ChatGPT something and ChatGPT fetched your page to help answer that request. It is not a scheduled crawl and not training collection. OpenAI also says ChatGPT-User is not used to decide whether content appears in ChatGPT search.
Does ChatGPT-User follow robots.txt?
Not necessarily. OpenAI's documentation says that because ChatGPT-User actions are initiated by a user, robots.txt rules may not apply. If you need to stop those fetches, use a server or firewall rule matched to the user agent and OpenAI's published IP list.
Is OAI-SearchBot the same thing as ChatGPT search?
OAI-SearchBot is the crawler behind ChatGPT's search features, used to surface websites in search results. ChatGPT search is the product people use. If your goal is appearing in ChatGPT answers with a link, OAI-SearchBot is the agent to keep allowed and to watch.
Can prompt sampling tell me which pages OpenAI crawled?
No. Prompt sampling checks whether your brand appears in model answers, which measures answer visibility but not site activity. Which URLs were fetched, how often and with what status code only shows up in server traffic, filtered by user agent and page.
OAI-SearchBot vs ChatGPT-User vs GPTBot: Which Does WhatcitAEOtion2026-09-30T00:19:41-04:00