Deep dive · 16 min read

How we wired AI into our PPC workflow

The talk that won PPC camp 2026, rebuilt in English. The MCP server, the data, the memory, and the sixteen applications running on live accounts.

The best-talk cup of PPC camp 2026 standing in front of the audience in a wooden hall
Best talk · 18th PPC camp
Watch it instead

Forty-four minutes, in English, in my own voice. Every chapter below links to its minute.

Plays from YouTube — nothing loads from Google until you press play. Watch on YouTube

In short: On 29 August 2026 I gave a talk at PPC camp near Telč, the Czech and Slovak PPC community's own conference, about how our agency runs on AI. This is a short report from the camp, and below it the whole talk reconstructed in English for readers who do not speak Czech: the video, a summary of every part with links to the minute, and the English slides.

The last weekend of August I spent three days in a wooden hall near Telč, talking about how our agency actually runs on AI. On Sunday I drove home with a gold cup on the passenger seat that says Nejlepší přednáška PPC campu on it, best talk of the camp.

The event is PPC camp, run by uLab, and for my money it is the best PPC event in Czechia and Slovakia. The reason is the door. You cannot buy a ticket. The community votes people in, so the room is full of practitioners who have something real to trade, and the talks are genuine talks instead of forty minutes of company promo. This was the eighteenth camp, three days from 28 to 30 August 2026, about seventy people and twenty-one talks. Friday ran on social, feeds and data, Saturday was all AI, and Sunday went back to data and measurement.

Markéta Kabátová of uLab handing Jakub Kašparů the best-talk cup in the wooden hall at PPC camp 2026
Photo: uLab

The seven other talks worth your afternoon

Most speakers shared their decks afterwards, and uLab’s own notes from the weekend link the PDFs. Here are the seven I would open first, a few sentences each.

Milan Cidilo (6clickz) (slides) runs Meta creative like a production line, where a concept is a persona times an angle times a format. Two numbers govern it, the share of tested ads that go on to scale and incremental reach. His Monday routine tags every ad against a closed taxonomy, scans the top five competitors in the Ad Library and scores the briefs before anything goes into production.

Anna Czarnoba (Knihobot) (slides) has roughly 1.5 million second-hand books in the feed, every one a unique physical copy with its own ID, which keeps resetting Smart Bidding’s conversion history. She rebuilt the feed around the edition rather than the copy, capped the offers per work at four, and validated it on a randomised split of 4,429 works measured with difference in differences. ROAS moved from 1.686 to 1.819 while the control group fell, and she built the whole pipeline herself.

Ľubo Kružliak (Wilsondo) (slides) leads in-house marketing for ten shops across six countries and gave the most concrete data-warehouse talk of the weekend, from reporting categories and campaign naming to how BigQuery allocates the cost of a session down to individual products. He also published the number most speakers leave out, 250,000 to 500,000 CZK to build and 7,500 to 10,000 CZK a month to run.

Lukáš Hvizdoš (6clickz) (slides) catalogued ten media-buying workflows he has automated, and for each one he names the statistical method, the API resource it reads and the output it produces. Budget changes are evaluated as an event study, product-level Shopping segmentation uses empirical Bayes shrinkage, and creative fatigue is dated with changepoint detection. One slide lists his whole toolbox and works as a reading list on its own.

Vito Nikolič (Mergado) (slides) showed what static feed banners look like when they carry the information a shopper actually needs. Load capacity, dimensions, delivery terms and star ratings, printed straight onto the product image. His argument is that a brand manual and the browser developer tools are enough to make this creative without a designer.

Iveta Dudová (uLab) (slides) explained why Shopify measurement breaks, from a PPC specialist’s chair rather than an analyst’s. Checkout extensibility moved the thank-you page into a sandbox, so she compares the three routes that remain open and closes with a decision tree for when server-side tracking is worth the effort.

Pavel Tomáš Řehák (M&M Reality) (slides) tested Viber, Telegram and X with creative that already worked on the big platforms, measured all the way through to the handover to the sales network in their CRM. None of the three paid off, and the honest write-up is what makes the deck useful. Telegram produced 926 clicks, 22 bot opens and no leads at all.

Why this video exists

The talk was recorded, the recording will be public, and the Czech version of this article embeds it. But it is in Czech, with Czech slides, so for everyone else it would stay locked in one language. This rebuild is the chance to give it to an English audience too, with audio, in my own voice. It cost me about an hour of my own time and about a day of work by a few AI agents.

