TheMattBerman/google-ads-copilot

Google Ads Copilot: operator kit for audits, MCP-connected reads, export-mode analysis, and draft/apply workflows.

233

stars

13

commits

Shell

primary language

Jun 10, 2026

updated

README

Google Ads Copilot

Public Alpha — Builder Preview I built an OpenClaw agent that manages Google Ads accounts through intent analysis instead of bid automation. All three layers — Read → Draft → Apply — are live and tested on real accounts. This is an early release for builders and agencies who want to try the intent-first approach.

Most Google Ads problems are not bid problems. They are intent-mixing problems.

Your account is buying different kinds of searches — buyers, comparison shoppers, researchers, job seekers, freebie hunters — and mixing them together. When that happens, bids optimize against noise, RSAs get generic, good traffic subsidizes bad traffic, and every budget decision is distorted.

Google Ads Copilot is an AI agent that reads search behavior, builds a durable Intent Map, finds waste, isolates signal, and turns what the account is learning into structure, copy, and scale decisions. Every recommendation is staged as a reviewable draft. Nothing changes without your approval.

Not a dashboard. Not a bid optimizer. Not a generic audit checklist.

A strategist with memory.


How It Works

READ  →  DRAFT  →  APPLY
LayerWhat happens
ReadPull live account data via Google's official google-ads-mcp MCP server (read-only). Or work with manual CSV exports — same analytical engine either way.
DraftEvery actionable finding becomes a concrete proposal — specific negatives, structure changes, budget moves, RSA directions — staged for human review.
ApplyControlled write-back for approved drafts. Live scope: add negative keywords, pause keywords/ad groups, and campaign daily budget changes via manifest-backed guardrails. Dry run, explicit confirmation, per-action verification, full audit trail, instant undo.

See ARCHITECTURE.md for the full design, safety model, and roadmap.


Two Ways to Run It

Hook up the MCP server with OAuth + developer token and the agent pulls live data automatically — search terms, keywords, conversions, budgets, everything via GAQL.

You get: live account data, automatic account discovery, date-range fallback for sparse accounts, cross-referencing search terms against targeted keywords, and health detection out of the box.

Setup: ./install.sh auto/google-ads connect setup → you're live. See data/mcp-config.md for details. If your host uses a non-default skills path, override it with CLAUDE_TARGET=... or OPENCLAW_TARGET=....

Export Mode (zero setup)

Paste a CSV from Google Ads. The analytical engine is the same — you just feed it manually. Good for one-off audits or accounts where you don't have API access yet.

Both modes produce the same quality of analysis and drafts.


What It Can Do

15 skills across three layers. The full operator workflow is in OPERATOR-PLAYBOOK.md.

Run the Account

CommandWhat happens
/google-ads connectSet up, health check, pick an account
/google-ads dailyWhat matters today — bleeding campaigns, waste, opportunities
/google-ads auditFull strategic review across all layers
/google-ads draft-summarySee what's queued, prioritized, with dependencies mapped

Analyze

CommandWhat happens
/google-ads search-termsFind waste, signal, messaging clues, routing problems. For PMax-heavy accounts, falls back to query-row visibility mode when classic Search-term rows are unavailable
/google-ads intent-mapBuild the account's durable intent model
/google-ads negativesSpecific negatives with scope, risk, and collateral notes
/google-ads trackingIs the account trustworthy enough to optimize?
/google-ads structureCampaign/ad group restructuring recommendations
/google-ads rsasRSA directions from actual buyer language
/google-ads budgetBudget/scaling decisions grounded in signal quality
/google-ads planPlan or rebuild account architecture from scratch
/google-ads pmaxPMax analysis through the intent contamination lens
/google-ads landing-reviewLanding page diagnosis — tracking vs UX vs both

Act

CommandWhat happens
/google-ads apply [draft]Execute an approved draft — dry run, confirm, verify, log
/google-ads undo [rev-id]Reverse any applied action instantly
/google-ads apply logFull audit trail of everything applied

Why This Exists

Most Google Ads tools report metrics, enforce generic best practices, or automate bids. None of them think about what the account is actually buying.

