Algorithm version 1 · Prompt pack version 1

Cited Score Methodology

How a Cited Score is produced: what is measured, how it is weighted, when a score is refused, and what the number does not mean. Published so the score can be checked rather than trusted.

What the score measures

A Cited Score is the weighted rate at which a company appears in AI-generated answers to buying-intent questions in its category, measured across four engines. It combines two signals that are kept separate throughout.

Citation — retrieval

The company’s own domain appears in the engine’s source list. The engine fetched their website while composing that answer.

Mention — recall

The company’s name appears in the answer text, with or without a supporting source. The model produced the name from its weights.

These are different facts and most tools collapse them. A brand named without a source has presence but no retrieval footprint. Optimisation work moves the two differently, so they are measured and reported separately.

Engines queried

EngineModelRetrieval
ChatGPTgpt-4o (Responses API)web_search_preview, forced
PerplexitysonarNative search
Claudeclaude-sonnet-4-5-20250929web_search tool
Geminigemini-2.5-flashgoogle_search grounding

Model strings are pinned to dated versions where the provider offers them. A floating alias would let a silent model rotation shift every score in the dataset.

ChatGPT’s web search is forced rather than optional. Without forcing it the model answers from memory and returns no sources, which would read as “not cited” when in fact no search took place.

Query design and sampling

Each vertical has a versioned prompt pack. Version 1 of the embedded insurance pack contains 11 queries weighted by buyer intent: six recommendation, three comparison, two category. Any edit to the query set increments the version, and scores are only comparable within a version.

Each query runs three times per engine. This is not redundancy — LLM output is non-deterministic, and the same query to the same model minutes apart can return different sources and name different companies. A single run is a coin flip reported as a fact. One scan is 11 queries × 4 engines × 3 runs = 132 calls.

Matching rules

Citation matching is by hostname, never substring. A source counts only if its host equals the company’s domain or is a subdomain of it. In a single test scan, six unrelated companies with “cover” in their domain appeared as sources for a query about a company called Cover Genius. Substring matching would have counted all six.

Mention matching uses word boundaries, so “Sure” does not match the adverb. A company is never counted as its own competitor.

The score

engineScore = 100 × (0.7 × citationRate + 0.3 × mentionRate)

The headline is the unweighted mean of the four engine scores.

Citation is weighted higher because it is the harder signal and the one the product name claims to measure. Mention is not zeroed because being named still shapes buyer perception. These weights are a stated judgement, not a derived optimum, and they are published so they can be argued with.

Engines are weighted equally. A company strong on one engine and absent from three is not 75% visible — the platform split is the finding, not noise to be averaged away. The per-engine breakdown is always shown alongside the headline.

When a score is refused

A scan produces no score if any engine returns fewer than 60% of its expected runs. A company looks identical whether an engine found nothing about them or the engine never ran. On a public page about a named company, publishing the second as though it were the first is a false accusation.

A call is treated as failed rather than as a zero when the engine returns an explicit search error, or when it returns answer text with zero sources. Across every successful call recorded to date the source count has been between 4 and 20. Zero has never been a legitimate result — it means the model answered from its weights and no retrieval occurred. Both cases are retried; neither is written as a measurement.

The headline is a rolling average

A single scan is a reading, not a score. The same company measured days apart with the same queries produced 31.2 and 47.6 — a 16.4 point spread. Part of that is genuine movement in what the engines retrieve; part is sampling variation. Two readings cannot separate them.

The published score is the mean of all scoreable scans in a seven-day window, with individual scans shown as a trend beneath it. Scans only average together when they share the same pack version, the same algorithm version, and the same query set. A truncated run that covered six of eleven queries measured a different thing and is excluded rather than averaged in. Fewer than three scans is labelled provisional.

Change notifications fire on individual scans, not the average. The average exists to give a stable number to quote; the scan is what detects movement.

What the score does not measure

It is not traffic, ranking, or revenue. It is not a Google ranking, and the two correlate loosely at best. It is not a quality judgement. It is not precise to a decimal — given the observed spread, a few points between two companies means nothing and twenty points means a great deal. And it reflects the queries in the pack; a different query set would produce a different number.

Known limitations

Variance

Scores have moved by up to 16 points between measurements of the same company days apart. The rolling average mitigates this; it does not eliminate it. True variance across many scans is not yet established.

Geographic targeting is partial

ChatGPT, Perplexity and Claude accept a location parameter and are queried with one. Gemini’s grounding has no documented location parameter, so its results are not geo-targeted — a regional score is three-quarters localised. Anthropic additionally rejects some country codes, including the UAE; those calls run unlocalised.

Language matters more than geography

Across five languages and four engines — two queries, three runs per cell, 240 calls in total — ChatGPT shared between 0% and 12% of its cited source domains between English and the target language. Turkish returned 0% on every sample. German was the sole exception at 32%. Claude and Gemini resolved across languages far more readily, at 25–52%.

Two caveats. The per-cell ranges are wide — Claude’s Arabic figure averages 36% across a 6–73% spread — so these are bands, not point estimates. And an earlier single-run version of this test reported Spanish as the most divergent language at 7%; that was an artifact of targeting the United States rather than Spain. Retested against Spain it sits mid-range at 19%. The earlier figure is superseded.

Full figures, per-engine ranges and method: cross-engine and cross-language citation overlap.

Domain accuracy is load-bearing

A score depends on having the correct domain. In testing, one incorrect domain halved a company’s score. Domains are verified rather than inferred.

One vertical tested

All figures above derive from embedded insurance. Whether the patterns generalise is not yet known.

Reproducing this

Every figure comes from scans whose raw per-call records are retained: engine, query, run index, citation result, mention result, source domains, and full answer text. Any score traces to the specific answers that produced it. If you run the same queries against the same models and disagree with a result, that disagreement is checkable.

Cited Score is operated by Brightbay LLC. Questions about this methodology: [email protected]