How Brew reads what ChatGPT, Gemini, Perplexity and Claude say when shoppers ask about a brand's category, who those answers name instead, and the specific page fix it proposes for each gap; it settles that we report only answers we really asked, from the brand's own market, and never guess a score.
Today
What is asked
The questions: 8 shopper questions, at least 5 unbranded, because what an AI says before anyone names the brand is the test brew/reader/stages/answers.js:92-94.
Where they come from, in order: a sourced set from Google suggestions, search volume, threads Brew heard and best sellers; else the brand's last questions so weeks compare; else the model writes them; else a template brew/reader/stages/answers.js:77-95brew/ai-questions.js:51-108brew/reader/stages/answers.js:147.
In the sourced set, the model only picks; the reason for each question is built in code from evidence memory brew-proof-plain-make.
The team can add up to 3 questions its customers ask memory brew-proof-plain-make.
Where from: the brand's market and language, through askMarket; a market still to confirm says so on every answer brew/reader/stages/answers.js:70-71brew/live-watch.js:37.
Who is asked
Tool
How
Price
Source
ChatGPT
treg dataforseo.x.ai-optimization-chat-gpt-llm-scraper-live-advanced, web search forced
Brew's own AI with web search 3, only when the provider is Anthropic
the model's price
brew/reader/stages/answers.js:106-110
Under Gemini today, Claude is not asked, because its answer would be Gemini's labelled Claude brew/live-watch.js:159memory brew-gemini-provider.
Answers are cached a week by treg, so the read, the live watcher and the weekly check share one paid answer brew/treg.js:20-27.
Avoid crawl4ai.ai-search.chatgpt.scrape at 3% success and llm-mentions at $0.10 memory treg-catalog-for-brew.
When
Run
Cadence
Cost
Source
The read's answers stage
On a brand's first read and re-reads
per question per tool
brew/reader/stages/answers.js:1-4
The weekly AI answers check
Every 7 days, retried after 6 hours on failure
about $0.50 a run
brew/live-watch.js:21-24
What we read from each answer
Is the brand named, in any of its names, so "PUMA India" counts when an answer says "Puma" brew/reader/stages/answers.js:112-120brew/reader/stages/answers.js:170.
Which rivals and other brands are named, and which sites are cited, and whether the brand's own site is cited brew/reader/stages/answers.js:118-121.
Two ledger facts: AI answers that name the brand, and unbranded AI answers that name it brew/reader/stages/answers.js:131-132.
The standing
ai-standing.js builds who the brand is up against from who the answers actually name, where the shopper named no brand; the read's rivals stand in only without that pass brew/ai-standing.js:36-44.
A tool that failed is no answer, never counted as "not named"; a failed check says it couldn't be read and retries brew/ai-standing.js:33brew/ai-standing.js:64.
The AI answers ring uses one check only, the newest of the read and the weekly run; no bonus points; only tools that answered are named memory brew-ai-ring-one-check.
Improving it
The gap card: one fix per gap, by question kind, pointing at the brand's own product page or a new guide page brew/ai-gap.js:1-32brew/feed-service.js:1144.
Question kind
Fix
Source
compare
A comparison section beside the rival the answers named
brew/ai-gap.js:22
proof
A proof block: what it does, how long, the reviews that say so
brew/ai-gap.js:23
safe
An ingredients FAQ answering in its first line
brew/ai-gap.js:24
price
An FAQ with price and pack sizes
brew/ai-gap.js:25
howto
A two-sentence answer block
brew/ai-gap.js:26
best, other
An FAQ answering in its first line
brew/ai-gap.js:27-28
The Play: the playbook includes a Play on getting the brand cited in AI answers, written first for Arata brew/sources/moves/15 Getting Arata cited in AI answers.txt.
The Brand Book's AI files: every brand gets /<slug>/brand.md, /<slug>/brand.json and /<slug>/llms.txt, an index an AI agent reads first, plus project notes for Claude and ChatGPT in the kit brew/brand-kit.js:1-12brew/brand-kit.js:101.
Cards say what the brand gains, such as "Show your star ratings in Google and AI answers", never the technical step brew/cards-gen.js:258brew/plain.js:90.
Tomorrow
Item
Version
Tag
Real answers only, from the brand's market, sourced questions, one check per ring
v1
Stays
Claude asked again once the provider is Anthropic
v1
Changes
A draft of the fix itself, the FAQ block or comparison section, ready to paste
v1
New
Publishing that fix to the brand's store on a yes
v2
New
Measuring whether a fix moved the brand into the answers, week on week
v3
New
Google AI overviews and AI mode added as a tool
v2
New, Proposed
How we do it
Check a brand's standing on its AI answers sheet, from the card's proof shield, GET /api/tenants/:t/ai-answersmemory brew-proof-plain-make.
Never mix two checks on one card and never add points to a measured ring; test/ai-ring-one-check.test.js guards it memory brew-ai-ring-one-check.
A new AI tool goes into the ask map with its own error branch, and is named only when it answered brew/reader/stages/answers.js:99-110.
Keep the questions stable so weeks compare; change them only through the sourced set, which marks old runs as stale brew/live-watch.js:232.
Questions where the brand moved from not named to named within 4 weeks of a fix
weekly runs
Proposed
Open
Claude in the check. Claude sits out while Brew runs on Gemini, so the check shows three tools. Proposal: ask Claude through the Anthropic key for this one check even while the rest runs on Gemini, about 8 short calls a week a brand.
Weekly check across many brands. About $0.50 a brand a week. Proposal: keep it weekly for design partners and monthly for brands that only had a read.
Google AI overviews. Not asked today. Proposal: probe one treg endpoint for AI overviews on one brand with your yes, then add it if it answers reliably.
Sources
brew origin/main b91e364: reader/stages/answers.js:1-180, ai-questions.js:51-108, live-watch.js:1-37, 149-170 and 183-251, ai-standing.js:1-80, ai-gap.js:1-32, feed-service.js:1144, brand-kit.js:1-12 and 101, treg.js:20-27, cards-gen.js:258, plain.js:90
brew origin/main: sources/moves/15 Getting Arata cited in AI answers.txt