A research-to-launch agent that runs ad operations
Setting up a new Google Ads client is hours of repetitive work before a single ad serves: competitor research, copy, display creative, campaign assembly, policy review. I designed, built and deployed an agent that does the front half of that, grounded in the competitive landscape, and keeps a human on the publish button. This build runs inside an agency I do not name, the people running it treat it as an edge.
What was the manual bottleneck?
For every new client campaign, an account manager works through competitive research, ad copywriting, display creative production, campaign assembly and policy review. None of it is the strategy the client is paying for. It is the setup that has to happen before the strategy can run.
That labour sets the ceiling on the whole agency. Take on more clients and you either hire, which shrinks the margin, or you lean on junior staff who make the policy mistakes that get accounts suspended, or you cut the research and ship generic ads. The bottleneck is not talent, it is the hours the setup eats.
They needed the setup to stop being the thing that caps how many accounts a strategist can carry.
Research, copy and creative, drafted
A LangChain service and a Next.js dashboard over a Supabase Postgres database that automate the front half of Google Ads work while a human keeps strategy, budgets and the publish button. Three moves make up the draft.
Competitive analysis
It scrapes the competitor ads running in a niche through SerpApi, ranks the angles by how long each has stayed live, and reads that longevity as a signal of what is working and where the gaps are. The strategy starts from evidence, not a blank prompt.
Variant generation
It writes gap-first responsive search ad headlines and descriptions that map back to the research, padded deterministically to sit inside the character limits Google enforces. The angles it reaches for are the ones the market left open.
Display generation
Display ads are built from structured render specs into the standard sizes, with Satori and Resvg drawing the layout. The model never writes layout HTML or CSS, so the creative stays consistent instead of drifting with every generation.
How is it kept safe to run?
An agent touching live ad accounts has to be safe by construction, not by hope. Four decisions draw a hard line between what the model drafts and what actually goes live.
Deterministic budgeting
The model never sets or changes a budget. Budget values flow from the client profile through deterministic code and are hard-capped at every layer they pass through. The creative part of the system and the money part of the system are kept deliberately separate.
Two-layer quality gate
Every draft passes two checks before a human ever sees it. A deterministic policy scan catches banned superlatives and prohibited terms, then a model rubric critiques clarity, call to action and differentiation. Copy that trips the policy scan is stopped by rule, not by judgement.
Campaign assembly
Ad groups, keyword distributions and bid strategies are assembled from the research automatically, so the structure a strategist would build by hand arrives already drafted. It is a starting point a human edits, not a black box that decides on its own.
Explicit human launch
The agent never publishes on its own. Every campaign reaches a review screen and waits for a person to approve it before anything touches a live account. The human keeps the publish button, which is the point: the account owner stays accountable for what runs.
// STACK
What changed for the agency?
In plain operational terms, three things moved. I am describing what the agent does in production, not putting a number on it.
The repetitive front half of ad operations, the research, the drafting, the creative production, is done by the time a strategist opens the account, so their time goes to judgement instead of assembly.
A team can hold more accounts without another salary. Capacity stops being capped by how many campaigns a person can build by hand in a week.
Every campaign a strategist reviews is already grounded in competitive data and already through the policy gate, so the work they sign off on starts from a defensible place.
What I learned building it
The temptation with an ad agent is to let the model do more: set the budgets, pick the bid strategy, push the campaign live when it is confident. Every one of those is a place where a wrong call costs the client real money or gets an account suspended. So I did the opposite. The model drafts, and everything with consequences is either deterministic code or a human decision.
Budgets never pass through the model. Policy is a rule-based scan, not a judgement call. Publishing is a person clicking a button. That is not the model being weak, it is the system being honest about where a machine belongs and where it does not.
An agent that touches live accounts earns trust by doing less than it could, in the places that matter.
This is the agent behind the ad-operations work I build for agencies: the repetitive setup drafted from real competitive data, the risky decisions kept deterministic or human, so a team can hold more accounts without another salary.
A 15-minute call is usually enough to know if there is a fit.
No slides, no pitch.