Vazante

Metrics and analysis

Meta Ads not delivering: the causes in order

Why Meta Ads delivery stalls, in order of frequency, and how to tell not delivering apart from not spending and from not being in circulation.

Also available in: Português · Español

"Not delivering" describes three different problems, and most of the time lost to diagnosis comes from confusing them. Before any adjustment, it is worth separating which one you have.

The three symptoms, and which is yours

SymptomWhat the panel showsWhat it is
Not deliveringZero impressions, active statusApproval, audience or configuration block
Not spendingFew impressions, budget left overAuction, audience or bid limitation
Not in circulationStatus other than activeApproval, payment or scheduling

This article covers the first row: zero impressions with the ad set marked active. If your budget is partially spent, the cause is auction competitiveness. If the status is not active, check approval and scheduling before going further.

Cause 1: it is still early

The most frequent one, and the one that triggers the most unnecessary intervention.

A new ad set takes a few hours to start delivering, and the system needs a period to stabilize. Twenty-four hours with no impressions on a new ad set is concerning; three hours is not.

The mistake that makes it worse: touching it during that window. Every meaningful change restarts learning, and an account where someone adjusts the audience twice a day never leaves the unstable state. The explanation is in Meta Ads learning phase.

If the ad set is new and you already touched it today, the answer is to wait.

Cause 2: the ad was not approved

An active ad set can contain a rejected or in-review ad. The ad set shows green and nothing delivers, because there is no eligible piece inside.

Check the status at the ad level, not the ad set level. It is the thirty-second check that resolves the most on this list.

What to do depends on what you find: in review, wait; rejected, read the reason and fix it. Both cases have their own timelines, documented in the notification itself.

Cause 3: audience below the minimum

A very restricted audience does not get served. It happens with stacked filters: a small city, a narrow age range, two mandatory interests, exclusions of several custom audiences.

The panel shows the estimated size at creation, and that is the number to check. When it falls below the operational minimum, the platform warns — and the warning is frequently missed.

The fix is removing one filter at a time, starting with the least essential, and watching the estimate rise. Removing all of them at once fixes delivery and loses the targeting.

Watch one specific case: excluding a custom audience that grew too large. Excluding "everyone who visited the site in 180 days" on a high-traffic account can zero out the available reach without anyone noticing.

Cause 4: budget incompatible with the event's cost

If your historical cost per result is US$ 40 and the ad set's daily budget is US$ 15, the system has no room to find a conversion. Delivery stalls or goes erratic.

The practical rule: the ad set's daily budget has to support several conversions a day at your current cost. Not one — several.

When it cannot, the answer is consolidation: fewer ad sets, each with enough budget, instead of six with too little. The difference between the two structures is in CBO vs ABO.

Cause 5: the optimized event does not happen

An ad set optimizing for purchases on an account making two purchases a week has no signal to learn from. The system delivers little or nothing, because it cannot find a pattern.

Two ways out, in this order:

Change the optimization event to something more frequent and correlated — checkout start instead of purchase, for example. You optimize one step earlier and gain signal volume.

Consolidate ad sets to concentrate history in one.

And check first that the event is actually arriving. An ad set optimizing for an event the pixel never fires has exactly this symptom, and the cause is installation, not structure.

Cause 6: scheduling and time zone

An ad set scheduled to start on a future date shows as active and does not deliver. Likewise, an ad set with dayparting may be outside its configured window at the moment you look.

The account's time zone is what counts, not yours. An account created with another country's time zone delivers on a schedule that does not match your expectation, and the gap shows up as "it does not deliver in the mornings".

Cause 7: the account spending limit

There is a spending limit at the account level, separate from campaign budgets. When it is reached, everything stops delivering at once — and the symptom is the most confusing on the list, because no individual campaign has a problem.

The giveaway: every campaign stops at the same instant, with no relationship between them. If that happened, the limit is reached or the payment method failed.

The more serious case is in ad account disabled.

The five-minute checking order

  1. Status at the ad level, not the ad set. Rejected or in review?
  2. Age of the ad set. Under 24 hours? Wait.
  3. Estimated audience size. Below the minimum?
  4. Daily budget against historical cost per result. Does it fit?
  5. Did every campaign stop together? Then it is the account, not the campaign.

Those five cover the vast majority of cases, in that order, because they run from the most common and cheapest to verify to the rarest.

What not to do while investigating

Do not duplicate the ad set. It is the most common reflex and restarts learning without fixing the cause. If the cause was a rejected ad, the duplicate does not deliver either.

Do not raise the bid. Zero delivery is not a competitiveness problem. A higher bid on an ineligible ad set changes nothing.

Do not change five things. Changing everything at once means you do not know what fixed it, and learning restarts with more variables than before.

After it delivers again

Do not judge performance in the first 48 hours: the ad set is relearning and the initial cost per result represents nothing. Wait for it to stabilize before deciding anything about budget.

The reporting routine that surfaces a stop the next day, instead of the next week, is on the paid media reporting page.

Frequently asked questions

What is the difference between not delivering and not spending?

Not delivering is the ad reaching nobody, with zero impressions. Not spending is appearing rarely and burning less than the budget allows. The first is a block, the second is an auction or audience limitation.

How long should I wait before touching anything?

Twenty-four hours for a new ad set, with no changes in that window. Touching it during the learning phase is the most common cause of delivery that never stabilizes.

Does a small audience prevent delivery?

It does when it falls below the minimum the platform can serve, and the panel warns you. Between small and minimum, it delivers with high frequency and rising cost, which is a different problem.

Does an ad set in limited learning deliver?

It delivers, with unstable performance. It signals that the optimized event does not happen often enough for the system to learn, and it usually resolves by consolidating ad sets or changing the event.

Read next