How the English version was made

The source material was the audio track of the Czech talk and the original slides. The recording was transcribed, then rewritten as an English script scene by scene, 252 short scenes with one idea each, in the same dark visual language as the other videos here. My voice was cloned with ElevenLabs and the script was narrated with it. Every scene was then built as an animated HTML page and rendered to video. The timing of each animation is keyed to the word timestamps of the narration, so a highlight lands on the word that says it.

Two review loops sat on top. I watched the cut and left time-coded comments, and an independent AI reviewer went through every scene and every slide hunting for anything that did not match the script. Prices in the video are in euros. The English slides are the download.

Free download

Want the slides instead of the video?

All 67 slides of the talk, in English, as a PDF. Leave your email and the deck is yours, or keep reading for the chapter-by-chapter summary.

One file, one list. I only write when there's something worth reading.

Key takeaways tl;dr
  • Everyone has the same account logins. The difference is what your AI can see before it is asked anything, so context beats cleverness.
  • Guardrails belong in code, not in a prompt. A delete operation that does not exist cannot be talked into existing.
  • AI does not lie about facts so much as about what it checked. So a reviewer checks the evidence, never the conclusion.
  • PPC has become a development problem and a data problem. Knowing the discipline gets you into the room. The reach into development and data is what wins there.
8 months
from January to the stage, at full speed
810,000
lines of production code in the live systems
7
systems in production, about 20 people using them
16
applications running on real client accounts

The talk has two halves. First the four things that had to exist before any of this worked, which I describe as parts of a body because it makes them easy to keep straight. Then what the thing actually does on accounts, application by application. Every heading below opens the video at that exact minute.

Part one · The anatomy

What had to exist before any of it worked

Hands. Safe access to the accounts 1:48

All four parts hang on one socket, our own MCP server, and writing it was step one. It talks to every channel we manage, reads and writes only where it is allowed to, and reaches BigQuery, Cloud Storage, our timetracking, the client register, Asana, mail, Slack and the transcripts of client calls. Because it writes into live accounts, the limits sit in the code. A delete operation does not exist, every write runs as a dry run first, the account is checked before it is touched, and every specialist carries a spend ceiling. Every change leaves a record holding both states, before and after. The credentials stay in the server. The model gets the result, never the keys.

Eyes. The context a chat does not have 4:38

Every marketing platform loads into one database daily, with the views we use most precomputed, so a question about search terms takes seconds instead of hundreds of API requests. It is also an archive, because change history in Google Ads is gone after thirty days and in our database it stays for years. On top of that sit our own crawler over the client’s site, five years of business reporting that goes down to the margin on a single order, PostHog for what visitors really do, and DataForSEO for the competition. DataForSEO replaced a Semrush seat at about six hundred euros a month with eighty to a hundred and sixty for the whole company. Context is the whole game, and some of this data is not public anywhere.

Workshop. Where the assets get made 12:31

Static creative starts from one brand file per client, holding the manual, fonts, logos, previous creatives and the competition’s. Then a colleague writes one sentence about what the creative should say. The banner is built in two layers, and that is the trick that makes it cheap. An image model generates only the background, which is the expensive part, and everything else is an HTML layer on top. So you can change the font, enlarge the button, move the logo or translate the whole thing without regenerating anything. Video works the same way, with about twenty-five models from six providers picked per scene. Two rules never move, digital doubles only with signed consent, and the product always comes from the approved feed photo.

Brain. Memory, and something to argue with 14:47

We wrote our own orchestration layer rather than using anybody’s chat app. A session can start another session, and everything is tied to a task. When a session ends it gets distilled into facts, preferences, lessons and decisions, which go into the memory of the project rather than the person. Semantic search runs over roughly twenty-five thousand sessions and more than ten thousand pieces of research, so bidding, bids and strategy all find the same old piece of work. Every night it re-reads the day, invalidates stale facts and reweights what is actually being used. And because models hallucinate, every round of work gets opponents. A guardian is judgement. A guardrail is a rule.

The most useful thing the opponents taught us is what AI actually gets wrong. Not facts, so much as claims about its own work. One script reported that Google Ads had demonstrably loaded the margin data, when all it had verified was that the clock was past half past twelve. Another inverted a ROAS conversion and would have written sixteen hundred percent into a live campaign. A third wrote Vienna and Belgrade and prices from eleven countries, when the brief said Austria and Serbia and ten markets. Claimed is not the same as verified, and that pattern is one in five of everything the guardians find.

