Facebook Ads Not Delivering: The 12-Point Checklist
An ad set says Active, the budget is there, and impressions sit at zero - or at 5% of what the budget should buy. I run the same 12 checks every time this happens in our accounts, in the order of how often each one turns out to be the cause. Most cases are solved by point 3; the ugly ones live at points 10-12. Every point has a one-minute check and the fix that actually works, not "wait for the algorithm".
First, define what "not delivering" means in your case
Three different problems hide behind "my ads aren't delivering". Pull Delivery, Impressions, Amount spent and Reach for today and yesterday, and pick your bucket:
- Zero impressions. The ad set never entered an auction: something is off, unpaid, unapproved, or scheduled for later (points 1, 3, 6, 8, 12).
- Underdelivery. Spend sits at 5-40% of budget: bid too low, audience too small, or you're competing with yourself (points 2, 4, 5, 7, 9).
- Delivery with no results. Spend is fine, conversions are zero: tracking or optimization (point 10).
One timing rule first: a freshly approved ad set takes 1-4 hours to log its first impressions, and reporting lags by 30-60 minutes. Approved under four hours ago? Do nothing yet.
The 12 points at a glance
| # | Cause | Typical symptom |
|---|---|---|
| 1 | Ad set off, ended, or in learning | Zero impressions, still Active |
| 2 | Spending limit or daily cap | All campaigns underspend equally |
| 3 | Billing failed | Everything stopped at once |
| 4 | Audience too narrow | Burst, then trickle |
| 5 | Bid or cost cap too low | 5-20% of budget spent |
| 6 | Ad rejected or in review | In review / Rejected |
| 7 | Overlapping ad sets | One ad set eats the budget |
| 8 | Schedule or time zone | Only some hours, or not yet |
| 9 | Placement exclusions | Tiny reach, high CPM |
| 10 | Rare or missing pixel event | Learning limited, no results |
| 11 | Low quality ranking | CPM 2-3x average |
| 12 | Account or Page restriction | Banner at top, all ads dead |
Points 1-3: nothing runs because something is switched off
1. Ad set in learning, paused, ended, or scheduled. Even Learning limited still delivers, just less efficiently; zero impressions with a green Active status means the switch is off at a level you're not looking at. Check: the Delivery column at campaign, ad set, and ad level - the tooltip on "Not delivering" names the reason. Fix: turn on all three levels, extend an expired end date, and remember duplicates start Paused. If learning is genuinely stuck, the learning phase guide shows how to feed it 50 events in 7 days.
2. Account spending limit or Meta's daily cap. The lifetime limit you set yourself stops everything the minute it's reached; the daily cap Meta puts on new accounts ($50-250/day is typical) makes every campaign underspend by the same percentage. Check: Billing & payments → Account spending limit; the daily cap isn't shown anywhere - look for account spend flatlining at the same number daily. Fix: raise or remove the lifetime cap (effective within minutes); the daily cap only grows with on-time billing history. If a $50/day cap is blocking a launch, agency accounts with established limits are one way around it - ask us.
3. Billing failed. Every campaign stops at the same minute, with a red payment banner at the top of Ads Manager. Check: Billing & payments → Payment activity. Fix: pay the balance manually, add a backup payment method, and wait - delivery resumes on its own within 15-60 minutes of a successful charge. A failed charge also resets the payment threshold ladder ($25 → $50 → $250 → $750), so you get charged more often for a few weeks.
Points 4-6: the auction won't take your ad
4. Audience too narrow. Check: the estimated audience size in the ad set. Under roughly 1,000 people Meta won't deliver at all; under 50,000 in a tier-1 country you get a burst of impressions, then a trickle at a rising CPM. Usual culprits: stacked AND interests, exclusions piled on a lookalike, custom audiences smaller than you think. Fix: drop the exclusions first, then the narrowest layer. For cold traffic in a tier-1 geo at $50/day I want 500,000+ people; broad plus Advantage+ audience beats a hand-built 80,000-person stack nearly every time.
5. Bid cap, cost cap, or ROAS floor too low. The classic Active ad set spending $3 of a $100 budget. Check: ad set → Optimization & delivery → bid strategy; compare the cap to the real cost per result on lowest-cost ad sets. A cost cap below your actual CPA, or a bid cap below roughly 1.5x it, sits at near-zero delivery in our accounts. Fix: raise the cap in 20-30% steps every 24 hours, or run lowest cost for 3-5 days to learn the market price, then cap at 1.1-1.2x of it - more in the bidding strategies article.
6. Ad rejected or still in review. Check: Ads tab → Delivery column. Review usually clears within a few hours, 24 at the upper end, longer for new domains, special ad categories, and anything health- or finance-adjacent. Fix: edit and resubmit, or request another review from Account Quality (24-48 hours in practice). Editing a live ad resets review and learning, so duplicate winners instead. A landing page that was down when the reviewer opened it gets a rejection on its own - fix the page first.
Points 7-9: you're limiting yourself
7. Overlapping ad sets. Meta won't let two ad sets from the same advertiser bid against each other in one auction; only the better-predicted one enters. Symptom: one ad set spends 90% of the campaign while its Active siblings get nothing. Check: starved ad set → Inspect → auction overlap, or Audiences → Show audience overlap; above 30-40% the sets are effectively one. Fix: consolidate, add mutual exclusions where the category allows it, or keep the winner and shut the losers. In CBO this is by design - judge delivery at campaign level.
8. Schedule, dayparting, and the account time zone. Check: ad set → Budget & schedule. Three traps: a start date of "today" that is still tomorrow in the account's time zone (a Pacific-time account launched from Europe starts nine hours later than you expect), dayparting on a lifetime budget quietly limiting delivery to the hours you ticked, and a passed end date, which reads as Completed. Fix: remove dayparting during diagnosis, extend the end date, check the time zone in Ad account settings.
9. Placement exclusions and format mismatches. Check: ad set → Placements. Manual placements with only Facebook feed ticked cut you off from Reels and Stories, a third to a half of impressions in our accounts; a 9:16 video on feed-only placements, or a 1:1 image with no Stories version, shrinks eligible auctions further. Fix: Advantage+ placements while diagnosing, then check the preview per placement and act on any "won't show in some placements" warning.
Points 10-12: optimization and trust problems
10. Pixel event missing, or optimizing for an event that rarely fires. Check: Events Manager → your pixel → is the event you optimize for active in the last 7 days? Purchase optimization on a pixel that logged three purchases last week has nothing to learn from. Run the domain through pixel diagnostics to see which events actually fire. Fix: optimize one step up the funnel (Add to cart, Lead, landing page views) until the ad set can reach 50 events a week, then step back down; add Conversions API so browser-blocked events still arrive.
11. Creative with low quality ranking. Meta scores every ad against competitors for the same audience; ads in the bottom 35% get a smaller share of auctions at a higher CPM. Check: Ads tab → add the Quality, Engagement rate, and Conversion rate ranking columns (populated after 500 impressions). Fix: a new creative with a different hook, not a re-edit, without anything that reads as engagement bait, sensational claims, or withheld information - those trigger low-quality attributes.
12. Account, Page, or profile restriction. Check: Account Quality (business.facebook.com/accountquality) lists every asset with a problem: the ad account, the Page, the Business Manager, and the personal profile managing the account, which can lose advertising access after a string of rejected ads. An unpublished Page also kills delivery instantly, no banner. Fix: request a review where the button exists (24-48 hours typical, up to a week in busy periods), verify identity or business if prompted, and move admin rights to a clean profile if the person is restricted. Prevention is cheaper: how we keep accounts alive.
Still nothing? The reset play
When all 12 come back clean, test the account instead of the ad set. Duplicate one ad into a new campaign: broad targeting (country and age only), lowest cost, Advantage+ placements, $20-50/day, no schedule. Give it 24 hours.
- The duplicate delivers → the original ad set was stuck. Keep the duplicate, archive the original.
- The duplicate doesn't deliver → account-level: re-check points 2, 3 and 12, then the Page and the Instagram link.
- Nothing delivers in a second ad account under the same Business Manager → the restriction is on the BM or the profile; the fix is a review request, not a new campaign.
FAQ
Q: How long should I wait before deciding an ad set isn't delivering?
Four hours for first impressions, 24 hours for a fair read on spend. Under 10% of daily budget after 24 hours with broad targeting and lowest cost means something in points 2-12 is wrong.
Q: Ads Manager says Active but impressions are zero. Why?
Active only means nobody switched that object off; it says nothing about the parent campaign, the ads inside, billing, review, or schedule. Points 1, 3, 6 and 8 explain nearly every such case.
Q: All my campaigns stopped at the same time. Where do I look first?
Anything that hits every campaign at once is account-level: failed payment (3), account spending limit (2), or a restriction on the account, Page, or profile (12). Check those first.
Q: My ad set spends 30% of its budget. Is that "not delivering"?
It's underdelivery: a cap that's too low (5), an audience that's too small (4), or overlap with a sibling ad set (7). Meta's daily cap (2) is the fourth suspect on accounts younger than 60 days.
Bottom line
Run the list top to bottom, one minute per point. In our accounts roughly 80% of "not delivering" cases end at points 1-6: switched off, unpaid, capped, too narrow, or stuck in review. Overlap, schedules, and placements explain most of the rest. Only when all 12 come back clean is the auction itself a suspect; the reset play then tells you whether it's the ad set or the account.