What not to build, and how we test what we did

Most of what I hear about AI in advertising falls into two buckets. A smarter bidder inside one channel. Or an agent with the keys to your ad accounts, trying things to see what sticks.

When we started building Mainkore, the first decision was what not to build. The obvious move is to put an LLM on top of ad accounts. We didn’t. LLMs are great with language. Media buying is a long chain of decisions under a budget, with feedback that comes late and is measured in results. Knowing the next likely word won’t tell you what to pay for the next impression.

We also ruled out the trial-and-error agent. Every experiment costs the client money, and the space is huge: [dozens of] targeting variables in a single channel, hundreds of thousands of possible strategies. You can’t wander through that at random on someone else’s dime.

So we started from experience.

The first thing experience teaches you is that every channel is its own world. Each DSP has its own rules and parameters. Each walled garden has its own inventory and its own controls. At any given moment, a live campaign has an enormous number of possible next moves, and several of them can look reasonable. Only a few are actually the best ones for the campaign’s objective, given its current state and what’s left of the budget. Finding them depends on knowing the channel it’s running in.

That’s why the industry has channel specialists. Someone who’s great at one platform isn’t automatically great at another. We took the same view, so instead of one general system we built several expert systems, one per channel.

Each one is trained by coaches: senior traders who have spent years living inside these channels. They know the quirks, the traps, the moves that look right on paper and aren’t.

The training has two parts. First, the AI watches each coach work on real campaigns. Every time a coach acts, we store the state the campaign was in, the action they took, and the intent behind it: what the coach was trying to fix. Then we record whether it worked. Both outcomes are training data. The actions that fixed the problem teach the AI what to do. The ones that didn’t teach it what to avoid.

Second, our coaches work every day in a simulation of those same situations. The campaigns there aren’t real, but the feedback goes straight into the expert systems.

More than 12,000 campaigns later, that’s what our AI is made of.

When it tests strategies, it starts where a good trader would. Then it goes far beyond what a person has time for, and keeps tuning what it pays against what each impression is actually worth.

The part I’m most stubborn about is evaluation.

You can build anything and call it intelligent. What matters is what you measure it against. For us, the most honest benchmark is a skilled human using the best tools the channel has.

So every time we integrate a new channel, we run a battle. One-on-one, on the same campaign. [Presupuesto dividido a partes iguales, mismo periodo, misma audiencia, mismo KPI.] A coach runs one side by hand with everything the channel’s native optimization offers. Our AI runs the other, using its trained expertise plus whatever the channel brings. We do it for every DSP and every walled garden.

We pick native optimization as the opponent on purpose, because it’s strong. To know what expertise adds, you have to test against the best thing already out there.

And the AI wins. We’ve reached the point where even our best coaches can’t keep up. Not because they’re worse traders. No person can weigh that many decisions, that fast, all day long.

Above the channels, another layer of AI decides which channels will perform and how budget moves between them, when the brief allows more than one.

One example I like. Every DSP has its own inventory and publisher deals, and that’s a real advantage for each. In a consideration campaign built around effective sessions, our AI noticed one DSP’s inventory was driving better sessions. The easy move would be to pour the whole budget into it. But good inventory is only half the job. You also have to buy it at the right price. And that DSP doesn’t have unlimited sessions. Push too much money in and each extra session costs more. So the AI found a balance: more weight on that DSP while the price made sense, with the others still running. You can only make that call if you’re looking at more than one channel at a time.

People ask about control. The client sets the playing field (channels, budget, objectives) and can change it at any moment, with immediate effect. Every action the AI takes is logged, because if you can’t trace a decision, you don’t understand your own system.

I expect the channels to keep getting smarter, and I’m glad. It raises the floor for everyone. What interests me is what gets built on top of them.

So a question for the technical folks: if you were designing a fair battle between a human on native optimization and an AI inside the same channel, what would you control for?

Ahmir Ejaz

Chief AI Officer