Part two · Eight basic applications

What it does every day

1. Reporting, hundreds of them 21:13

The first thing anyone builds once they have this is reports. A live artifact is an interactive page the AI assembles in the chat out of the precomputed platform data and the client’s own business data, and there are hundreds of them now. One recomputes bid modifiers by device across fifty-five campaigns every morning, with the modifier and the reason for it on the same line, mobile down thirty-three percent, desktop down forty-five. The same table one level deeper opens a campaign into its four creatives, Google and Meta side by side. Sorted by cost of sales, the margins vary widely. Cheap traffic and profitable traffic are not the same thing.

2. One creative, eleven languages 22:53

Here is what the two layers actually buy you. The image model is called once for the background, and the eleven translations are only text in the HTML layer, so nothing is generated a second time. The tool cost for the whole set is fourteen euro cents, our own cost about eighty cents, and we invoice around two euros. The bigger win is that it all happens in one session. The specialist asks for new creatives. The same session looks at how creatives performed before, at the product, and at how well it sells in the business report, then makes the creative and uploads it. Nobody opens a design tool and nobody opens an asset manager.

3. The morning shadow run 23:39

A set of rules audits every account every morning and has the proposals waiting by half past seven. Where to move bid caps and target returns, which search terms to exclude, where to add budget because the goals are being met. The other half only watches, whether Merchant Center is healthy, whether the Meta catalogue refreshed, whether there are products nothing is targeting. On the day in the video, seventy-nine checks passed and five wanted attention, and up to eighty-four interventions were queued behind them. Approval goes line by line, and a line you did not approve never runs. I tick, I comment, and all of it is kept as material for the next round.

4. Call prep 25:42

Because everyone sees everything, you also know what a colleague did. Before a client call you get one page. What was agreed, out of the call transcripts and the goals. What work was done, out of Asana and the journal of interventions. Then the honest summary of what got done, what did not, and what is missing. In practice it is one question, what did we do on this project in the last thirty days and what was promised on the last call. Two minutes and you have it. The same question doubles as a handover when a colleague goes on holiday and you pick their accounts up.

5. Ad copy written from the site itself 26:23

I want sitelinks that fit each category, and normally I cannot have them, because I do not know the structure of the site. Here the whole client site is crawled, breadcrumbs and all, so an ad group for children’s bikes gets sitelinks that exist. Sixteen-inch bikes for the smallest, in stock. Twenty-inch for six to eight year olds, in stock. A chat without that context writes special offer, about us, contact for the entire account. We can also see what competitors are shouting in the auction, so if everyone is shouting free delivery I answer somewhere else, on expertise, warranty and stock. Then the guardians check the facts before anything goes in.

6. Rejected products, fixed in one go 27:47

Merchant Center rejects a product because its image carries an overlay, a sticker or a promotional stripe. One sentence fixes it. Take the original photo as the reference, generate the image without the overlay, put it in Cloud Storage, put the public link into a supplemental feed and import it. No designer, no developer on the client’s side, and the same run goes across the whole feed at once. The repair is the boring half. Then you start adding, because Google takes ten more images and five lifestyle shots and Meta up to twenty, while most shops send one. A second image is the cheapest inventory in the account, worth seventy-six percent more impressions and thirty-two percent more clicks.

7. Negative keywords, out of the other platform 29:16

This one rests on a discovery. Google hides a large part of search terms, Sklik does not, and people search the same way in both. So the queries you cannot see in Google are visible in Sklik, and out of those you pull the roots worth cutting. Four steps. Aggregate the search terms from Google Ads, Sklik and Bing in one place, then pull the roots out of the visible ones. Widen each root with the DataForSEO suggest tool if you need to go deeper. One write then pushes the whole negative structure into every account at once. A blind spot on one platform is usually visible on another.

8. Feed attributes filled in for you 29:57

For Merchant Center we fill in seventeen recommended attributes automatically, title, description, brand, product codes, colour, material, pattern, size, age group, gender and the rest. The client’s feed does not have to carry any of them, and the same enrichment goes to Meta through supplemental feeds. This one is a product of ours rather than an internal tool. It is called Boostora, it has been in production for over a year and a half with two years of development behind it, and we sell it on its own. So this is the one part of the stack nobody has to build. You can just have it.

