# How ChatGPT Actually Works: 14 Stages and What I Saw in 2,000 Recorded Answers

One question, one answer, ten to sixty seconds. A lot happens behind that screen. While you type, the page is already getting a machine ready to answer. Before it reads a single search result, the model may already know which brands it will name. Its searches go out in rounds of queries you never see. Of the dozens of links in Sources, only some reach the model, and fewer still get cited. The answer arrives as a small web page your browser puts together, and after it the page keeps reporting what you saw. I recorded all of it from both ends: the browser and my test site's server logs. Below is how it works, step by step, with what I saw at each one.

Aleksandr Shamrai · Research · Published 2026-11-07 · Data dated Nov 2026
Source: https://shamrai.ai/how-chatgpt-works

## TL;DR: 7 things I saw
1. [ChatGPT gets ready before you press Enter](#stage-2): logged in, the first letter you type leaves the browser in a warm-up; pasted text gets an empty warm-up just before the request.
2. [Brands come before search, on two tracks](#stage-6): Instant[^1] wrote its whole brand list before the first search; Thinking put the main brands into its first queries and added more after the results.
3. [The model searches with its own queries, not your question](#stage-7): it adds the year, review sites, brand names and site: operators; longer prompts get more queries, and later rounds hide theirs.
4. [In my tests, only the crawler got pages into search](#stage-8): on a new test site, pages ChatGPT-User opened on request never showed up in search; pages OAI-SearchBot visited did, within about an hour.
5. [Being in Sources is not being in the answer](#stage-9): of a median 28 links in the Sources panel[^2], 12 reached the model and 4 were cited; the first result was cited in more than half of cases.
6. [Page reads go through a shared copy](#stage-10): four opens out of five never reached my site.
7. [Facts get citations, brand choices don't](#stage-11): citation pills (the small source links after a sentence) went to prices and rules; the choice of brands never had one.

## Getting ready to answer

### What ChatGPT does before you type

When you open a new chat, the page places you in OpenAI's A/B tests[^3], which decide the version of ChatGPT you see. Logged in, it also asks the server for this conversation's settings and quotas; as a guest, it sends a first warm-up[^4] with no text.

**What I noticed**

- Logged in, the settings call goes out again around your request, and the page logs a location-permission check.
- As a guest, if this browser was ever signed in, the page reports how long ago you last signed in and out, and how that session ended: you logged out, it expired, or you switched accounts.
- Clicking into the message box is logged too.

> **Figure.** An empty ChatGPT message box with a blinking cursor *All you see at this point. Everything in this stage happens behind this empty box.*

### What ChatGPT sees while you type

Logged in, ChatGPT sees what you type before you send it, if you type it: the first letter goes to the server, which books and warms the machine that will answer you. Pasted text never leaves early: its warm-up goes out empty, just before the request. Guests get the warm-up from page load; their text stays local until Enter.

**What I noticed**

- The first warm-up carries the first letter with your model choice and time zone. Switching the model sends a new warm-up at once, with everything typed so far.
- The server answers with a routing ticket[^5], valid for one minute, that names the machine that will stream your answer, and tries to warm it up.
- As a guest, only a "typing started" event leaves the browser while you type; the guest warm-up repeats [after the answer](#stage-13).

> **Figure.** Mockup: the ChatGPT message box while you type, with what leaves the browser behind it *Logged in and typing, your first letter leaves the browser long before you press Enter.*

### How ChatGPT checks your browser

Before your question is accepted, the browser passes a check of about half a second: a small computational puzzle, a fingerprint of its environment (time zone, language, screen, timings) and Cloudflare's browser challenge. Everyone is checked once per question. Guests are checked after pressing Enter and wait for it; logged in, the check was done in advance, so there is no wait.

**What I noticed**

- As a guest, the check is part of the short pause before "Thinking…" (about 0.65 s), and the page keeps pinging it while it is open.
- Logged in, the renewal runs in the background right after each request (about 0.8 s later), ready for the next question.

> **Figure.** Mockup: the ChatGPT message box after you press Enter as a guest, with the browser check behind it *What happens as a guest after you press Enter, before "Thinking…" appears.*

### What your request carries besides the prompt

Your question never travels alone. Logged in, the browser adds the model you picked, your time zone, how long your earlier answers took, and a list of the interactive blocks your ChatGPT can display, such as cards and app widgets.

A guest's browser sends no model and no list; it adds your screen size, dark mode, the time since the page opened, and a saved copy of the conversation so far, which it keeps itself and sends back with every question.

**What I noticed**

- The list decides which interactive blocks, such as app widgets, you can get. This is also why "just call ChatGPT" scrapers see something different from what users get.
- Guests declare no blocks and still get cards and maps.

### Which ChatGPT answers you

Once per turn the server decides and records three things you never see: what kind of turn this is, which data centre handles it, and which model answers: the one you picked or, on a free account past its limit, a smaller one. Your IP picks a group of data centres; inside it, OpenAI's balancer[^6] picks one, and its choice changes from run to run.

**What I noticed**

- A US address always landed in the US. In Europe there are two separate groups: Dutch and Spanish addresses went to one set of data centres, French, Polish, German and Latvian addresses to another.
- The turn record also names your plan and the model you asked for. The kinds I saw: search (in two variants), shopping, local.
- In my captures, only the local turn got its places from map and review feeds, and only a shopping turn got prices and stores from a product feed, though one of two identical shopping questions got none. Plain search answers showed cards too, so a card alone doesn't give the kind away.
- On a free account the model quietly switches to a smaller one once a counter of full-model turns hits zero, even in the middle of a run of questions.

> **Figure.** Infographic: which data centres answered 1,600 guest runs, by the country of the IP address. US addresses went only to 9 US data centres; Dutch and Spanish addresses to Germany North, Belgium, Spain, the Netherlands and UK South; French, Polish, German and Latvian addresses to Denmark, Poland, Switzerland, Italy and Sweden; Brazilian addresses only to Brazil. The groups never overlap. *Where 1,600 guest runs were answered, by the country of the IP address.*

## Gathering the data: web search

Web search is one way ChatGPT gathers what it answers from, and the one this chapter follows. Places, products, weather and prices arrive through separate feeds and live services, outside this chapter.

### How ChatGPT picks brands: two tracks

The same question without brand names goes down one of two tracks. Instant writes the brand list from memory and searches only to add details. Thinking searches for a few brands first and adds more after reading the results. The two lists overlap but differ.

**What I noticed**

- Instant named every brand before any search result: the list was on screen at 2.6–3.8 s, the first round of searching at 5.0–5.9 s. Search added none, logged in or as a guest.
- Thinking put six brands into its first round of queries and added four more after the results; two brands it searched for never reached the answer. An earlier run, worded differently, followed the same pattern.
- A second round of searching can start mid-answer. Its queries are hidden, and on screen it is still one answer.
- What you measure decides what you see: J shows up only in Thinking. Test both models, with a question that names no brands.
- Instant rewards being in the model's memory; Thinking starts there, then weighs outside signals.

> **Figure.** Which brands each answer named, and when. Instant, logged in: A to H, all before any search result. Instant, guest: A to F and I, all before any search result. Thinking: A, B, C, D, E and H were in its search queries before any result; J, I, F and G were first named after the results; K and L were searched for but never appeared in the answer. *The same question with no brand names, three answers. Each letter is one brand.*

### What ChatGPT actually searches for

ChatGPT does not search for your question: it writes its own queries, the fan-out[^7], which you never see on screen. When a turn runs more than one round of searching, the later rounds hide their queries.

**What I noticed**

- Longer prompts get more fan-out: about 3 queries in the first round for a short prompt, 3–4 for a long one, and a long one more often needs a second round.
- Up to six queries in one round in my captures. In my questions about one category of B2B tools, the model added the year to three queries in four, "pricing/cost" to over half and "official" to a third, and sends site: queries to vendor domains, on short prompts too.
- With one round of searching, all its queries are visible. With more, the later rounds bring results but no query text: not in the stream[^8], not in the saved conversation, not in the telemetry.
- So query counts cover only the first round; treat them as a lower bound.

> **Figure.**  *Seven questions I asked ChatGPT, and what it actually searched for. Not once did it search my question as I typed it.*

### How ChatGPT builds its web index

OpenAI lists four bots. Two of them matter for search. ChatGPT-User opens a page when an answer needs it, for example when you paste a link. OAI-SearchBot, the crawler[^9], visits sites on its own and adds pages to the index that ChatGPT searches. The other two are GPTBot, which collects pages for training, and OAI-AdsBot, which checks pages submitted as ads. OpenAI says ChatGPT-User does not decide what appears in search, and in my tests it didn't: only OAI-SearchBot got pages into search.

**What I noticed**

- I tested this on a brand-new site. For some pages I pasted the link and asked ChatGPT to open and summarize it; my logs showed ChatGPT-User visiting them, yet they never showed up in its search. Pages OAI-SearchBot visited showed up within about an hour. It was one young site, so take it as an observation, not a rule.
- Some fresh pages I never touched at all: no prompts, no links pasted. OAI-SearchBot found them on its own through links from other pages of the site, and two of those pages showed up in search about an hour after its visit (66 and 69 minutes).
- I am still testing how this index relates to Bing's. So far, my test domain was missing from Bing when I checked and still showed up in ChatGPT, which suggests ChatGPT does not rely on Bing alone. ChatGPT's index holds web pages only.
- To check whether a page is indexed, look for OAI-SearchBot in verified-bot logs and run a site: search in ChatGPT. A ChatGPT-User visit proves nothing.

![A dashboard of bot visits to my test site, 1 to 7 November, one row per bot and one cell per day, darker for more hits. Week totals: OAI-SearchBot 325, ChatGPT-User 280, GPTBot 9, PerplexityBot 600, ClaudeBot 92, Googlebot 310, Bingbot 49, Amazonbot 160, YouBot 149, YandexBot 83, Bytespider 49, 7 other bots 43.](https://shamrai.ai/how-chatgpt-works/bots-per-day-light.png "Who visited my test site in the first week of November. OpenAI's bots in blue, everyone else in grey.")

### What the model gets from the results

For every query the model gets a list of results, already ranked, each a link with a short snippet. The Sources panel shows everything that came back, but only part of it reached the model, and only part of that got cited. Getting into Sources is the easy part; getting into the answer is much harder.

**What I noticed**

- In 123 answers I captured logged in, the Sources panel listed a median of 28 links. The model received 12 of them and cited 4.
- The higher a result sat in the model's list, the more often it was cited: a result in first place was cited in more than half of cases, the third one in a third, those from 6th place down in fewer than one in five.
- Guests get no Sources panel, only the links left in the answer, so for them the gap between Sources and citations is invisible.

> **Figure.** From sources to citations. Per answer, median: 28 links in the Sources panel, 12 reached the model, 4 were cited. Share of results cited by their place in the model's list: 1st 56 percent, 2nd 46, 3rd 32, 4th to 5th 27, 6th to 10th 18, 11th to 20th 19. *Counted over 123 of my own ChatGPT answers, almost 2,000 search results in total.*

### How ChatGPT reads your page

When the model wants the whole page, it asks to open it. Most of the time that page comes from a shared copy, not from your server: in my test, four opens out of five never reached the site. The rest arrive as visits from ChatGPT-User. The answer looks the same either way.

**What I noticed**

- In the stream an opened page shows up only as its line count. That is the only sign in the browser that the page was actually opened, not just seen in the results.
- On your server a live visit is an ordinary HTML request with no referer, from a Microsoft network address in the region that handles the conversation.
- One conversation's visit fills the copy for everyone: after a page had been fetched, the same page was never fetched again for at least half an hour, even when the question came from a different account, and nothing on screen tells you which it was.

## Showing the answer and what comes after

### What ChatGPT actually cites

A citation pill is the small rounded link with a site's name right after a sentence. It means the model took that sentence from a search result. A plain link to the same page is not a citation.

**What I noticed**

- Pills went to facts: prices, plan details, the platform's rules. The choice of brands and their order never had a pill, even for the brands [Thinking added](#stage-6) after reading the results. Being named first is not the same as being cited.
- Some links in an answer have nothing behind them. Once, without ever opening the page, the model repeated a link I had pasted into my question. Another time it wrote a page address that was never in its search results.

> **Figure.** Three sentences from an answer. The first ends with a small rounded pill with the site's name: a citation tied to a search result. The second contains an underlined plain link: it looks like a source but is not a citation. The third, recommending brand A, has no pill at all: the choice of brands was written from memory. *Three sentences from one answer. Only the first is a citation.*

### How ChatGPT assembles the answer

The answer you see isn't plain text. The model writes something closer to a small web page, in a format called DIL[^10]: text plus blocks such as a product card, a map, a citation or a button that asks the next question. The server fills the blocks with data, and your browser puts the page together. Every update re-sends the whole page, so even a short answer is a heavy download.

**What I noticed**

- Each block gets its data from its own source. Citations come from web search; product and place cards come from shopping and map feeds. To show up in a card, your data has to reach that feed, not just your website.
- There are several hundred kinds of blocks in ChatGPT's code. I am putting together a gallery of the ones I have seen in real answers, with where each one gets its data.
- If a block fails, it is simply hidden. Once, in a Pro run, the whole answer failed to show ("This response couldn't load") although it had fully arrived.
- In one Thinking answer, about 40% of the 490 KB that arrived was this page code, re-sent about twice a second. The text itself was 6,300 characters.

> **Figure.** One answer taken apart into its blocks: text written by the model with a citation pill linking to a search result; product cards with prices from a shopping feed; a map with places from map and review feeds; images found by a separate image search; and a button that asks ChatGPT the next question. *One answer, taken apart: each block gets its data from its own source.*

### What ChatGPT does after the answer

When the answer finishes, the page keeps working. Logged in, it downloads the whole conversation again and sends an empty warm-up for your next question before you have typed it. As a guest, it sends the same warm-up.

**What I noticed**

- The warm-up for the next question went out after every answer in the 27 free-account runs I recorded.
- The stream ends with a promo banner picked for the conversation. After an Instant answer, on a Pro account, it offered Thinking ("Get a more thorough answer with Thinking"). After a Thinking answer comparing tools, it advertised ChatGPT's plans for teams ("Comparing AI plans for your team?").
- On a free account the end of the stream also updates the count of [full-model answers](#stage-5) you have left.

### What ChatGPT logs about your answer

After the answer is on screen, the page keeps reporting to OpenAI. Every link is checked before it is shown, every citation pill that scrolls into view is logged as an impression, copying text is logged with its length, and so is how long the answer took. OpenAI knows how often your page was shown; you only see the people who clicked[^11].

**What I noticed**

- Those impressions never reach you. That is likely one reason ChatGPT traffic looks small in analytics: you see the clicks, not how often you were shown.
- The link checks blocked nothing in my captures: 285 checks in logged-in answers, and an empty blocked list in all 1,600 guest runs.
- ChatGPT's page reserves a slot for an ad under the conversation and reports it, even on a Pro account.

> **Figure.** The report the page sends to OpenAI about one Thinking answer: the model that answered and the one requested, both Thinking; kind of turn, search; first token at 1.8 seconds, the final answer starting at 18.5 seconds, the last token at 60.4 seconds; 917 kilobytes received in 177 updates to the answer. *The report about one Thinking answer, in plain words. You never see it, and one went out after every answer I recorded.*

## How I recorded it

In the browser, a small extension I wrote recorded and decoded everything the ChatGPT page sent and received while it answered: the answer stream and the requests around it. It only listens and changes nothing.

On the other end, I logged OpenAI's bots on a test site, checked against the IP lists OpenAI publishes, and matched the two sides by time.

What I recorded: 1,600 guest runs on 1–2 November, all about one category of B2B tools; 300 more guest runs on neutral topics; and about 150 logged-in answers on free and Pro accounts from 1–7 November.

## Limitations

ChatGPT changes often and runs experiments on its users, so everything here describes what I saw in November 2026. Some things never reach the browser at all: the queries of later search rounds, how results are scored, and the full text the model gets. They are not covered here. The cache and the index each get a study of their own.

[^1]: **Instant and Thinking**: The two models in ChatGPT's model picker: Instant answers right away, Thinking reasons first.
[^2]: The side panel that lists the pages found for an answer.
[^3]: OpenAI runs many experiments at once. Each browser is put into variants, and they decide which features and layout of ChatGPT you get.
[^4]: A small request the page sends ahead of your question: it tells the server a question is coming, so a machine is picked and prepared and the first words of the answer arrive sooner.
[^5]: A short-lived token from the server that names the machine which will stream your answer.
[^6]: The system that spreads requests across OpenAI's data centres.
[^7]: One question becomes several search queries, written by the model.
[^8]: One long response the server keeps writing to while the model works. The answer and the search results arrive this way, piece by piece.
[^9]: A bot that fetches pages on its own schedule to build an index. Here: OAI-SearchBot.
[^10]: The name ChatGPT's own code uses for this answer format. My guess: Dynamic Interactive Library.
[^11]: I mean clicks marked with ?utm_source=chatgpt.com, which links in the answer carry. Not every ChatGPT link does: the classic search results I found inside ChatGPT come without it ([blue-links note](https://shamrai.ai/chatgpt-blue-links)), so some of those clicks may not be marked at all.

