TL;DR
Fan-outs are search queries chatbots use to get fresh data from the web. Analyzing them is a standard step in increasing AI visibility. The most grounded source of fan-outs is the app’s own network traffic, which is easy to monitor with Chrome DevTools.
The problem: I discovered a second layer of fan-outs that can’t be revealed with browser tools. These hidden queries have a big impact on citations; in some cases no results from visible searches make it into the response.
To get the full list of fan-outs you need to instruct the model to log the search queries in the same prompt. Anything a chatbot reports about itself is presumed hallucinated until checked, but there is plenty of evidence that it is a reliable technique.
Now let’s explore it properly.
Server-Sent Events (SSE) stream: a block with search results, but without queries
You can find plenty of interesting and useful stuff on how search engines and chatbots work by monitoring network data with Chrome DevTools. They allow you to capture the Server-Sent Events (SSE) stream, which is a long response from ChatGPT’s server to your browser. Here’s a great article from Mark Williams-Cook explaining the concept in detail.
Exploring a ChatGPT event stream I found that there are two similar blocks with search results, identifiable with “metadata”:{”search_result_groups”
Both blocks have streaming_parent_id, which allows us to find the parent block in the same stream. Here’s one of them:

Down in the code there are URLs and titles, looks like a real block with search results.
Now, when I match another event with the second streaming_parent_id , I found a very similar block but the metadata field is different:
There are search results here, but the queries are absent. Another interesting property in metadata for the second block is inline_cot_expandable_content. “Cot” apparently means Chain-of-Thought.
What I make of this:
Observable fan-outs are the first layer: the model fires them as soon as it starts exploring the topic. The remaining search calls belong to the second layer. They are made during reasoning, so hiding them is part of OpenAI’s policy. They have hidden chain-of-thought since o1:
Therefore, after weighing multiple factors including user experience, competitive advantage, and the option to pursue the chain of thought monitoring, we have decided not to show the raw chains of thought to users.
Do other methods capture more fan-outs?
SSE is not the only place to look for fan-outs. Suganthan Mohanadasan noticed that ChatGPT rebuilt its search tool and mentioned a new, non-JSON format of fan-outs (though still in SSE).
Anyway, judging by the source code, FanoutFox also analyses stored conversation, fetching /backend-api/conversation/<id>. Let’s see how it works with a fresh prompt.
FanoutFox listed the exact 3 queries that can be found in SSE (Network → conversation → response → “search_model_queries”).
Now let’s see how many search results blocks are in the full SSE stream:
6 blocks with search results. Not all of them are the classic search sessions; we can judge it by ref_type attribute. 3 of the blocks have only “view” ref_type, so it’s retrieving a specific page rather than searching. There’s also another pure search block of results and another with mixed types.
What’s important here:
The pattern repeats: only one search results call has search queries to parse. The others don’t.
Exploring other sources doesn’t expose more than the first batch in the SSE stream.
A tool for analyzing SSE stream
The analysis above was done by hand, reading raw code. To finish the study I created an online tool: https://io.trudov.com/tools/chatgpt-dissect/
Please note: I made an effort to keep it secure and private; nothing stored on the server. I don’t need your data. But generally it is not a good idea to copy and paste your browser service information to some website. I built this tool for myself, if you use it, you do it at your own risk.
Do the second-layer queries matter?
I analyzed 40+ prompts from 26 October - 2 November, with different ChatGPT models, focusing on ChatGPT 6 at Medium thinking effort (the default).
First, let’s assess how common hidden queries are. Here’s a part of my research log:
As you see, hidden queries were used even in ChatGPT 5.6 Instant1, though not in every session. The query itself seems to have more influence on using CoT queries than model choice.
What’s more important, though, is that when CoT fan-outs do appear, they tend to have a big impact on what the user sees in the response.
For example, for the question about prompt-tracking software, none of the cited URLs came from visible-query results:
That’s not always the case, the sources found with identifiable fan-outs often make it to the citations:
Anyway, the high impact of late-stage searches is pretty clear. I think it is to be expected. CoT queries fire when the model is not satisfied with the results the first batch of fan-outs yielded. If it looks for additional data, it is likely this data is deemed essential and will be presented.
So: search results generated with the hidden queries materially influence answers and they do matter for GEO.
How to reveal hidden fan-outs inside ChatGPT dialogue
You just have to ask ChatGPT nicely:
I picked this idea from the book by Ross Hudgens, who suggests asking for the queries in a follow-up message. This exact method does not always work:
It is more reliable to instruct ChatGPT to save and display the exact raw log in the initial prompt.
Why does the same-prompt log work when a follow-up fails? Within one turn, tool calls and their results sit in the model’s context, so retrieving the query strings is trivial. Looks like reasoning and tool history are dropped when the answer is finished. ChatGPT says as much itself: “I don’t have the exact original search-query strings available in the conversation context.” That said, I also encountered sessions where ChatGPT was able to provide a plausible-looking log in the follow-up.
What if these queries are hallucinated?
That’s the first question we should think about when getting anything inside a chatbot. We can’t rule out that this “exact raw search log” is just a confidently made guess.
On the other hand, we do have plenty of indirect evidence that these queries are real:
Part of them exactly matches those in SSE.
The format with
fast|also matches previously observed formatting inside network data.If a log shows grouping, it resembles events in SSE.
Let’s get more direct signal. The path of testing is clear:
Use a prompt which makes the answer not sufficient to reconstruct the queries.
Compare the self-reported log with SSE.
Hunt for inconsistencies.
The answer:
Then I compared it with the SSE. The picture is pretty clear: each section of the log maps to an event in the SSE.
First event: four visible queries, exact match.
Second event: 28 URLs, no COS, found products matching the queries (e.g. Uniqlo turtleneck).
Third event: no URLs. Consistent with an over-constrained query and the previous batch: among arket.com results there’s no “lambswool”, so ChatGPT tried to find the exact product and failed. Also note that it disobeyed the prompt, using quoted search terms. A reconstructed log would have followed the prompt.
Fourth event: only arket.com results with vest linen.
The strongest evidence here is the third event. ChatGPT didn’t find the requested product, so it dropped the query and asked another one. Hallucinating this out of thin air is very improbable.
What does it mean for your GEO strategy
Let’s summarize.
Only a part of ChatGPT’s fan-outs can be captured by external tools. Moreover, results from second-layer queries take a large share, often the majority, of citations. Do not treat fan-outs from a browser extension as the full set.
The impact of second-layer queries is more pronounced for complex products and prompts without a clear fit in traditional search2. If your product is B2B or high-ticket with a long sales cycle, you need to pay special attention to the second layer.
ChatGPT’s self-reported search queries are a plausible version of what it searched, but there is always a possibility of error. I think it’s reasonable to add “log all exact search queries you have used” to the prompts as a first part of analysis. It’s quick, easy and most likely points in the right direction.
In contrast, network data on sources retrieved is grounded. Even without fan-outs you can reconstruct search intent. If you analyze an important prompt and see that a type of page consistently gets retrieved and your site has no such page, it’s a good idea to add one.
I intend to continue digging into internal machinery of chatbots and search engines. Subscribe to get new insights!
If you’re not sure about your GEO strategy, I can help. I like to analyze new businesses, but I am too lazy to work with one project month after month. So my advice will be a brutally honest analysis, not a retainer pitch. More info here.
A bit of surprise for me: Instant doesn’t imply thinking, but when the query requires it, ChatGPT uses CoT no matter the thinking effort. Same with free plan (at least before you run out of limits). On the other hand, “High” thinking effort causes hidden queries where “Medium” does not (observed in several runs).
That’s my overall impression. Not tested separately or quantified.