Free download

The full deck, in English

All 67 slides as a PDF, including the ones the summaries above compress into a paragraph. Leave your email and it is yours.

One file, one list. I only write when there's something worth reading.

Part two · Eight advanced applications

The heavier eight

These are the analyses a client used to buy for real money, or never got at all, because nobody could afford to do them by hand.

1. The annual plan 30:54

A client asks for a revenue number at a given profitability, for the year. Underneath runs Greykite, LinkedIn’s open-source forecasting model, over our business report, with a manual correction on small and new markets where the data is thin. Out comes a plan by market and by channel. On one real group of nine markets it forecasts almost forty percent growth. The bid simulator from the Google Ads API then prices that growth, at twenty-nine to forty-nine cents of media for every next euro of revenue. The same data measures retention as orders per new customer within three hundred and sixty days. Retention is an amount you can put on the plan. Lift every market below the baseline up to it and that is worth as much as 1.29 million euros a year, without a euro more in media.

2. Gap analysis 33:44

Two directions meet in the middle. Outwards, the crawler holds every page the client owns and the business report knows how each one converts, so we pull out the pages that sell well and are not being advertised at all. Inwards, we take the hundred or two hundred keywords that are core for this client and find the five closest organic competitors. Then we pull every landing page they rank with and the keywords behind it. Match the two and the difference falls out, missing landing pages sorted by demand, commercial gaps, content topics. This used to be an analysis a client had to buy, at a thousand euros and up. Now it is two hours of machine time while you go for lunch, and twenty minutes of checking. The long version is in its own article.

3. Export analysis 34:47

Every shop has a Merchant feed and the feed has a product_type attribute, so you deduplicate it and you have the shop’s real categories. Those become seed keywords, translated into about ten candidate-market languages, and each goes into keyword research for its own country. Ten to twenty thousand suggestions come back, the AI throws out about half, and what is left is a table where every keyword carries its category, country, search demand and click price. Nine weights then rank the markets. One country came out eight percent under the market at a predicted return of six point one, another fifteen percent over at one point one. With a return of one you do not enter a country. The whole method is written up here.

4. Everything we know about one product 36:20

Take one item, a cat tree, a hundred and fifty centimetres, ninety-eight euros. We know its margin is thirty-one percent and that it sells forty-seven pieces a month. We know its cost of sales is nine point seven percent in Shopping and eleven point two in Meta catalogue campaigns. All of it hangs on the item identifier from the feed. On the right sits the market, where this product is seventeenth of twenty-three shops on price, with a competitor ladder from sixty-nine to a hundred and ten euros. Custom labels then sort products into bands so the good ones get their own campaigns. The number a client needs is the margin minus the cost of sales, never the cost of sales alone.

5. Conversion work out of PostHog 37:29

I have run this on three or four clients and every one ended with a conversion rate that went up meaningfully. The first layer is behaviour through the PostHog API, scroll depth, clicks, dead clicks and errors, by device type. It is heavy data, since a hundred thousand sessions a day is forty gigabytes, so we do not keep a year of it. The second layer is conversion research plus the client’s own analytics, and together they propose the small changes. This page has a problem on mobile, people never scroll that far, that button does nothing. One hour of that work landed very close to a paid audit by one of the best UX people I know, which cost six thousand euros.

6. The website as a repository 38:17

On a few projects we stopped building the usual WordPress site. The site is a repository, static, built in Astro, and the AI builds the whole thing. For service and software clients that means hundreds of landing-page structures aimed at specific queries, with serious tests between them. Two things come for free. There is no public CMS admin, so a smaller attack surface and less to maintain, and the site is fast. This blog is the proof, six or seven hours of design and development, and I write it in fourteen languages. Every change is versioned, so anything can be put back in minutes.

7. Product videos for the feed 39:37

Meta catalogue campaigns take a video and so does Google, and almost nobody has one in the feed. We make them out of the photo that is already there, ten to fifteen seconds of the product from several angles with a few cutaways, at one to two dollars a video. Everything on top is an overlay, benefits, reviews, the price, the closing frame, rendered as HTML exactly like the banners. Then the video goes into the supplemental feed as a product attribute. Because the price is only a layer, a nightly job finds where price or availability moved and regenerates the overlay alone. Expensive once, cheap every night.

