AEO Open Measurement Spec, v0.1 (September 2026)

A minimal, vendor-neutral way to record AI-answer visibility so that numbers from different tools, teams and weeks can be compared. Published alongside The Definitive 2027 Guide to AEO (StackedGTM). Anyone may adopt it; trackers are asked to label exports against it.

1. Prompt inventory (prompts.csv)

FieldRequiredValues / notes
prompt_idyesstable id; never reused
classyesdiscovery, comparison, validation, category education, renewal
brand_scopeyesunbranded, competitor-branded, own-brand
base_promptyesexact text
variant_type / variant_valuenosegment, role, constraint, year, persona
segmentnofree text
engine_scopenoall, or a list
added_on / retired_onyes / noISO dates; editing a prompt = retire + add
notesnosource of the prompt (sales call, ticket, fan-out)

2. Run log (runs.csv)

Required: run_id, prompt_id, engine, tier, locale, collection_method, run_number, timestamp, mentioned, recommended, cited_owned_domain, status. Optional: in_initial_search (0/1/unknown), cited_url, competitor_names, answer_text, fanout_queries, persona_cohort.

  • collection_method is ui (the consumer product) or api. Never compare the two.
  • tier is the product tier the run used (free, plus, pro, api-model-name).
  • status is ok or failed; failed runs are collection failures, never lost visibility.
  • persona_cohort is blank for clean sessions; otherwise the cohort label.

3. Events, kept separate

EventDefinition
in_initial_searchthe brand name appeared in the engine's own background queries (only where observable)
mentionedthe brand appears in the answer text
recommendedthe answer selects or endorses the brand, not merely lists it
cited_owned_domaina link in the answer points at a domain the brand owns
description_accuracythe answer's description of the brand matches an approved fact sheet (scored separately)
citation_supportthe cited page supports the claim it's attached to (supports / partial / contradicts / unrelated)

4. Comparison rule

Series key = prompt_id + engine + tier + locale + collection_method (+ persona_cohort). Anything that differs on the key is a different series, never a change.

5. Thresholds and reporting

  • Per prompt per week: "won" when the event occurred in at least 3 of 5 completed runs. Fewer than 5 completed runs: excluded and listed under coverage.
  • Rates are reported by brand_scope and class, never blended. Shortlist inclusion (mentioned, recommended) on unbranded and competitor-branded prompts only. Own-brand prompts report recommendation, citation and accuracy only.
  • Every rate carries its cell size (answers) and an interval. About 300 answers per cell for roughly ±5 points.
  • A threshold crossing is a review flag with raw counts; it becomes a result when it holds two consecutive weeks.
  • Model and engine changes are annotated by date on every chart.

6. Disclosure

Any published visibility number states: engine, tier, locale, collection_method, date range, prompt count, runs per prompt, cell size, and whether persona cohorts were used. Numbers without these are not comparable to anything.

7. What this spec does not do

It does not define how to collect answers, score accuracy, or attribute business outcomes. It defines how to record and compare what was observed.

Changes: propose them as pull requests against the skill repository.