Google Ads Copilot starts from search intent — what people typed, what they meant, and whether the account structure reflects that reality.

What it means
Intent-firstReads search behavior, not just metrics
MemoryCompounds learning across sessions — never starts from scratch
Decision-orientedEvery output ends in "what to do," not "what happened"
Draft-stagedConcrete proposals you can read, approve, or reject
Human-in-the-loopNothing changes without your explicit confirmation
Safe writesSmallest blast radius first, full audit trail, instant undo
Works anywhereLive API or manual exports — same engine

Getting Started

Try It in 5 Minutes (export mode)

  1. ./install.sh auto
  2. Export search terms from Google Ads (last 30 days, CSV)
  3. /google-ads search-terms → paste your data
  4. Check workspace/ads/drafts/ for what it found

Full Setup (connected mode)

  1. Configure the MCP server: data/mcp-config.md
  2. ./install.sh auto
  3. Create local credential/env files from the committed templates: cp data/google-ads-adc-authorized-user.template.json data/google-ads-adc-authorized-user.json cp data/google-ads-mcp.test.env.example.sh data/google-ads-mcp.test.env.sh
  4. Fill in your real values, then source data/google-ads-mcp.test.env.sh
  5. ./scripts/test-mcp.sh to verify connectivity
  6. /google-ads connect setup → discovers your accounts, picks one, writes workspace
  7. /google-ads daily or /google-ads audit → live data flows automatically
  8. For PMax-heavy accounts, use ./scripts/test-search-terms.sh <customer-id> to verify query visibility and fallback behavior
  9. Review drafts → approve → apply → verify

The repo does not ship any real credentials or live test files. Only templates are committed.

Install from a Release Bundle

You can install from the repo as usual, or from a packaged bundle:

./install.sh auto
./install.sh /path/to/google-ads-copilot-0.2.0.tar.gz auto
./install.sh /path/to/google-ads-copilot-0.2.0 openclaw

Release bundles are built with ./scripts/package/build-release.sh <version>.

See DEMO-WORKFLOW.md for a guided walkthrough of the full cycle.

Environment variables:

VariableRequiredNotes
GOOGLE_APPLICATION_CREDENTIALSYesPath to OAuth/ADC credentials JSON
GOOGLE_CLOUD_PROJECTYesGoogle Cloud project ID
GOOGLE_ADS_DEVELOPER_TOKENYesGoogle Ads developer token
GOOGLE_ADS_LOGIN_CUSTOMER_IDIf MCCManager account ID (no dashes)

Workspace Memory

Every session compounds. The agent writes to workspace/ads/ — a persistent knowledge base that survives between runs:

FilePurpose
account.mdAccount profile and setup
goals.mdBusiness objectives and KPIs
intent-map.mdDurable model of search behavior
queries.mdQuery patterns and clusters
negatives.mdExclusion history
winners.mdWhat's working and why
tests.mdActive tests and hypotheses
findings.mdAnalytical notes
change-log.mdWhat was changed and when
learnings.mdWhat the account has taught us
drafts/Staged action proposals
audit-trail/Apply session logs + reversal registry

Draft filenames use YYYY-MM-DD-[account-slug]-[type].md. Multi-draft audit runs also produce _batch-YYYY-MM-DD-[account-slug].md as a durable audit packet, while _summary.md remains the live prioritized backlog snapshot.


Package Structure

google-ads-copilot/
├── README.md                    # This file
├── ARCHITECTURE.md              # Three-layer design doc
├── APPLY-LAYER.md               # Apply layer design (safety, reversibility, audit)
├── OPERATOR-PLAYBOOK.md         # Full operator workflow loop
├── CHANGELOG.md                 # Release history
├── LICENSE
├── install.sh
│
├── google-ads/                  # Orchestrator skill
│   ├── SKILL.md
│   └── references/              # Strategic playbooks
│
├── scripts/                     # Helper scripts + apply layer CLI
│   ├── apply-layer/             # Write-path CLI (bash + curl + jq)
│   └── list-customers.sh        # Account discovery
│
├── skills/                      # Analytical skills (15 skills)
│   ├── google-ads-apply/
│   ├── google-ads-audit/
│   ├── google-ads-budget/
│   ├── google-ads-connect/
│   ├── google-ads-daily/
│   ├── google-ads-draft-summary/
│   ├── google-ads-intent-map/
│   ├── google-ads-landing-review/
│   ├── google-ads-negatives/
│   ├── google-ads-plan/
│   ├── google-ads-pmax/
│   ├── google-ads-rsas/
│   ├── google-ads-search-terms/
│   ├── google-ads-structure/
│   └── google-ads-tracking/
│
├── data/                        # Data layer (MCP config, GAQL recipes)
├── drafts/                      # Draft templates per action type
├── examples/                    # Sanitized example outputs
├── evals/                       # Eval suite
└── workspace-template/          # Blank workspace for new accounts