8. Page feeds the client never has to send 40:39

Our parametric DSA targeting needs a page feed, and if you ask a client for one you will wait a long time. Often it never comes. We do not have to ask. The crawler already classified every page as product, category, parametric or non-commercial, so the feeds go through Cloud Storage into the DSA and Performance Max campaigns in Google Ads. And since the crawler counts the products on every page, the targeting switches itself. A category that has emptied out drops out of the feed, one that fills up comes back in. There is a bonus in the same crawl. The product page says one price and Merchant Center says another, and we see the mismatch before Google turns it into a rejection.

What eight months of this cost and produced

  • Systems in production, used by about 20 people 7
  • Lines of code in the live systems, with tests 810,000
  • Counting the predecessor we also replaced this year 1.3M
  • The orchestrator alone, priced the old way 2–3 years
  • The whole ecosystem, priced the old way 2 devs × 5 years

PPC is no longer a PPC problem 41:44

Something like eighty percent of our time used to be routine. Exports, clicking, setting things by hand, going through queries, checking ads. That ends. Whether it ends now or in a year does not really matter, because it is not going to be done by hand for much longer. And the work did not shrink. There is more of it than before. It is just finally the work that was never possible.

Here is why it happened, and it is an economic argument rather than a technical one. Automation used to have to pay for itself by volume, which meant it made sense for a firm with five thousand accounts and twenty developers. A keyword tool on the Google Ads API, which I have been writing against for twelve years, was three or four months of work to reach production quality for our own use. Today that same tool takes three days, a new automation takes a week, and it runs in parallel with five other things. One senior with good tools is now enough.

So the discipline is the entry ticket, and the reach into development and data is the edge. You still have to understand PPC. You just also need imagination, data, orchestration and control. The shovel does the rest.

1

Start with what your AI can see

Everyone has the same account logins, so access is not where the difference lives. Pick the one dataset your team keeps re-fetching by hand, load it somewhere a model can query in seconds, and watch how many of your open questions become one sentence. Ours was the daily platform load, and it changed every conversation after it.

2

Put the guardrails in code before you hand over write access

Prompts are requests. Code is a rule. Before anything of yours writes into a live account, decide what simply cannot exist, what has to run as a dry run first, and what spend ceiling belongs to each person. Then have it approve line by line, so an unreviewed line never runs.

3

Reprice the analysis you shelved three years ago

Take the one deliverable you stopped offering because nobody would pay for the hours. The gap analysis, the export study, the product-level economics. Cost it again against a machine that runs it overnight and a person who checks it for twenty minutes. That is the arbitrage this whole talk is about, and the window is open now.

Four more applications did not fit into the talk. The Shopping report Google will not give you, with search terms at the level of a single product, is already written up. Margin inside the conversions, derived feeds and discount codes read in the background are on their way.

Take it with you

Take the whole deck with you

All 67 slides of the PPC camp 2026 talk, in English, as a PDF. Leave your email and the file is yours.

One file, one list. I only write when there's something worth reading.

Frequently asked questions

Why an MCP server and not just calls to the platform APIs?

An API is written for a program that knows in advance what it wants. A model decides as it runs, so putting it straight on the API means letting it write and execute code against a live client account. Our server hands it recipes instead, which carry the mandatory fields and the limits and look the same on every platform.

What stops the AI from breaking an account?

The rules live in code, because a prompt is only a request. A delete operation does not exist, every write runs as a dry run first, the account is checked before it is touched, and each specialist carries a spend ceiling. On top of that every proposal is approved line by line, and a line nobody approved never runs.

What client data goes into the models?

No name, no e-mail, no address and no phone number. The customer is an internal ID that cannot be tied back to a person. What goes in is the economics of the order and the behaviour of cohorts and segments, on team plans with a signed data processing agreement.

How long did this take to build?

Eight months at full speed, from January to the stage in August. Seven systems in production, about 810,000 lines of code in the live systems, used by around twenty people. Without AI I would price the orchestrator alone at two to three years of development.

Is the video the original recording of the talk?

No. The talk was given in Czech and this is an English rebuild, narrated with a clone of my voice and re-animated scene by scene. The original Czech recording goes up on uLab’s own YouTube channel.

Want this running on your accounts?

Everything in this talk runs on real client accounts today. If you want the same wiring on yours, that is what we do.

Talk to me about it →