# How to diagnose a Meta ad set that stopped spending

> Tier: deep. Full contract: quantified decision rules and evidence requirements.

The fixed checklist for under-delivery on Meta: diagnostics, audience, schedule, budget and auction, in the order that finds the constraint fastest.

**Intent.** Name the binding constraint on a Meta ad set that will not spend, using Meta's own diagnostics before any theory.

## When to use

- An ad set spends far below budget.
- Delivery stopped without anyone touching the account, apparently.

## When not to use

- Accounts in payment failure: fix billing first, nothing else matters until then.
- Deliberate cost-cap strategies, where under-delivery is the design working.

## Sources

Required: Meta Ads

## Preconditions

- The ad set identified; the account ticked.
- Enough history to know what normal delivery looked like.

## Inputs

- `adset` (required): The ad set under diagnosis.

## Procedure

1. Read Meta's own delivery diagnostics for the ad set first. — tools: `meta_get_delivery_diagnostics`
   Meta usually names the constraint outright; the rest of the pass verifies it.
2. Read the ad set: status, schedule, budget mode, bid strategy. — tools: `meta_get_adsets`
3. Read audience size and overlaps. — tools: `meta_get_audience_details`, `meta_get_audiences`
4. Read recent activity: edits reset learning and throttle delivery. — tools: `meta_get_ad_activity`
5. Read insights for the frequency and CPM trend before the stop. — tools: `meta_get_insights`

## Decision rules

- **When** Diagnostics name a constraint (audience too narrow, bid too low, learning limited) → **conclude** That is the finding; quote it and size the fix.
- **When** The activity log shows edits within 48h of the slowdown → **conclude** Learning reset is the default explanation; expect 3 to 7 days to restabilise before other fixes.
- **When** Frequency was climbing and CPM rising before the stop → **conclude** The audience is saturating; the fix is audience or creative, not bids.
- **When** A cost cap or bid cap is set below recent CPA → **conclude** The cap is the constraint working as designed; the decision to raise it is a strategy call, not a bug.

## Evidence requirements

- The diagnosis quotes Meta's diagnostic string when one exists.
- Every explanation is dated against the delivery drop.

## Human approval boundary

- Raising caps, widening audiences or resuming ad sets are Safe Writes after human confirmation.
- Structural rebuilds are proposals with expected side effects stated.

## Failure modes

- Multiple constraints at once: fixing the first named one may only promote the second; re-run after each fix.
- Weekend and seasonal auction swings mimic delivery problems; compare against the same weekday last month.
- Campaign budget optimisation moves money between ad sets by design; an ad set starving under CBO may be the system working.

## Output

- **Constraint**: The named binding constraint with Meta's own diagnostic.
- **Fix**: The proposed change, sized, with its Safe Write preview if applicable.
- **Expectation**: What delivery should do after the fix, and when to re-check.

## Related

- Skill: [campaign-anomaly-investigation](https://www.getmcpads.com/skills/campaign-anomaly-investigation.md)
- Skill: [creative-fatigue](https://www.getmcpads.com/skills/creative-fatigue.md)
- Guide: [campaign-audit](https://www.getmcpads.com/guides/campaign-audit.md)
