Why ChatGPT cited nothing, and the one parameter that fixed it
Crawlmind Engineering··4 min read
tool_choice is an API parameter that controls whether a model is
allowed to use a tool or required to use it, and getting it wrong is
why a citation-tracking query can come back with zero cited sources
even when the model clearly should have searched the web. We ran
into this measuring share-of-voice in ChatGPT: identical queries,
real questions that needed current information, and the engine
returned a confident answer with no url_citations attached at all.
The fix was a single field in the request, not anything about the
content being measured.
This is a short field report, because the lesson is small and specific: when you ask a model a question with a web-search tool available, "available" and "used" are not the same thing.
#The setup
To track which domains an AI engine cites for a query, you send the
query to the model, give it a web-search tool, and read back the
citations from its response. With OpenAI's web search, results come
back as url_citation annotations pointing at the pages the model
actually consulted. Those URLs are the raw material for any
share-of-voice or AI-visibility metric.
Our first runs returned answers but almost no citations. Across a batch of test queries, the average was close to 0 cited domains per run. The answers themselves were plausible, which made it look like the engine simply was not citing sources, or that our parsing was broken.
#The cause: optional tools stay optional
Neither was true. By default, when you attach a tool to a request, the model decides for itself whether to call it. For a question it believes it can answer from its training data, it often just answers, skips the search entirely, and therefore has no sources to cite. The web-search tool was present in the request but the model was choosing not to use it.
OpenAI documents this behavior in the
function-calling and tool-choice reference:
the default tool_choice is auto, which means "call a tool if you
think it helps." A model that thinks it already knows the answer
will not search. No search means no retrieved pages, which means no
citations, which means a citation tracker measures zero through no
fault of the content.
#The fix: force the search
The change was to stop letting the model opt out. Instead of leaving
tool_choice on auto, we set it to require the web-search tool, so
every tracked query performs an actual web search before answering.
The effect was immediate. On the same queries that had returned
roughly 0 citations, forcing the search produced 8 to 10 cited
domains per run. A live probe of a single query went from 0
url_citation annotations unforced to 9 forced. The content,
the prompt, and the parsing were unchanged. The only difference was
removing the model's ability to skip the search.
#Why this matters for measuring AI visibility
If you are building or buying anything that reports "which sites does ChatGPT cite for X," this distinction is the whole ballgame:
- A zero is ambiguous. Zero citations can mean "nobody is cited for this query" or it can mean "the engine never searched." Those are completely different signals, and only the first is about your visibility. A tracker that leaves tools optional conflates them.
- Forcing the search makes runs comparable. When every run is guaranteed to perform a retrieval, a zero for your domain means you genuinely were not cited, which is the thing you actually want to measure.
- It changes what "improving" looks like. Once the measurement is honest, the lever is the familiar one: be the kind of source an answer engine wants to lift from. Concrete, well-structured, current pages get cited; vague ones do not.
#A caveat on cost and realism
Forcing a search on every query costs more than letting the model answer from memory, because every request now does retrieval. For a tracker that is the right trade: you are paying for a real measurement instead of a cheap, ambiguous one. It is also worth remembering that forcing the tool makes the engine behave more like its search-grounded product surface than its bare chat mode, which is usually what you want when the question is "who gets cited."
#The summary
A citation tracker that returns zero is not necessarily telling you
that nobody gets cited. With tool_choice left on auto, the model
can skip the web search entirely and answer from memory, producing
zero citations regardless of who deserves them. Forcing the
web-search tool took our runs from about 0 to 8 to 10 cited domains
on the same queries. If you are measuring AI visibility, make sure
the engine is actually searching before you trust a number, because
an optional tool is an optional measurement.
Related field notes
2026-06-18T00:00:00.000Z · 5 min
How to measure GEO with citation share
Citation share is the percentage of AI answers on your topic that cite your site. Here is how to define it and track it.
2026-06-17T00:00:00.000Z · 5 min
The anatomy of an AI citation
What ChatGPT, Perplexity, and Gemini actually quote from a page, and the page traits that decide whether you are the source they lift.
May 15, 2026 · 2 min
Who actually gets cited by ChatGPT, and why
A look at the citation patterns we see when ChatGPT answers B2B SaaS queries with its browsing tool. The pattern is consistent, and the leaders are not who you'd expect from Google rankings.
Share or discuss
New posts, no spam. Roughly monthly. Unsubscribe with one click.