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/toCompare 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
| Check | Signal | Source |
|---|---|---|
| Creative fatigue | 3d CTR < 70% of 30d CTR, >1,000 impressions in 3d | thresholds |
| Audience saturation | frequency > 3.5 prospecting, > 6 retargeting | thresholds |
| Learning reset | fewer than 50 conversions in 7d on an ad set that used to be past it — someone edited the budget | thresholds |
| Auction cost | CPM up while CTR held — you are paying more for the same attention, not being ignored | |
| Delivery stopped | entity paused, budget cut, or campaign past its end date | |
| Tracking | conversions to zero while clicks held. Suspect the pixel, not the ads | |
| Seasonality | the same window last year or last month, if the data reaches back | |
| Stale data | stale_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
**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.
nullis not zero. ROAS isnullat zero spend, CPA isnullat 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.