Apply Scope

ActionStatusRiskUndo
Add campaign-level negative keyword✅ LiveLowRemove the negative
Add ad-group-level negative keyword✅ ReadyLowRemove the negative
Pause keyword✅ ReadyLowRe-enable keyword
Pause ad group✅ ReadyMediumRe-enable ad group
Set campaign daily budget✅ Live (manifest-backed)MediumRestore the prior amount_micros

Budget applies are limited to campaign daily budgets and require an ## Apply Manifest JSON block plus hard guardrails: max 30% per action, min meaningful delta, 7-day cooldown, tracking confidence gate, pending-tracking-draft block, budget-neutral default, and confirm budgets confirmation.

Still excluded: shared budgets, bid strategy changes, campaign creation, RSA edits, enabling paused entities, deletions.


What's Next

This is a public alpha. The analytical engine and apply layer are solid — tested on real accounts with real money. Current next steps:

  • Expanded write actions after budget apply proves out
  • More example walkthroughs from real (anonymized) accounts
  • Broader eval coverage for decision quality and write-path regressions
  • Packaging and release automation for broader distribution

If you're running Google Ads for clients or your own business, try it. Break it. Tell me what's missing.


License

See LICENSE.

Contributors

TheMattBerman

13 commits

TheMattBerman/google-ads-copilot

Google Ads Copilot: operator kit for audits, MCP-connected reads, export-mode analysis, and draft/apply workflows.

233

stars

13

commits

Shell

primary language

Jun 10, 2026

updated

README

Google Ads Copilot

Public Alpha — Builder Preview I built an OpenClaw agent that manages Google Ads accounts through intent analysis instead of bid automation. All three layers — Read → Draft → Apply — are live and tested on real accounts. This is an early release for builders and agencies who want to try the intent-first approach.

Most Google Ads problems are not bid problems. They are intent-mixing problems.

Your account is buying different kinds of searches — buyers, comparison shoppers, researchers, job seekers, freebie hunters — and mixing them together. When that happens, bids optimize against noise, RSAs get generic, good traffic subsidizes bad traffic, and every budget decision is distorted.

Google Ads Copilot is an AI agent that reads search behavior, builds a durable Intent Map, finds waste, isolates signal, and turns what the account is learning into structure, copy, and scale decisions. Every recommendation is staged as a reviewable draft. Nothing changes without your approval.

Not a dashboard. Not a bid optimizer. Not a generic audit checklist.

A strategist with memory.


How It Works

READ  →  DRAFT  →  APPLY
LayerWhat happens
ReadPull live account data via Google's official google-ads-mcp MCP server (read-only). Or work with manual CSV exports — same analytical engine either way.
DraftEvery actionable finding becomes a concrete proposal — specific negatives, structure changes, budget moves, RSA directions — staged for human review.
ApplyControlled write-back for approved drafts. Live scope: add negative keywords, pause keywords/ad groups, and campaign daily budget changes via manifest-backed guardrails. Dry run, explicit confirmation, per-action verification, full audit trail, instant undo.

See ARCHITECTURE.md for the full design, safety model, and roadmap.


Two Ways to Run It

Hook up the MCP server with OAuth + developer token and the agent pulls live data automatically — search terms, keywords, conversions, budgets, everything via GAQL.

You get: live account data, automatic account discovery, date-range fallback for sparse accounts, cross-referencing search terms against targeted keywords, and health detection out of the box.

