We replaced our freelance ad manager with an AI agent that runs every 4 hours
For two years we paid a freelance media buyer to run Meta ads for our products. He was good. He was also asleep 8 hours a day, busy with other clients most of the rest, and every request went through a WhatsApp message that got answered "tomorrow, boss."
Since early 2026, our ad accounts have been managed by an AI agent instead. It wakes up every 4 hours on a cron job, reads the numbers, decides what to kill, what to scale, and what new angle to test, drafts the creative, and files everything for a one-tap approval on my phone. This post is the full architecture — not a thought piece about what AI could do for ads. This system has been running on our own accounts, spending our own money, since the start of the year.
What one pass actually does
Every 4 hours, a scheduled job boots a fresh agent session with one instruction: run a full pass, unattended. A pass looks like this:
- Refresh insights. Pull live performance for every active ad — spend, CTR, CPM, cost per result, frequency — plus the account's own historical benchmarks. Not industry benchmarks; this account's numbers. An ad is only "expensive" relative to what this audience normally costs.
- Classify every ad. Each active ad gets a verdict: performing (leave it or scale it), fatigued (frequency climbing, CTR decaying), underperforming (past the spend threshold with no results), or too-early-to-tell (still in learning, don't touch).
- Decide. Kills and budget cuts for the losers, scale proposals for the winners, and — if the test pipeline is running dry — new creative to keep learning velocity up.
- Draft creative in the account's voice. New ads aren't generic AI output. The agent reads the account's own past-ad library — every hook, every image style, ranked by what actually performed — and drafts variations that sound like the brand, informed by what already worked.
- File everything for review. Every decision lands in a review queue with the reasoning attached: "kill this, frequency 3.4 and CTR down 40% from its 7-day average." I approve or reject from my phone. Approval is the only thing that touches the ad account.
- Report. The pass posts a summary to our Discord — what it saw, what it proposed, what it wants me to look at.
No human is in the loop during a pass. The human is the gate at the end of it.
The part everyone asks about: is it actually good?
Honest answer: it's a different shape of good than a human buyer.
Where it wins. Consistency and latency. It never skips a check because it's Friday night. Creative fatigue gets caught within hours of the trend forming, not at the weekly review. A winning ad gets a scale proposal at 2am instead of "when I open the laptop." And testing velocity — the thing that actually finds winners in 2026-era Meta — never drops because someone got busy. The agent is mediocre at genius-level creative intuition and excellent at never, ever missing a beat. It turns out the second thing matters more for account performance than we wanted to believe.
Where it loses. Zero context about the real world unless you feed it. It doesn't know a competitor just launched, or that a holiday is coming, or that the product photo everyone loves looks slightly off-brand. We fixed part of this with a brand-knowledge layer the agent reads before every pass (notes, positioning docs, "never say X" rules), but a human buyer absorbs that context for free.
Where it's genuinely weird. It follows rules with a literalness that occasionally produces comedy. Early on, an image-generation prompt drifted until every ad looked like the same purple gradient. Nothing in the rules said "don't make everything purple." There's a rule now.
The uncomfortable lesson: the bottleneck was never the ads
We assumed the hard part would be decision quality — would an AI make good kill/scale calls? That turned out to be the easy part; the calls are mostly arithmetic against the account's own benchmarks, applied without ego. A human buyer defends the campaign he built last week. The agent has no ego about last week. When something it drafted underperforms, it kills it with the same one-line reason it kills anything else.
The actual hard parts, in order of how much they hurt:
1. Platform APIs fight back. Meta's Marketing API has rate limits that will absolutely flatten a naive agent loop. We learned this the hard way when our dashboard went blank mid-campaign — the account had been rate-limited (error code 80004, if you're Googling it at 1am like I was) because background refreshes were multiplying across server workers. The fix was leases and caching, not enthusiasm.
2. Ambiguity is expensive. The worst near-miss we've had wasn't the AI being dumb — it was the AI being agreeable. An ad for one brand went live tracking a different brand's Meta pixel, because pixel selection fell back to "most recently used on the account" instead of refusing to guess. The ad spent real money reporting conversions to the wrong dashboard before we caught it. The fix wasn't a smarter guess; it was banning guesses. Today, if any money-critical field is ambiguous — pixel, page, ad account, budget — the system raises an error and stops. An error at draft time costs nothing. A wrong assumption costs money invisibly until the invoice.
3. Creative volume without creative slop. Meta in 2026 rewards accounts that test constantly. But AI-generated ad images have a look, and audiences scroll past it. We ended up building a system of 18 image archetypes drawn from formats people actually stop for — screenshots, whiteboard sketches, product-in-hand phone photos — and the agent composes within those instead of free-styling. Ad images that don't look like AI made them is its own topic; that post is coming.
What it costs to run
The whole stack is: one small always-on Linux box (the kind that costs less than a month of a freelancer's retainer, once), API access to the ad platform, and LLM API usage per pass. The agent runs 6 passes a day across two brands. Total infrastructure cost is a rounding error against what a retainer was — and the agent doesn't take a percentage of ad spend.
That's not the pitch, though. The pitch is the 4-hour loop. A freelancer looks at your account a few times a week. This thing has looked at ours 6 times since yesterday.
The obvious question: what stops it from burning the budget at 3am?
One design decision, and it's load-bearing: the agent cannot spend. It drafts. Every ad it creates, every budget change it wants, every kill it proposes goes into a queue, and a human tap is what executes it. New ads push to Meta paused — RM0 — until the human starts them. Automation never starts spend.
That's the piece we ended up productizing as Hundrads: the middle layer that gives an agent full read access and draft-only write access to your ad accounts, with the approval queue as the only path to the platform. Your agent gets the 4-hour loop; your thumb keeps the wallet. If you already run a Claude-style agent, it plugs in as a skill: npx skills add pandaitech/hundrads-skills.
If you're going to build this yourself
Genuinely, you can — the pattern is a cron job, a platform API, and discipline. Three things we'd tell past-us:
- Give the agent the account's own history, not the internet's. Benchmarks, past winners, brand voice. An agent with the account's memory drafts like the account; an agent without it drafts like LinkedIn.
- Ban silent fallbacks on anything that touches money. Every "reasonable default" is a wrong ad waiting to happen. Raise and stop.
- Separate deciding from doing. The agent that analyzes and the mechanism that executes should be different components with a human gate between them — not because the AI is untrustworthy, but because you will want to overrule it with context it doesn't have, and the gate is where you do that.
We'll publish the numbers from these accounts — spend, results, the decisions the agent made and how they played out — in a monthly receipts series, starting with the months where it looked bad. Consistency is the credibility.
Hundrads is the AI ad manager layer we run ourselves: agents test, kill, and scale around the clock; nothing goes live until you tap approve. hundrads.com