Because it is supposed to. The uneven spend that looks like a bug is the delivery system doing exactly what it was built to do, and once you understand the mechanism, most of the frustration turns into useful information.
Here is what is happening, why it sometimes favours an ad that looks worse, and what to do about it.
Page Contents
What the algorithm is actually doing
For every user an ad set could reach, Meta estimates the probability that each ad in the set results in the conversion you are optimising for. Then it gives the next impression to the ad with the best expected outcome for that person.
Do that across millions of impressions and the spend distribution becomes extremely lopsided. A handful of ads get the lion’s share, and the rest get almost nothing. It is not unusual for the top three or four ads in a set to take close to 80% of the budget.
This is a multi-armed bandit, and the underlying maths is worth understanding if you run creative at any scale. There is a detailed walkthrough of how Meta’s allocation works in Bayesian Bandits: behind the scenes of Facebook’s spend allocation decisioning on Mobile Dev Memo. The short version: the system is constantly trading off exploiting the ads it is confident about against exploring the ones it is not, and confidence is earned through history.
Why a new ad rarely dislodges an old winner
A consequence that catches almost everyone: an ad with history beats an ad without it, even when the new ad is better.
The incumbent has thousands of impressions behind its probability estimate. The newcomer has none. The algorithm is not being stubborn; it is being rational about uncertainty. It knows the old ad converts at some rate. It does not yet know anything about the new one, so it gives it a little exposure, and unless that little exposure is spectacular, it keeps backing what it knows.
This is why adding a new creative to an ad set full of proven winners is a poor way to test it. It will be starved before it has a chance to prove anything, and you will conclude it failed when it was never really run.
Why it sometimes backs the ad with the worse CPA
This is the part that looks genuinely wrong. The algorithm is clearly favouring an ad whose cost per acquisition is higher than its neighbour’s. Why would it do that?
Meta calls this the breakdown effect, and the reason is that the algorithm is optimising for two things at once: efficiency and scale.
The “better” ad, the one with the lower CPA, is often better precisely because it is being shown to a narrow slice of people it happens to suit. Give it the whole budget and it has to reach beyond that slice, and its CPA rises. The algorithm has effectively already modelled that. It has concluded the cheaper ad cannot sustain the volume the “worse” ad can, so it keeps feeding the one that scales.
The practical meaning: a low CPA at low spend is not the same thing as a creative that can carry budget. When you see the algorithm backing an apparently worse ad, it is usually telling you which creative is scalable, which is a more valuable thing to know than which one is cheapest in a small sample.
Why forcing equal spend makes this worse
The instinct, when spend is lopsided, is to fix it: split the ads into separate ad sets with equal budgets so you get a “fair” comparison.
That gives you a cleaner statistical read and a less useful one. In the wild, spend is never equal. Ads do not get identical impressions across identical placements. A split test tells you how ads compare under conditions that will never occur once they are live.
More importantly, it throws away the signal. If the algorithm wants to give one creative most of the budget, that preference is information about scalability. Mandating equal spend deletes it. The goal of a creative test is to find ads that can scale, not ads that look good at an artificial, equal budget.
When is Meta wrong? Three checks
Meta optimises the event you gave it, and that is not always the event that pays you. If you optimise for trials, Meta can back an ad with a strong cost per trial and a weak cost per paying user and LTV. Before you accept the spend split, run three checks.
- Scale. Rank your ads by spend, then by performance. Is your best performer also your top spender? If yes, you have no problem: keep it, feed it, and add new ads in their own ad set. If your best CPA sits at number 2 or 3 in spend, it may not be scalable. Its low CPA can come from a narrow slice of people, so do not force budget onto it.
- History. Is the ad getting no spend a new one? Test it in its own ad set, with runway. If it is an old one, go to the third check.
- What pays. Does the top spender hold up on cost per paying user and LTV, not just cost per trial? If it wins on trials and loses on paying users, pause it.

What to do with this
- Test new creatives in their own ad set, not alongside proven winners. The incumbent will starve them otherwise, and you will misread a starved ad as a failed one.
- Read lopsided spend as a signal, then check it. The creative the algorithm keeps feeding is the one it believes can scale. Confirm it holds up on paying users and LTV.
- Do not judge by CPA in a small sample. The cheap ad in a narrow slice is not necessarily the ad that survives a full budget.
- Let the algorithm allocate within a test, unless you specifically need statistical cleanliness. The uneven distribution is closer to how the ad will actually run.
- Give new ads enough runway to earn history before deciding. An ad with no history is being judged on almost nothing.
This post is part of our guide to how to choose a mobile UA agency.
Frequently asked questions
Why does Meta spend more budget on one ad? Because it estimates that ad has the best chance of converting each user it can reach, and it gives impressions to the ad with the best expected outcome. Spend concentrates on a few ads by design. Ads with history win this contest because the algorithm is confident about them; new ads have to earn that confidence.
Why is Meta spending on an ad with a worse CPA? The breakdown effect. The algorithm optimises for efficiency and scale together, and it has concluded the cheaper ad would deteriorate at higher budget. A low CPA at small scale is often a narrow-audience effect, not a scalable creative.
Why does my new ad get no spend? It is competing against ads with thousands of impressions of history. The algorithm backs what it knows. Test new creatives in their own ad set, away from proven winners.
Should I force equal budgets to compare ads fairly? Only if you need a statistically clean comparison. Equal spend removes the algorithm’s scalability signal and tests ads under conditions that never occur once they are live.
Is uneven spend a sign something is broken? Usually the opposite. It is the delivery system working as designed. The caveat is that Meta optimises the event you gave it, which is not always the one that pays you, so run the three checks above before you accept the split.



