Most ad-ops tools demo badly. The interesting behaviour requires real account history, real strategy context, and a real anomaly to react to — none of which a 30-minute sales call can produce. So the demo defaults to a screenshot deck, and the question “what would this actually do on my account?” stays unanswered until somebody connects real credentials.
mureo 0.8.0 takes a different route. mureo demo init ships four
synthetic scenarios that include a STRATEGY.md, a STATE.json,
and a fully-populated synthetic ad bundle. The agent loads them the
same way it would load real data. There is no OAuth, no XLSX export,
no Google Cloud Console — just a single command:
pip install mureomureo setup claude-code --skip-authmureo demo init --scenario seasonality-trapThen /daily-check in Claude Code, and the agent reacts to what it
finds. The point of this post is to explain what what it finds
actually means, scenario by scenario.
Why a synthetic scenario, not just a sample dashboard
The thing that distinguishes mureo from a generic LLM wrapper is that
it grounds every analysis in STRATEGY.md (persona, USP, brand
voice, goals, operation mode) and STATE.json (what was done, when,
by whom). A demo dataset that is only metrics — a CSV of campaign
spend and conversions — cannot exercise that grounding. The agent has
nothing to reason about beyond the numbers.
Each mureo demo init scenario therefore ships three things:
- A business context — strategy file and operating posture for a plausible small or mid-size advertiser
- A history —
STATE.jsonwith an action log of past adjustments, including some that were mistakes - Synthetic platform data — campaign / ad-set / search-term-level numbers that are deterministic across runs (the same scenario produces the same bundle)
The numbers are tuned so that the correct analysis is non-obvious from the dashboard alone but recoverable from the combination of strategy, history, and data.
The four scenarios
1. Seasonality Trap — FlavorBox D2C cosmetics
A small Japanese D2C cosmetics brand, ~JPY 8M / month split across Google Ads and Meta. On Day 22 a Shopify migration silently broke the Meta Pixel — the conversion event still fires but the deduplicated server / browser path drops ~65% of conversions. The marketing manager interpreted the resulting CPA spike as Q1 seasonality and made three escalating bidding decisions over the next 25 days, each of which made things worse: bumped Meta budget +40%, paused the Awareness Carousel, paused the Lead Form ad.
What mureo should surface: the spike is Meta-only while Google
CPA stayed flat — that is a tracking-break signature, not a bidding
problem. There is also a hidden winner (“Sample Box - Free Shipping”)
whose pre-Day-22 results were the strongest in the account, and a
Google Ads search term 敏感肌 化粧水 おすすめ with CVR ~3.5x the
surrounding ad group’s average.
2. Halo Effect — SkyRoof local roofing contractor
A small Japanese roofing contractor, ~JPY 5M / month split roughly 35% Google Search / 65% Meta. The owner believes Google Search phone calls are the workhorse — and reading any single-day report would agree, because last-click attribution credits Google Brand search for almost every conversion.
The truth: Meta retargeting silently warms users into branded searches, with a ~3-day lag. On Day 50 the owner ran a “controlled test” pausing Meta retargeting for 5 days to “prove it was wasted spend”. With the lag, Google Brand-Exact volume dropped 40% on Days 53–57. Day 55 Meta resumed; Day 58 onwards Brand-Exact recovered. The damage: ~35 missed calls and a “test” that, read literally, “proves” Meta retargeting is dispensable — the opposite of the truth.
What mureo should surface: the Day 53–57 Brand-Exact dip, cross-referenced against the Day 50 action_log entry. Recommendation: do not cut Meta retargeting; it is upstream of the brand-search calls the owner is mentally crediting to Google.
3. Hidden Champion — PulseGrid B2B SaaS observability
A B2B SaaS observability vendor, ~JPY 6M / month. Headline metrics look fine (blended cost-per-trial ~JPY 18,500 vs target JPY 22,000). Three months of routine optimization actions are in the action_log: budget shifts, creative refreshes, negative-keyword adds. None of them touched the search term hiding the real story.
Buried in the low-priority “Generic - Observability Discovery” ad
group, one long-tail term — kubernetes monitoring open source —
has CVR ~18%, more than 4x the surrounding ad group average. It has
been there for 90 days but is throttled by the ad group’s daily
budget, so it produces only ~5 clicks / day and ~1 trial / day. The
volume looks small, which is exactly why nobody escalated it.
What mureo should surface: outlier detection isolates the term and models the impact of promoting it to its own campaign with 5x budget — projecting ~+104 trial signups / month at the strong existing CVR. This is the kind of finding routine reporting tools systematically miss because they sort by absolute volume, not by CVR-vs-budget gap.
4. Strategy Drift — PulseFit fitness app
A subscription fitness app, ~JPY 5M / month. STRATEGY.md
explicitly forbids three things, codified from past mistakes: no
competitor-name bidding, conversion campaigns optimize for paid
“Subscribed” not “Started trial”, Meta Lookalike stack capped at 3
active variants.
A new growth manager joined on Day 30 and made three changes without logging them — each one violates exactly one of the rules above. Apparent CV count surges after the trial-optimization switch; downstream trial-to-paid rate collapses. The action_log around these changes is empty — and that silence is itself a signal.
What mureo should surface: the STRATEGY-vs-STATE compliance
audit reads each constraint, walks STATE.json campaigns, and
produces a list of violations with start dates and JPY-impact
estimates. None of these are reachable through metric dashboards
alone because each violation looks like a normal optimization in
isolation.
What the demo shows that a sales call can’t
The four scenarios are deliberately not edge cases. Each one is a shape of mistake that small advertisers actually make — tracking breaks attributed to seasonality, attribution illusions, throttled winners hiding in low-priority ad groups, silent strategy drift under handoff. They are the cases where “the metrics look fine” and the loss is structural.
The point of running them locally is to see how the agent argues
through them — what it cites from STRATEGY.md, what it pulls from
the action log, how it qualifies a recommendation. That is the
behaviour you cannot evaluate from a screenshot.
Switching scenarios
Each scenario is a self-contained workspace. To switch:
mureo demo init --scenario halo-effect --forceThe bundle is regenerated deterministically — same inputs, same numbers, same history — so an evaluation can be reproduced and shared without exporting any real-account data.
When you are ready to point the same agent at your own account,
there are two paths: mureo byod import bundle.xlsx for a read-only
diagnosis from an XLSX export, or mureo auth setup for the full
OAuth flow with execution rights. The agent and workflows do not
change between modes; only the data source does.
The four scenarios shipped here are versioned with the OSS release;
they were introduced in mureo 0.8.0 and live under
mureo/demo/scenarios/
in the source tree. New scenarios will be added as the diagnostic
knowledge base grows.