In shortA campaign that is live and has spent exactly nothing has a delivery blocker, not a performance problem — it is almost always a rejected ad, a paused parent, a schedule that has not started, an audience too small to serve, or an account-level billing hold, and none of those are fixed by editing the creative or the targeting.
This is the quietest expensive problem in an ad account, because nothing looks wrong. There is no bad cost per lead, no falling click rate, no alarming graph. The campaign sits there marked Active, and a report that averages performance across the account will not mention it at all, because it contributed nothing to the average.
It is also the one finding where a number at zero is a measurement rather than a small sample. Almost every other judgement about a campaign gets less reliable as the numbers get smaller. This one gets more reliable: ₹0 across a full week is not a hint that delivery might be weak, it is proof that delivery did not happen.
It is a blocker, not a performance problem
Everything you would normally reach for — new creative, wider targeting, a higher budget — changes what happens once a campaign is in the auction. A campaign at zero spend never reached the auction. Editing the creative on it is like changing the menu of a restaurant whose front door is locked.
So the job is not to improve anything. It is to find the one thing standing between this campaign and delivery, and there are only a handful of candidates.
First: is it this campaign, or all of them?
Before looking at the campaign, look at the account. If every campaign in the account is at zero over the same window, the cause is account-level and nothing inside the campaign will fix it — a failed payment method, a spending limit already reached, an account under review, or a disabled ad account.
This one check saves the most time of anything on this page, because the instinct is always to open the campaign that is at zero rather than to notice that its neighbours are too.
Then, in order of how often it is the answer
- A parent is paused. The ad set or the campaign above the active ad is off. Meta will happily show you an Active ad inside a paused ad set, and the ad's own status is the one you are most likely to be looking at.
- The ad is in review or was rejected. A rejected ad does not move its campaign out of Active. Check the ad's delivery status, and check Account Quality for rejections across the account.
- The schedule has not started, or has ended. Easy to miss when a campaign was built in advance, and especially easy across timezones, since the schedule runs on the ad account's timezone rather than yours.
- The audience cannot be served. Too small after exclusions, or an exclusion list that now covers the whole audience. This shows as a delivery status about audience size rather than as an error.
- The budget cannot win anything. A daily budget far below what a result costs in this auction, or a bid cap set under the going rate, leaves the campaign eligible and never winning.
- The creative is still processing, or the destination is broken — a lead form that was deleted, a page unpublished, a link to a dead URL.
How to check it
In Ads Manager, add the Delivery column and read it at all three levels — campaign, ad set and ad — rather than only the one you opened. Meta usually names the blocker there in plain language, and the level that names it is the level the problem lives on. If Delivery says Active at every level and spend is still zero, go to Account Quality for rejections, then Billing for a payment or spending-limit hold.
What to do about it
Fix the blocker and change nothing else. The temptation once you are inside a campaign that has done nothing for a week is to improve it while you are there. Resist it: you have no performance data on this campaign, so any edit you make is a guess, and it will be indistinguishable from the fix when you read the results next week.
One thing worth doing afterwards is checking how long it sat there. A campaign that has been at zero for a week was almost certainly at zero on day one, which means the check that would have caught it is a check at launch, not a check now.
When Admetriq raises it
The actual rule, so you can hold this page against what you see rather than take its word for it.
- Fires when the campaign is live and has spent exactly ₹0 across the last 7 days.
- It is returned on its own and stops the rest of the pass for that campaign: with no spend there is no cost per result, no click rate and no frequency to judge, so every other rule would be reading an empty window.
- Carries the highest confidence in the system, 0.93, and is the only finding whose confidence is fixed rather than scaled by how much data there is — here a number at zero IS the measurement, not a small sample.
- Raised as a warning rather than critical: nothing is being spent wrongly. What is lost is the time the campaign is not running.
Most often mistaken for
Spending with no leadsspend_no_leads
Look at spend before anything else, and read it as exactly zero or not. Exactly ₹0 is this finding: the campaign never entered the auction, so nothing about your offer or audience has been tested yet. Any spend at all with no results is the other one, where the campaign is running and the problem is what it is buying.