✓ CPA down 38% ($142 → $88)
✓ ROAS up 52% (2.1× → 3.2×)
✓ 140+ ad variations tested automatically, weekly
Before → after
| Metric | Before | After |
|---|---|---|
| Cost per acquisition (CPA) | $142 | $88 |
| Return on ad spend (ROAS) | 2.1× | 3.2× |
| Ad variations live at any time | 12 | 140+ |
A B2B SaaS team was running Google Ads the manual way: a dozen static ads, weekly spreadsheet reviews, and bid changes that arrived days too late. Their CPA was creeping up while the team burned hours on chores.
The challenge
- Ads were written once and rarely refreshed, so creative fatigue set in fast.
- Bid and budget changes were reactive, based on stale weekly reports.
- No structured experimentation, the team guessed instead of tested.
- Engineers and marketers spent their week on copy-paste reporting.
What we built
- Ad copy agent generates on-brand ad variations from product docs and top landing pages, then pushes them to Google Ads.
- Bid management reads conversion data from GA4 and BigQuery and adjusts bids and budgets against CPA targets.
- Experiment engine continuously A/B tests headlines, descriptions, and landing pages, killing losers automatically.
- MCP layer connects the agent to Google Ads, GA4, and Slack through a single interface.
- Slack digest posts performance and every decision the agent made, in plain language.
The results
Cost per acquisition fell from $142 to $88 (−38%) while return on ad spend rose from 2.1× to 3.2×. The team now runs 140+ ad variations at any time and reviews a daily digest instead of a weekly spreadsheet.
The takeaway
Ads are a perfect agent problem: lots of small, data-driven decisions that humans are slow at. Let the agent do the testing and tuning, and keep the humans on strategy.
Stack Google Ads APIGA4BigQueryMCPSlack