Vlix Vlix

← Digital Marketing

How Meta Ad Auctions Really Work (and Why They Work That Way)

I recently went down the rabbit hole of how Meta actually decides which ad you see, and it turned out to be one of those systems that looks baffling until you find the single fact it all hangs off. Once that clicks, every strange thing about it (why a smaller bid can win, why great creative makes your CPM go up, why cheap countries lose money) stops being a rule to memorise and becomes something you can just reason out. This is my attempt to explain it the way I wish someone had explained it to me, using our own apps as the running example.

The short version: Meta does not sell ad space, it sells human attention, and attention is a fixed, perishable supply. It cannot make more of it, so its only way to earn more is to make each slot go to the advertiser it is worth the most to. You help it do that by bidding on the outcome you want (an install, a subscription) instead of on impressions. Meta supplies the missing piece: how likely each individual person is to take that action. Multiply your bid by that probability and you get a value per impression that ranks every advertiser in the same unit. Highest value wins. That is the whole thing.

Meta is not selling space. It is selling attention.

A billboard company sells you a fixed rectangle by the road. Meta is not doing that. It is selling moments of human attention, and those moments are strictly limited.

Think about how anyone actually uses one of these apps. Someone opens Instagram, scrolls for a few minutes, and closes it. In that session there is room for only a handful of ads before the experience starts to sour. Meta cannot manufacture more attention. It could cram in more ads, but every extra ad makes the feed a little worse, sessions get shorter, and the total pool of attention shrinks. The resource punishes overuse.

So Meta has a finite, perishable, quality-sensitive inventory, and millions of advertisers fighting over it. Picture the queue for that inventory: us trying to get someone to try our free voice-practice app Repeat Recorder, someone else selling insurance, someone else selling shoes, all wanting the same three seconds of the same person's evening. Everything that follows is a consequence of that one fact.

The obvious answer, and why it breaks

The common-sense fix is a plain auction. Whoever bids the most for the slot wins it. That is how an art auction works, how eBay works, and how most people assume ad auctions work.

Meta could do this, and in fact it offers it: a reach campaign lets you bid a flat CPM (a price per thousand impressions) and the highest CPM wins. It exists and it works. But if it were the only option, three things would go wrong.

You would pay for attention that cannot convert. A flat CPM is one price applied to every person in your audience, but those people are not interchangeable. Say we run a single CPM to promote Accent Mirror. Some of the people it reaches are quietly self-conscious about their accent and would download it tonight. Some will never install a language app in their life. One price cannot tell them apart, so we pay the same for both, and most of the budget lands on people who were never going to act.

The inventory gets misallocated. If a slot goes to an advertiser whose product is irrelevant to that person, the impression is mostly wasted. Not wasted for Meta in the narrow sense (it still gets paid) but wasted in the sense that the same slot could have gone to an advertiser it was worth far more to. Over billions of impressions, that compounds into an enormous amount of value that never gets created.

Advertisers leave. Performance advertisers are ruthless about return. If a dollar on Meta produces fewer installs than a dollar on Google or TikTok, the budget moves and does not come back. Meta needs its advertisers to succeed, not out of goodwill, but because advertisers who lose money stop buying.

There is also a purely mechanical problem, and it is the one that kills flat bidding as a universal system. In any single auction, advertisers are bidding in different units at the same time. We might offer 3 dollars per Repeat Recorder install. A game studio offers 60 cents per click. A brand offers 18 dollars per thousand impressions. Those numbers cannot be ranked against each other. They are not the same kind of quantity. Something has to convert them into a common unit before any auction can even begin.

The fix: bid on outcomes, and let Meta do the conversion

Instead of quoting a price for impressions, you quote a price for the thing you actually want.

You tell Meta two things. First, which action matters to you, whether that is an app install, a purchase, a lead or a click. Second, what that action is worth, as a maximum you are willing to pay for it. For a free app like Paint Vlix the action might be a download; for a subscription app like Speak Slower it might be the trial start or the paid subscription itself.

Meta then supplies the piece you cannot: for each individual person, at each individual moment, how likely is that person to take that action on your ad. This is the estimated action rate, and it is the heart of the whole system.

The two numbers multiply into a value per impression.

your bid per outcome × the probability of that outcome = the value of this impression

