If an ad set is active and will not spend its daily budget, the usual cause is that Meta's delivery system cannot find enough of the event you asked it to optimise for, at the price you set, in the audience you drew. Meta calls this Learning limited, and it applies when an ad set is unlikely to get around fifty optimisation events in the week after your last significant edit.
That threshold is the thing to hold on to. Almost every cause below is a different way of failing to reach fifty events a week, and almost every fix is a way of making fifty reachable.
What does Learning limited actually mean?
It is a status, not a penalty. Meta describes it as an indication that your budget is not being spent effectively because the delivery system cannot optimise with the current setup. An ad set leaves the status by getting fifty optimisation events since the last significant edit, at which point it moves from Learning limited to Active.
So the system is not punishing you. It is declining to spend money quickly on a decision it cannot yet make well, which is the behaviour you would want if you thought about it for a minute and the opposite of what it feels like at the time.
Why is Meta not spending my full budget?
Meta names the causes directly: an audience that is too small, a budget too low to reach the events, a bid or cost control set too low, high auction overlap between your own ad sets, an optimisation event that happens too rarely, and running too many ads at the same time. Read that list as six ways of starving the same mechanism.
Two of them are worth expanding because they are the ones people cause themselves. Auction overlap means your own ad sets are bidding against each other for the same people, so you are paying more and delivering less to reach an audience you already had. And a cost cap set below what the auction currently clears at does not slow delivery down. It stops it, quietly, while the campaign still reads as active.
A campaign that shows Active and spends nothing is not stuck. It is bidding at a price nobody is accepting.
What is the fastest thing to change?
The optimisation event, if the conversion you chose is rare. Meta's own guidance is to pick an event that occurs more frequently, for example moving from purchases to add to cart. A store doing thirty purchases a month cannot feed a purchase optimised ad set fifty events a week no matter what you set the budget to, and no amount of patience changes that arithmetic.
After that, in order: widen the audience, remove or raise the cost cap, and consolidate ad sets that are competing with each other. Raising the budget is last, because a budget increase on an ad set that cannot find events buys you a larger number that also does not get spent.
Why did it stop spending after I edited it?
Because certain edits are significant edits, and a significant edit restarts the learning phase. The ad set goes back to needing fifty events from that moment. If you are editing an ad set every couple of days to make it spend, each edit resets the clock you are waiting on, and the ad set can sit in learning permanently while you are the reason.
This is the single most common self inflicted version of the problem. Make one change, then leave it alone for a week.
When is it not a delivery problem at all?
When the events are happening and not being received. If your pixel or Conversions API setup is dropping purchases, the delivery system genuinely cannot see fifty events a week even though your store is producing them, and every fix above will fail for a reason that has nothing to do with the ad account. Check store orders against reported conversions for the same dates before you spend a fortnight tuning bids.
Platform figures and store figures disagree by default, and the gap is usually wider than people expect. We measured it on an account we owned and wrote up the size of it.
What we do with it
We check the event volume against the fifty a week threshold first, because it decides whether any of the other work is worth doing, and we stop editing. What running a Meta account looks like week to week is on the Meta page.