Kelpi

Why are my Facebook ads not delivering?

Approved Facebook ads that aren’t delivering usually trace back to one thing: the ad set can’t exit the learning phase. Meta’s delivery system wants roughly 50 optimization events per week, and when your budget, bids, or audience make that impossible, delivery gets throttled — often to near zero. The other usual suspects are a cost cap set below the market price, an ad quietly stuck in review or rejected, and scheduling, spending-limit, or payment issues.

Symptoms: what you’re probably seeing

  • Ad set shows “Active” but impressions are zero or near zero
  • The Delivery column reads “Learning limited”, “Not delivering”, or stays “In review”
  • Ads were spending fine, then impressions dropped to nothing after an edit
  • A new campaign launched over 24 hours ago still has no spend
  • Some ad sets in the campaign spend while others never start

The likely causes, ranked

  1. 1. The ad set is learning limited

    Audit area: performance

    Meta typically needs roughly 50 optimization events within 7 days of the last significant edit before an ad set exits the learning phase. When the system predicts your ad set won’t get there, it flags it “Learning limited” and delivery stays throttled and unstable — this is the most common reason an ad set is active but barely delivering. The standard fixes are consolidating ad sets, broadening the audience, optimizing for a more frequent event, or raising the budget.

    How to check it yourself in Ads Manager

    Ads Manager → open the campaign → read the Delivery column on the ad set row. “Learning limited” appears in place of “Active”; hover the status for Meta’s own explanation.

  2. 2. The budget is too low to exit learning

    Audit area: budget

    A useful rule of thumb: the weekly budget needs to buy roughly 50 of your optimization events — that is, weekly budget ≥ 50 × your typical cost per result. Optimizing for purchases at a $40 cost per purchase on $10/day can’t mathematically get there. Either raise the budget or optimize for a higher-frequency event.

    How to check it yourself in Ads Manager

    Ad set → Budget & schedule. Multiply your typical cost per result by 50 and compare it with your weekly budget (daily budget × 7).

  3. 3. The audience is too narrow — or overlaps with your own ad sets

    Audit area: targeting

    Tiny audiences — stacked exclusions, small customer lists, narrow geo and age windows — give the auction too few people to work with. Separately, when your own ad sets target the same people, Meta enters only one of them per auction, so sibling ad sets quietly starve each other.

    How to check it yourself in Ads Manager

    Edit the ad set and read the estimated audience size panel. For overlap, compare custom audiences and interest stacks across your ad sets, and use the Inspect view (chart icon on the ad set row) where Meta makes auction-overlap data available.

  4. 4. A bid or cost cap is blocking auction entry

    Audit area: budget

    With a cost-per-result goal or bid cap, Meta only enters auctions it expects to win within the cap. A cap set below the real market price quietly drops delivery to roughly zero while the ad set still reads “Active”.

    How to check it yourself in Ads Manager

    Ad set → Bid strategy. If a cost or bid cap is set, note the value — the standard test is raising it (or switching to highest volume) and watching whether delivery resumes.

  5. 5. The ad was rejected or is still in review

    Audit area: creative

    An ad set can look perfectly healthy while every ad inside it is rejected or still sitting in review. Most ads clear review within 24 hours, and any meaningful edit sends an ad back into the review queue — which is why delivery often stops right after a change. The related fixes below cover review delays and rejections in more detail.

    How to check it yourself in Ads Manager

    Switch to the Ads tab and read the Delivery column per ad. Account Quality (business.facebook.com/accountquality) lists rejected ads with the policy cited.

  6. 6. Scheduling, spending limits, or a failed payment

    Audit area: structure

    A campaign end date in the past, dayparting windows, an exhausted campaign or account spending limit, or a failed payment method all stop delivery silently. A failed payment is the bluntest of these — it stops the whole account, not just one campaign.

    How to check it yourself in Ads Manager

    Check the campaign’s start/end dates and any Campaign spending limit; check the Account spending limit under Payment settings; check Billing & payments for failed charges.

Skip the manual digging

Work the checklist above — or connect your account and Kelpi’s audit names the exact cause in ~2 minutes, mapped to the same six areas: structure, budget, creative, targeting, tracking, and performance.

Run the free audit

Frequently asked questions

Why are my Facebook ads approved but not delivering?
Approval and delivery are separate systems — an approved ad still has to win auctions. Learning-limited status, cost caps below the market price, narrow audiences, schedules, and spending limits all produce “approved but zero impressions”. The Delivery column in Ads Manager names the state your ad set is actually in.
How long before Facebook ads start delivering?
Review usually completes within 24 hours, and delivery typically begins within hours of approval. Expect results to stay volatile until the ad set exits the learning phase, which takes roughly 50 optimization events.
What does “ad set may get zero results” mean?
It’s Meta’s pre-publish estimate that your current settings — budget, bid cap, audience — are unlikely to win enough auctions. Loosen the cap, broaden the audience, or raise the budget before publishing.

Related fixes

More resources