The internet is full of advice on how to run Meta ads. Courses, YouTube influencers, Reddit threads. Even my Instagram feed is full of experts promising to teach me how to run ads successfully for $17, one-time payment. Just because I once clicked on one of these ads.
In the last 6 months, I spent a fair amount of time going through different sources. Reading all these subreddits. Watching dozens of YouTube experts, each claiming to have some secret knowledge. Attending calls with Speechify’s Meta reps and a dedicated engineer assigned to the company (not very useful, I have to say).
While I can’t point to a specific source, all these efforts started to pay off recently. One of the campaign structures worked. Then worked again. And again. The compounding effect kicked in. But as an engineer, I don’t like mysteries. So I went through the technical details to find out why this particular method worked over the others. And that was probably the most important part of the journey. Understanding the internals of Meta’s engine won’t help me win every time. But at least I’ll stop making silly mistakes.
In this post, I want to share my understanding of the Meta engine. It’s a simplification. It’s speculation. But I don’t think I’m too far off.
It might get a little technical at times, but once you grasp these few concepts, many things that looked like mysteries before will finally start to make sense. Meta will still find a way to surprise you. It’s gambling, after all. But we can stack the odds in our favour.
3 key components of the Meta engine
Whenever I open my Instagram, Meta needs to populate my feed with ads. And do it fast – under 200ms. To hit the time budget, it goes through 3 key steps:
First, it asks Publisher to return all the ads available for this user. Publisher uses hard checks when selecting ads for a specific user session. E.g. gender, location, age. It simplifies the next stages. But it still results in hundreds of thousands of creatives, if not more.
Ads received from Publisher go into Retrieval. The job of Retrieval is to shortlist the ads to a manageable number. It filters ads by matching them with the user’s interests and profile.
The shortlisted set is passed to Ranking. Potentially, everything could go there straight from Publisher, but Ranking is the most expensive operation in this chain, and the role of Retrieval is to lift some of that burden. Ranking chooses the ads with the highest potential of hitting the advertiser’s target for this specific user. It operates on countless parameters and, like any model, acts as a black box. Even its developers can’t tell you why a certain ad was ranked higher.
The important part that is often overlooked – this whole process is based on the user’s profile and runs entirely from a user-centric perspective. The ads are not competing in a vacuum. Every time, it’s a very different game for a specific user.
Now, where is the “learning” part in all of that?
What Meta calls “learning”
I have a personal beef with the term “learning” in ad platforms. I appreciate the genius behind the naming. Whenever I create a new ad set, it starts with “learning”. It naturally nudges me to give the ad some time. It even creates an impression that the system is training for my product. In the world of marketing, full of magical thinking, I want to help the Meta God learn more from my ads and about my product. So it’ll be gracious enough to send me the right people. Meta even gives me an exact number – I have to feed it 50 conversions a week to keep the learning God happy.
However, as I mentioned before, the entire engine operates under a very strict time budget. Some sources say 200ms. With this constraint, there is no way to train anything specifically for every campaign. So the entire “learning” can be summed up as data collection. It does inform ad selection, but calling it “learning” is a bit of an overstatement. Moreover, Meta doesn’t switch to a full-beast mode when reaching 50 conversions. It just keeps collecting the data. If I had to bet, at some point Meta PMs ran some research and found that people who collected data from 50 conversions see better results. So they came up with this number and updated their dashboard to reinforce the guidance.
Now, and this is important, the data is collected on two levels: Ad Set and Ad Creative.
Ad Creative collects data on the performance of the specific ad. It also uses internal IDs based on ad content. So two identical ads placed in different ad sets can combine their data.
And Ad Set collects data on budget allocation, targeting and ad combinations. However, it’s heavily influenced by the creatives inside. After all, the entire history of ad impressions is based on the creatives.
The data collected in those two buckets is used in two places – Retrieval and Ranking.
Now, let’s see how, equipped with this knowledge, we can solve some common mysteries.
Solving mysteries
Meta sends all the budget to one creative
Very common for new campaigns. You upload 10 creatives into an ad set and Meta spends 80% of the budget on a single one. Great when you’re lucky and it’s the most profitable one. But often, it’s not the case. Usually, you see one or two creatives with much better ROI that barely get any spend. Feels broken.
But if we apply the concepts described earlier, it makes total sense. The most common reason – all the ads are too similar to each other:
Meta retrieves all my ads from Publisher
They all go through the same retrieval process and end up in Ranking, as they all match the same user profile
And then Ranking selects the one it predicts has the highest probability of delivering results.
Eventually, it’ll start giving other ads a shot, but the data pipeline is slow. If you have a single creative with a high ranking, it can cannibalise the ad spend for days.
Now, what’s the solution? Increase the variety within the same ad set. More formats, more angles, more messages. Don’t overestimate formats, though. The key here is to create ads that match different Instagram feeds. Using UGC instead of static is just one way to achieve it, and not the best one. This multiplies your chances of finding a banger that will produce revenue for a long time.
I disable the top-spending creative with bad ROI, and the entire ad set stops performing
Another popular one. This usually happens as an instinctive reaction to the previous issue. I don’t want to spend money on something that clearly doesn’t perform, so I stop it. But it almost never works the way it’s intended.
For two reasons:
Firstly, the data collected in the ad set was heavily influenced by that creative – it was the top consumer, after all. So the entire ad set is already way off, and it takes a lot of time to recover.
Secondly, the disabled ad was winning the ranking. So the rest of the ads are most likely already worse than the disabled one.
One way of fixing it – cloning the ad set without that ad and starting data collection from scratch. But it’s worth bearing in mind: it’s going to be an ad set of ranking losers. There is also a way to push spend to a specific creative, but the ad set data is usually biased at this stage.
The right way, in my experience, is to give up. If I treat Meta as a casino, I won’t win with a team of losers. I’d better abandon this ad set and create a new one. And never touch ads in the ones running.
A creative that tested well flops in the scaling campaign
I have a problem with the entire creative testing approach. It all sounds 2 years out of date – from before Andromeda (Meta’s current retrieval engine). It ignores the simple truth: data is collected in two places – ad level and ad set level. And they both influence each other. So a creative performing well in one ad set can be a complete waste of budget in another. And there is no way of predicting it. One is useless without the other.
Don’t get me wrong, I believe in testing to learn – which angles work, which messages resonate and drive the right audience. As a way for me to learn, not to game the Meta engine.
Learning, but not copying. With one small exception – usually I’m able to squeeze a little more juice by translating a successful creative into other languages. But that’s about it.
And if I get lucky and find something that works wonders here and now, I scale it in place, without copying it into a “scaling” campaign.
Meta doesn’t give new creatives a shot
This usually happens when I mix old and new creatives in a single ad set. Even if the new ones are more promising, the old ones come with the baggage of history. All things being equal, Meta gives preference to something that has already collected some data. And don’t forget, Meta uses internal IDs to match identical creatives by content. So even if you recreate the same creative from scratch, it’s still going to be treated as the same ad.
So, another rule – never combine new and old creatives in a single ad set. It won’t be a fair fight.
Understanding these few rules doesn’t make my campaigns bulletproof. After all, it’s still a game of chance – if the ad set picks up the right signal, if the creative resonates. There are millions of factors no one can predict. However, with these few concepts, the game becomes a little more predictable, and I start winning a little more often. I can’t say I’m becoming an expert in Meta Ads. It’s burned me too many times to get comfortable any time soon. But at least I get fewer and fewer surprises.










Thank you for the helpful insights! I enjoyed the humour and the writing style which made it a fun read. The gaming analogy was especially relatable and made the whole concept click.