Key Takeaways
- We pay for traffic to learn, not only to grow. Organic brought 30 to 40 visitors a day, too few to test a positioning or a homepage message, so ads buy the volume.
- Each Google campaign tests one positioning. One landing page per positioning, the same budget behind each, and keywords that match the angle.
- Nobody clicks around the ad platforms. Jim built pipelines on the Google Ads and Meta APIs, so a change is a sentence to Claude, and I run a weekly check on the Google account that keeps a history of every week.
- Claude collected 324 of our competitors' ads. Jim's rival ad board ranks them on how long they've run and how widely they're delivered, and it becomes the brief for Kai's own Meta creatives.
- The results aren't cheap yet. Google sign-ups cost more than we planned, boosted creator posts buy impressions rather than visitors who stay, and Jim puts it down to the creative.
Introduction
This is How We Grow, our weekly log of what we're doing to grow Kai. It's mid-September, about three weeks before our Product Hunt launch, and this week Jim led the topic: paid ads, and how we run them by talking to Claude.
Jim set up our Google and Meta ads and the pipelines behind them. I build the landing pages the ads point to and run the weekly check on the Google account. I started out running ads by hand in spreadsheets during my internships, so I expected an episode about budgets and keywords. Then Jim shared his screen.
Prefer to watch or listen? Here's the full episode
Why we pay for traffic at all
Organic traffic was too thin to test anything
Before ads, the site drew 30 to 40 visitors a day, with a spike whenever an organic push landed. That's predictable, and it's too few to learn from. We had hypotheses to test on positioning, on the homepage message and on the calls to action, and each one needs people seeing it. Put a budget on Google Ads and you can show a landing page to far more of them within a day.
So the first job of our ads is volume for experiments. Google Ads for Kai started in June. Meta started this month, with a second job on top: learning what Meta actually costs us, so that when Jim models the next quarter's marketing budget, he knows what to invest and what to expect back.
The first campaign defended our own name
Before any of that, we had a simpler problem. We were a new company on a new domain with a new name, and the few people who'd heard of Kai typed it into Google and couldn't find us. The first campaign Jim set up bid on our own name. It was very cheap, because nobody else bids on it. A search for "hirekai" now puts us first, though plenty of other things are called Kai, including other AI assistants.
Why not LinkedIn, and why TikTok next
Jim has run LinkedIn ads before. They make sense when a lead is worth a large contract, and they don't for a tool that costs $50 a month. TikTok is different: creators already talk about Kai there, so Jim plans to connect the TikTok ads API and run the same experiment we run on Meta, to compare reach and cost per sign-up.
How the ads run
Here's the whole loop before the parts. Claude reads the account and proposes changes, one of us says yes, the change goes live, and overnight the sign-ups travel back to Google and Meta, where the next read picks them up.
The whole loop. Green reads, red writes, purple is the signal coming back. Only the red steps can spend money. Click it to open it full size.
Each Google campaign tests one positioning
Jim wanted to know which positioning resonates with the market and which one is cheapest to scale. We had 3 positioning statements, very different from each other. I built one landing page per positioning, and Jim put the same budget behind each, on keywords that fit it. The "AI context layer" positioning, for example, bids on people searching for things like calendar MCP or email MCP.
That test has been running since mid-August. For every euro on each positioning, we read the cost of a visitor, whether they bounce or stay, and the cost of a sign-up.
Claude talks to the ad platforms
Jim built the foundation on the Google Ads API and the Meta Marketing API, so any change can go through Claude. He isn't a developer. When Claude told him it couldn't do something, he told it to open Claude in Chrome, go into Meta's platform and figure it out, and after 3 or 4 hours of working through it, it got there. The setup is the fiddly part. Meta wants an app you submit for review. Google makes you apply for API access and wait weeks for it, which we skipped by running Kai's account under Morgen's existing manager account, since it already had access.
Now we talk to the platforms. We ask how a campaign performs, broken down by country or budget, and we make changes the way you'd brief an ad team: bid for conversions instead of clicks, pause this, move that.
What stops it from going wrong. Claude reads the Google account through a connector that can only read. To change anything, it goes through a short list of commands we wrote, each with limits built in (a budget moves 20% at most per change, and a new campaign starts paused). A command is a rehearsal by default, and it only goes live when someone adds --execute. Every live change lands in a log in our repo, and the card behind the account has a monthly limit that no agent can reach.
The two doors. Reading is wide open. Writing passes four gates, gets logged, and sits on top of the card limit. Click it to open it full size.
My side: the weekly check
Landing pages are the easy part now. We have a design system and a knowledge base that tell Claude how the product works and how we talk about it, so a page for a new campaign is fast to build.
What takes time is running the account week after week, so I built a skill for it. Every week I run /ads-check. It reads the account, keeps a history of where it stood the week before, and prints the same blocks every time: whether every ad is serving, the search terms people actually typed, how the positionings compare, which landing pages the data can already judge, and Google's own recommendations, sorted into apply, judge and refuse. When a keyword goes, I change the landing page so it still matches what the ad promises.
My second internship was at an agency running ads for clients: a real estate company one day, a restaurant the next. We updated keywords and budgets by hand in Excel, and it took me half a day per client. The worst part was never having enough context on each business to make good calls. Claude has ours: the product, the brand, the strategy. This morning it stopped me from removing a line from a landing page by asking whether the knowledge base backed it up.
Claude runs it, people still find the angles
Jim's view is that Claude is very good inside the context it has and weak at coming up with new angles. The idea of a landing page per MCP tool came from him, not from Claude. What Claude changes is what happens next. Jim's comparison: the pages I built this week took about 2 hours, where it used to take a team of 6, 3 on the landing pages and 3 on the ads, around 2 weeks.
It also writes everything down. When one of us comes back to the account a week later, nothing is lost, and if we both left tomorrow, the next person could ask Claude for a timeline of everything we tried. I prepared this episode that way. I asked Claude what Jim had done on Meta, got a wall of text back, and asked for diagrams instead.
The rival ad board
Jim runs 2 strategies on Meta. The first is live: creators post about Kai, and depending on how their post does organically, we put budget behind it. The second was starting right after we recorded: our own creatives, short videos, carousels and graphics, to test budgets and costs directly.
For the second one he needed ideas, and there's a public source: the Meta Ad Library, which lists every ad running on Meta. Going through it by hand for every competitor was never going to happen, so Jim had Claude do it.
- Claude browses the library with Playwright, advertiser by advertiser, across companies in AI productivity.
- It keeps the ads worth studying. The board Jim showed holds 324 ads from 6 advertisers (Fyxer, Granola, Lindy, Littlebird, Superhuman and Wispr Flow), across the US and the UK, collected the day we recorded.
- It tiers them on public signals. Tier A ads clear two: a delivery signal (the ad is being shown) and a persistence signal (it has kept running). Tier B clears one. How long an ad has run is the most telling: Superhuman's top ad by impressions had been live for 39 days, in 3 variants.
- Jim picks. He filters by competitor or tier, reads the copy, and marks the ads he wants to learn from.
- The picks become the brief. One click copies them out, ready to feed Kai's own creatives.
The board. 324 ads from 6 advertisers, with each one's ads kept, ads live now, partnerships and longest run.
Picking the ads worth learning from. Jim filters to tier A and marks his picks.
The half that isn't built yet is turning the picks into Kai ads. Jim wants to try the Higgsfield MCP, our design knowledge base, or plain HTML, then keep 15 to 20 ads running every day: check which ones perform, kill the rest, make new ones, and repeat. I'd been running something similar for our Product Hunt launch, studying which visuals and videos work on the launches we admire.
Where the results are
It's early, and the numbers aren't where we want them.
Google sign-ups aren't cheap. Jim's question is whether that's the campaign, the landing page, or keywords that are simply expensive. Sign-ups do come in from Google, at a cost per sign-up well above the one our plan was built on.
On Meta, the creative is the problem. Boosting creator posts buys impressions very cheaply, and visitors who stay are expensive. Jim reads that as a creative problem, which is why he built the board, and why he's raising the bar on what we ask creators for in October.
My read on Google. The first landing pages didn't convert much while Google's algorithm was still learning. Last week I rebuilt every one of them with a hero video matched to its positioning, and the early click-through looks better. The AI context layer is the positioning doing best, which is why the next pages go one level deeper: one per MCP tool that connects to Kai. I'd give it another 1 or 2 months before calling the Google results.
The honest caveats
- The board measures delivery and persistence, not conversion. It says so itself. An ad that runs for 39 days is probably working for someone, and it's still a guess from outside.
- The generation half isn't built. Today the board ends at a list of picks. Whether AI-made creatives from those picks do better is the experiment Jim is about to run.
- The setup costs time up front. Meta's business verification and app review took far longer than the hours Claude spent building the pipeline, and Google's API access only came fast because Morgen already had it.
- Google is behind the plan. It brings sign-ups, at a cost we can't scale yet. That's a start, not a channel.
What's next
More Meta iterations. Jim's own creatives, generated from the board, and a higher bar for creators.
The affiliate program, which Jim is putting a lot of focus on over the next few weeks.
TikTok ads, once the API connection is up, running the same experiment as Meta.
A landing page per MCP tool that connects to Kai, on my side.
Product Hunt in about three weeks. I'm running the launch, and Jim will see how ads and affiliates can support it.
Jonathan is joining us to take over social media, which frees us both up for more growth work.
When Jim's first creatives come out of the pipeline, we'll add them here next to the ads that inspired them.
If you want to follow along, the whole series lives at How We Grow, and the changelog is the receipts of what we ship week to week. Sign up and each issue lands in your inbox, along with early access to what we're building.