Setup: ./install.sh auto/google-ads connect setup → you're live. See data/mcp-config.md for details. If your host uses a non-default skills path, override it with CLAUDE_TARGET=... or OPENCLAW_TARGET=....

Export Mode (zero setup)

Paste a CSV from Google Ads. The analytical engine is the same — you just feed it manually. Good for one-off audits or accounts where you don't have API access yet.

Both modes produce the same quality of analysis and drafts.


What It Can Do

15 skills across three layers. The full operator workflow is in OPERATOR-PLAYBOOK.md.

Run the Account

CommandWhat happens
/google-ads connectSet up, health check, pick an account
/google-ads dailyWhat matters today — bleeding campaigns, waste, opportunities
/google-ads auditFull strategic review across all layers
/google-ads draft-summarySee what's queued, prioritized, with dependencies mapped

Analyze

CommandWhat happens
/google-ads search-termsFind waste, signal, messaging clues, routing problems. For PMax-heavy accounts, falls back to query-row visibility mode when classic Search-term rows are unavailable
/google-ads intent-mapBuild the account's durable intent model
/google-ads negativesSpecific negatives with scope, risk, and collateral notes
/google-ads trackingIs the account trustworthy enough to optimize?
/google-ads structureCampaign/ad group restructuring recommendations
/google-ads rsasRSA directions from actual buyer language
/google-ads budgetBudget/scaling decisions grounded in signal quality
/google-ads planPlan or rebuild account architecture from scratch
/google-ads pmaxPMax analysis through the intent contamination lens
/google-ads landing-reviewLanding page diagnosis — tracking vs UX vs both

Act

CommandWhat happens
/google-ads apply [draft]Execute an approved draft — dry run, confirm, verify, log
/google-ads undo [rev-id]Reverse any applied action instantly
/google-ads apply logFull audit trail of everything applied

Why This Exists

Most Google Ads tools report metrics, enforce generic best practices, or automate bids. None of them think about what the account is actually buying.

Google Ads Copilot starts from search intent — what people typed, what they meant, and whether the account structure reflects that reality.

What it means
Intent-firstReads search behavior, not just metrics
MemoryCompounds learning across sessions — never starts from scratch
Decision-orientedEvery output ends in "what to do," not "what happened"
Draft-stagedConcrete proposals you can read, approve, or reject
Human-in-the-loopNothing changes without your explicit confirmation
Safe writesSmallest blast radius first, full audit trail, instant undo
Works anywhereLive API or manual exports — same engine

Getting Started

Try It in 5 Minutes (export mode)

  1. ./install.sh auto
  2. Export search terms from Google Ads (last 30 days, CSV)
  3. /google-ads search-terms → paste your data
  4. Check workspace/ads/drafts/ for what it found

Full Setup (connected mode)

  1. Configure the MCP server: data/mcp-config.md
  2. ./install.sh auto
  3. Create local credential/env files from the committed templates: cp data/google-ads-adc-authorized-user.template.json data/google-ads-adc-authorized-user.json cp data/google-ads-mcp.test.env.example.sh data/google-ads-mcp.test.env.sh
  4. Fill in your real values, then source data/google-ads-mcp.test.env.sh
  5. ./scripts/test-mcp.sh to verify connectivity
  6. /google-ads connect setup → discovers your accounts, picks one, writes workspace
  7. /google-ads daily or /google-ads audit → live data flows automatically
  8. For PMax-heavy accounts, use ./scripts/test-search-terms.sh <customer-id> to verify query visibility and fallback behavior
  9. Review drafts → approve → apply → verify

The repo does not ship any real credentials or live test files. Only templates are committed.

Install from a Release Bundle

You can install from the repo as usual, or from a packaged bundle:

./install.sh auto
./install.sh /path/to/google-ads-copilot-0.2.0.tar.gz auto
./install.sh /path/to/google-ads-copilot-0.2.0 openclaw

Release bundles are built with ./scripts/package/build-release.sh <version>.

See DEMO-WORKFLOW.md for a guided walkthrough of the full cycle.

Environment variables:

