Skip to main content
Each recipe maps a natural question to a tool/signal sequence and an answer framing. Signal names appear here as the agent-facing vocabulary — the user never has to say them. For advisory recipes, keep the evidence → playbook → recommendation shape.
Signal names below are illustrative of the kind of signal used. Always confirm the live catalog with vertical_legend — grain, window, and availability are read at answer time, never hard-coded.

Understand one entity

Brand deep dive

Flow — vertical_resolve → vertical_card → read data_coverage and analysis_volume first → then walk the signal groups: growth · content · paid · launches · reviews · retail · strategy · weaknesses. Framing — open with coverage (“here is how much we actually observe of Brand A”), then the picture per group, then the synthesis. Do not overclaim on thin coverage.

”Is it growing?”

Flow — vertical_card (or vertical_search by signal) reading growth signals: growth_30_60_90, growth_trajectory_class, growth_consistency, follower_growth, engagement_momentum. Framing — categorize into accelerating / steady / stalling / shrinking. Use the trajectory class and consistency together — a single up-month is not “accelerating”.

”Overall trend” for one brand

Flow — bundle across organic + paid + engagement + trend_break + streak. Never reduce it to one arbitrary score. Framing — a multi-dimensional read: “organically X, on paid Y, engagement Z, with a recent trend break in W”. The trend is the pattern across signals, not any single number.

”What changed recently?”

Flow — a change-detection question: trend_break, record_event, streak, follower_drop_alert, growth_spike_event. Framing — lead with the detected changes and when they occurred. Absence of a change signal means “no tracked change”, not “nothing happened”.

”Where is it vulnerable / what next?”

Flow — vertical_card weaknesses + strategy signals, then vertical_knowhow for the interpretation playbook. Framing — evidence → playbook → recommendation. Keep the recommendation traceable to a retrieved weakness.

Discover across the market

”Which brands are growing / weak / changed direction”

Flow — vertical_search filtered by signal_type, then categorize by class/band (e.g. trajectory class, warning-sign flags, direction-change events). Framing — group into buckets, avoid fake ranks — a band is a band. “These sit in the accelerating band”, not “ranked #1–#5”.

Compare entities

Competitive comparison

Flow — vertical_resolve (each) → vertical_compare with aligned signal_types. Framing — start with coverage differences. Do not punish a brand for a missing signal — distinguish “not tracked” from “weak”. Avoid declaring a fake overall winner unless the user defines the criterion.

”Who is best?”

Flow — ask back “best at what?” first. Without a criterion, return a multidimensional read via vertical_compare. Framing — one winner per dimension is honest; a single overall “best” is only valid once the user names the criterion.

Analyze channels

Instagram / content / collaborations / Stories

Flow — vertical_card with channel= set to the relevant channel, reading the channel’s content, collaboration, and Stories signals. Framing — describe cadence, format mix, and collaboration pattern; keep Stories (ephemeral) distinct from feed content.

”Which posts were wow — and why?”

Flow — vertical_search with signal_type: "wow_posts" (or the brand card’s Instagram shelf). Two kinds, separated by wow_type: relative outliers beat the brand’s own median (so small brands surface too), absolute smash posts sit in the market’s top engagement band (a band, not a rank). Market-wide in ONE call (v1.1) — server-side, no client flattening:
Filter by content pattern the same way: {"posts":[{"intent":"behind-scenes"}]} finds every brand whose outliers include a behind-the-scenes winner. Framing — per post: the outlier factor (“4.2x its own median”), the why-material (intent, product, format, timing), and the post link from the evidence payload. The dominant intent across outliers is the actionable pattern — one viral post is luck, three of the same kind are a formula.

Meta Ads analysis

Flow — vertical_card / vertical_search over the paid-media signals: scale, direction, creative, funnel, automation, geo, risk. Framing — synthesize, do not dump every metric. Preserve reporting-lag caveats: a recent, incomplete reach figure is not a confirmed collapse. And remember EU reach is transparency reach, not customers.

