ChatGPT-User
Quick facts
- What it is
- OpenAI's user-triggered fetcher — visits a page because a person is asking about it in a live ChatGPT conversation, not on a crawl schedule
- User-agent string
- Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot — match the bare token, never the version
- robots.txt
- OpenAI documents that 'because these actions are initiated by a user, robots.txt rules may not apply'. It is absent from OpenAI's list of robots.txt-manageable tags
- Effect on ChatGPT Search
- None. OpenAI documents it 'is not used to determine whether content may appear in Search' — that lever is OAI-SearchBot
- The costly mistake
- Flipping a one-click 'block AI bots' preset. Most sweep the user-triggered fetcher in alongside training crawlers, costing live reader answers to stop training it never did
1. What ChatGPT-User is
ChatGPT-User is the user-agent OpenAI sends when a live ChatGPT conversation needs a specific page right now. Someone asked a question, pasted a link, or invoked a Custom GPT, and answering requires fetching a URL that the model does not already hold.
OpenAI draws the line explicitly in its crawler documentation: ChatGPT-User “is not used for crawling the web in an automatic fashion” (see Overview of OpenAI Crawlers). That single property — a fetch on a person’s behalf rather than a schedule of the machine’s own choosing — generates every other oddity on this page. The robots.txt carve-out, the separate IP infrastructure, the way security vendors file it in a different category from its siblings: all of it follows from a human just asked.
It is the user-triggered member of a set that GPTBot (training) and OAI-SearchBot (search indexing) complete. The categorical logic — why blocking one has nothing to do with blocking another — is worked out in AI crawlers.
The practical consequence arrives before any of the detail below. A ChatGPT-User request in your logs means a real person’s question is currently pointed at your page. If that request fails, it fails a reader mid-answer, and no retry queue exists to catch it.
2. What triggers a fetch
OpenAI names three surfaces:
| Surface | What the user did | Documented |
|---|---|---|
| ChatGPT conversation | Asked something whose answer needs a page, or pasted a URL directly | Yes |
| Custom GPTs | Asked a Custom GPT a question requiring a live page | Yes |
| GPT Actions | Interacted with an external application through an Action | Yes |
One gap is worth naming rather than guessing at: OpenAI’s documentation does not say which user-agent scheduled ChatGPT tasks send. The stated rationale for the robots.txt carve-out — that the action is initiated by a user — sits awkwardly with a job that runs at 6am while its requester sleeps, and no vendor or third-party source resolves what token those runs carry.
The traffic shape follows from the trigger. This is bursty and conversation-driven, not a sweep: a cluster of requests when a topic is being discussed, nothing when it isn’t. Volume correlates with attention rather than with your sitemap size.
That also means these fetches are largely invisible where most teams look for traffic. Because the fetcher does not run JavaScript (see §8), client-side analytics never fire. Server logs are the only place ChatGPT-User exists.
3. The OpenAI surfaces that send no token
ChatGPT-User is not the whole of OpenAI’s on-behalf-of-a-user traffic, and a policy written as though it were will govern less than its author intends.
| Surface | Token sent | How it is identified |
|---|---|---|
| ChatGPT / Custom GPTs / GPT Actions | ChatGPT-User | User-agent plus published IP ranges |
| ChatGPT agent mode | None — ordinary Chrome UA | HTTP Message Signatures (RFC 9421) |
| Atlas browser | None — ordinary Chrome UA | Not identifiable from HTML requests |
| Ads validation | OAI-AdsBot | User-agent |
The browser-driving surfaces are outside user-agent control by construction. They are real Chromium instances rendering pages the way a person’s browser does, and they announce themselves — when they announce themselves at all — with a cryptographic signature rather than a product token. OpenAI publishes no IP-range file for agent traffic; chatgpt-agent.json returns 404, where chatgpt-user.json returns a full list.
Signed agent requests are where identity is heading. The IETF work on HTTP Message Signatures for automated traffic has backing from several large infrastructure operators, and Cloudflare already records which bots present a signature. ChatGPT-User itself is not signed today — its verification story remains IP-based, as §5 covers.
OAI-AdsBot rounds out OpenAI’s four documented tokens. It visits only pages submitted as ads, and OpenAI states the content it collects is not used to train foundation models.
4. robots.txt and the user-triggered carve-out
The most-asked question about this bot has a documented answer, and the exact wording matters:
Because these actions are initiated by a user, robots.txt rules may not apply.
Note the modal. May not apply, not do not apply — a hedge OpenAI has left in place rather than resolving in either direction.
The document’s structure carries a second signal that is easy to miss. OpenAI’s framing sentence reads: “OpenAI uses OAI-SearchBot and GPTBot robots.txt tags to enable webmasters to manage how their sites and content work with AI.” ChatGPT-User is absent from the list of tags offered for managing access. So is the robots.txt user-agent marker that OpenAI documents for both siblings — the suffix a crawler adds when fetching the robots file itself. A bot that does not consume the file has no reason to mark those requests.
That framing was narrowed on 9 December 2025. The earlier version of the page carried an umbrella sentence covering all of its listed agents; the revision scoped robots.txt management to OAI-SearchBot and GPTBot specifically and added the “may not apply” line (Search Engine Roundtable). The honest characterization is that OpenAI narrowed an umbrella rather than withdrew a promise — the earlier text never made ChatGPT-User a robots.txt-manageable agent in its own right.
This posture is not an OpenAI idiosyncrasy. Google documents the same carve-out for its user-triggered fetchers, in language that is if anything less hedged:
Because the fetch was requested by a user, these fetchers generally ignore robots.txt rules.
Cloudflare’s bot directory reaches the same conclusion from the outside, marking ChatGPT-User as not following robots.txt while marking GPTBot and OAI-SearchBot as following it — and it applies that classification across its whole AI-assistant category, covering dozens of user-triggered fetchers from many different operators. Three independent vantage points agree: OpenAI’s own policy, Google’s parallel precedent, and a CDN’s classification of the category as a whole.
Some third-party bot directories and SEO write-ups state that ChatGPT-User is expected to follow robots.txt. That contradicts OpenAI’s own documentation, and it is worth checking any tool whose recommendations rest on it.
No standard settles the question. RFC 9309 is silent on why a fetch happens — it has no vocabulary for distinguishing a scheduled crawl from a fetch made for one person. The IETF’s preference work is still a draft with no published RFC, and an earlier proposal to add purpose tokens to the protocol expired without adoption. Operators are filling a genuine vacuum unilaterally, which is why the answer is vendor documentation rather than a spec. For the protocol mechanics and how to write the directives themselves, see robots.txt.
5. Identifying ChatGPT-User in your logs
The full user-agent string, as OpenAI publishes it:
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot
Match the bare ChatGPT-User token, never the version number. OpenAI labels this string “Full user-agent string” while labelling GPTBot’s and OAI-SearchBot’s “Example user-agent string (the version number may change)” — but third-party bot directories disagree about whether higher versions circulate in the wild, and a rule pinned to 1.0 fails silently the day that changes. Major bot-management vendors match the bare token for exactly this reason.
ChatGPT-User publishes its own IP-range file, and the shape of that file is a cleanly verifiable structural fact. Counts below were fetched directly from OpenAI’s published endpoints on 18 July 2026:
| Token | Published IP file | Prefixes | Overlap with siblings |
|---|---|---|---|
| ChatGPT-User | chatgpt-user.json | 286 | None with either sibling |
| OAI-SearchBot | searchbot.json | 35 | 6 shared with GPTBot |
| GPTBot | gptbot.json | 21 | 6 shared with OAI-SearchBot |
| ChatGPT agent | none (404) | — | — |
Two things fall out of that table. ChatGPT-User runs on an order of magnitude more address space than either sibling and shares none of it — consistent with a latency-sensitive fetch that has to happen while a person waits, spread across far more egress than a background crawl needs. Meanwhile GPTBot and OAI-SearchBot share six prefixes with each other, matching OpenAI’s stated practice of reusing one crawl for both purposes when a site allows both.
Verification is IP-based only. ChatGPT-User presents no request signature, so the forward-confirmed reverse DNS principle described in AI crawlers plus the published ranges above is the whole toolkit. The runnable procedure — what to grep, how to confirm what actually reached you rather than what claimed to — is the AI crawler access audit.
Cloudflare lists ChatGPT-User as a verified bot, with one operational footnote worth knowing: only higher-tier plans can write rules keyed on the vendor’s detection IDs. Everyone else falls back to matching the user-agent string, which is precisely why the bare-token rule above is not a stylistic preference.
6. How much traffic ChatGPT-User actually is
Every figure here is scoped to one vendor’s population, and the populations are not comparable. A CDN measuring its whole network and a panel of publishers measuring their own sites will disagree by orders of magnitude about the same bot, and both can be right about their own denominator. Numbers below carry their date and their population; anything that could not carry both was left out.
On Cloudflare’s network, July 2024 to July 2025, ChatGPT-User rose from 0.1% to 0.9% of combined AI and search bot traffic, and from 0.2% to 2.4% of AI-only bot traffic. Over the same window and the same network, Cloudflare’s breakdown by purpose showed training rising from 72% to 79% of AI crawling, search falling from 26% to 17%, and user actions growing modestly from 2% to 3.2%.
That last figure deserves emphasis because it cuts against a widely repeated story. On publisher panels — populations weighted toward exactly the news and reference sites people ask ChatGPT about — retrieval-style fetching grew sharply through 2025 while training crawling fell, and ChatGPT-User’s share of AI traffic roughly doubled. Both pictures are accurate for their own cohort. Neither generalizes to the other, and a panel figure quoted as a web-wide fact is simply wrong.
Two further cautions for anyone citing numbers on this bot:
- Direction reversed in 2026. Multiple trackers measured ChatGPT-User declining month-over-month during mid-2026 while competing operators’ bots rose. Write about 2025 growth in the past tense; “ChatGPT-User is growing” is not a claim current data supports.
- Crawl-to-refer ratios are published per platform, not per token. The widely recirculated figures describe an operator’s entire crawling footprint, are mostly frozen at early-2025 readings, and are inflated by an unquantified amount because native-app referrals send no
Refererheader — a caveat Cloudflare states about its own data. No credible ChatGPT-User-specific ratio exists; anything presented as one is an extrapolation.
7. What blocking it costs
One documented sentence settles the most expensive misconception about this bot:
ChatGPT-User is not used to determine whether content may appear in Search. Please use OAI-SearchBot in robots.txt for managing Search opt outs and automatic crawl.
Blocking ChatGPT-User does not remove you from ChatGPT Search — that lever is OAI-SearchBot. It does not affect training either — that lever is GPTBot. What it does is fail the live lookup of your page for one specific person who is asking about it, in the moment they are asking.
So the ledger is lopsided. The cost is a reader’s answer; the benefit is close to nothing automated, because this fetcher collects nothing on its own initiative in the first place.
| The move | The belief behind it | What actually happens |
|---|---|---|
| Block ChatGPT-User to leave ChatGPT | ”It’s an OpenAI bot” | No effect on Search inclusion — that is OAI-SearchBot |
| Block GPTBot to stop live fetching | ”GPTBot is the crawler” | GPTBot is training-only; live fetches keep arriving |
| Disallow ChatGPT-User and consider it settled | ”robots.txt covers AI access” | OpenAI documents that robots.txt may not apply here |
| Flip the one-click “block AI bots” preset | ”It blocks training crawlers” | Most presets sweep the user-triggered fetcher in too |
| Treat a ChatGPT-User hit as a visit | ”That’s traffic” | No JavaScript execution — it never reaches your analytics |
The fourth row is the one that catches careful teams. Netlify’s documentation is unusually direct about the category, advising against blocking it:
Traffic in this category is usually low-volume and initiated directly by a human user’s request. It is generally not advisable to block or rate-limit these requests, as they indicate your content is being surfaced as relevant by AI systems.
Yet the same class of one-click control ships across the industry with the token bundled in alongside bulk crawlers. The taxonomy and the product routinely disagree, so read what a preset actually matches rather than what its label promises.
Cloudflare’s legacy “Block AI bots” setting is scoped to training — it “blocks verified bots that are classified as crawling for the purpose of AI training” — which left ChatGPT-User outside as a side effect of that scoping rather than as a deliberate carve-out. That changes on 15 September 2026, when Cloudflare’s documentation states new domains will block Agent-category bots by default on pages that display ads, with Search remaining allowed. ChatGPT-User sits in the agent category. Anyone relying on today’s incidental pass-through should treat that date as a deadline to make the choice explicitly.
A considered posture, then, is narrower than a blanket rule: decide training and retrieval separately, per AI crawlers; write the directives in robots.txt knowing they may not bind this particular agent; and verify what actually reached you at the network layer rather than trusting either the token or the preset.
8. Making the fetch succeed
Allowing the fetch is the easy half. The harder question is whether it returns anything worth quoting.
It does not execute JavaScript. The 2024 study by Vercel and MERJ across a large sample of AI crawler requests found OpenAI’s fetchers retrieve JavaScript files without ever running them — a client-rendered page returns its empty shell. The finding is now some vintage and OpenAI has not documented a change, so treat it as the working assumption rather than a permanent guarantee. The genuine exception is the browser-driving surfaces from §3: agent mode and Atlas are real Chromium and do render.
The same study found a striking share of OpenAI fetches meeting 404s and redirects. That is worth sitting with, because it means a large fraction of failed AI fetches are ordinary link rot and redirect chains rather than anything exotic. Fixing stale internal links is the cheapest available win on this entire surface.
On timeouts, no credible published figure exists. Specific numbers circulate without sourcing; an acknowledged gap is more useful than a confident guess, so budget for a fast response on general principles rather than to a threshold someone invented.
One failure mode deserves naming because it is invisible from the inside. A fetch arriving for a single reader looks anomalous to rate-limiting and challenge rules precisely because it is one unusual request from an unfamiliar range, with no crawl pattern around it to look legitimate. Bot defenses tuned against scrapers frequently challenge it, and the resulting failure never appears in analytics for the reason given in §2. Diagnosing that is the AI crawler access audit’s job.
Once the fetch succeeds, whether the page gets quoted is a separate problem with its own determinants — clean structure, self-contained passages, claims that survive being lifted out of context. That is the subject of citability. For when ChatGPT decides to search at all, and what it tends to cite when it does, see ChatGPT Search.
A note on llms.txt, since it comes up in this context: OpenAI does not document ChatGPT-User as consuming it. Publishing one is not a mechanism for influencing this fetcher’s behavior.
9. Related entries
- AI crawlers — the three-category model and the per-category access decision
- GPTBot — OpenAI’s training crawler, and the correct lever for training opt-out
- OAI-SearchBot — OpenAI’s search indexer, and the correct lever for Search inclusion
- robots.txt — the protocol, and how to write the directives
- llms.txt — what it is and what it is not documented to control
- OpenAI — the operator behind all four tokens
- citability — whether a successfully fetched page is worth quoting
- AI crawler access audit — verifying what actually reached you
- ChatGPT Search — the engine surface these fetches serve
References
Primary
- OpenAI — Overview of OpenAI Crawlers
- OpenAI — Publishers and Developers FAQ
- OpenAI — ChatGPT-User published IP ranges
- Google Search Central — List of Google user-triggered fetchers
- IETF — RFC 9309: Robots Exclusion Protocol
- IETF — RFC 9421: HTTP Message Signatures
- IETF — A Vocabulary For Expressing AI Usage Preferences (draft)
- Cloudflare — Block AI bots
- Cloudflare — AI Crawl Control bot reference
- Netlify — User agent categories
Secondary
- Cloudflare — The crawl-to-click gap (29 August 2025)
- Cloudflare — Your site, your rules: new AI traffic options (1 July 2026)
- Vercel / MERJ — The rise of the AI crawler (17 December 2024)
- Search Engine Roundtable — OpenAI Updates Its ChatGPT Crawler OAI-SearchBot (9 December 2025)
- TollBit — State of the Bots, Q3/Q4 2025 — publisher-panel data; sample size undisclosed, and the vendor sells bot-monetization products
Frequently asked questions
What is ChatGPT-User?
Does ChatGPT-User respect robots.txt?
If I block ChatGPT-User, will I disappear from ChatGPT?
Why don't ChatGPT-User visits show up in my analytics?
Is ChatGPT-User the only way OpenAI fetches pages on a user's behalf?
See also
Sources
Primary
- Overview of OpenAI Crawlers · OpenAI
- Publishers and Developers FAQ — OpenAI Help Center · OpenAI
- ChatGPT-User published IP ranges (chatgpt-user.json) · OpenAI
- List of Google user-triggered fetchers · Google Search Central
- RFC 9309: Robots Exclusion Protocol · IETF · 2022-09-01
- RFC 9421: HTTP Message Signatures · IETF · 2024-02-01
- A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-06) · IETF (Internet-Draft)
- Block AI bots — Cloudflare Bots docs · Cloudflare
- Bot reference — Cloudflare AI Crawl Control docs · Cloudflare
- User agent categories — Netlify docs · Netlify
Secondary
- The crawl-to-click gap: Cloudflare data on AI bots, training, and referrals · Cloudflare
- Your site, your rules: new AI traffic options for all customers · Cloudflare
- The rise of the AI crawler · Vercel / MERJ
- OpenAI Updates Its ChatGPT Crawler OAI-SearchBot · Search Engine Roundtable