Google Ads · continuous review
Your ad account,
beaten thin.
Goldbeater reviews your Google Ads account every week, finds what is costing you money, and drafts the exact changes — line by line, for you to approve.
Read-only to start · No changes without your approval · Disconnect any time
5
- 26
- deterministic checks before a model sees anything
- Every
- operation diffed, current value against proposed
- Zero
- changes applied without a human approving the item
- Read-only
- by construction — the write path is a separate, gated step
The problem
Most of your spend is fine. The problem is the part that isn’t.
Nobody audits an account every week, because doing it properly takes a day and finds the same five things four times out of five. So it gets done quarterly, and the waste compounds in between.
Goldbeater does the boring pass every week and only tells you what changed. The checks are deterministic — regex and dataframes, not a model guessing — so the same account produces the same findings twice.
How it works
One agent. It queries, it writes Python, it follows its own leads.
A weekly review and a question you type are the same agent turn opened with a different first prompt. There is no second pipeline, which is why what it finds on a schedule is exactly what it finds when you ask.
Weekly, or on demand
Deterministic
11 tools, flat
Findings + change sets
It pulls the account
Thirty-seven queries against the Google Ads API, paginated and retried, written to working files that expire on their own. We keep conclusions, never a mirror of your account.
- 6214up 14
Search terms
- 489up 9
Performance Max
- 91no change
Conversions
- 773down 3
Budget pacing
It runs the checks, then follows the thread
Twenty-six deterministic checks first — the same ones a human analyst runs, no model involved. Then the agent writes its own pandas over the same frames and chases whatever the checks turned up.
- gaqlSELECT search_term_view.search_term, metrics.cost_micros …4,182 rows · 1.9s
- run_pythonmewads.run_audit(manifest, profile)26 checks · 3.4s
- run_pythonbrand_overlap(terms, profile.brand_tokens)412 matched
- gaql… WHERE campaign.id IN (17 ids) AND segments.date …1,204 rows · 0.8s
- propose_change_set4 operations · validate-onlydrafting
It drafts the change, you approve the line
A finding is an observation. A change set is a proposal. You see the per-operation diff — what each value is now, what it would become — and accept or reject item by item.
| Resource | Field | Current | Proposed | Decision |
|---|---|---|---|---|
| Search — Brand | negative_keyword | — | +412 terms | Approved |
| Search — Core | campaign_budget.amount_micros | $120.00 / day | $168.00 / day | Approved |
| PMax — Retail | asset_group.headlines | 4 headlines | 11 headlines | Pending |
| Search — Core | geo_target_constant | everywhere | 3 metros | Rejected |
Safety
The guardrails are structural, not a prompt asking nicely.
A model instruction is a preference it can reason around. Everything below is a boundary in the code, evaluated on every call.
- The account ID is not in the query
- GAQL has no account identifier in its syntax. The target account comes from a signed, minutes-long capability token the proxy sets. There is no string the agent can write that reads someone else's data — the code path to express it does not exist.
- The sandbox cannot reach Google
- Egress is deny-by-default with exactly one allowlisted host: our own proxy. Your OAuth refresh token and our developer token never leave the server, and the proxy only calls the search service.
- Nothing applies without a rollback
- A change set runs validate-only first and is refused outright unless a rollback artifact was written. After it executes we re-run the diff as a read-back check, and mark it applied only when that comes back empty.
- Your account data is treated as untrusted
- Search terms are what strangers typed into Google. They arrive as data, structurally separated from instructions — and the backstop is architectural: the agent can only propose, so the worst case is a bad suggestion you decline.
Free first review