Diagnose

Find out why a marketing number moved, or why something stopped working.

One question: what changed, and when? A diagnosis is a read plus an argument. Reach a cause, name the evidence, then propose exactly one next step — and let marketing-scale or marketing-launch do it.

Prerequisite: the marketing-os foundation skill.

Method

1. Pin the claim down

"ROAS dropped" needs three things before it can be diagnosed: which entity, which metric, over which window. Ask if any is missing — guessing produces a confident answer to the wrong question.

2. Bracket the change

Pull the same metric over the windows the engine actually computes — 3, 5, 7, 15 and 30 days — with from/to (YYYY-MM-DD). The window where the number stops matching the others is the week it happened.

meta_list_campaigns / meta_list_ad_sets / meta_list_ads   with explicit from/to

Compare against the same length of the preceding period, never against a different-sized window.

3. Decompose before you theorise

A composite metric never moved; one of its inputs did. Walk the chain:

ROAS ↓  →  revenue ↓  or  spend ↑
revenue ↓  →  conversions ↓  or  AOV ↓
conversions ↓  →  clicks ↓  or  conversion rate ↓
clicks ↓  →  impressions ↓  or  CTR ↓
impressions ↓  →  budget ↓, delivery paused, or auction lost (CPM ↑)

Each arrow is answered by a number the read tools already returned. Do not leave the chain until a link actually breaks — that link is the finding, and everything downstream of it is a symptom, not a cause.

4. Check the known causes, cheapest first

CheckSignalSource
Creative fatigue3d CTR < 70% of 30d CTR, >1,000 impressions in 3dthresholds
Audience saturationfrequency > 3.5 prospecting, > 6 retargetingthresholds
Learning resetfewer than 50 conversions in 7d on an ad set that used to be past it — someone edited the budgetthresholds
Auction costCPM up while CTR held — you are paying more for the same attention, not being ignored
Delivery stoppedentity paused, budget cut, or campaign past its end date
Trackingconversions to zero while clicks held. Suspect the pixel, not the ads
Seasonalitythe same window last year or last month, if the data reaches back
Stale datastale_spend_data on any call, or spend data older than 26 hours

5. Widen to the other channels before concluding

This is the step a Meta-only tool cannot take, and it is often where the cause actually is:

  • meta_get_recommendations — the engine may already have flagged it, with its reasoning chain and the exact metrics it cited. Read it before building your own theory.
  • social_list_posts — did organic posting stop? A dead content cadence pulls retargeting pools down a few weeks later.
  • social_list_accounts — an expired token means posts have been silently failing. Check before blaming the ads.
  • google_search_performance — if organic clicks fell in the same week, the cause is more likely the site or the market than the ad account.
  • localfalcon_list_reports — for a local business, a rank slide in the grid and a paid CPA rise are usually the same story.
  • get_brand_profile / list_marketing_assets — did the offer or the messaging change? Check the dates against the break.

Reporting

markdown
**What happened**: <metric> went from <x> to <y> between <date> and <date>.
**Where it broke**: <the link in the chain that actually snapped, with numbers>
**Why**: <cause, with the evidence that distinguishes it from the alternatives>
**Ruled out**: <what you checked that did not explain it>
**Next**: <one action>

Ruled out is not padding. It is what separates a diagnosis from a guess, and it is what stops the user chasing the thing you did not check.

Honesty rules

  • If the data does not distinguish two causes, say both. "CPM rose 40% while CTR held — either the auction got more expensive or the audience saturated; frequency at 2.1 argues against saturation, so probably the auction."
  • If nothing explains it, say nothing explains it. A confident wrong cause costs the user a week.
  • Below 1,000 impressions in the window, say the sample is too small. Small numbers move for no reason.
  • null is not zero. ROAS is null at zero spend, CPA is null at zero conversions. "No data" and "zero" are different findings.
  • Never quote an industry benchmark as the reason something is underperforming.

Something wrong or missing on this page? Tell us and we will fix it.