This page is rendered directly from METHODOLOGY.md in the public repository, so what you read here is the file the pipeline actually runs under.
Unprompted measures which brands AI assistants name when people ask real buying questions, and publishes the result every week. This document is the method. It is versioned, it lives in the same public repository as the data, and every run record stamps the version it ran under.
- A fixed bank of buyer questions is read from
questions/<category>.yml. - Each question is asked of every active engine five times.
- Every raw answer is stored, then parsed into a structured record: which brands
were named, in what order, which sources were cited, and whether the engine declined to recommend anything.
- Brand names are normalised against
aliases/<category>.yml. Anything
unrecognised is quarantined and never appears on the chart.
- The run is appended to
data/runs/. Nothing is ever overwritten or edited. - Four sanity checks run. If all pass, the site republishes. If any fail, the
week is held and a human reviews it before anything is published.
These systems do not give the same answer twice. Ask the same question on Monday and Wednesday and you can get different brands. Google's AI Overviews sometimes do not appear at all for the same query on consecutive requests.
Asking once and publishing the result would be publishing noise. So each question is asked repeatedly and we report how often a brand appeared, not whether it appeared.
That figure is called Rotation:
rotation = times_named / total_runs
"Named in 8 of 10 runs" is a measurement. "Was named" is a coin flip written down.
We query each provider's API, using that provider's own web search where it exists. This is not identical to what a logged-in person sees in the consumer app. Consumer products carry their own system prompts, personalisation, shopping integrations and safety layers that an API does not reproduce.
Every tool in this market shares that limitation. We are stating it because none of them do.
We deliberately do not route requests through a multi-provider aggregator. Aggregators supply one shared search context to every model, which would make the engines agree with each other artificially and would report the aggregator's sources rather than each assistant's own. The disagreement between assistants is the thing worth measuring, so each engine is queried natively.
| Engine | How it is queried | Status |
|---|---|---|
| ChatGPT | OpenAI API with OpenAI's own web search | v1 |
| Claude | Anthropic API with Anthropic's web search | v1 |
| Perplexity | Perplexity Sonar API | v1 |
| Google AI Overviews | Planned, via a SERP data provider | not yet active |
An engine that errors or returns nothing has that fact recorded as data. One failing engine does not discard the week.
Where an engine declines to recommend anything, that is recorded as a refusal rather than dropped. How often the machines refuse to answer a buying question is itself worth knowing.
The value of this publication is that week 40 can be honestly compared to week 1.
Changing the questions, the number of runs per question, or the list of active engines changes what the numbers mean. Any such change bumps the version at the top of this file, and either the history is re-run under the new method or a clearly separate series begins.
The past is never edited. Run files are append-only, and the repository's public git history is the audit trail.
Unprompted is operated by Coley Grantham, who is commercially active in the Pokémon hobby through No Bulk Cards. He is a customer of card grading companies, not a competitor to them. No grading company has any input into the questions asked, the method used, or the results published, and no placement on this chart is or ever will be for sale.
The questions, the code, the raw answers and the full history are public in this repository. Anyone can re-run the method and check the result.
In the AI tools categories, some of the products we chart are made by the same companies whose assistants we query. We report the gap between how often an engine names its own product and how often rivals name it.
That measurement has a problem we did not choose and cannot fully remove:
model reads that prose and decides which companies were named. So when the result says Claude named Claude Code more often than rivals did, a Claude model was the one counting.
We think the effect is small, because extraction is a mechanical reading task and the raw answers are published alongside the counts, so anyone can check a row by hand. But "we think it is small" is not evidence, and the honest position is that this figure carries a conflict until it has been checked with a different model doing the extraction.
Until that check is run, treat any self-preference number involving Claude as
provisional. The raw answers behind every count are in data/runs/, which is
exactly why they are published.
Two things that are *not* affected by this: the standings themselves, which do not depend on whose product is whose, and the ChatGPT figure, where a Claude extractor finding that ChatGPT under-names its own product runs against the direction any bias would push.
If a result here is wrong, the raw data that produced it is in data/runs/ and
the code that produced it is in src/. Open an issue. Corrections are made by
adding a new record, never by editing an old one.