

Episode Description
Fred Vallaeys, CEO & Co-Founder of Optmyzr and author of The AI Amplified Marketer, sits down with Nils Rooijmans, founder of a fully remote PPC agency and one of the earliest and best-known names in Google Ads scripts, to talk about what happens when you actually hand an AI agent control over a Google Ads account.
Nils has spent the last several years moving from scripts, to scripts with an LLM layered in, to full AI agents running on a Claude Code setup he manages himself. Along the way he’s learned exactly how confident an agent can sound while being completely wrong, and exactly how much infrastructure it takes to let one make changes without someone watching over its shoulder.
Here’s what was discussed in this chat:
- Why Nils calls AI agents “interns with terrifying confidence,” and what that looks like inside a live account
- Why Google’s own AI tools carry a built-in incentive that doesn’t always line up with what’s best for the advertiser
- The three-stage evolution from Google Ads scripts, to scripts with an LLM, to autonomous agents
- A real example of an AI agent flagging wasted spend and suggesting negative keywords with a confidence score attached
- What it actually takes to build an agent system safe enough to run without supervision
- Why Nils moved his agent setup off frontier models and onto his own server, running open-weight models instead
- Getting agents out of a Google Sheet and into Slack, so the work isn’t tied to one laptop
- The hardest part of scaling an agent setup across an entire agency’s worth of clients
- Why Nils thinks the real competitive advantage in an AI-first PPC world comes down to asking clients better questions
- What’s next for Nils now that AI can do a lot of what he used to teach
Episode Takeaways
Nils Rooijmans has run a fully remote PPC agency for thirteen years. For most of that time, Google Ads scripts were his edge. He built a name for himself in scripts and automation, taught other PPC professionals how to write them, and built a whole business around that skill.
Now his attention has moved to AI and AI agents. He’s built agents that catch wasted spend, judge search term relevance, and now run around the clock on his own server. He’s also spent enough time managing them to know exactly where they fall apart, and he doesn’t dress that up.
Why AI agents act like overconfident interns
“Increase budgets. Change ROAS targets.” That’s Nils’s answer when Fred asks for the most terrifyingly confident thing an AI agent has ever told him to do. He’s used the line before, and it still holds up: agents are interns with terrifying confidence.
The problem isn’t that the agent guesses randomly. It’s that the reasoning behind the guess sounds solid. Agents pull from generic knowledge scraped off the internet, and that knowledge is always incomplete and sometimes flat-out outdated.
An agent can miss something as basic as the bid limits on a portfolio bid strategy and still hand over the recommendation like it’s obvious. If you don’t know Google Ads well, that confidence is convincing. Nils doesn’t let one touch a live account unsupervised until he’s found exactly where it tends to be wrong.
Google’s AI has a growth problem, not just a data problem
Here’s the obvious pushback: sure, generic AI doesn’t know your account, but Google’s own AI does, right? Nils isn’t buying it.
Google is a public company with shareholders who want growth. That creates a conflict that shows up in every recommendation its AI makes.
“There are forces there that push Google to not only optimize the performance of Google Ads for the advertiser but mostly to optimize its own growth, Google’s revenue,” Nils said.
He points to the well-documented “shaking the cushions” comment from former Google Ads VP Jerry Dischler, who admitted under oath during Google’s antitrust trial that the company adjusts auction pricing to hit revenue targets without telling advertisers. There’s a mechanical reason too. Smart Bidding needs real click data to learn, and that data comes straight out of advertiser budgets.
“There’s another incentive for Google to not always make sure that individual advertisers get the most of their spend, because Google needs them to spend money on the clicks that it uses to train its model,” Nils said.
Same reason he’s never liked PMax much. Too much room for Google to spend advertiser money exploring clicks it wasn’t confident about yet.
From scripts to LLMs to agents: automation on a continuum
Nils’s own setup basically tracks the industry’s timeline. Thirteen years ago: scripts. JavaScript running inside Google Ads, pausing keywords, adjusting bids, managing negative keyword lists.
Three years ago: an LLM layered into that same script, so instead of waiting for a search term to rack up a hundred clicks and zero conversions, the AI could judge relevance from intent alone. Now: a full agent, running in a loop, learning from his corrections as it goes.
“Roughly three years ago, I integrated LLMs, so AI, inside the scripts to make this more intelligent, and these days I use agents,” Nils said.
Each stage did something the last one couldn’t. Scripts gave him speed. The LLM gave him judgment without needing a huge sample size first. The agent actually remembers what he told it last time.
Building an AI judge that catches wasted ad spend
This is the one part of the conversation that’s genuinely useful if you’re trying to build something similar. Nils’s example is an auto insurance client, a $50 to $70 CPC keyword, and Google matching it to “Geico,” to “chopper insurance,” to searches for local offices the client doesn’t even have.
His original script waited for a search term to hit a hundred clicks with zero conversions before flagging it. At $70 a click, that’s $7,000 gone before the system even reacts. The LLM version skips the wait and judges intent right away.
“The AI judge could also explain its reasoning,” Nils said.
It’s not flawless. It correctly caught “car insurance near me” (no local offices, fair call), but it also tried to negate traffic around the Kia K3 on the assumption that cheap cars weren’t worth the client’s time. But the client happily insures cheap cars as well.
Corrections like that feed a confidence score, and the score decides whether the agent can act on its own or has to wait for Nils.
“If that confidence score is above 85%, simply add it,” Nils said.
What it actually takes to build an agent system that works
“LinkedIn posts don’t tell the truth.” That’s Nils on the gap between what people claim online and what it actually takes to run an agent safely.
For Nils, this ia a setup that works: standard operating procedures written clearly enough for an agent to actually follow, context engineering so the LLM gets the right client info without drowning in noise, and connectors that log every single action so a mistake can be traced back. None of that fits in a screenshot.
Fred brought up cost too. Run a million search terms through something like Fable 5 and the bill adds up fast, when a cheaper model or a plain script could’ve handled the first pass just fine.
Running agents on his own server instead of paying frontier model prices
This is the part most PPC conversations about AI never get to. Nils runs open-weight models locally, on his own VPS, using agent harnesses like OpenClaw and Hermes, over a secured Tailscale connection so client data never touches a frontier model’s servers.
“This, don’t do this at home, I recommend,” he said, half joking about how much setup it actually takes.
The math is the interesting part. AI vendors have shifted the cost of computing from server time to tokens, and tokens are the pricier side of that trade. Running his own server lets Nils pay the old, predictable cost instead, and pass some of the savings on to clients.
“They’ve basically figured out how to make using the web orders of magnitude more expensive,” Nils said.
Getting agents out of the laptop and into Slack
Fred’s problem, and probably a lot of people’s: an agent that only works while the laptop is open. Close the lid, it stops. Nils solved this by moving his agents into Slack, running on his VPS, so they keep going whether his laptop’s open or, as he put it, his phone is in the water.
The output isn’t just a chat reply either. One of his agents builds an interactive one-page mockup, HTML, CSS, JavaScript, showing a client exactly what a landing page change would look like, live. A second agent critiques that mockup against CRO best practices before it ever reaches the client.
“They’re both trying to create something that is better than what currently exists and present it to the client in a way that feels like it’s already live on their own website,” Nils said.
Scaling agents across an agency’s worth of clients
“I feel like I’m managing interns again, which I’m not really good at, I don’t like it,” mentioned Nils, on what happens once you’re running agents across more than one client.
His fix was to narrow scope hard. One agent, one job, negative keyword suggestions and nothing else, until the SOPs actually hold up. Client knowledge lives in an MD file that starts with a 23-question onboarding doc and gets updated as things change. He’s building an agent that reads email threads and suggests updates to that file on its own, which is still a work in progress.
Why the real competitive advantage is asking better questions
Fred and Nils land in the same spot from two different angles: whatever edge automation gives you right now won’t last. Give it a year or two and most of what they talked about today will be something any PPC professional can just set up.
“It’s all about asking the right questions,” Nils said.
An AI can’t pull a client’s real ideal customer profile out of a website. It can’t get the actual business objectives behind a campaign, or the thing the client never thought to mention. Fred also mentioned that AI also can’t tell you when a client’s own website is wrong about their own business, and plenty of sites were built on guesses nobody ever checked.
Nils spoke about the technical skills he used to teach are increasingly things the AI can teach itself. What’s left for him, he says, is the part that takes actually understanding a client’s business, the questions an AI wouldn’t know to ask.
Episode Transcript
Frederick Vallaeys: So give us an example. What’s the most terrifyingly confident thing that an AI has told you to do, where you’re like, uh-uh?
Nils Rooijmans: Increase budgets. Change ROAS targets.
Frederick Vallaeys: Hello and welcome to another episode of PPC Town Hall. My name is Fred Vallaeys. I’m your host. I’m also CEO and co-founder at Optmyzr, a PPC management tool. So for this episode, we brought back one of our favorite guests, a great PPC expert and influencer who’s been sharing great material for a very long time.
His name is Nils Rooijmans, and most of you probably know him as one of the original scripts guys. But lately, scripts maybe have fallen a little bit out of favor. I don’t know, we’ll ask him that. But certainly the thing people want to talk about is agents and AI, and how AI can manage your Google Ads account. That’s something we see on social media, we see it on YouTube.
So who better to ask does this actually work than someone with all the experience of Nils Rooijmans. So let’s bring Nils into the show and let’s get rolling with this episode. Nils, thanks for coming back onto the show.
Nils Rooijmans: Hey Fred, thanks for having me. Always a pleasure.
Frederick Vallaeys: Great. So before we jump into AI, where are you calling us from today?
Nils Rooijmans: Yes, so I’m currently in Amsterdam. Actually, let me show you, I live on a houseboat in Amsterdam. Currently it’s summertime in Amsterdam, we have 30 degrees, so I can jump in the water and use my little boat to enjoy summer in Amsterdam, and have some fun in the city, and PPC.
Frederick Vallaeys: Wow, okay, so beautiful weather in Amsterdam, you get to swim in the canals. Do you actually have time to do this? Has AI freed up your time, or are you busier than ever?
Nils Rooijmans: Yeah, probably just like you, I’m tinkering way too much with all the AI and the technology. I just love playing around with new technology and discovering what it can do to improve my productivity and the results for my clients. And these days AI is moving so fast, new opportunities popping up almost every day.
So I find myself both experimenting way too much with AI and AI agents, but also, unfortunately, managing teams again. Because one of the reasons I started my remote PPC agency 13 years ago was that before that I had an office with employees working for me.
I was more into SEO SaaS tooling, and one of the things I discovered in that company was that I’m not really good at managing people, and I don’t like it that much.
I’m sort of a nerdy guy, I like to automate things and set up the processes and then have the computers do the work. So with the recent developments in AI and agent technology, I thought, well, let’s try that again. But then I discovered that agents are a specific type of AI that needs a lot of management and handholding.
So yeah, I find myself being very, what do you say, not disappointed, but sometimes I feel like, come on, this agent should have fixed this already, and it should have understood that problem.
Frederick Vallaeys: Yeah, it’s weird, because sometimes the most complicated things, it’s boom boom boom boom, here you go, and it’s like, wow, that would have taken me a whole day. And then something simple that would have taken me 30 seconds, it’s crunching for 30 minutes and eventually says, sorry, can’t find it, there’s something wrong, there’s something it can’t find, or it gets stuck somewhere.
So yeah, challenging. But to quote Nils Rooijmans, they are interns with terrifying confidence. So I guess these are your agents that you’re managing. So give us an example, what’s the most terrifyingly confident thing that an AI has told you to do, where you’re like, uh-uh?
Nils Rooijmans: Increase budgets, change ROAS targets. It’s, sometimes it’s the reasoning behind it. So currently these agents, most of the way that people use them, they are grounded in this generic knowledge that is in the LLMs, right, the base model. But that knowledge, that’s aggregate knowledge of what’s out there on the internet, and it’s always incomplete, and it uses that PPC knowledge for its reasoning.
So it might come up with ideas that really don’t make sense for specific clients, because it lacks the strategy that we’ve implemented for a specific client, or its reasoning is based on outdated information about the Google Ads platform, or it simply misses things like, for instance, bid limits in portfolio bid strategies.
So it sounds really confident, and the reasoning behind it, if you’re not a PPC professional, you might think, this sounds reasonable, let’s let the agent do its thing. But very often it’s at a level that, yeah, you just don’t want the agent to make that change.
Frederick Vallaeys: Yeah, very interesting. So you have these overly confident interns that are your agents, and you say one of the biggest problems is they just use this aggregate generic data that may be outdated from Google. Now the solution would sound like, well, then why don’t we just have Google’s AI do it, because their information isn’t outdated, they know everything about your account. But I think you’re skeptical about that too, right? So talk a little bit about that.
Nils Rooijmans: Yeah, that’s a good one. There’s a couple of reasons. First of all, of course, Google itself doesn’t know the intricacies of your client’s specifics, right, the ideal customer profile of your client, the business model of your client.
These are all things that you, as a PPC professional, have to translate, the business objectives of your client, into the strategy that you implement inside Google Ads. And there’s a lot of nuances, a lot of client-specific details that Google initially isn’t aware of.
So you would also have to feed that to an AI that lives inside the Google Ads platform. But I think there’s a bigger challenge here, and that’s simply the fact that Google operates as a company in a capitalist society. It has many stakeholders, and one of these stakeholders, next to, of course, us PPC professionals and Google’s end users, the advertisers, the employees, there’s the shareholders, and the shareholders want profits.
So Google is actually obliged to make a profit, right? So there is forces there that push Google to not only optimize the performance of Google Ads for the advertiser but mostly to optimize its own growth, Google’s revenue.
Frederick Vallaeys: Yeah, they want to optimize the ad auction results, and if one advertiser falls by the wayside, then so be it, right, as long as they keep the majority somewhat pleased.
Nils Rooijmans: There you go. Yeah, because in the end that will be better. But also, unfortunately, Google has proven that, I wouldn’t say there’s malicious behavior, well, there’s always bad people, but they’ve shown behavior where they are simply shaking the cushions and artificially increasing CPCs just to make some more money, to generate numbers that will make the market happy. And I think there’s already proof for that.
Frederick Vallaeys: Well, that’s the famous Jerry Dischler quote, right, “we were shaking the cushions.”
Nils Rooijmans: Yeah, well, and this is sort of a side topic here, but the auction is complicated, and even though Google does disclose certain elements where it is forcing people to bid higher, for example, the top of page threshold. Google always said you’re bidding more than your next competitor, and they’d sort of said, well, there was also a threshold to be at the top of the page, but people didn’t understand that meant you were actually competing against an internal setting from Google that was like, here’s the minimum price to show at that level.
And maybe that’s ultimately the thing where, so I used Fable 5, the latest model from Anthropic, to do a visualization explaining how the ad auction works, and if you ask it, it gets it mostly right, but it misses some of this nuance. It’s not exactly a secret anymore, but it’s not the most common thing that’s out there.
So it’s like, well, I’m going to give you the more generic version of this whole thing, and then if you see, well, that’s how it starts bidding again based on these generic pieces of advice, then yeah, you’re going to miss some opportunity. And obviously the people listening to this call, and the people you work with, we’re not interested in average, right, we’re in PPC as experts because we want the very best results from this, and that’s where it falls apart.
Frederick Vallaeys: Exactly. Yeah, so that’s why I always like to say you need an AI to fight Google’s AI. That’s why I’m heavily investing in AI.
Nils Rooijmans: And another aspect to this discussion is also that an AI learns through trial and error, right? So the machine learning that’s backing up, for instance, Google Smart Bidding, it needs a lot of data to predict the conversion value of the clicks that we’re after.
And to create that model, it needs a lot of data, and the data is being generated by the clicks that we pay for. So there’s another incentive for Google to not always make sure that individual advertisers get the most of their spend, because Google needs them to spend money on the clicks that it uses to train its model.
So I think that’s one of the things we’ve seen happening with Performance Max in the early days. As many PPC professionals know, I’m definitely not a big fan of Performance Max. One of the reasons is that it left way too much room for Google to explore new growth opportunities, where it was spending your money on clicks where it had very low confidence in the predicted conversion value.
Frederick Vallaeys: Yeah, so basically we were paying for the learning of the machine.
Nils Rooijmans: Yeah, a bit of the Google entry tax, just to be able to play, you have to build up that data, and that can easily cost $10,000 or $20,000. And the problem is, you could have already told it that these search terms were not good ones to go after, but there’s no way to communicate that for the most part until it learns by itself, and that’s the frustration always.
Frederick Vallaeys: But now you talked about AI monitoring AI, I’ve talked about automation layering in the past, sort of the same concept. So what I’d say is, you have to use Google’s bid management, you really have no choice in that, right? And even if you did have a choice, while Google has more data about every auction, Google is the only one that can set a real-time bid.
So there are benefits in that, but I very much agree with you, you need something to monitor that and figure out the anomalies, and sort of where we need to rein in some of that loose spending that Google may have. So when it comes to you, and being such a scripts expert, are scripts part of this monitoring? Is it other AI agents that monitor agents? What does your process look like?
Nils Rooijmans: Right, yeah, that’s an interesting question, and that might be a good opportunity to bring in a couple of slides of a presentation that I recently gave. So let’s start here. Yes, so the way I look at it, automation lives on a continuum, right? So when I started my remote PPC agency roughly 13 years ago, scripts were the new thing in town, right? We had automated rules in the platform, but they were relatively limited in what you could do with that.
And scripts allowed us to manipulate a lot of entities inside the Google Ads account, like, for instance, keywords, you could add them, you could change them, you could pause them, you could change individual bids, you could create new ads, you could change landing pages, but you could also add negative keywords. The good thing about scripts was that if you know how to code, you could create JavaScript scripts that live inside the Google Ads platform, and that would help you manage negative keywords.
Roughly three years ago, I integrated LLMs, so AI, inside the scripts to make this more intelligent, and these days I use agents. I think going through this evolution of automation for this specific use case will explain some of the bits that are currently challenging with using AI, but also very promising.
So let’s quickly go to a very concrete example: wasted ad spend. We want to reduce the wasted ad spend, because, well, one of the bigger challenges we have these days is that Google is increasing the real estate for AI Overviews on Google search, right, and it’s pushing down organic listings but also our ads. And there’s only one way for us to show in these AI Overviews, and that’s to use either broad match, or AI Max, or god forbid PMax.
But if we start using these features of the Google Ads platform, we basically introduce a big challenge, and that’s that it can do magic, but it will also generate a lot of irrelevant clicks. So here’s an example for a relatively high CPC keyword, “auto insurance quote online.” Google will match it to search terms like “car insurance near me,” but we don’t have local offices. It will match it to “Geico,” which is a competitor, hard to convert.
It will match it to “chopper insurance,” which is a certain type of motorcycle, but we don’t insure choppers. And “cheap car insurance,” well, the USP for this client isn’t so much about being cheap, it’s more about service. And then there’s the average CPC being roughly $50 to $70, right? So you can imagine that already, with a relatively small number of clicks, you’re wasting a lot of money.
Now you want to stop the wasted ad spend, and you also want to add negatives to increase the signal that you give to Smart Bidding, maybe we can get back to that later. But to do so in the Google Ads interface just simply takes ages, because the interface is slow. You have to create filters, you have to look through all the search terms that pop up in your search query reports, and then you have to click them and start negating them, decide on what level, it takes ages, right?
So enter the age of scripts. I created, back 12 years ago, a script that monitors the search query reports, and every time a certain search term has had over a certain number of clicks, let’s say 100, and zero conversions, it would add it to a Google Sheet, including the KPIs, the numbers, the metrics. And then, inside the Google Sheet, me or my team members could indicate what to do with that specific search term.
We could negate it as an exact match at the campaign level, or as a phrase match at the ad group level, or we could add it to a negative keyword list. Or if we thought the search term was relevant and it was allowed to spend a little bit more, we could say simply ignore it, so the script wouldn’t suggest it the next time it runs. Now, this is already great, but it’s very deterministic and it requires a lot of click data, and, you know, as you can see, the price of $70 per click, 100 clicks, that’s already $7,000, right? So it’s a lot of money.
So three years ago, I created this script where basically I added an LLM to it. So the Google Ads script, next to using these click metrics and conversion metrics, uses an LLM to decide, or basically to judge, whether or not that search term is deemed relevant. So I created this function, “suggest a negative,” that also uses the LLM to basically judge the relevance based on the intent behind the search term, and the AI judge could also explain its reasoning.
So the big advantage here is that you don’t need to aggregate all these clicks before the script can make a decision, right, you don’t need 100 clicks before it can say this is irrelevant, it simply looks at the meaning. And sometimes it gets it right, as in “car insurance near me,” the AI judge had a good explanation of why it thought we should negate it, because we don’t have local offices.
But there’s also an example of the Kia K3, which is a specific type of car, a low-end type of car, and it thought we wouldn’t insure it because it was a cheap car, but of course we were more than happy to insure cheap cars, so that’s something to ignore. And then me or my team members can read the explanation of the AI and feed back the reasoning, and that’s the third part, where the agent comes in, because this is my current setup, with a Claude Code agent that’s doing the job for me. We can go into detail if that’s interesting, but quickly, the biggest difference between the script plus the LLM and the agent is that the agent is in a sort of continuous loop. It’s constantly learning from the feedback that we provide in the Google Sheet. So we basically add feedback, like, well, you got it wrong because we also insure cheap cars, or, this is a great example, we don’t have local offices.
Frederick Vallaeys: And that’s a great example then of the closed loop methodology, right, where you teach the AI how to do it better next time. And over time, have you seen any specific instances where it does get better? Have you been able to quantify that in any way?
Nils Rooijmans: Yeah, and this is the interesting part, because, it’s a little bit small here, but there’s a column that has a confidence score. So the confidence score is basically part of the function that the agent uses. It’s like, there’s a skill, and part of that skill is a tool, and that tool forces the agent to compute a confidence score for the suggested negative keyword.
And if that confidence score lives above a certain level, then I feel, me being liable for what the agent is doing, I feel confident enough that the agent can automatically, without me supervising it, add it as a negative keyword. And if that confidence score is below a certain level, then it needs to wait for my feedback in the Google Sheet. Based on that feedback, it gets better at predicting the right confidence scores.
So when I started off with this agent, that confidence score was sort of like a lever, right, so I just told it to never do anything without me in the loop. And now I can say, okay, if the confidence score is above 85%, simply add it, but just make sure that you log the results of adding that negative keyword and send me an email with what you’ve added, and where.
So I’m always there to basically validate that it hasn’t made a mistake. But these days I feel pretty confident it can do it automatically if the score is above 85%. And yeah, it gets more confident the more feedback we give it.
Frederick Vallaeys: Yeah, this is brilliant. But talk a little bit, so I think we jumped from a script with an AI in it, and that AI isn’t really an agent, right, that’s kind of like an API call to a single chat response, a thing. But then you said now you’ve got a tool added, and an agent. So walk us a little bit through that evolution, from AI chat to AI agent, and the skills and the tools and the connectors that you bring into this, because I think that’s sort of the next level that a lot of people are starting to explore as a possibility.
Nils Rooijmans: Yeah, so that’s also why I think it’s much harder than most people think. So currently, these days, if you’re a PPC professional, and, you know, during your morning coffee you open up LinkedIn, you’ll see a lot of LinkedIn posts with people claiming, “ah, I’ve connected Claude Code to my Google Ads and it’s managing my Google Ads account, I did amazing audits.” So people, there’s FOMO, right, fear of missing out, and people are like, “ah, why can’t I get this to work?”
Well, there’s a reason for that, LinkedIn posts don’t tell the truth. And it’s a lot of work, honestly, it’s really hard. So to come up with a good agent infrastructure, you really need to think about a lot of things. We can discuss privacy, security, safety, liability, these are all very important topics. But even if you ignore all that, setting up an agent system that really works is hard, because you have to create the skills that include all your standard operating procedures on how you manage your Google Ads, for instance, negative keywords.
You have to do something like context engineering, where you inject the right information into the context for the LLM, so it can make the right decision about whether or not it should include or exclude certain search terms in its suggestions, based on information about your specific client and also the way you set up the account. So that’s also not that easy.
And then you have to make sure that the agent has the right connectors, to, for instance, the Google Ads API, to process the actions that you wanted to take, in a way that’s safe, and that also logs the results, so that you can look back to see what went wrong if you did. So there are many individual pieces that you have to fix before a setup like this is really ready to be part of your operations.
Frederick Vallaeys: Right, yeah, and I very much agree, there are many challenges as you start to build on this. One thing I’m curious about, do you have a favorite AI, and do you use this in an API mode, or do you just buy the subscription to an agent? Because if you’re going to run through the API, for example, the cost can add up quite quickly. I mean, the example I keep giving is, if you have a million search terms that you’re evaluating, that’s a significant number of tokens.
And if you’re using a really high-end model, like Fable 5, which is definitely overkill for that kind of task, but if you happen to do that, you could end up with a $10 bill for a single search term analysis. And then it’s like, well, why did I have the LLM do this, when I could have used the more deterministic thing, like a script or a tool that just looks at the numbers as a first pass, and then maybe tells me, here’s the hundred search terms that require further analysis, and that’s where you spend some of your tokens. So what does your stack look like from an AI vendor standpoint?
Nils Rooijmans: Yeah, this is a great question, and this is exactly what I’m talking about, as in, these are the types of questions you have to answer when you really dig into the weeds and start setting up the system, because if you want to scale it in operations, it can get very expensive very quickly. So, like you mentioned, I first do the deterministic part on the big data sets, and then I have my scripts, which are also part of my skill set. So an agent has skills, and part of those skills can be scripts that do something with the data, for instance, pull the data from the Google Ads platform, do some initial analysis and n-gram analysis on the search terms, to present that data.
Frederick Vallaeys: Let me follow you on that, just to be really clear, because you said “scripts,” but I think at this point you’re not talking about Google Ads scripts, you’re talking about, like, a Python script, or something, a piece of code that—
Nils Rooijmans: Yes, okay, exactly.
Frederick Vallaeys: —runs by your—
Nils Rooijmans: Yeah, so it can be TypeScript, it can be JavaScript, Node.js, it can be Python, the programming language isn’t the interesting part of it, but a deterministic piece of code that does something with Google Ads data before it gets passed to the LLM. Because once it’s in the context window of the LLM, and the LLM starts reasoning with it, the cost will increase, but also you don’t want too much data in a context window, because then the quality of the reasoning will degrade.
So you have to think about that context engineering part, and deterministic tools, the Python scripts, to feed it with the right information before things get expensive. And then you have the different LLM models, because if you use, like, the latest Fable, or the latest version of Opus, deployed Opus, these are very expensive, but for many of these tasks you don’t need them, as in cheaper models through the API, like a Haiku, you can get more tokens for lower spend, with similar results, but you have to figure out which one is best. And then there’s the data privacy scenario, where you have to think about, am I putting my client’s data into a system that’s going to train on this, and then potentially expose it.
Frederick Vallaeys: And so, I was going to ask, what about the open-source models, or locally run instances? Is that something you’ve looked at?
Nils Rooijmans: Yeah, so currently, I’m experimenting with a completely different setup, where I have, this, don’t do this at home, I recommend, so I’m using OpenClaw and Hermes, which are sort of like harnesses for agents that can run fully autonomous, combined with local, open-weight models, but I run it on a VPS. So I have a VPS, I have a Tailscale connection to my server, so that it’s all secure. All the data I send there never gets exposed to any of these frontier models.
Frederick Vallaeys: It just runs on your VPS, that’s your virtual private server, then, right, that’s something that you own, it’s not leaking data, it’s just you access it, you get the output, but it goes nowhere else.
Nils Rooijmans: That’s correct. Yeah, so I’ve made sure that my computer is the only one that’s able to connect to that virtual private server. All the data that I send there stays there.
Frederick Vallaeys: Everything runs, nowadays. We’ve never really been able, at Optmyzr, to do a proper analysis of all of your ad text. So think of it like an n-gram for your ad text, but where it goes beyond the specific words that you use, like, what is the meaning of those words, “free shipping” and “free delivery,” or “quick delivery,” these are all things in that same vein.
Nils Rooijmans: Sorry, video’s frozen again, but we’ll continue going here. But now, thanks to these local models, we can actually install that, it’s an open source model, and we can actually run that data through it. It takes a bit of time, but what we’re paying for is the server time, as opposed to the token cost. And that’s actually a really interesting thing about how the web is evolving, in that we used to pay for server time, so when you run your VPS, you pay for CPU time to Amazon, or whoever your vendor happens to be.
Frederick Vallaeys: But now the AI vendors have basically changed that. And yes, you’re not paying for the server time, you’re paying for the tokens that are being processed during that time. And guess which is more expensive, it’s the tokens, using inference to run on those servers.
Nils Rooijmans: So they’ve basically figured out how to make using the web orders of magnitude more expensive. But if we can revert that, take an open-source AI model, run it on a server, now we can pay the traditional cost of operating something on the internet, and we can pass on those savings to our customers. So again, it’s one of these optimizations that goes deep into the tech and how the architecture is set up, but that’s where we’re having some fun with it.
Frederick Vallaeys: Nice. Yeah, yeah. Hey, another question for you, Nils, is like, one of the things I struggle with the most in AI is that a lot of the stuff lives locally on my machine. So if I set up my agents on my laptop, and I close my laptop at night, and I don’t have it plugged in, the next morning I open it up, it’s like, “hey, here’s 15 things that I should have done, but I missed it because the computer was not on.” Or you go to San Francisco and you see people during rush hour commute running to the train with their laptops open, it’s like, why are they doing this? Oh, well, they’re running agents, if they close the lid, the agent stops working.
So I’ve been thinking a lot about how do we move this stuff into the cloud, right, let the agent do what it does, but the surface for me to consume it, like, why do I need my laptop to see what keyword suggestions came out of it? Why can’t I do this on my phone, which is a different device, it didn’t run the analysis, but it should be able to expose that analysis and let me make the decisions. Or even better, I should be able to send that to a teammate who has their own computer and do it there. So how have you thought about instrumenting these things? And what you showed before was in a Google Sheet, right, that can be shared with everyone, but is that still the methodology, or have you evolved beyond that?
Nils Rooijmans: Yeah, yeah, so my current thinking is, it’s like, the AI community is sort of moving towards having AI assistants in your existing communication channels, like, for instance, your WhatsApp, or your Slack, or your Discord. And harnesses like OpenClaw or Hermes make it very easy to set up these types of integrations, where you have multiple agents that you can chat with, in the environment that you and your team members are already working in.
So, for instance, I have on my VPS, I have an OpenClaw running that’s connected to Slack. I can simply use my mobile phone, my Slack client on my mobile phone or on my desktop, to communicate with that agent. I can throw my phone in the water, I can close my laptop, OpenClaw will continue to run on the server, it will do the job that I assigned to it, and hopefully it does a great job, and it will send the response back to Slack, including, for instance, a link to a Google Sheet, if that’s what I’ve instructed it to do, or a draft post for my newsletter, or a blog post, or an upgrade to my slide deck, or an analysis of the Google Ads account that I’ve inherited from another PPC professional, whatever.
Frederick Vallaeys: So rather than using these things called “artifacts,” that Claude or OpenAI will generate, but that just live in an MD file, or live locally on your machine, you’re asking it to generate a Google Slides, or generate something, and then put that in Slack, which is also team-accessible, and that’s how you make sure everyone can get to it, right?
Nils Rooijmans: Yeah, yeah. So these are also sort of like artifacts, but just more accessible to, you can have it create anything, in any place, as long as you also ask it for the connector. So, for instance, one of the things I’m currently working on, I’m really excited about this, I have two agents.
One’s responsibility is to look at the search terms and the landing pages, and come up with suggestions to improve the landing page. But my clients, they love getting these types of suggestions if they can immediately visualize how it would look.
So what I actually ask the agent to do is to build a one-page website, so it’s HTML, CSS, and JavaScript that mimics the current landing page of my client, but also has the improvements already in the page itself. So it’s interactive, because it’s a single-page web app, with HTML, CSS, JavaScript, that’s being generated by agent A, and agent B is critiquing that landing page, based on CRO best practices, plus the things that are showing up in the search term report, and so on.
So they’re both trying to create something that’s better than what currently exists, and present it to the client in a way that feels like it’s already live on their own website. That’s, yeah, that’s currently not fully functioning yet, but I’m really excited about ideas like that.
Frederick Vallaeys: Yeah, that’s very cool, always something new to build, and pushing the technology to the limits. One thing we started to realize, when we did the updates for our LinkedIn carousels with new product feature updates, we would originally go and take screenshots from the app itself, but there’s a lot of detail in the app, and really, when it comes to a carousel, you’re just trying to convey the high-level message, so you don’t need to show every little bell and whistle on the page.
And so we found that, yeah, because the AI can read the CSS and the HTML of that page, it can look at what it looks like, it’s able to reconstruct that very beautifully, and it can then get rid of the stuff on that page that didn’t matter, and make something that’s much more compelling for communication, right? And it’s really, ultimately all of this is about communication. Like, how do you communicate in the right format, whether that’s slides, whether that’s a carousel, whether that’s a doc, an MD file, and how do you put the right level in there for consumption of who’s going to be using it? And in the case of humans, those visuals do help quite a bit.
But, yeah, I’m kind of curious, like, when you scale, Nils, and you obviously have an agency, so you work with a number of different clients, there’s different inputs, different MD files, that contain instructions, or preferences, or learnings from other efforts, how do you maintain that?
Nils Rooijmans: Yeah, it’s terrible. I feel like, again, I feel like I’m managing interns again, which I’m not really good at, I don’t like it. It’s really hard, because I have multiple agents doing multiple things, and sometimes I get lost. I sort of think about project management agents these days.
But so, when I first got that feeling, I decided to take a couple of steps back and start with very specific tasks, like, for instance, the negative keyword suggestions, and first complete that in a way that I feel confident that I’ve ticked all the boxes, as in, my SOPs are okay, I know how to get all the relevant information from the client in a very efficient way, I know that this agent will simply do that job perfectly, and it’s not allowed, it’s not instructed, to do anything else than just suggest negative keywords. So it’s not auditing accounts, or suggesting ad copy changes, or whatever.
To get that information in a way that the agents can actually use it is another challenge, because when I onboard a new client, I simply send them a link to a Google Doc, which holds, currently it’s like 23 questions they have to answer. I convince them to, you know, grab a cup of coffee, put on some nice music, and spend one hour answering these questions.
And then, after that, usually we have another video call for one hour, so that I have all the information I need to set up their Google Ads account. But there’s a lot of information that goes back and forth also after the call, through email. So currently I have an MD file that holds all that information, but it needs to stay up to date, right?
And so I’m trying to create an agent that monitors my email conversations with the client, and based on what it reads, suggests improvements to that MD file, so that MD file always stays up to date. I’m not there yet, the agent is not doing the job as good as I wanted it to do. But yeah, so that would be an idea on how to stay on track of keeping client-specific knowledge within that team of agents that are working for that specific client. So I have—
Frederick Vallaeys: No, go ahead and finish.
Nils Rooijmans: Yeah. So that would be a client MD file that would live in the folder that the agent uses to get client-specific information.
Frederick Vallaeys: Yeah, and I find that fascinating. So I think one thing you kind of touched on there is that the value of an agency is maybe in having these conversations with the clients, because talking to them leads to better instructions, better markdown files, which help the agents become smarter, and your overly confident intern agents actually become useful interns. But that can only happen if you have those conversations. So even in my company, I’m thinking more about, you know, the value of the humans is that they’re good at talking to each other, and sort of spitballing and coming up with new ideas.
And if that can translate, because institutionally, I think a lot of that has historically been lost, right? Even, you know, I look at my sales team, and how many calls they have on a daily basis, that information was traditionally, for the most part, lost. I mean, one thing here and there would come out, like, okay, here’s a huge prospect, let’s go build this thing for them, but all of the medium-sized ones, we would lose that signal.
But now there’s no reason to lose the signal, because the AI should be listening and finding trends, and figuring out that, oh, these trends mean there’s a new feature request, so let’s go file the feature request. And here’s an idea of something that confuses people, maybe that should be a blog post we do. And then the blog post gets written, we see how many people engage with it, okay, you get your feedback loop, so the next time you write a blog post, it’s going to do the things that work better. But my question for you is, as an agency, how do you see the agency of the future in an AI world, and how is that different from the agency that you started in the days of scripts?
Nils Rooijmans: Yeah, yeah, that’s a really good question, as in, when I started my agency, let’s say 13 years ago, I was convinced that, thanks to Google Ads scripts, I could create a competitive advantage compared to competitors that were still doing things manually. And I did, I mean, it worked for many years. And then three years ago, when LLMs, and, you know, the basics of agent technology, were already visible, when that came, I thought, oh, I could do the same again.
Now I think, oh no, this competitive advantage, at least the technical part, is not going to last, because the way AI technology is evolving these days, with the speed, one year, two years from now everyone can set up a system like the things we’ve been talking about today. Currently it’s not easy, I think, but in a year or two years from now, everyone will be able to do so.
But then the question becomes, so how do we discriminate ourselves from our competitors? And I think it’s all about asking the right questions, right, it’s the information that we need to optimize our Google Ads account. Well, PPC knowledge is part of it, PPC best practices are part of it, but most of the things that really make a difference is about really understanding your client’s business, your client’s ideal client profiles, stuff like that.
So the information that is not readily available for existing LLMs, AIs, to get that information explicit, through asking the right questions, that is how you create the discriminative value. Just like, for instance, currently in the Google Ads platform, if you and I were to have the exact same client, but your conversion tracking would communicate profit values, and mine would only communicate revenue, chances are that you would be much better at coming up with a Google Ads strategy that would maximize profits for your client than I would be, simply because the input is much better, right? So I think that’s where we’re heading.
Frederick Vallaeys: And also, interesting point you make, is that don’t assume that the AI has access to perfect information, because you might say, “hey, go and look at the website of this new client that I have, and figure out who is their ideal customer profile, and how do they position themselves.” Sure, the AI is going to come up with the answer, but that doesn’t mean that the website that was originally built actually reflects what it should have been.
And that’s the disconnect, right, and so you often go and talk to the business owners, and you’re like, well, why did you put this on the website? And nobody really knows, it was just, well, the designer said it looked nice, so that’s what we went with. But who are you actually trying to sell to? Oh, well, it’s somebody completely different. And so that’s where I think it’s so useful to have these conversations, and push past what the AI can see, and then, like you’re doing, basically reconstruct the correct thing.
And then, in the future, now you can start these feedback loops, where, okay, we actually got the thing to say what it should say, and now we can start measuring, is that leading to results, like you’re saying, with profit measurement, is it driving profitable ad clicks, or is it not? And then the feedback mechanisms can kick in, and everything can start self-optimizing. And I think that’s sort of that future vision, we’re not quite there yet, but, so, go ahead.
Nils Rooijmans: Yeah, you bring up an interesting point as well, because what I’ve noticed is that if I have an AI monitoring the communication with me and my client, it often points out contradictions, as in, the client, one day they say A, next day they say not A, as in, this is a very concrete example, they’d say, “we should exclude these search terms,” and a month later they’d say, “no, no, let’s try and target this.” But the AI, because it doesn’t forget, it says, “oh, well, wait a minute, there’s a conflict here.” So clients actually appreciate that kind of feedback, as in, “oh yeah, this makes me think,” these are little details in their business strategy that they weren’t aware had a conflict in their own thinking. And the AI is relatively good at surfacing these.
Frederick Vallaeys: Exactly, and it’s fine to change your mind, but to understand why is very useful. Now, in your business, so you had an agency, and then you saw scripts, and maybe scripts weren’t the end-all-be-all to automate everything, so you built a business around teaching people scripts, and did very well with that. And now, with AI, where do you see this headed? Like, what is the Nils Rooijmans future, is it the AI-automated agency, is it teaching?
Nils Rooijmans: I’m out of a job. I’m out of a job.
Frederick Vallaeys: Yeah, oh, that’s a good thing, yeah, that’s good.
Nils Rooijmans: No, but, seriously, as in, like 10 years ago I was creating these JavaScripts for the Google Ads scripts myself, me doing the coding. Then I hired junior developers, and I taught other PPC professionals how to create scripts. But then there’s the LLM scene, and I was like, okay, these LLMs can replace my developers, because the LLM can create the scripts.
I was like, okay, but I still had to teach the LLM the specifics of the Google Ads API, and also how I like to create Google Ads scripts, with my coding style, and so on. So I taught the LLM how I created scripts, and then I asked it, well, can you teach PPC professionals without any coding skills how to create Google Ads scripts? And the AI simply created the course for me, that I was giving to my customers. So that was a funny thing, so yeah, the AI basically automated my education as well. I’ve even created a custom GPT that is, it’s the Script Sensei.
Frederick Vallaeys: Script Sensei. The Script Sensei.
Nils Rooijmans: Yes, the custom GPT, we can put it in the show notes, that will help you either create all the scripts that you can come up with, or it will help you ideate. So basically the LLM, based on the way you manage the accounts, will come up with ideas to use Google Ads scripts to improve that. And it can teach you how to create a script yourself, if you’re still interested in that. So yeah, the LLMs are better than me at that currently. (laughs) Not sure if that, yeah.
So, the last part of your question is, where does that leave me? I think there’s still a place for PPC professionals, like we just discussed, that know how to translate business objectives into a digital marketing strategy, and asking the right questions to surface the information that an AI currently does not have access to. That is the biggest skill.
I hope, I hope I can still use my experience and my knowledge to come up with these kinds of questions. So that’s where I see myself in the foreseeable future, and hopefully that still creates value. But yeah, the future is really uncertain these days.
Frederick Vallaeys: Yeah, but the future can be bright, it depends on what we make of it. And I think the people listening to the call today, and the podcast today, certainly the ones that are interested in exploring how AI can make them more efficient and productive, and push into new boundaries, so, yeah, I think it’s going to be good.
And I think, like you said, it’s about talking to people, right? So it frees up time that you would have been doing stuff, and now you can talk to people and ideate, and then, with those new ideas, you’re also not stuck, because you can’t do anything with them, like in the old days, when I first ran a consultancy, I was spending so much time talking to people, didn’t have enough time to actually implement the strategies that we talked about, and that’s where scripts were helpful.
But now, looking at AI and its ability to do these things, if you specify really well what it needs to do, it is very promising. And, like I said, it’s not perfect, but it keeps improving so quickly. So I’m excited about the future, and glad to see that you are, for the most part, too.
Hey, Nils, thanks for hopping on the podcast today. If people wanted to learn more about you, the agency, the courses, where should they go?
Nils Rooijmans: Yeah, so, Google my name and my website will pop up, nilsrooijmans.com, and you’ll find both, all the scripts, and the link to the script site that will help you create the scripts there.
Frederick Vallaeys: So thank you again, Nils, for being on the show today and sharing all that you do. We’ll put all of those links in the show notes at ppctownhall.com, so take a look at that. And if you’ve enjoyed this episode and want to see when the next one hits, make sure to subscribe. With that, we’ll wrap it up here, and we’ll see you for the next one.





