Query fan-out: the searches ChatGPT runs before it answers
When ChatGPT searches the web for an answer, it rarely searches the prompt as typed. It runs several rewritten searches, a fan-out, and its cited sources come from what those searches return. Across a set of prompts, the fan-out shows which queries feed the answers in your category.
Request it
{
"prompt": "What is the best CRM for a small agency?",
"country": "US",
"include": { "searchQueries": true }
}
Send it to POST /v1/monitor/chatgpt or as a CHATGPT task. include.searchQueries shares an add-on with rawResponse, ads and shopping: enabling any of them adds the same cost once (pricing).
The fan-out comes back as result.searchQueries, an array of strings. Two details of the contract matter:
- It can be empty. ChatGPT serves more than one interface.
"legacy": truerequests the legacy desktop interface, which streams the searches, but it is best-effort: ChatGPT decides which interface it serves, so handle answers without them. - Web search is forced by default. Leave
disableWebSearchunset to measure search-backed answers. Withtrueyou get the answer ChatGPT gives on its own, andsourcesandsearchQueriesare often empty.
Aggregate across a prompt set
Count each normalized search once per answer that ran it:
from collections import Counter
def fan_out_report(results: list) -> list:
"""Searches with the number of answers that ran them, most frequent first."""
counts = Counter()
for result in results:
counts.update({" ".join(q.lower().split()) for q in result.get("searchQueries", [])})
return counts.most_common()
results are result objects: from synchronous responses, or response.result of completed tasks.
Turn it into work
- Map searches to pages. For each frequent search, note the page on your site that should answer it, or that none does.
- Join with citations. For each search, collect the domains cited in the answers that ran it. Those are the pages you compete with.
- Split by market. Run the set with each
countryyou sell in; the searches can differ by market. - Keep the set fixed. Re-run the same prompts on a schedule so changes in the fan-out are visible.