VariableRequiredNotes
GOOGLE_APPLICATION_CREDENTIALSYesPath to OAuth/ADC credentials JSON
GOOGLE_CLOUD_PROJECTYesGoogle Cloud project ID
GOOGLE_ADS_DEVELOPER_TOKENYesGoogle Ads developer token
GOOGLE_ADS_LOGIN_CUSTOMER_IDIf MCCManager account ID (no dashes)

Workspace Memory

Every session compounds. The agent writes to workspace/ads/ — a persistent knowledge base that survives between runs:

FilePurpose
account.mdAccount profile and setup
goals.mdBusiness objectives and KPIs
intent-map.mdDurable model of search behavior
queries.mdQuery patterns and clusters
negatives.mdExclusion history
winners.mdWhat's working and why
tests.mdActive tests and hypotheses
findings.mdAnalytical notes
change-log.mdWhat was changed and when
learnings.mdWhat the account has taught us
drafts/Staged action proposals
audit-trail/Apply session logs + reversal registry

Draft filenames use YYYY-MM-DD-[account-slug]-[type].md. Multi-draft audit runs also produce _batch-YYYY-MM-DD-[account-slug].md as a durable audit packet, while _summary.md remains the live prioritized backlog snapshot.


Package Structure

google-ads-copilot/
├── README.md                    # This file
├── ARCHITECTURE.md              # Three-layer design doc
├── APPLY-LAYER.md               # Apply layer design (safety, reversibility, audit)
├── OPERATOR-PLAYBOOK.md         # Full operator workflow loop
├── CHANGELOG.md                 # Release history
├── LICENSE
├── install.sh
│
├── google-ads/                  # Orchestrator skill
│   ├── SKILL.md
│   └── references/              # Strategic playbooks
│
├── scripts/                     # Helper scripts + apply layer CLI
│   ├── apply-layer/             # Write-path CLI (bash + curl + jq)
│   └── list-customers.sh        # Account discovery
│
├── skills/                      # Analytical skills (15 skills)
│   ├── google-ads-apply/
│   ├── google-ads-audit/
│   ├── google-ads-budget/
│   ├── google-ads-connect/
│   ├── google-ads-daily/
│   ├── google-ads-draft-summary/
│   ├── google-ads-intent-map/
│   ├── google-ads-landing-review/
│   ├── google-ads-negatives/
│   ├── google-ads-plan/
│   ├── google-ads-pmax/
│   ├── google-ads-rsas/
│   ├── google-ads-search-terms/
│   ├── google-ads-structure/
│   └── google-ads-tracking/
│
├── data/                        # Data layer (MCP config, GAQL recipes)
├── drafts/                      # Draft templates per action type
├── examples/                    # Sanitized example outputs
├── evals/                       # Eval suite
└── workspace-template/          # Blank workspace for new accounts

Apply Scope

ActionStatusRiskUndo
Add campaign-level negative keyword✅ LiveLowRemove the negative
Add ad-group-level negative keyword✅ ReadyLowRemove the negative
Pause keyword✅ ReadyLowRe-enable keyword
Pause ad group✅ ReadyMediumRe-enable ad group
Set campaign daily budget✅ Live (manifest-backed)MediumRestore the prior amount_micros

Budget applies are limited to campaign daily budgets and require an ## Apply Manifest JSON block plus hard guardrails: max 30% per action, min meaningful delta, 7-day cooldown, tracking confidence gate, pending-tracking-draft block, budget-neutral default, and confirm budgets confirmation.

Still excluded: shared budgets, bid strategy changes, campaign creation, RSA edits, enabling paused entities, deletions.


What's Next

This is a public alpha. The analytical engine and apply layer are solid — tested on real accounts with real money. Current next steps:

  • Expanded write actions after budget apply proves out
  • More example walkthroughs from real (anonymized) accounts
  • Broader eval coverage for decision quality and write-path regressions
  • Packaging and release automation for broader distribution

If you're running Google Ads for clients or your own business, try it. Break it. Tell me what's missing.


License

See LICENSE.

Contributors

TheMattBerman

13 commits

Languages

Shell

94.9%

Python

5.1%