A clinic owner messaged me at 11pm once, three days into a launch, convinced Meta had shadow-banned him. His ads were approved, active, and had spent ₹0. The actual cause took ninety seconds to find: the campaign schedule had been set in a different timezone and hadn't started yet.
That's the frustrating part of this problem. Nine different causes produce one identical symptom — a green "Active" label next to a spend column full of zeroes. And because the dashboard doesn't tell you which one you've got, most people start changing things at random. Every change restarts the learning phase, so the guessing itself makes the problem worse.
Here's the diagnostic we run on client accounts, in the order that finds the answer fastest.
Key takeaways
- Not spending, not delivering and not converting are three different problems with almost no overlap in fixes. Work out which one you have before touching anything.
- Check billing first. A failed card or a reached threshold stops every campaign at once, which is the fastest thing to rule in or out.
- A new ad set deserves 24 hours before you edit it. Meta's own delivery guidance says the same, and edits reset learning.
- Bid caps and cost caps are the quiet killer. Set below what the auction actually costs, they'll hold spend at zero indefinitely without ever showing an error.
- If the account is restricted, do not open a second one. Request a review instead — a workaround account puts both at risk.
First, work out which of the three problems you have
These three get used interchangeably in forum posts, and they need completely different responses. Spend two minutes here and you'll save two days.
| What you're seeing | What it actually means | Where to look first |
|---|---|---|
| Not spending | Zero or near-zero spend against the budget. Money isn't leaving the account at all. | Billing, schedule, review status, bid caps |
| Not delivering | Some spend, but reach is far below what the budget should buy. | Audience size, frequency, auction competition |
| Not converting | Full spend, normal reach, but the results column stays empty. | Pixel and event setup, offer, landing page, creative |
If your spend column has real numbers in it, skip the rest of this page — you have a conversion problem, not a delivery one, and the last section points you at the right diagnostic.
Most "Meta is broken" messages I get turn out to be a card that expired, a bid cap someone set last month, or an ad set that's been live for four hours. Those are the odds. Start there.
The account-level blockers
1. The payment method failed or the billing threshold hit. This one pauses everything at once, not a single ad set, and it's the reason the whole-account pattern matters — if all your campaigns went quiet together, go to Billing before you look at anything else. Cards issued in India frequently trip on recurring-mandate rules, so a card that worked in March can fail in August without you changing a thing.
2. The account spending limit was reached. Someone sets a lifetime cap on the ad account, forgets it exists, and six months later delivery stops dead the day it's met. Nothing in the campaign view tells you this. It lives in the account settings, and it's worth a look precisely because nobody ever remembers setting it.
3. The schedule hasn't started. The one from that 11pm message. Ad account timezone, campaign start time and your own clock are three separate things, and a start date set in the account's timezone can be hours away from yours. Free to check, and it costs entire launch days when it's missed.
The ad set blockers
4. The audience is too small to spend into. Stack three interests, a custom audience, a 5km radius and a narrow age band, and you can shrink the addressable pool below what a healthy daily budget needs. The tell is an estimated audience size in the low tens of thousands with a budget that assumes far more. Widen one constraint at a time — the one that unblocks spend tells you which was binding.
5. A bid cap or cost cap set below the real auction price. My least favourite cause, because it never throws an error. You've told Meta "don't pay more than X" and the auction costs more than X, so it politely spends nothing, forever. If you inherited an account and it won't spend, check for caps before anything else — they're often left behind by a previous manager.
6. An ad set spending limit fighting campaign budget optimisation. CBO wants to move budget across ad sets. An ad set limit says it can't. The two argue and delivery stalls in between. Pick one mechanism and remove the other.
The ad-level blockers
7. Still in review. Most ads clear quickly, but video, health, finance and anything mentioning results take longer. An ad set holding one unreviewed ad can under-deliver while it waits.
8. A rejected ad you didn't notice. Rejections show at the ad level, not the campaign level, so a campaign can read "Active" while the only ad inside it is disapproved. Clinics get hit hardest here — before-and-after imagery and body-related claims are restricted categories, which is a large part of why we handle Meta ads for dermatology clinics differently from ecommerce.
9. Constant edits restarting the learning phase. Meta needs a run of conversion events before delivery settles, and its published guidance puts that at roughly 50 optimisation events per week per ad set. Every meaningful edit sends the ad set back to the start. Three edits in a day means an ad set that never gets to a stable state — which looks exactly like a delivery problem, and isn't one.
Ad account restricted? What actually happens next
A restriction stops delivery across the whole account while campaigns keep showing as active — which is exactly why it reads as ads not spending rather than as a ban.
Request a review from Account Quality. Do not build a second ad account to route around it: Meta links accounts through payment methods, business managers and devices, and a workaround account puts the original at risk too. Leave the flagged ads in place while the review runs, because a reviewer opening an empty account has nothing to clear you on.
The order to check things in
Sequence matters more than the list. This order is arranged by how fast each check rules something out, so you spend your first five minutes on the causes that are cheapest to confirm.
| # | Check | How to confirm it | Typical fix time |
|---|---|---|---|
| 1 | Billing and payment | Whole account quiet at once; billing shows a failed charge | Minutes |
| 2 | Account spending limit | Account settings show a cap equal to spend to date | Minutes |
| 3 | Schedule and timezone | Campaign start time is ahead of the account clock | Minutes |
| 4 | Ad review and rejections | Open the ad level, not the campaign level | Hours to a day |
| 5 | Bid or cost cap | A cap exists and sits below your normal cost per result | Minutes, then 24h to settle |
| 6 | Audience size | Estimated size is small against the daily budget | A day |
| 7 | Ad set limit vs CBO | Both a campaign budget and an ad set cap are set | Minutes |
| 8 | Learning phase | Edit history shows repeated recent changes | 3–7 days of patience |
| 9 | Account restriction | Account Quality shows a flag | Days, review-dependent |
If you reach step nine and everything is clean, the honest answer is that the ad set is young and the fix is to leave it alone. That's a real diagnosis, and it's the one people accept last.
When "not spending" is really "not converting"
Plenty of accounts arrive with us spending their budget perfectly well and producing nothing. That's a different failure, and it usually sits in creative rather than in settings — the same three ads running for months until the audience stops reacting to them.
The fix is volume of new creative, not another settings audit. Nach Fashion came to us with rising acquisition costs on a small rotation of static ads. Rebuilding the creative pipeline and testing at proper volume took them to 7x ROAS with a 61% drop in cost per acquisition. On Perfect 5's clinic accounts, refreshed creative moved click-through rates between +62% and +226% depending on the branch.
If your ads are spending and the results column stays empty, the diagnostic to run is on whoever is operating the account — that's covered in is my marketing agency doing a good job. And if the bottleneck is that nobody is producing enough new creative to test, that's what our AI UGC agency service exists to solve.
What we do when a client account stalls
Across the accounts we've managed — ₹50Cr+ in ad spend across 280+ brands since 2020 — the pattern holds: the fix is almost never exotic. It's billing, a cap, a schedule, or an ad set that needed to be left alone.
So the protocol is boring on purpose. Run the nine checks in order. Change one thing. Wait a full day. Write down what changed and what happened. Accounts get wrecked by people making four changes at once and losing the ability to tell which one mattered.
If you want a second pair of eyes on a stalled account, we'll look at it and tell you which of the nine it is. Our 5x ROAS guarantee and our India clinic ad benchmarks will tell you whether your numbers are actually off or just feel that way. Meta's own ad delivery troubleshooting guide is worth reading alongside this.
Stalled account? We'll tell you which of the nine it is.
Send us the account and we'll run the diagnostic. No pitch until you've got an answer.
Book a Scoping Call WhatsApp UsQuestions people ask alongside this one
How long should I wait before touching a Meta ad set that isn't spending?
Wait a full 24 hours on a brand-new ad set before you change anything. Delivery ramps unevenly in the first few hours, and every edit to budget, audience, bid or creative restarts the learning phase, which pushes stable delivery further away. The exception is a hard blocker you can confirm in the account — a declined payment method, a reached spending limit, a rejected ad or a schedule that has not started yet. Fix those immediately.
What's the difference between Meta ads not spending and not delivering?
Not spending means the ad set shows zero or near-zero spend against its budget — the money is not leaving your account at all, which points to billing, schedule, review status or a bid that cannot win. Not delivering means the ad set is spending something but reaching far fewer people than the budget should buy, which points to a narrow audience, a high frequency, or competition in the auction. They look similar in the dashboard and have almost no overlap in fixes.
Why did my Facebook ads stop spending after they were working fine?
An account that was spending and then stops usually hit one of four things: the card on file failed or the billing threshold was reached, the account spending limit was met, an ad in the set was rejected on a policy review sweep, or somebody edited the ad set and restarted the learning phase. Check billing first, because a failed payment pauses every campaign at once rather than a single ad set.
Can a small audience stop Meta ads from spending?
Yes. Stacking narrow interests, a small custom audience, a tight radius and a short age band can cut the addressable pool low enough that Meta cannot find enough qualifying auctions to spend the budget. The pattern to look for is an ad set whose estimated audience size sits in the low tens of thousands while the daily budget assumes it can reach many more. Widening one constraint at a time tells you which one was the binding one.
My ad account got restricted. What actually happens next?
Delivery stops across the account and the campaigns keep showing as active, which is why it reads as ads not spending. Request a review from the Account Quality section rather than creating a new ad account, because a second account built to route around a restriction risks both accounts. Reviews commonly resolve within a few days. While you wait, do not delete the flagged ads — a reviewer looking at an empty account has nothing to clear you on.