Writing · Growth · Aug 6, 2026 · 7 min

Search Ads competitor research, rebuilt as an agent pipeline

Taking over a Search Ads account used to mean weeks of spreadsheet work. Here is the pipeline I run instead: DeepSeek for the cleaning, Kimi K3 for the reasoning, Claude for the strategy, the Google Ads API for the launch, and a two-week agent team that keeps the account moving.

4 modelseach doing the part it is actually good at
3,156 → 47competitor keywords to a live buy list

I inherited the Search Ads account, and the first move is the one every paid marketer knows: pull the competitors, pull their keywords, look for volume and gaps. Ahrefs and SEMrush hand you that in an afternoon. What has changed is everything after the export. That part used to be weeks of spreadsheet work and judgment calls made from memory. It is now an agent pipeline. I give direction at the top and stopped moving rows in the middle.

This post is about the pipeline, not the ledger. The corpus happened to be 3,156 competitor paid keywords as of 2026-08-05, and the numbers show up where they help, but the transferable part is the shape of the process.

Where the standard research move stops

Competitor keyword exports give you three things: the terms, the volume, and a rough view of which campaigns are running. That is enough to build a shortlist and not much else. It tells you nothing about how a competitor is positioning against each term, which of their ads have been running long enough to be working, or where the space between their message and ours actually sits.

Ad copy is the part of competitive research that stays manual for most teams, because reading a few hundred variants and finding the pattern is exactly the sort of work nobody schedules.

Reading competitor ad copy with a tool I built for it

I built AdRadar for this specific gap. It collects the live ad variants running against a keyword set and reduces them to the claims being made, so the question changes from "what are they bidding on" to "what are they promising, and how often". Positioning patterns that take a day to see by hand come back as a short list of recurring claims and the terms they attach to.

That output becomes an input to everything downstream. Keywords tell you where the auction is. Claims tell you what you have to beat.

AdRadar output for one keyword set: every live variant collapsed to the claim it makes, ranked by how often the claim recurs.

Turning an export into something an agent can use

A raw competitor export arrives as inconsistent CSVs with duplicated terms, mixed match types, and ad reports in a different shape from the keyword reports. Before any reasoning can happen, someone has to normalize all of it, and that is the least interesting work in the project.

DeepSeek does it. It handles the heavy lifting: cleaning, deduplicating, normalizing match types, reconciling the ad reports against the keyword reports, and restructuring the whole thing into a store an agent can query quickly. Cheap, repetitive, high volume, and it never gets bored on row 2,800.

Kimi K3 takes the cleaned corpus and does the part that needs actual reasoning: which keywords overlap across competitors, what each competitor's ad copy is consistently claiming, and where a claim is doing real work versus filling space. Splitting the two matters. Running deep reasoning over unnormalized data burns tokens on cleanup, and running cleanup through an expensive reasoning model is a waste of both.

Strategy is where the third model earns its place

With a clean corpus and a claims summary, Claude does the strategy pass. Every keyword gets aggregated and grouped by intent, and each intent group gets read against what competitors are already saying to it. Then the ad copy gets written against our actual value proposition rather than against theirs, which is the failure mode of most competitive research: you end up echoing the market leader because their language is what you just spent a week reading.

Four outputs come out of the group-by-intent pass. Gaps nobody is bidding on. Terms with real volume where a competitor is running and we have a credible claim. Terms we will have to contest directly and should price accordingly. And terms that are better served with content than with a bid.

From a 3,156-term export to a live campaigncost profile decides the modelCompetitor export3,156 paid keywordsDeepSeekclean, dedupe, normalizeKimi K3overlap and claimsClaudegroup by intent, writeDirectionwhich gaps to contestGoogle Ads APIdry run, apply, read backthe person gives direction at the top rather than moving rows in the middleAdRadar reads the live ad variants first and returns the claims to beat. A two-week loop runs the same split over performance data.
DeepSeek normalizes 3,156 rows, Kimi K3 reads the claims, Claude groups by intent, and the Google Ads API writes the result into the account.
scanned3,156irrelevant626wrong category270long tail1,086the four biggest buckets of twelve
Where the corpus went after triage: 626 irrelevant terms, 270 in the wrong category, and a 1,086-term long tail parked for content.

From plan to live campaign through the API

Strategy, research, execution plan, and launch all run through the Google Ads API. The campaign structure, ad groups, match types, negatives, and copy get written out of the plan rather than typed into an interface. Every change runs as a dry run first, then applies, then reads back to verify.

So the campaign in the account and the plan in the doc stay one artifact. Nothing drifts between what we decided and what is running.

The bi-weekly loop that keeps it honest

Launch is the easy half. I built a Google Ads playbook that runs on a two-week cadence and is a small agent team rather than a report.

Agents pull the performance data. DeepSeek cleans and summarizes it, the same division of labor as the research phase. Then Kimi K3, GPT, and a Claude agent analyze it in parallel, produce recommendations, and argue them out before anything reaches me. Market context comes in live through the Ahrefs MCP: real search volume, competitive movement, terms that have shifted since the last run.

The actions are the ordinary levers, applied more often than a person would manage: expand ad copy where a claim is landing, add negatives, adjust bids at the individual keyword level, and mine the live search terms report for keywords worth promoting into the account.

What is left for the person

The heavy lifting is gone, and I do not miss it. What remains is the part that was always the job: deciding which gaps are worth contesting, which claims we can honestly make, how aggressive to be on a contested term, and when the agent's recommendation is right about the data and wrong about the business.

That is the change worth writing down. Agents now research, clean, structure and analyze. They also push the campaign live. I still give the direction and make the calls, and there is more room for both now that the spreadsheet work is somebody else's problem.

Suggested posts