Campaign structure & “review my campaign”

Flow — vertical_search with signal_type: "campaign_sample" (add include_details for archive links). Each row carries the quarter’s campaign clusters as structured objects: waves, media mix, CTA, languages, destination, duration, reach. For “here are my campaigns, what should I improve”: extract the same fields from the customer’s input, compare field by field against peer campaigns, then apply the campaign playbooks from vertical_knowhow. Pre-filter the peer set server-side (v1.1) — e.g. only consideration-led campaigns, or only video-led ones:
Framing — rankings are reach-proxy rankings, never “performance” (no conversion data). Long duration plus high reach-per-ad reads as a working creative. Archive deep links may expire once an ad ends — the numbers stand on their own.

Geo & language (“reach in Germany, language in Belgium”)

Flow — vertical_search with signal_type: "geo_reach_profile": per-country EU reach, gender/age per market, and the dominant ad language per market in one row. Framing — reach is DSA transparency reach, country-level only. Cite the market share (“DE carries 31% of EU reach”) and the localization pattern (“advertises in English everywhere except Italy”) — non-localization is itself a finding.

Local intent (cities & zip codes)

Flow — vertical_search with signal_type: "local_targeting": ads using city, zip, or neighborhood targeting. To connect paid with retail: pull the brand’s stockist_footprint / stockist_lookalike and match cities. Framing — this is declared targeting, not measured reach — say “runs N ads targeting Paris”, never “reaches X people in Paris” (city reach does not exist). Local targeting signals store openings, events, or retail pushes; a city with paid push but no linked stockist is a concrete conversation opener.

Targeting

Flow — separate the two questions: declared intent (who the ad says it targets) vs. actual reported reach (who it reportedly reached). The targeting_drift signal carries both sides per quarter, pre-joined. Framing — answer them separately; do not conflate a targeting declaration with an outcome. Divergence usually means Meta’s delivery optimization found a different audience — not that the brand changed its setup.

Perception

Reviewer perception vs. audience voice

Flow — review_sentiment = reviewer/editor perception; audience_voice = comment-section reaction. Framing — keep them separate — don’t substitute one for the other. Reviewers and the audience can disagree, and that gap is itself a finding.

Pricing / aftermarket / founder / retail footprint / retail gap

Flow — vertical_card reading the pricing, aftermarket, founder, retail-footprint, and retail-gap signals. Framing — report each as its own evidence line; retail gap points to where distribution is thin.

Retail growth & leads (“I want to grow in the US”)

Flow — stockist_footprint = who verifiably carries the brand (names, cities, websites, public role emails in the evidence payload). stockist_lookalike = qualified leads: retailers carrying 3+ same-tier brands but not this one, ranked by peer count. For an arbitrary competitor set (“my competition is A, B, C”): fetch each competitor’s stockist_footprint and intersect the lists — overlap count is lead quality. Framing — a lookalike is an opportunity, not a gap claim; when own_stockists_linked is 0, say overlap with the real network is unmeasured. The pool is a tracked extract with uneven density (see the Retail Landscape know-how article for citable pool facts) — absence of a link is absence of evidence. Emails are public role addresses; every list is research output, not a permission to send — outreach rules depend on the recipient’s country.

Analyze markets

Market expansion

Flow — retail_gap → build a shortlist → vertical_benchmark market_density (with dimension_filter{country}) → geographic playbook via vertical_knowhow. Framing — never expand on density alone. Density is paid-media competitive density, not opportunity; combine it with the retail gap and the playbook. Flow — vertical_benchmark industry_pulse (and trend-cluster benchmarks), not a few brand cards. Framing — describe the market-level pattern; do not generalize the industry from a handful of entities.

The advisory shape

For any recommendation recipe, hold the chain visible:
Evidence (retrieved signals) → Playbook (know-how) → Recommendation.