← All posts

  • evaluation
  • demo
  • workflows

Try mureo without an ad account: anatomy of `mureo demo init`

mureo 0.8.0 ships four synthetic scenarios that let an evaluator run the agent end-to-end without OAuth, an XLSX bundle, or even a real ad account. This post unpacks what each scenario is designed to surface and why a synthetic dataset is the right shape for evaluating ad-ops AI.

Try mureo without an ad account: anatomy of `mureo demo init`

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 mureo
mureo setup claude-code --skip-auth
mureo demo init --scenario seasonality-trap

Then /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:

  1. A business context — strategy file and operating posture for a plausible small or mid-size advertiser
  2. A historySTATE.json with an action log of past adjustments, including some that were mistakes
  3. 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 --force

The 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.