Resources for The Definitive 2027 Guide to AEO
The Definitive 2027 Guide to AEO: Companion resources
Everything the main guide points to but doesn't need in the reading path: the forward-looking sections, the risk table, the paste-ready templates, and the full source list.
A. The next surfaces: apps, MCP, product feeds and agent buyers
Everything in the main guide is about being described well in an answer. The surfaces arriving now are about being used inside one. They're early, and I'd put a small bet on them rather than a strategy, but a guide to 2027 that ignores them would be out of date by spring.
Apps in ChatGPT, and MCP for B2B
When OpenAI pulled Instant Checkout, the stated direction was apps: merchants and services running inside ChatGPT, with the transaction on their own rails. Instacart, DoorDash, Target and Expedia were the named examples, and Walmart said it would put its own assistant into ChatGPT and Gemini. The B2B version of the same idea is MCP, the open protocol that lets a model call your product directly. Claude, ChatGPT and most enterprise copilots support it.
What that means for AEO: for a subset of products, the best answer to "how do I do X" will stop being a citation to your docs and start being the model doing X in your product. If a buyer can ask an assistant to pull a report from you, create a record in you, or check a status in you, the model is no longer describing you; it's demonstrating you.
When I'd build it:
- Your product has a clear, bounded set of actions a user would delegate (create, fetch, check, calculate), and an API that already exists.
- Your buyers live in assistants at work (the G2 data says two-thirds of software buyers spend six-plus hours a week in them).
- You can ship a read-only connector first. Read-only is low-risk, fast, and enough to be the product the model reaches for.
When I wouldn't: if your "app" would be a chatbot about your marketing site. That's a landing page with extra steps.
Treat a connector as a fact page that executes: name it consistently, document it publicly and plainly, list it in the directories (ChatGPT's app directory, which OpenAI renamed to plugins in July 2026, and the MCP registries your buyers' tools read), and put the listing in your source map. The directories are official pages on trusted domains, which is exactly what Section 04 says the model scopes to.
Product feeds and agentic storefronts, for anyone who sells things
If you're ecommerce, the onsite work in Section 06 still applies, but the fact page the model wants is the feed. After the March pivot, OpenAI said merchants can share product feeds and promotions so their catalog is fully represented in ChatGPT's product discovery, with Target, Sephora and Nordstrom named as early supporters. Shopify's Agentic Storefronts syndicate a catalog to ChatGPT, Perplexity and Copilot from the admin. Google's Universal Commerce Protocol does the equivalent for AI Mode and Gemini. Amazon Ads began piloting campaign extension into ChatGPT on September 10.
- Feed accuracy decides whether you're eligible and represented correctly. Complete attributes, accurate availability, current prices, real images, GTINs. Walmart reportedly found ChatGPT checkout converted at a third of its own site rate with product-data inaccuracy as a major cause (a trade-press paraphrase of a conference remark; unverified against a transcript).
- Land the click on the product, not the category. The Shero data: stores landing AI visitors on product pages converted at 1.62% vs. 1.06%. Make sure the feed's landing URLs are the PDP with the answer-first anatomy from Section 06C.
- Reviews are retrieval. Product review counts and recency feed both the model's opinion routing and the shopping surfaces.
- Track it separately. ChatGPT product discovery, Perplexity Instant Buy and Google's UCP surfaces each need their own row in the report; the referrers differ and some arrive as Direct.
When the buyer is an agent
The answer engine in 2027 is increasingly not a chatbot a person types into but an agent a company runs. G2's 2026 Buyer Behavior Report has over 60% of B2B buyers using or planning to use AI agents in software evaluation; IDC's August 2026 research, as reported, puts agent use at eight in ten B2B technology buyers; Forrester expects about one in five sellers to face agent-led quote negotiations this year; and large enterprises are wiring procurement bots to their policy documents over MCP. An agent doing evaluation reads different things than a chatbot answering a question: pricing logic across usage scenarios, security documentation it can parse, SLA and contract terms, implementation requirements, renewal options, and whether you're already an approved vendor. G2's read is that agents drop vendors whose claims they can't verify.
That calls for one more fact page, which I'd call the procurement pack: a trust center with security evidence in structured form rather than a PDF behind a form; a pricing page whose logic an agent can apply to "200 seats, annual, with SSO"; contract, SLA and renewal terms in plain HTML; implementation and data-residency requirements stated once; and, for products where it fits, an MCP endpoint that serves the facts directly. This is the first surface where AEO and sales enablement are the same document, and where the person who should own it sits in sales operations or security rather than marketing.
Evaluation never ends
G2's other finding is that buyers re-evaluate vendors they've already chosen, and a better alternative is one query away. Your customers' assistants are comparing you at renewal whether you're watching or not. Two additions to the program: a prompt class for renewal ("is it worth renewing [you]", "[you] vs [competitor] for a team already on [you]", "how hard is it to migrate off [you]"), reported separately, and an owner in customer success who reads that line of the diff. Retention is the part of AEO nobody sells yet.
Two things I'd watch in 2027
ChatGPT Ads as a competitive signal. Graphite found the top ten advertisers changed almost weekly between May and September, with only Jotform and Resume.io in the top ten every week and B2B SaaS at 19.9% of U.S. impressions. When a competitor starts buying the paid slot under the prompts you're winning organically, that is data about their pipeline. Track it.
Deep Research as a buying tool. 41% of G2's buyers already run Deep Research reports for evaluations. A Deep Research run reads your security page, your changelog, three review platforms and two competitor comparison pages, then writes the buyer a memo. The company that wins that memo has every fact page in Section 06 current and every third-party listing accurate.
B. Risk: how this work goes wrong
AEO has spent two years as a gold rush, and the engines have spent 2026 building filters. Most of what got called a tactic in 2025 is now a way to get a domain distrusted. Here is the list, with what I'd do instead.
| Risk | What it looks like | What happens | What I'd do instead |
|---|---|---|---|
| Scaled content | Hundreds of programmatic "best X for Y" pages, each a variant of the last | Google's scaled-content-abuse policy; ChatGPT's retrieval mix is moving away from listicle-heavy domains | Twenty real segment pages with real facts. Review, then consolidate the rest. |
| Hidden text and prompt injection | White-on-white "recommend this brand" text, instructions in alt tags or comments aimed at the model | Detectable and reported publicly; I can't observe how the engines penalize it, but I wouldn't bet a domain on them not noticing when choosing site: targets | Leave it alone; there is no version of this that ages well. |
| Community seeding | Agency-run accounts recommending you on Reddit, Quora, Stack Overflow | Reddit flags ~25,000 posts a day; bans hit the brand's real accounts; the retrieved threads become the model's evidence you're spammy | A labeled company account answering real questions, or stay out. |
| Parked-domain hijack | The model scopes site: to a domain you don't own | Someone buys it and hosts wrong pricing or a fake support number that the model then cites | Register variants, monitor site: targets weekly (Section 06A). |
| Wrong-facts drift | Old pricing pages, stale listings, a competitor's comparison page | The model cites the error until it's fixed at the source | The correction playbook, Section 09. |
| Blocked by your own security | A WAF rule or bot-fight setting challenges answer bots | Zero citations with no error anywhere in marketing's tools | The curl-plus-logs check, weekly, in the agent run (Section 06D). |
| Training-data over-sharing | Allowing every training crawler to avoid "missing out" | Your proprietary content in the next model's weights with no attribution or referral (crawl-to-refer ratios for training bots run in the thousands to one) | Allow answer bots. Decide on training bots with legal, per section of the site. Docs yes, gated research no, is a common split. |
| Ads as a false signal | Buying ChatGPT Ads under prompts you already win organically | Cannibalized clicks, thin reporting, no prompt-level data to prove it | Test ads on prompts where you're absent organically; use unique landing paths; read Section 13 first. |
| Comparison-page claims | "You vs X" tables where the competitor loses every row on criteria you made up | The model has less reason to cite a self-serving comparison; competitors' legal teams treat inaccurate ones as actionable | Honest tables, buyer criteria, dated, with the competitor's real strengths named. |
| Agent autonomy | Agents that publish, post or send without review | One bad generated page or one bad outreach email attributed to you, at scale | Agents observe and draft; a person ships. Section 10's rule. |
One more that isn't a tactic: model-change whiplash. August moved everyone's numbers in a week, and September 22 will move them again. If your reporting can't annotate a model change, your team will conclude their work stopped working, or that it suddenly worked, and both are wrong. The fix is in Section 13, and the habit is to read the diff before you read the trend.
C. Copy-ready templates
Everything the guide describes, in a form you can paste. Replace the bracketed parts. Northwind is the invented company from Section 11.
C1. Pricing page, first screen
# [Product] pricing (updated [Month YYYY])
[Product] has [N] plans. [Plan A] is $[X] per [unit] per month, [Plan B] is $[Y] per [unit] per month, and [Plan C] is custom. There is no platform fee. Annual billing is [Z]% less. All plans include [three things buyers ask about]. [Feature buyers ask about most] is available on [Plan B] and above.
| Plan | Price per [unit]/month | Included | Limits | Best for |
| --- | --- | --- | --- | --- |
| [Plan A] | $[X] | ... | ... | [segment] |
| [Plan B] | $[Y] | ... | ... | [segment] |
| [Plan C] | Custom | ... | ... | [segment] |
## What's not included
[Plain statement of what costs extra or isn't offered, e.g. "[Product] does not offer [thing]. If you need [thing], use [category of tool] alongside it."]
## Frequently asked
**Is there a free trial?** [Yes/No, length, what's included.]
**How is [unit] counted?** [One sentence.]
**Can I change plans mid-cycle?** [One sentence.]
The table must be server-rendered HTML. If your pricing toggle is JavaScript, render the default state in the HTML and let the toggle enhance it.
C2. Segment page, first 150 words
# [Product] for [segment: company size / industry / role]
**[Product] for [segment] with [defining constraint].** [Product] [does the core thing] for [segment], [one concrete capability with a number], and [second capability]. Pricing for a [typical segment size] is $[X] per month on the [Plan] plan. [One sentence on what it doesn't do and what to pair it with.] [Compliance fact with date.] Last updated [Month YYYY].
## Why [segment] chooses [Product]
[Three short paragraphs, each one claim, each with an example or number.]
## What [segment] should know before choosing
[Honest limits. Named alternatives for cases you don't fit.]
## [Segment] questions
**[Question in buyer's words]?** [30 to 60 word answer.]
(repeat for 5 to 8 questions from sales calls and support)
Build one of these only where the segment's facts, pricing or decision criteria differ from another segment's. Same facts, one page.
C3. Comparison page
# [Product] vs [Competitor] ([YYYY])
**Short answer:** Choose [Product] if [condition]. Choose [Competitor] if [condition]. [One sentence on the biggest real difference, with a number.]
| Criterion | [Product] | [Competitor] |
| --- | --- | --- |
| Pricing for [typical segment] | $[X]/mo | $[Y]/mo (as of [date], from their pricing page) |
| [Criterion buyers actually use] | ... | ... |
| [8 to 12 rows; include rows the competitor wins] | ... | ... |
## Where [Competitor] is the better choice
[Two or three honest paragraphs. This section is why the page gets cited.]
## Where [Product] is the better choice
[Same.]
## Migration
[What moving from one to the other involves, in steps.]
Sources: [competitor pricing page link, date checked], [review platform links].
C4. FAQ block spec (for product pages)
Each entry: a question in the buyer's exact words as an H3; a 30 to 60 word answer that stands alone without the page; one concrete detail (number, date, name); no marketing adjectives. Five to eight per page. Wrap in FAQPage schema. Source the questions from the Section 05 prompt set. These are editorial defaults, not engine requirements.
C5. robots.txt
# Answer / search bots: allow. These are what cite you.
User-agent: OAI-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: Claude-User
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: Bingbot
Allow: /
# Training bots: your legal and brand decision. Example split below.
User-agent: GPTBot
Allow: /docs/
Disallow: /
User-agent: ClaudeBot
Allow: /docs/
Disallow: /
User-agent: CCBot
Disallow: /
Sitemap: https://[you].com/sitemap.xml
Check current user-agent names on each vendor's crawler documentation before shipping; they change. Google AI Overviews and AI Mode use Googlebot, so Google-Extended only affects Gemini grounding and training. Anthropic runs ClaudeBot (training), Claude-SearchBot (search index) and Claude-User (fetches a person triggers); allow the last two even if you block the first. Then run the curl-plus-logs check from Section 06D, because robots.txt doesn't override your WAF.
C6. GA4 AI channel group
Create a custom channel group with a channel named "AI assistants" matching Session source with regex:
(chatgpt\.com|chat\.openai\.com|openai\.com|perplexity\.ai|copilot\.microsoft\.com|gemini\.google\.com|bard\.google\.com|claude\.ai|anthropic\.com|you\.com|meta\.ai|mistral\.ai|x\.ai|grok\.com)
Add sources as they appear in your referrer report. Report it beside the self-reported field below; never divide one by the other.
C7. Self-reported attribution field
On the signup or demo form, one question: "How did you first hear about us?" with options that include "ChatGPT or another AI assistant" as its own choice, not folded into "search" or "other." Pass the answer to the CRM as a field.
C8. Prompt-set CSV
See Section 05. Two files: prompts.csv (prompt_id, class, brand_scope, base_prompt, variant_type, variant_value, segment, engine_scope, added_on, retired_on, notes) and runs.csv (run_id, prompt_id, engine, tier, locale, collection_method, run_number, timestamp, in_initial_search, mentioned, recommended, cited_owned_domain, cited_url, competitor_names, answer_text, fanout_queries, status). Required and optional fields are listed in the workflow contract in Section 10 and in the open measurement spec that ships with the skill.
C9. Weekly diff (what the Tuesday message should say)
AEO diff, week of [date]. Model notes: [any engine/model change this week].
Collection: 60 prompts x 5 runs x 4 engines requested; 1,188 of 1,200 completed (12 failures listed below).
Mentioned, unbranded + competitor-branded prompts: ChatGPT 12/39 (was 10/39), AI Mode 9/39 (9), Gemini 7/39 (6), Perplexity 16/39 (17)
Recommended, same prompts: ChatGPT 4/39 (3)
In initial search (ChatGPT only, UI): 9/39 (8)
Review flags (crossed 3-of-5 this week; task only if it holds next week): P014 2/5 -> 3/5; P031 3/5 -> 2/5
Lost citations (3): [prompt] lost [url] on [engine]; ...
New competitor citations (2): [competitor] cited on [prompt] via [domain]; ...
New domains in citations (2): [domain] on [n] prompts, not in source map, owner: [name]
Description accuracy: 4/4 engines correct (was 3/4; Gemini fixed EOR error)
Bot access: verified answer-bot requests 200 on pricing, docs, security
Collection failures (12): [engine, prompt, error]
Shipped last week: [list]. Top 3 by score this week: [list].
C10. Monthly one-page report
The six lines from Section 13, in order, with last month beside this month and a one-line note on each. Nothing else.
D. The resource kit
The files referenced throughout the guide, packaged together as AEO-resource-kit.zip:
| File | What it is | Where it's used |
|---|---|---|
prompts-template.csv | Blank prompt inventory with the schema headers | Section 05 |
prompts-example.csv | Filled Northwind example, eight prompts across five classes | Section 05, Section 11 |
prompt-set-template-and-rules.md | Inclusion, retirement, mix and reporting rules | Section 05 |
source-map-example.csv | Known third-party domains with type and owner | Section 07 |
AEO-measurement-workbook.xlsx | Prompts, Runs (239 synthetic rows), Weekly Summary (formulas: eligibility, 3-of-5 wins, review flags, rates with cell sizes), Business (GA4 beside self-reported), Source Map with scores | Sections 08, 13 |
agency-scope-of-work-and-evaluation.md | Nine workstreams with acceptance criteria, whole-engagement criteria, red flags, the eight questions | Section 12 |
vendor-evaluation-scoresheet.xlsx | Ten weighted criteria, three vendor columns, weighted totals | Section 12 |
aeo-observation-loop.skill | The Claude Code skill: SKILL.md, scripts/aeo_diff.py, samples/, examples/tuesday_diff.md, references/contract.md, troubleshooting | Section 10, Section 14 |
open-measurement-spec.md | v0.1 of the vendor-neutral measurement spec | Sections 05, 10, 13 |
All sample data is synthetic and labeled as such. The workbook's yellow cells are where your own export goes; black cells are formulas.
E. Sources
- Josh Grant, The Definitive 2026 Guide to AEO, Nov 24, 2025
- Graphite, The State of ChatGPT Ads, Sept 29, 2026, via Search Engine Journal
- OpenAI, Testing ads in ChatGPT, Feb 9, 2026 and updates; GPT-6 Astra rollout via CNBC, Sept 3, 2026
- Lily Ray, What We Can Learn from Evolving ChatGPT Fan-Out Queries, Aug 17, 2026 (aggregates Peec AI, Nectiv, Resoneo, Suganthan Mohanadasan, Dan Petrovic)
- Nectiv, ChatGPT tripled its fan-out queries, Aug 2026
- Peec AI, ChatGPT 5.6
site:operator analysis (David Konitzny, July 2026), via Buffy - Suganthan Mohanadasan, ChatGPT decides before it searches, July 2026 (single-account sample)
- Search Engine Land, Inside ChatGPT Search: web.run and fan-out queries, May 2026
- Semrush, Reddit's citations in ChatGPT fall from 3.8% to 0.5%, Aug 26, 2026; Axios, Reddit fades from ChatGPT citations, Aug 20, 2026; Elmo, ChatGPT UI Reddit citations fell to API levels, Sept 11, 2026
- Semrush and Kevin Indig, AI visibility is a topic-level game, 50,000 brands in ChatGPT, July 20, 2026
- Cassie Wilson Clark and Joao da Silva, The Personalization Gap (8,609 responses), Sept 23, 2026, via EIN Presswire; ChatGPT memory-trigger analysis, arXiv 2609.14697
- Cloro, AI visibility sample-size analysis (40% cited-domain repeat; ~300 answers per cell), via Tech Insider, Sept 2026
- CNBC, OpenAI revamps shopping experience after Instant Checkout, Mar 24, 2026
- G2, 2026 AI Search Insight Report, March 2026; The Answer Economy; 2026 Buyer Behavior Report, July 2026
- Ahrefs, AI Overview citations from top-ranking pages drop, March 2026; AI search overlap; ChatGPT vs Google citations
- Opollo, 2026 AI Search Benchmark Report, March 2026
- Shero Commerce, 96 million sessions, AI referral benchmark, Sept 28, 2026
- ABI Research, From SEO to AEO, 2026 (first-party results)
- Plausible Analytics, 2.2K% surge in AI traffic (first-party results)
- Profound customer stories: Ramp, Airbyte, Plaid, MongoDB, WHOOP; Profound on YouTube and Reddit citations
- Otterly, YouTube AI Citation Study 2026; Bing AI Performance Report
- Tinuiti Q1 2026 AI Citations Trends Report, via SaaS Intelligence
- O'Reilly Radar, When Your Buyer Is an AI Agent, Aug 2026 (cites G2, McKinsey, Forrester)
- Cloudflare Radar robots.txt analysis, via TechnologyChecker, Sept 2026; Cloudflare AI-crawler default blocking (July 2025), via Glasp
- llms.txt evidence: Geoly summary of Ahrefs and Limy studies, Aug 2026
- Agency pricing: Third Meta, Influencers Time
- ChatGPT Ads reporting: Umped, Sept 2026; Search Engine Journal, ChatGPT Ads in retail categories, Comscore
- Walmart on ChatGPT checkout conversion, via Stellagent; unverified against a primary transcript
Reach figures for ChatGPT, Gemini, AI Overviews and AI Mode are the platforms' own announcements as reported in the trade press and should be re-checked at publication. Items sourced only through aggregators are marked "via" and should be traced to the original before the piece ships.
name: aeo-observation-loop description: Runs the weekly AEO observation loop from The Definitive 2027 Guide to AEO (StackedGTM). Use whenever the user has an AI-visibility tracker export or prompt-set run data (runs.csv / prompts.csv / a Profound, Peec or similar export) and wants the weekly citation diff, mention and recommendation rates by prompt class, review flags, lost citations, new cited domains, source-map updates, or the "Tuesday diff" message. Trigger on phrases like "AEO diff", "citation diff", "visibility this week vs last week", "which prompts moved", "new domains in citations", "update the source map", "run the observation loop", or any request to turn AI-search tracking data into prioritized tasks. This skill ANALYZES exports; it does not query ChatGPT, Gemini or Perplexity itself.
AEO observation loop
This skill turns a prompt-set export into the weekly diff described in Sections 05, 10 and 13 of The Definitive 2027 Guide to AEO. It reads two CSV files, compares this week's runs with last week's, and writes a Tuesday message plus a task list. It never publishes, posts or sends anything.
What it needs
prompts.csv— the prompt inventory. Columns:prompt_id, class, brand_scope, base_prompt, variant_type, variant_value, segment, engine_scope, added_on, retired_on, notes.brand_scopemust be one ofunbranded,competitor-branded,own-brand. Seesamples/prompts.csv.runs.csv— one row per completed or failed run. Required columns:run_id, prompt_id, engine, tier, locale, collection_method, run_number, timestamp, mentioned, recommended, cited_owned_domain, status. Optional:in_initial_search, cited_url, competitor_names, answer_text, fanout_queries. Seesamples/runs.csvandreferences/contract.mdfor the full field spec and the graceful-degradation rules.- Optional
source_map.csv— known third-party domains (domain, type, owner). New cited domains not in this file get flagged.
If the user has a vendor export in another shape, map its columns to these names first (a short Python or spreadsheet step). Ask the user which environment the export was collected from (consumer UI vs API); write it into collection_method. Never mix the two in one comparison.
How to run it
python scripts/aeo_diff.py --prompts prompts.csv --runs runs.csv [--source-map source_map.csv] [--out out/]
The script:
- Splits runs into the two most recent ISO weeks (or use
--this-week YYYY-Www --last-week YYYY-Www). - Groups by
prompt_id×engine×tier×locale×collection_method. Anything that differs on those keys is a separate series, never a change. - Counts completed runs (
status=ok) per group. Fewer than 5 completed runs → the group is listed under coverage and excluded from every comparison. - Applies the 3-of-5 rule: a prompt is "mentioned" this week when
mentioned=1in at least 3 of 5 completed runs. Same for recommended and cited-owned-domain. - Reports mention and recommendation rates only on
unbrandedandcompetitor-brandedprompts. Own-brand prompts are reported separately on recommendation and (ifanswer_textexists) flagged for the accuracy check. - Flags threshold crossings as review flags with raw counts (this week 3/5, last week 2/5); a flag becomes a task only if
--tasks-froma prior diff shows it held two weeks. - Lists lost citations, new competitor citations, and new cited domains not in the source map.
- Degrades gracefully: missing
answer_text→ no accuracy section; missingcited_url→ no source-level comparison; missingin_initial_search→ "unknown", excluded rather than zero. The output states which sections were suppressed and why.
Outputs: out/tuesday_diff.md (the message, Appendix C9 shape), out/tasks.csv (one row per flagged change with prompt, engine, evidence run ids, cited URL, proposed change, owner placeholder, retest date = +14 days), out/coverage.csv.
What to do with the output
- Paste
tuesday_diff.mdinto Slack as-is. Do not summarize it further; the counts are the point. - Open
tasks.csv. For each row, fillownerand adjustproposed_changebefore anyone acts. A person checks every proposed change against the approved fact sheet before publishing or sending. - Add new domains to
source_map.csvwith atypeandowner. - Re-run in 14 days on the retest prompts; a flag clears when it holds for three consecutive weeks.
What this skill does not do
- It does not collect data. Pair it with a tracker that exports per-run rows, or with a manual run log.
- It does not classify accuracy. It lists own-brand prompts with
answer_textfor a human (or a separate step) to score against the fact sheet. - It does not decide what to ship. The prioritization score (Section 08) is applied by a person to the tasks file.
References
references/contract.md— the full workflow contract: fields, comparison rule, thresholds, failure handling, output, approval, retest.examples/tuesday_diff.md— output produced from the sample files, so you can see the expected shape before running on real data.references/open-measurement-spec.md— the open measurement spec this skill implements (fields, events, comparison rule, thresholds, disclosure). Point vendors and teammates at it when their numbers need to be comparable to yours.
Troubleshooting
- "Cannot run: required columns missing": your export lacks one of the required fields. Map your tracker's column names to the schema in
references/contract.mdbefore running; rename in a spreadsheet or a one-line pandas script. - "No runs found" or everything lands in coverage: timestamps aren't ISO 8601, or every prompt has fewer than 5 completed runs. Check
timestamplooks like2026-10-13T14:07:00Zand thatstatusisokon completed rows. - Every prompt is a review flag: last week and this week were collected with different
tier,localeorcollection_method. The diff treats those as separate series and reports no history; fix the labels, don't compare across environments. - Suppressed sections in the header: optional columns are missing; the script says which. Add
answer_textfor the accuracy list,cited_urlfor lost-citation and new-domain sections,in_initial_searchfor initial-search inclusion. - New domains list is empty but citations changed: pass
--source-map(known domains are excluded by design) and--brand yourbrandso your own domain isn't counted as new. - Expected output: compare your first run against
examples/tuesday_diff.md, produced fromsamples/. The sample run reports 119 requested, 118 completed, 1 failed, 2 short series excluded.
AEO diff, week 2026-W42 vs 2026-W41. Model notes: [fill in any engine/model change this week] Coverage: 119 runs requested, 118 completed, 1 failed; 2 prompt/engine series excluded for <5 completed runs.
Mentioned (3-of-5 rule), unbranded + competitor-branded prompts: ai_mode: mentioned 3/4 (was 1/5); recommended 0/4 (was 0/5); owned-domain cited 3/4 chatgpt: mentioned 4/5 (was 1/5); recommended 0/5 (was 0/5); owned-domain cited 1/5 perplexity: mentioned 2/4 (was 1/5); recommended 0/4 (was 0/5); owned-domain cited 1/4 In initial search, ai_mode: unknown (not exposed) In initial search, chatgpt: 11/25 runs where observable In initial search, perplexity: unknown (not exposed)
Own-brand prompts (recommendation quality only; mentions not reported): ai_mode: recommended 2/3; owned-domain cited 3/3 chatgpt: recommended 3/3; owned-domain cited 2/3 perplexity: recommended 2/3; owned-domain cited 2/3
Review flags (21; crossed the 3-of-5 line, task only if it holds next week): P001 chatgpt mentioned 1/5 -> 3/5 P001 chatgpt cited (owned domain) 0/5 -> 3/5 P001 ai_mode mentioned 1/5 -> 3/5 P001 ai_mode cited (owned domain) 0/5 -> 3/5 P002 ai_mode mentioned 1/5 -> 4/5 P002 ai_mode cited (owned domain) 1/5 -> 4/5 P003 perplexity mentioned 1/5 -> 3/5 P003 ai_mode cited (owned domain) 1/5 -> 5/5 P004 chatgpt mentioned 2/5 -> 4/5 P004 perplexity mentioned 0/5 -> 5/5 P004 perplexity cited (owned domain) 0/5 -> 4/5 P005 chatgpt recommended 2/5 -> 3/5 P005 chatgpt cited (owned domain) 1/5 -> 3/5 P005 perplexity recommended 3/5 -> 1/5 P005 ai_mode cited (owned domain) 1/5 -> 5/5 P006 chatgpt recommended 2/5 -> 3/5 P006 ai_mode cited (owned domain) 2/5 -> 5/5 P007 chatgpt cited (owned domain) 1/5 -> 5/5 P007 perplexity recommended 2/5 -> 4/5 P007 perplexity cited (owned domain) 1/5 -> 4/5 P008 chatgpt mentioned 1/5 -> 4/5 Lost owned-domain citations (1): P001 perplexity lost https://northwind.com/payroll-for-startups-with-international-contractors New competitor names in answers (1): Rippling newly named on 6 prompts (P001;P002;P003;P005;P006;P008) New domains in citations, not in source map, on 2+ prompts (1): saastr.com on 4 prompts (P003;P004;P005;P008), owner: [name] Description accuracy: [score the own-brand answers below against the fact sheet] P005 chatgpt runs R0180;R0181;R0182;R0183;R0184 P005 perplexity runs R0185;R0186;R0187;R0188;R0189 P005 ai_mode runs R0190;R0191;R0192;R0193;R0194 P006 chatgpt runs R0195;R0196;R0197;R0198;R0199 P006 perplexity runs R0200;R0201;R0202;R0203;R0204 P006 ai_mode runs R0205;R0206;R0207;R0208;R0209 P007 chatgpt runs R0210;R0211;R0212;R0213;R0214 P007 perplexity runs R0215;R0216;R0217;R0218;R0219 P007 ai_mode runs R0220;R0221;R0222;R0223;R0224 Bot access: [paste this week's verified-crawler status codes for pricing, docs, security] Collection failures / short series (2): P002 perplexity free en-US ui: 4/5 P004 ai_mode free en-US ui: 4/4 Shipped last week: [list]. Top 3 by score this week: [list].