Facebook ads not delivering: what the status means and how to fix it
Short answer: "Not Delivering" in Meta Ads Manager means an ad cannot enter the auction right now, not that one specific error occurred. The cause can sit at the campaign, ad set, ad, billing, or Page level. Check the Delivery column across all three tabs, inspect Account Quality and Billing, and look for asset errors such as deleted posts or unpublished Pages.
Check the three levels in Ads Manager first
Meta evaluates delivery top down across Campaigns, Ad Sets, and Ads. A single paused toggle or error at the campaign or ad set level stops every active ad underneath it.
- Open Ads Manager and check the Campaigns, Ad Sets, and Ads tabs in that order.
- Look at the Delivery column on each tab and hover over any warning or error icon to read the diagnostic text Meta displays.
- Confirm that the toggle switches are turned On at all three levels and that the ad set schedule has started and not ended.
- Open Billing & Payments in Meta Business Suite to verify that no payment failed and that your Account Spending Limit has not been reached.
- Open Account Quality to check for rejected ads, ad account restrictions, or disabled Pages.
Common delivery statuses and what to do
Not every non-active label means a policy ban or technical failure. Some statuses reflect normal queue timing or slow optimization rather than a complete block.
| Status in Delivery column | What it means | What to do |
|---|---|---|
Off (PAUSED, CAMPAIGN_PAUSED, ADSET_PAUSED) |
The ad itself, its parent ad set, or its parent campaign is switched off. | Check all three tabs and switch on the paused parent level. |
In Review (PENDING_REVIEW) |
Meta is running automated and, when flagged, manual policy checks. Most reviews finish within 24 hours, though peak periods take longer. | Wait for review to complete. Avoid editing the ad while it is in review because changes reset the queue. |
Rejected (DISAPPROVED) |
Creative, copy, targeting, or the landing page violated Meta Advertising Policies. | Read the policy category in Account Quality or Delivery feedback, edit the ad to comply, or request another review if it was flagged in error. |
Delivery Error / With Issues (WITH_ISSUES) |
A technical or asset blocker stops delivery, such as a deleted post, missing media, deactivated Page, missing Page role, or Special Ad Category mismatch. | Open the ad or ad set details to read the exact issue, then replace the broken Page, media, or targeting setting. |
| Scheduled / Completed | The ad set start time is in the future or the end time has passed. | Adjust the start or end date in the ad set schedule. |
| Active (with unpublished Page) | The ad toggle is on, but the connected Facebook Page is unpublished or closed. | Publish the Page again or switch the ad to a live Page. |
| Account Error / Disabled | A failed charge, unpaid balance, reached Account Spending Limit, or restricted ad account halted all delivery. | Settle the balance, reset or raise the Account Spending Limit, or resolve the restriction in Account Quality. |
| Learning Limited | The ad set is delivering, but too slowly to exit the learning phase (typically fewer than about 50 optimization events per week). | Broaden the audience, raise the budget, or combine overlapping ad sets rather than treating it as a hard block. |
Narrow targeting and restrictive manual bids can also keep impressions at zero without triggering a red error. If an active, approved ad spends nothing for hours, check whether your Bid Cap or Cost Cap is too low to win auctions or whether layered locations and exclusions shrank the estimated audience size too far.
Where Meta actually states the reason
In Ads Manager, the Delivery column tooltip and Account Quality summarize why an ad stopped. Behind the scenes in the Graph API, Meta splits those reasons across three separate fields on the ad node (with ad sets also carrying issues_info):
issues_info: technical and asset blockers, each with an integererror_code,error_type(HARDorSOFT),level,error_summary, anderror_message. Common examples seen on live accounts include a deleted post (2446289), missing image (2446386), missing Page permission (1885499,3858749), deactivated Page (4469001), or Special Ad Category violation (2490031).ad_review_feedback: policy rejection categories and explanations (globalandplacement_specific), populated when an ad isDISAPPROVED.failed_delivery_checks: runtime delivery checks, includingsummaryanddescription.
Three measured behaviours explain why Meta's delivery feedback often confuses teams working across accounts:
- Meta publishes no public lookup table for
issues_infoerror codes. Measured across 28 live ad accounts and stored account records on October 28, 2026: the Marketing API reference documentserror_codeonly as an integer, so practitioners rely on the summary text Meta returns. Across 107 live objects read in English (17 distinct codes) and 68 code-and-language pairs in stored data, each code kept one consistent meaning across ad sets and ads. - Error wording follows the token profile's language. In the same October 28, 2026 measurement, reading ads without an explicit
localereturned Ukrainian, English, and Russian reasons side by side depending on which Meta profile's token made the request. Passinglocale=en_US(orru_RU/uk_UA) translatedissues_info,ad_review_feedback, andfailed_delivery_checksconsistently. - Unpublishing a Page leaves the ad marked
ACTIVE. Measured read-only on October 29, 2026 across 5 live active ads on unpublished Pages (and confirmed across 146 active ads on unpublished or closed Pages in stored data): taking a Facebook Page off publication kept every ad'seffective_statusatACTIVEand sent no webhook. The block appeared only insidefailed_delivery_checksas"Page Unpublished"("This ad cannot deliver because the page it targets is not published.", with nocheck_name).
It also helps to separate real Page blockers from local user-access issues. When a Facebook Page is unpublished, permanently closed, or deactivated (4469001), Meta stops delivery. By contrast, revoking a single user profile's assignment on a live Page does not stop existing ads from delivering as long as the Page itself stays published (observed in live tests on a test ad account on October 22, 2026).
Seeing non-delivering ads across many ad accounts
In Ads Manager, checking delivery means switching into one ad account at a time. When you run dozens of accounts across several Business Managers and Meta profiles, an ad stopped by a deleted post or unpublished Page in account 18 can sit unnoticed for days.
Multitool ADS loads campaigns, ad sets, ads, and creatives from all connected Meta profiles and ad accounts into one table. Ads that are not delivering are listed with the reason Meta states, and rejected ads appear with Meta's rejection reason, so you can filter and spot blocked ads across every account in one view. You can also set up Telegram notifications for important account events and run 24/7 automated rules to pause ads that burn budget without results.
You can explore how non-delivering ads and their stated reasons look across multiple accounts in the Multitool ADS live demo, no account needed.
Sources: Meta Business Help Center, Marketing API Ad Set Reference, Marketing API Campaign Reference.