Skip to content
Bach.ai

Policy or Performance? Diagnosing Restricted Meta Delivery

Your campaign is “Active” but spend has flatlined, or it’s crawling against a budget it used to clear by noon. The dashboard says delivery is restricted. The reflex is to start fiddling — raise the bid, broaden the audience, duplicate the ad set. Half the time that’s the right move and half the time it makes things worse, because meta ads restricted delivery is not one problem. It’s two opposite problems wearing the same label, and the correct response for one is the exact mistake for the other.

For the surrounding account decisions, compare Billing Faults That Silently Throttle Meta Ad Delivery and use Meta Ads Performance Dashboards: A Decision Workflow as the next diagnostic.

Two roots, one symptom

Restricted delivery means Meta is choosing not to spend your budget at the pace you’ve asked for. There are only two reasons that ever happens:

  1. Policy or integrity restriction — Meta’s review or trust systems have flagged the ad, the asset, the page, or the account, and are throttling or blocking distribution as a gate.
  2. Auction underperformance — nothing is flagged; the auction simply isn’t finding enough valuable impressions to serve at your bid, in your audience, with your signal.

These produce nearly identical surface symptoms: low or zero spend, “limited” or “not delivering” status, a frequency that won’t climb. But they sit on opposite mechanics. One is a permission problem. The other is a competitiveness problem. Treat a permission problem like a competitiveness problem — pour in budget and bid — and you burn money into a gate that won’t open. Treat a competitiveness problem like a permission problem — sit and wait for a “review” that was never happening — and you bleed days of learning while the algorithm gives up on the ad set.

So the first job is never to fix. It’s to diagnose the fork.

Read the signals Meta actually gives you

Before you change a single setting, separate two layers that the interface deliberately blurs: entity status (is this thing allowed to run?) and delivery status (is this thing winning auctions?). They live in different places and they answer different questions.

For the permission layer, look at:

  • Ad review / rejection status at the ad level — rejected, in review, or “limited” with a policy reason attached.
  • Account quality and integrity — any account-level flag, restriction notice, or page-level limitation. An account or page restriction will quietly suppress everything underneath it, even ads that individually look approved.
  • Recent edits — a freshly edited active ad re-enters review. A change you made an hour ago can be the entire reason spend stopped.

For the competitiveness layer, look at:

  • Learning status — “learning,” “learning limited,” or stabilized.
  • Auction overlap and audience saturation signals.
  • The delivery breakdown — is the bid the binding constraint, or the budget, or the audience size?

Here’s the fast tell. If the entity layer is clean — approved, account healthy, no recent edit — and spend is still choked, you are almost certainly in an auction problem, not a policy one. If anything in the entity layer is flagged, stop; no amount of bid or budget engineering will route around a gate.

Fork 1: Policy and integrity restriction

This is a yes/no gate, not a dial. The signature pattern: spend drops sharply or goes to zero, frequently right after a launch, an edit, or a creative swap, and there’s a status or notice naming a policy category somewhere in the stack.

What this fork punishes you for doing:

  • Raising the bid or budget. You’re bidding harder into a door that’s shut. Nothing serves; you just signal panic and sometimes drag account-level metrics down further.
  • Duplicating the ad set. If the flag is on the asset, page, or account, the duplicate inherits the same gate. You’ve now got two restricted entities and a messier account.

What actually moves it:

  • Fix the flagged object, not the campaign around it. If a single creative is rejected, swap or repair that creative. If the page or account is restricted, the ad changes are irrelevant until the page/account issue is resolved through review.
  • Resubmit and let review clear. A clean, freshly reviewed ad that starts delivering tells you the gate was the whole story.
  • Stop editing. Every edit on an active ad can re-trigger review. During a policy fix, make one decisive change, then leave it alone.

Integrity flags are binary in spirit: the ad is allowed or it isn’t. Your leverage is compliance and patience, not spend.

Fork 2: Auction underperformance wearing a restriction costume

Nothing is flagged. The ad is approved, the account is healthy, and Meta still won’t spend. This is the harder fork because there’s no notice telling you what’s wrong — the auction is just declining to serve you valuable impressions at your terms.

The usual culprits:

  • Signal starvation. Meta needs enough recent optimization-event signal to deliver efficiently. An ad set optimizing for a rare event — high-value purchases at a small volume — may not be getting enough conversions per week to exit learning. As an illustrative planning range, ad sets frequently need on the order of a few dozen optimization events in a rolling week to stabilize; treat that as a directional target, not a fixed threshold.
  • Audience too small or too contested. A narrow audience, or one you’re already saturating, raises effective cost until your bid stops clearing the auction.
  • Bid or budget set below the clearing price. With a manual or capped bid, you can sit just under the level needed to win, and the system simply under-delivers rather than overspend your cap.
  • Fragmentation. Five ad sets chasing overlapping audiences split your signal five ways, so none of them accumulates enough events to stabilize.

What this fork punishes you for doing: submitting tickets, waiting for a “review,” or repeatedly resetting the campaign. There’s nothing to approve. Waiting just extends the learning bleed.

What actually moves it:

  • Consolidate to rebuild signal density. Fewer ad sets, broader audiences, a budget large enough to clear a meaningful number of optimization events per week.
  • Optimize for an earlier, higher-frequency event temporarily if purchases are too sparse to feed the system, then move back up the funnel once volume stabilizes.
  • Give it patience inside the learning window. Resetting the ad set every other day ensures it never stabilizes. Let the math accumulate.

The diagnostic sequence

Run this in order, every time, before you touch a setting:

  1. Check the entity layer. Ad review status, account quality, page status. Any flag → Fork 1. Stop here.
  2. Check for recent edits. Edited in the last day → it may simply be back in review. Wait before reacting.
  3. If the entity layer is clean, check learning status and the delivery breakdown. Learning-limited, low event volume, capped bid → Fork 2.
  4. Name the binding constraint before acting — permission, signal, audience, or bid. Change only that.

A compact contrast to keep at hand:

Signal Fork 1 — Policy / integrity Fork 2 — Auction
Entity status Flagged / rejected / restricted Clean / approved
Trigger Launch, edit, creative swap Sparse events, narrow audience, low bid
Wrong move Raise bid, duplicate, keep editing Wait for “review,” reset repeatedly
Right move Fix the flagged object, resubmit, leave alone Consolidate, feed signal, hold through learning

The takeaway

The single most expensive error here is acting before you’ve read the fork. The two roots demand opposite responses, so a confident wrong move costs you twice — once in wasted spend, once in lost time. Make the diagnosis a hard gate: entity layer first, competitiveness layer second, one named constraint, one change. This is exactly the discipline an operator-grade copilot should enforce — Bach reads the entity and delivery layers together and tells you which fork you’re on before you spend, then proposes the change for you to approve rather than reacting blind. Restricted delivery isn’t a verdict. It’s a question with two answers, and your only job in the first five minutes is to find out which one you’re looking at.

See what your Meta ads are really costing you.

Connect your account and Bach ranks every revenue leak in minutes — each with the money it costs and a one-tap fix. Free for 7 days, no credit card.

Start Free Audit
Start your free audit