Home › Facebook campaign active but not spending
Your Facebook campaign is Active but not spending. Here’s why.
Ads Manager says Active. Spend says $0. Meta rarely tells you which of the six reasons it is — and one of them is a fault the API accepts and silently never runs. Here’s the triage, in order.
✓ No credit card · ✓ 5 free campaigns/month · ✓ Dashboard, Google Sheets & your AI assistant
Short answer
A Meta campaign that is Active but spending $0 is usually one of these: a daily budget too low to win the auction, a bid cap set below market cost, an audience too small to serve, a schedule that has not started, an ad still in review, or a silent construction error where the API accepted a setup it will not actually run. Check them in that order — budget and bid resolve most of them.
| Cause | What you see | Fix at |
|---|---|---|
| Budget / bid too low | Active, $0 or under-spending | Ad set |
| Audience too narrow | Zero or throttled delivery | Ad set |
| Schedule not started | Active now, serves later | Campaign |
| Stuck in review | Never leaves “In review” | Ad |
| Silent construction error | Publishes “successfully”, never runs | Pre-flight |
Work top to bottom. It’s a triage — most zero-spend campaigns resolve in the first two rows.
Delivery diagnostics
Active, but the money isn’t moving
Why is my Facebook campaign Active but spending $0?
“Active” only means Meta accepted the campaign and nothing is currently paused or rejected. It does not mean the auction is serving your ads. When spend sits at zero, it is almost always one of four things, in order of likelihood: your daily budget is too low to win the auction for your optimization event, your bid cap is set below what the auction currently costs, your audience is too small for Meta to serve, or the ad is still pending review.
Check ad-set status first, then bid, then audience size. Raising the budget or loosening the bid fixes most zero-spend campaigns before you touch anything else.
Does “Active” actually mean my ad is running?
No. Active is a configuration state, not a delivery state. An ad set can read Active while delivery is blocked by a future start date, a Learning Limited status, a disapproved ad sitting inside it, or a construction fault the API accepted but the delivery system refuses to run. The number that tells you the truth is impressions, not the Active label.
If impressions are zero and stay zero, treat it as a build problem, not a performance one.
Why won’t my ad set spend its full daily budget?
Partial spend is the auction telling you it cannot find enough impressions worth your bid. Three causes account for nearly all of it: the audience is too narrow, the bid cap is too tight, or the optimization event is too rare for Meta to pace spend against.
Widen the audience or ease the bid. Adding more budget on top of a supply problem does nothing, because the constraint is availability at your price, not the budget number itself.
Could a schedule or bid cap be stopping spend entirely?
Yes, and both are easy to miss. A campaign with a start date in the future shows Active today and simply will not serve until that date arrives. And call-optimized or manually-bid campaigns can flatline when a bid cap is set below the live auction price — the campaign is willing to spend, but never wins an impression.
Check the schedule start, then confirm whether you are on a manual bid. If you are, either raise the cap or switch to automatic bidding to confirm the auction can clear.
Everything above is a setting you can check by hand. The next one isn’t.
Sometimes a campaign spends $0 not because of a budget, a bid, or an audience — but because Meta’s API accepted a setup it was never going to run, and told you nothing. Adbloop validates that whole chain before you publish, one launch or 150 at once.
See how the pre-flight check works →Free plan · no card · every campaign lands paused until you approve it.
The one Meta never warns you about
When $0 spend is a silent API failure
When is zero spend a silent construction error, not a settings problem? Silent
This is the case that wastes the most time, because you keep adjusting budgets and audiences on a campaign that was structurally incapable of spending from the moment it launched. Meta’s API returns “success” on publish, the campaign goes Active, and then it silently refuses to deliver because a downstream setting is invalid for the objective you chose. There is no banner and no email — just spend stuck at zero.
The tell is timing: if the campaign served nothing from the very first hour, look at how it was built, not how it is performing. A performance problem ramps down. A construction fault never ramps up.
A documented case: a Leads campaign with no form attached
Build a Leads campaign with the conversion location set to Instant Forms, but without actually attaching a form. Everything saves. The campaign goes Active. Ads Manager shows no warning anywhere. The ad has no form to open, so it is structurally incapable of producing a lead — and often incapable of spending against the optimization goal. The only symptom is a campaign that sits at zero while you assume it is live.
Anyone building one campaign by hand usually catches this by eye. Anyone duplicating a campaign, importing a sheet, or launching in volume will not. Adbloop blocks the combination before it ever reaches Meta.
Adbloop FIX #104 · reproduced against live ad accounts on Meta Marketing API v25.0How do I stop this happening across a bulk launch?
At volume, zero-spend faults multiply and hide. One malformed row fails while the rest succeed, so the batch looks fine until you check spend per campaign. The only reliable defense is to validate every campaign against the known failure modes before it reaches Meta, check the account’s remaining rate-limit capacity, then create everything paused so nothing spends before you have looked at it.
That is exactly how Adbloop launches: the same 108 documented fixes enforced pre-flight, across a 150-campaign bulk run from a dashboard, Google Sheets, or Claude and ChatGPT.
Related reading: the full 15-point “why Meta ads silently fail” diagnostic and the destination_type error explained.
Stop debugging zero-spend campaigns one at a time
Most zero-spend campaigns are a budget, a bid, or an audience — fixable in minutes. The expensive ones are the silent construction faults Meta accepts and never flags. Adbloop checks all 108 of them before you publish, so a campaign that goes Active is a campaign that will actually run.