Meta ads not spending? How to find the change that stopped delivery
When Meta ads are not spending, the ad set is winning fewer auctions than its budget allows or is blocked from delivering. The usual causes are bid or cost caps set too low, spending limits, a small audience, ads or assets with issues, schedules and rules. Confirm where spend stopped, then line up recent changes.
Why are my Meta ads not spending their budget?
Meta ads stop spending for two reasons: something blocks delivery outright, or the ad set can't win enough auctions at the price you allow. The first shows up as a status or a limit. The second looks like a normal, active ad set that spends a fraction of its budget.
The causes fall into a few groups:
- Controls you set: a bid cap or cost per result goal below what results cost, ad set spend limits, a schedule, a frequency cap.
- Limits on the account: an account spending limit or campaign spending limit that was reached, a daily spending limit Meta puts on new or flagged accounts, billing problems.
- Things that can't deliver: rejected ads, removed posts, flagged custom audiences or custom conversions.
- Too little room: an audience too small for the budget, or an optimization event too rare to exit the learning phase.
- Changes nobody remembers: automated rules, edits by a colleague, a new creative that took over delivery.
Almost every one of these starts with a change on a specific day. That is why the fastest diagnosis is to find the day spend fell and look at what changed just before it. If the problem is on Google rather than Meta, see why Google Ads stops spending.
Is the ad set really stuck, or is it just pacing?
Before you change anything, confirm that spend actually dropped and at which level. A lifetime budget, a schedule or a campaign budget shared across ad sets can all make one day look low without anything being wrong.
- Find the level. Compare spend at account, campaign, ad set and ad level for the last 14 days. If every campaign fell on the same day, look at the account (limits, billing). If one ad set fell, look at its settings.
- Break it down by day. Use the day breakdown in Ads Manager to find the first day spend fell. That date is your anchor for everything else.
- Read the Delivery column. A status such as "Learning limited" or an error on the ad tells you where to look next.
- Check the budget type. With a lifetime budget or a campaign budget, Meta can move money between days or between ad sets. One ad set spending less while another spends more is distribution, not a failure.
A useful trap to know: according to Jon Loomer, when an account spending limit is reached, every campaign in the account stops spending but can still display as delivering. An "Active" status does not prove money is going out.
Read also: Meta Ads frequency too high? How to find the change that pushed it up · Meta Ads activity history: where to find it and what it misses
Which settings and limits stop Meta from spending?
Most underspend comes from a short list of settings. Check each one against the date spend fell.
| Cause | What it does | Where to check |
|---|---|---|
| Bid cap | Meta raises bids as needed but never past your cap; the bid strategy docs say it "may not spend full budget". | Ad set, bid strategy |
| Cost per result goal (cost cap) | May not spend the full budget once the cap is hit; Meta also notes adherence to the cap is not guaranteed. | Ad set, bid strategy |
| Ad set spend limits | Daily minimum and maximum per ad set inside a campaign budget; the minimum is "best effort", not a guarantee. | Ad set, budget section |
| Account spending limit | A lifetime cap across all campaigns; when reached, all campaigns stop spending. | Billing and payment settings |
| Campaign spending limit | Doesn't pace spend; delivery stops as soon as the limit is reached. | Campaign settings |
| Issues on the ad set or ad | The API marks them with the status WITH_ISSUES and lists the reason, such as a removed post or a blocked audience. | Delivery column, ad errors |
| Schedule or frequency cap | Ads run only at set hours, or a Reach cap limits how often people see them. | Ad set, schedule and frequency |
| Automated rules | A rule paused the ad set or lowered a bid or budget. | Automated rules, activity history |
Two checks people skip. First, the audience: a narrow audience paired with a budget sized for a larger one often spends well for a few days and then stalls. Second, flagged assets: Meta's ad set reference says flagged custom audiences, lookalikes or custom conversions can cause delivery problems until they are resolved, so a change to a list or a conversion can stop an ad set you never touched.
What does the learning phase have to do with low delivery?
An ad set that can't get enough optimization events tends to deliver less. Meta's API reports a learning status of LEARNING, SUCCESS or FAIL, and FAIL means the ad set "isn't generating enough results to exit the learning phase". Ads Manager shows this as "Learning limited".
Jon Loomer's rule of thumb is about 50 optimized actions per ad set per week to exit learning, which means a daily budget of roughly ten times your cost per action. If you optimize for purchases at €40 each on a €60 daily budget, the ad set can't reach that volume and delivery suffers.
Edits matter here too. Meta states that significant edits send an ad set back into learning. A budget jump, a new bid strategy or a new optimization event can each restart it, which is why spend often wobbles right after an edit. The post on which edits reset the learning phase covers the list in detail.
If learning is the problem, the fix is volume: optimize for a more frequent event, merge small ad sets, or widen the audience, rather than raising a budget the ad set already can't spend.
How do I isolate which change caused the ad set to stop spending?
Put every change from the days before the drop on one timeline, rule out account-level blocks first, then test one hypothesis at a time. Underspend almost always starts on a specific day, so the change that caused it is usually close to that day.
- Find the day spend fell
- Rule out limits and billing
- Line up the changes
- Undo or test one change
Collect changes from every source, not just the ad set:
- Ads Manager edits: bid strategy, budget, audience, placements, schedule, optimization event. Open the activity history for the campaign and ad set and note what changed and who changed it. The guide to Meta Ads activity history explains how to read it.
- Automated actions: rules that paused or edited, Advantage+ settings switched on, ads rejected on review.
- Account and assets: spending limits, billing, a custom audience or custom conversion that was edited or flagged.
- Outside the account: a landing page or pixel change that cut conversions, which then starves a cost-capped ad set.
With every change on one timeline, the pattern is usually obvious: a cost per result goal tightened on Monday, spend down from Tuesday. You can keep that timeline in a shared marketing change log or in a Changeline project, where the team logs Meta Ads, site and tracking changes with date, owner and reason (Meta Ads import is coming soon; Google Ads edits are imported automatically).
Example: on Thursday a client asks why their retargeting ad set spent €15 a day this week against an €80 budget. Lining up the changes showed that on Monday a colleague switched it to a cost per result goal of €9, while results had been costing about €14. Nothing else changed that week. The goal was raised to €15 and spend recovered over the next two days. (Illustrative names and numbers.)
- MonMeta AdsCost per result goal €9 (results ~€14)
- This weekSpend €15 a day vs €80 budget
How do I get the ad set spending again without wasting budget?
Undo or adjust the one change you identified, then wait for delivery to settle before touching anything else. Stacking several fixes at once restarts learning and hides which one worked.
- Bid or cost cap too low: raise it toward the cost you actually see, or test a version without a cap.
- Ad set spend limits: remove or loosen them; Jon Loomer advises avoiding them except in extreme cases.
- Spending limit reached: raise, remove or reset the account or campaign limit.
- Issues on ads or assets: fix the rejected ad, replace the removed post, or resolve the flagged audience or conversion.
- Too little volume: optimize for a more frequent event or consolidate ad sets.
- Small audience: widen it, or lower the budget to what the audience can absorb.
Log the fix as its own change with the date and the reason. When you report back, you can show the cause, the fix and the recovery in order, which is what a client asking about a drop wants to see. The guide on explaining a drop to a client has a structure for that conversation. If you were raising budget when spend stalled, see how to increase a Meta Ads budget safely.
How do I stop unexplained underspend from happening again?
Make every change visible on the day it happens. Underspend is rarely hard to fix; it is hard to explain when nobody knows what changed.
- Log changes as you make them: bid strategy, caps, budgets, audiences, rules and schedules, with the reason.
- Name an owner for automated rules and review active rules monthly, so a forgotten rule can't pause spend.
- Check account limits before big pushes such as seasonal sales, so a spending limit doesn't cut delivery on the busiest day.
- Watch spend by day, not by week. A daily view catches a stall in one or two days instead of at the end of the month.
Underspend and rising costs often share causes. If spend is flowing but each result costs more, the post on why Meta CPM increases covers the auction side.
Log every Meta edit before it resets learning
Changeline puts your team’s changes, imported Google Ads changes and site, tracking and CRM edits on one timeline per client.
Free plan: 1 project, 2 editors, 15 days of history. No card.
FAQ
How long should I wait before changing an ad set that isn't spending?
First find the day spend fell and the likely cause. After you fix it, give delivery a few days before making another edit, because significant edits send the ad set back into the learning phase. Changing several settings at once makes it impossible to tell which fix worked.
Can a cost per result goal stop Meta ads from spending?
Yes. Meta's bid strategy documentation says cost cap may not spend the full budget once the cap is hit, and bid cap may not spend the full budget either. If the goal is below what results really cost, delivery slows sharply. Raise it toward your actual cost per result.
Why does Ads Manager show my ads as active when nothing is spending?
An active status only means the ads are switched on. If the account spending limit was reached, campaigns stop spending but can still display as delivering. Schedules, low caps and small audiences also leave ads active with little or no spend. Check spend by day and the account limits.
Does a small audience stop Meta ads from spending?
It can. A narrow audience with a budget sized for a larger one often spends normally for a few days, then stalls as Meta runs out of people to reach at your price. Widen the audience, use broader targeting, or lower the budget to match what the audience can absorb.
Do ad set spend limits cause delivery problems?
They can. With a campaign budget, ad set minimum and maximum spend limits restrict how Meta distributes money, and Meta describes the minimum as best effort, not a guarantee. Jon Loomer recommends avoiding them except in extreme cases. Remove them and check whether delivery recovers.
Sources
- Bid strategies (Meta for Developers)
- Ad Set reference (Meta for Developers)
- Ad Campaign Learning Stage Info (Meta for Developers)
- Troubleshoot Ad Delivery with WITH_ISSUES Status (Meta for Developers)
- Why Won't Meta Spend My Advertising Budget? (Jon Loomer Digital)
- Campaign, account and daily spending limits (Jon Loomer Digital)