The starting point
The agency ran dozens of campaigns for different jobs, cities and languages. Budgets needed daily changes, weak ads should stop early, and Meta had already removed a post because of its wording. The team had no time to sit in Ads Manager all day.
What I built
- An agent that runs itself. A scheduler starts Claude Code with a dedicated skill every 20 minutes. Eva uses 23 Python tools for Meta, Google Ads and the CRM.
- Three levels of autonomy. Eva reports, suggests or acts on her own, depending on the size of the change.
- Fixed limits. An hourly cost guard for the whole account, an automatic pause after 38 zł with no leads, and scaling only when the CRM shows real leads.
- Ad copy checks. Every ad text is checked against wording Meta rejects before it goes live.
- Banners. AI backgrounds, text set in HTML and an automatic face check, in 4:5 and 9:16.
- Know how. 13 step by step playbooks and 8 written cases Eva uses when something unusual happens.
- A watchdog. An alert if Eva or a connection stops.
The result
In two weeks Eva made 64 pauses, 32 budget changes, 20 creative swaps and 10 launches, all within the limits. On the day one campaign was relaunched with new banners and copy, its cost per qualified lead was 26.30 zł against 70.86 zł for the previous version. The team writes to Eva in the chat instead of logging into Ads Manager and gets a report every morning and evening.
Eva does not own the strategy. She does the daily work fast and the same way every time, and asks a human before anything above the limits.
Tools and tech stack
- Claude Code
- Python
- Meta Marketing API
- Meta Ads MCP
- Google Ads API
- CRM API
- Telegram Bot API
- launchd
The client is anonymised. The numbers come from the project's own reports and measurements.
Want this for your business? See Meta ads specialist or Google Ads consultant.