A third factor, ad quality, adjusts this, and it is mostly a penalty. Quality reflects negative signals like hides and reports, engagement measured against what is normal for the category, and demotions for engagement bait, sensational claims, withheld information and bad landing pages. A demoted ad has its value discounted and has to bid materially more to win the same slot. So the full ranking value is roughly:

bid × estimated action rate × ad quality

That is the number every advertiser gets boiled down to, no matter what unit they bid in. Once everyone has one, the auction is the simplest thing imaginable: highest value wins.

The estimated action rate is the whole game

The prediction is made per person, not per campaign. Your campaign has an average install rate, sure, but that average is worked out after the fact from thousands of individual predictions that all differed from one another.

The model draws on two sides. From your side: the conversion events you report back through the pixel or the mobile SDK, the past performance of this creative and ones like it, and early engagement on the ad itself (watch-through, dwell time, saves, shares). From the user's side: their history of engaging with and buying from ads in this category, what they have installed, how recently they did something similar, plus device, connection quality and placement.

This is exactly why the learning phase exists. When we launch a brand-new ad for Accent Mirror, the model has no history for it, so it falls back on weak proxies and the estimate is noisy and usually pessimistic. It settles down only as real conversion events pile up, which is why Meta keeps nudging you toward roughly fifty conversions per week per ad set. Below that, the model never gets confident, and low confidence is expensive: an uncertain prediction gets shaded down, and a shaded-down prediction loses auctions you would have been glad to win.

A new ad is not expensive because it is bad. It is expensive because Meta does not yet know whether it is good.

What actually happens when someone opens the app

A person opens Instagram. A slot in their feed comes free. That single slot, for that single person, at that single moment, is auctioned.

Every eligible advertiser is evaluated. Each one's bid is converted into a value per impression using that advertiser's own predicted rate for this specific person and their own quality score. Highest value wins.

And here is the part that surprises people: the winner does not necessarily bid the most money. Suppose we bid 5 dollars per Repeat Recorder install and, for this person, Meta predicts a 1 percent chance they install. That is 5 cents of expected value per impression. A rival bids 20 dollars per install but is a poor match for this person, predicted at 0.1 percent. That is only 2 cents. Our smaller bid wins, and Meta earns more by letting it win. This is not generosity toward the better-matched advertiser. It is plain revenue maximisation.

What you actually pay (and the thing everyone confuses)

Two things get muddled here, and they are worth pulling apart carefully.

The billing unit is impressions. You are charged when your ad is shown, not when the install happens. Meta carries no risk on whether the conversion actually occurs. This bidding style is even named for it: oCPM, optimised cost per mille (per thousand impressions).

The bid unit is outcomes. Your bid of 8 dollars per Speak Slower subscriber is not a payment. It is a cap. It means: charge me per impression, at whatever rate you like, as long as the maths works out to no more than 8 dollars per subscriber. The predicted rate is the exchange rate that turns your cap into an allowable price per impression.

Your price is set by the competition, not by your own bid. The winner pays roughly what was needed to beat the runner-up, not their full maximum. So a strong predicted rate does not only win you the impression, it tends to win it with headroom to spare. This is why bidding artificially low is usually a mistake: it does not lower the price you would have paid, it just makes you lose auctions you would have been happy to win.

Two honest caveats. Real delivery paces your bid through the day to spend your budget evenly, so the number of advertisers actually competing in any given auction is rarely the number you typed. And the exact settlement mechanics change over time and are not published. Treat "you pay about the runner-up price" as the model that explains what you observe, not as a description of the billing code.

Why better creative lowers your cost (even as your CPM climbs)

Cost per install is just the price of an impression divided by the install rate. Better creative and better product fit push the install rate up, so cost per install comes down. Simple.

What confuses people is that your CPM often goes up at the same time, and it looks like Meta is punishing you for doing well. It is not. A stronger predicted rate lets you win auctions you used to lose, and the auctions you used to lose are the contested, expensive ones. Success moves you into more expensive company. If we cut a genuinely great video for Accent Mirror, we do not get cheaper impressions, we get better ones, and better ones cost more per thousand while costing less per install.

