AdBlueprint
Strategy
meta ads
delivery
ads manager

Why are my Meta Ads not delivering? 7 causes and how to fix each one

Meta Ads active but not spending? There are 7 delivery killers — each with a different fix. Check these in order before you rebuild everything.

AdBlueprint Team 5 min read

Your ads say "Active." Your spend says zero. And you've been staring at Ads Manager for two days wondering what's actually broken.

The typical move is to delete everything and rebuild — which almost never works, because the underlying cause is still there. There are 7 things that kill Meta ad delivery. They all look the same from the outside (no spend) but need completely different fixes. Check them in order before touching anything.

Start here: read the Delivery column

Open Ads Manager → find the "Delivery" column at the Ad Set or Ad level. If it's not there, go to Columns → Customise Columns → search for Delivery → add it.

The statuses you'll see:

That status tells you which of the 7 causes you're actually dealing with.

1. Budget too low to compete in the auction

Meta is a real-time auction. Every impression is a live bid against every advertiser targeting the same person. If your budget's too thin, you can't compete — and Meta simply doesn't spend.

If you're working with a tight budget and can't hit that floor, switch your objective to Traffic or Engagement first. The auction entry cost is significantly lower, and you can build Pixel data before moving to Purchase optimization.

2. Audience too small

An audience under 100,000 people doesn't give Meta enough room to bid efficiently. Stack too many interest layers — narrow by age, gender, and location — and you can end up with 30,000 people. That either delivers erratically or not at all.

Check the Audience Size indicator inside your Ad Set settings. For cold prospecting, you want 500,000+ people. Retargeting audiences can be smaller because the intent is already there.

3. Ad stuck in review

Most ads clear Meta's review in under 24 hours. If yours is still "In Review" after 48 hours, the system has genuinely stalled — it doesn't mean your ad violated anything.

Two-step fix: duplicate the ad, change one word in the copy, and republish. If the original comes back "Rejected," read the reason in View Details. Vague result guarantees ("lose weight guaranteed") and health before-and-after images are the most common triggers.

4. Ad set in Learning Limited

Learning Limited means your ad set isn't hitting 50 optimization events in 7 days. Meta doesn't have enough signal to know who to show your ad to — so it pulls back on delivery.

5. Audience overlap across ad sets

If two ad sets are going after similar audiences, Meta picks one to deliver to — whichever has historically performed better. The other one gets almost nothing.

Use the Audience Overlap tool in Ads Manager (Tools → Audience Overlap) to check. Overlap above 20–25% across ad sets usually explains why one is spending and the others aren't. Consolidate the overlapping ad sets or separate your targeting clearly enough that they're chasing different people.

6. CBO pulling budget away from weaker ad sets

In a CBO campaign, Meta allocates dynamically — concentrating budget on whatever ad set looks best right now. The "losing" ad set never gets enough exposure to prove itself, even if it would have won with more time.

Fix: set a Minimum Daily Spend on each ad set inside the CBO campaign. This forces Meta to give every audience a fair shot before the algorithm locks in its call.

7. Payment failure or spending limit hit

The simplest cause — and the one founders forget to check. An expired card, a reached Account Spending Limit, or a failed payment freezes every campaign at once. Everything shows as "Active" but nothing spends a cent.

Check: Ads Manager → Billing → Payment Activity. If there's a red flag there, nothing else matters until it's resolved.

Quick reference

CauseSignalFix
Budget too lowActive status, near-zero spendRaise to $5–10/day minimum per ad set
Audience too smallSize under 100KBroaden interests, remove narrow layers
Ad in review"In Review" for 48+ hoursDuplicate + minor copy tweak
Learning LimitedStatus shows Learning LimitedIncrease budget or switch to easier objective
Audience overlapMultiple ad sets, one gets all spendConsolidate or separate targeting clearly
CBO budget pullAd set spend = $0 in CBOSet Minimum Daily Spend per ad set
Payment failureAll campaigns frozen at onceCheck Billing → fix payment method

What to do next

Checked all 7 and still can't pinpoint it? Run your account through AdBlueprint's Campaign Health check. It surfaces delivery issues in order of likelihood — so you're not chasing audience overlap for an hour when the real problem is an expired card from last month.

Frequently asked questions

Why does my Meta ad say Active but show zero spend for two days?
Active just means the ad set isn't paused — it doesn't guarantee delivery. The most common causes are high Audience Overlap (Meta is concentrating spend elsewhere) or a CBO campaign starving weaker ad sets. Check the Delivery column for the specific status before making any changes.
What's the minimum daily budget to get Meta Ads to deliver?
For cold audiences optimized for Purchase, the practical floor is $5–10/day per ad set. Below that, your ad set won't complete the Learning Phase — which needs roughly 50 purchase events in 7 days. If your budget is tighter, switch to Traffic or Engagement objective where auction costs are lower.
My Meta ad has been In Review for over 48 hours — what's going on?
Most ads clear review within 24 hours. Beyond 48 hours usually means the system has genuinely stalled, not that your ad violated policy. Duplicate the ad, tweak one word in the copy, and republish. If the original comes back Rejected, click View Details for the specific reason — vague result guarantees are the most common trigger.