a cursor cloud agent is running a google ads account for a startup we're working with and it just reduced the cost per demo from $1100 to $200

· opgehaald 21:00

a cursor cloud agent is running a google ads account for a startup we're working with and it just reduced the cost per demo from $1100 to $200

if you want me to do this for your startup, email me cody@graphed.com

here's how it works

The REDACTED cloud agent is a **scheduled Cursor Automation**: every day at **9:00 AM ET** Cursor spins up a cloud VM on this repo, gives it `REDACTED/AUTOMATION .md` as its job, and lets it operate the Google Ads account with no human approval step.

## What it is

It is not the ads loop itself. It is a daily **account manager** sitting on top of the loop.

- **Cursor cloud agent** (9:00 AM ET) — reads the account, decides, ships code, triggers jobs, reports. - **Graphed job `google-ads-daily`** (7:00 AM ET) — the actual Testing → Winners mutations.

The agent’s own trigger is outside its control. Everything else in `REDACTED/graphed.yaml` is its to change.

## How a morning run works

1. **Recall.** Read Memories: baselines, watch items, last changes, schedule ordering. 2. **Check the 7am loop.** `graphed logs` for `google-ads-daily`. Quota fail → re-trigger later. Code bug → fix, test, push `main`, deploy, re-run. 3. **Read the scoreboard** from the Graphed warehouse (free; Google Ads API quota is shared and scarce): 7- and 30-day spend, clicks, conversions, CPA by campaign/ad group. 4. **Hunt what the rules missed.** Zero-conversion terms, competitor/nav patterns, broad-match drift. The loop already auto-negates proven waste ≥$25; the agent looks for *patterns* worth a standing negative, a seed change, or new code. 5. **Check watch items** (brand serving, demotions staying paused, tCPA effects, etc.). 6. **Act**, in this order: - re-trigger `google-ads-daily` - ship a config/schedule change - write new loop code if the system can’t do the thing yet 7. **Record.** Update Memories. End with health vs targets, what shipped, what’s being watched, and **URGENT** if Kyle needs to act today.

## What it is allowed to use

Cloud setup is `.cursor/environment.json`: install the Graphed CLI and `npm ci` in `REDACTED/`.

Always available: `GRAPHED_TOKEN` (warehouse, jobs, deploys). Direct script runs also need Google Ads + OpenRouter keys; if those are missing, it falls back to triggering the already-deployed jobs.

Preferred tools, cheapest first:

1. Warehouse SQL (no API quota) 2. Existing npm/Graphed jobs with `--apply` (`daily`, `negate`, `promote`, `prune`, `budget`, `expand`, …) 3. New scripts under `REDACTED/jobs/google-ads/src/` — test, commit, push `main`, `graphed deploy`

It only touches files under `REDACTED/`. Commits are supposed to explain *why*.

## Hard rails

These do not move, no matter what it finds:

- Never touch Brand Protection (`24031728127`) - Never raise total daily budget (~$540) - Never create/remove/re-type campaigns - Never delete `DRY_RUN` (live = `"0"`; `"1"` is the emergency brake) - Never weaken safeguards (classifier fail-safe, promotion gate, atomic mutates, API budget, brand guard) - Config moves ≤25% per run

Emergency: spend spike → re-run the loop / add a standing negative. Serving collapse → `cleanup-negatives`, or set `DRY_RUN=1` and escalate.

## Success definition

Winners CPA trending toward **$250** with impressions recovering; Testing’s zero-conversion spend share falling; total conversions not collapsing