Skip to main content
ai-cmo.dev sends prompts to multiple answer engines and measures how each one responds. The engine registry at engines.yaml defines the model, provider, weight, and behavior for each engine.

Grounded engines

These engines retrieve external information before generating an answer. They can cite sources and provide more current information than parametric recall alone. ChatGPT has the highest weight (0.30), reflecting its position as the most widely used consumer answer engine. Grok has the lowest weight among grounded engines. Perplexity uses native_grounding: true, meaning its retrieval and citation behavior is built into the model endpoint rather than added as a separate RAG layer. Claude explicitly has zdr: false — no zero-data retrieval — meaning it answers from parametric memory unless the caller adds retrieval.

Exa — retrieval engine

Exa is not an OpenRouter model. It has its own transport and bills per request rather than per token. The platform runs two Exa modes: Both have zero engine weight (0.00). They do not contribute to the score’s engine-weighing directly but provide independent measurement of whether a brand is findable in the retrieval index. The exa preset exercises both modes on the same prompts.

Parametric engines

These engines answer from training data only. They are not grounded and cannot cite sources. Both parametric engines have low observed cost per call (0.0005 µUSD) and are included in the standard and deep presets. Their output reflects the model’s training data, not current web content. A brand that launched recently may be absent from their parametric memory.

Provider architecture

All OpenRouter engines are accessed through the operator’s OpenRouter API key (OPENROUTER_API_KEY). Exa is accessed through a separate EXA_API_KEY. Both keys are operator-custodied — they go in the deployment environment, not the workspace settings. See Connections for the custody model.

How engine weighting feeds the score

The GEO score’s modeled reach component (weight 0.15) uses engine weights as a volume proxy. The calculation multiplies each measured engine’s visibility by its configured weight, sums across all grounded engines, and divides by the total configured weight:
The weights come from engines.yaml. They are modeling choices, not claimed traffic share. The weight of 0.30 on ChatGPT means the score treats ChatGPT coverage as 30% of the modeled reach. Weights are declared only for grounded engines; Exa modes and parametric engines have zero weight. Missing components — an engine that was not measured — affect modeled reach through the grounded-engine penalty described in the GEO Score documentation. The volumeProxy.source is always engines.yaml grounded usage weights.

Per-engine measurement

Each run records per-engine metrics: visibility, share of voice, average position, sentiment, citation share, and observation count. The engine scoreboard on the dashboard shows these side by side. An engine with zero responses (skipped, failed, or not in the preset) is not evidence of zero visibility. See How answer engines work for the retrieval mechanics, and Visibility metrics for how each metric is defined.