Two things follow. CPM on its own is a useless health metric, because it can rise from a quality penalty or from success, and you cannot tell which from the number alone. And the advantage decays: as frequency climbs your rate falls, and as competitors improve their own creative the whole price floor lifts. Creative is not a thing you finish, it is a thing you keep replacing.

Why cheap audiences are usually a trap

The price of an impression is set by what other advertisers will pay for that person. Wealthier, older, higher-intent audiences in developed markets are expensive because lots of well-funded advertisers want them. Younger audiences and low-income markets are cheap because few do.

But cost falls more slowly than value does. An install in a low-income market might cost five times less and be worth thirty times less, especially for a subscription product, because the paying rate collapses far harder than the install rate. Someone there will happily install Speak Slower, and will never pay a Western subscription price for it. The cheap dashboard number seduces you; the revenue behind it quietly does not show up.

Cheap traffic is cheap because a market with far better data than you already priced it correctly. The discipline is to never compare cost per install across countries. Compare each market's cost per install against that same market's revenue per install, and judge each one on its own terms.

Never ask "which country is cheapest to acquire". Ask "which country pays back what it costs".

iOS versus Android is not a fair fight, and that is fine

The same logic explains the platform gap. iOS installs cost more for three reasons: iOS users tend to spend more, so competition bids them up; iOS inventory is scarcer in most countries; and since App Tracking Transparency, measurement on iOS is noisier, which makes prediction less accurate and delivery less efficient.

None of that means iOS is worse. For most of our apps it converts to paid at a high enough rate to justify the premium. The move is not to declare a winner, it is to run Repeat Recorder on each platform separately and judge each on its own return, exactly as you would with countries. A blended cost per install across two platforms with different economics is a number that hides the truth rather than revealing it.

What you can and cannot control

You cannot target on purchase history any more. That kind of targeting was largely stripped out of the interface years ago and the detailed-targeting menu keeps shrinking. But those signals still live inside the prediction model, working on your behalf. So the levers that remain are these, and they are the ones worth all your attention.

1. The conversion event you optimise for

This decides which prediction model gets applied to you, and therefore which people you win. Optimise for clicks and Meta will dutifully find you habitual clickers, and it will learn nothing about who installs, no matter how long you run. Optimise for installs, or for subscriptions, and it goes hunting for people who install or subscribe. For a free app like Paint Vlix the install is the right event; for Speak Slower you likely want to optimise deeper, toward the subscription, once you have the volume to support it. This is the single most consequential setting in the whole campaign.

2. Signal quality

Your conversion tracking is your half of the bargain. Broken, delayed or badly configured events leave Meta's estimate of you pessimistic, and you pay a premium for that uncertainty indefinitely. Getting the pixel and SDK events clean for something like Contacts Vlix is not admin work, it is pricing work.

3. Custom audiences and lookalikes

Uploading your actual paying customers and building a lookalike from them is the closest thing to a purchase-intent filter you will ever get now, and it is better than the old filter would have been, because it is defined by your own payers rather than a generic category. A lookalike of people who paid for Accent Mirror beats any interest checkbox you could tick by hand.

4. Creative

The highest-leverage variable in the entire system, because it moves the predicted rate, and the predicted rate is a multiplier on everything else. This is where the effort should go. It is also why we treat the visuals across our products, from Repeat Recorder to Camera to Clipboard, as something to keep iterating rather than ship once.

5. Knowing what an outcome is worth to you

This is the one number nobody else can supply. Meta cannot see your revenue per install by country and cohort. Only you can. Without it, cost per install tells you nothing, and you will chase whichever segment looks cheapest in the dashboard while quietly losing money on every one of them.

The one-paragraph summary

Meta has a fixed and perishable supply of attention. It cannot make more of it, so its only route to more revenue is to make each unit worth more. An impression is worth more when it reaches someone likely to act. Only Meta knows who those people are; only the advertiser knows what an action is worth. Bidding on outcomes is the mechanism that joins those two pieces of private information together, and the estimated action rate is the exchange rate between them. The result is that every slot goes to the advertiser it is worth the most to. Advertisers earn more per impression, so they can afford to pay more per impression, so clearing prices rise, so Meta earns more from the same fixed supply, and the feed stays just tolerable enough that the supply keeps existing. Your ads working well and Meta making money are not in tension. They are the same event, seen from opposite sides.