Google Ads War Room¶
Cadence: Daily, mid-morning (after Morning Briefing) Duration: ~20 minutes (agents run in parallel, you review once) Trigger: "Run the Ads War Room" or scheduled hook Deploys changes: YES, but ONLY after Slack approval
How It Works¶
Eight specialist agents each analyze one domain of the Google Ads account. They run in parallel (where independent) or sequentially (where one needs another's output). Each produces a change manifest listing what it found and what it wants to do. The orchestrator consolidates all manifests into a single Slack message. You approve, reject, or modify. Only approved changes deploy.
┌─────────────┐
│ Orchestrator │
└──────┬──────┘
┌───────────────┼───────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ Phase 1 │ │ Phase 1 │ │ Phase 1 │
│ (parallel) │ │ (parallel) │ │ (parallel) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
Attribution Bid Structure Offline
Agent Agent Conversions
Agent
│ │ │
└───────────────┼───────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ Phase 2 │ │ Phase 2 │ │ Phase 2 │
│(parallel)│ │(parallel)│ │(parallel)│
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
Negative Active Bid
Keywords Keywords Adjustments
Agent Agent Agent
│ │ │
└─────────────────────┼─────────────────────┘
│
┌────────────┼────────────┐
│ │
┌─────┴─────┐ ┌─────┴─────┐
│ Phase 3 │ │ Phase 3 │
│ (parallel) │ │ (parallel) │
└─────┬─────┘ └─────┬─────┘
│ │
Ad Copy Assets
Agent Agent
│ │
└────────────┬────────────┘
│
┌──────┴──────┐
│ Consolidate │
│ + Slack msg │
└─────────────┘
The Three Phases¶
Phase 1: Foundation (parallel, no dependencies)¶
These agents don't need each other's output:
| Agent | What it checks | Why first |
|---|---|---|
| Attribution | Conversion tracking health, GA4 linkage, attribution windows | Other agents need to know if tracking is broken before optimizing |
| Bid Structure | Campaign bidding strategy, tCPA/tROAS targets, budget allocation | Sets the frame for bid adjustment agent |
| Offline Conversions | CRM-to-Ads conversion import, Litify case outcome data | Feeds conversion quality signal into bid agents |
Phase 2: Optimization (parallel, depends on Phase 1)¶
These agents use Phase 1 output as context:
| Agent | What it checks | Depends on |
|---|---|---|
| Negative Keywords | Add irrelevant terms, remove stale negatives, conflict detection | Attribution (to know if tracking is reliable) |
| Active Keywords | New opportunities, match types, pause underperformers, QS | Attribution + Bid Structure |
| Bid Adjustments | Device, location, schedule, audience modifiers | Bid Structure + Offline Conversions |
Phase 3: Creative (parallel, depends on Phase 2)¶
These agents use Phase 2 keyword decisions as context:
| Agent | What it checks | Depends on |
|---|---|---|
| Ad Copy | RSA headline/description performance, pin effectiveness, ad strength | Active Keywords (to align copy with keyword strategy) |
| Assets | Sitelinks, callouts, structured snippets, image extensions | Ad Copy (to avoid duplication) |
Change Manifest Format¶
Every agent produces a manifest in this structure:
{
"agent": "negative-keywords",
"run_date": "2026-04-16",
"summary": "Found 12 irrelevant terms, flagged 3 stale negatives for removal",
"confidence": "high",
"changes": [
{
"action": "ADD_NEGATIVE",
"scope": "account",
"entity": "criminal defense attorney",
"reason": "Off-topic: criminal law, not PI",
"risk": "low",
"auto_approvable": true
},
{
"action": "REMOVE_NEGATIVE",
"scope": "ad_group:car_accidents_exact",
"entity": "rear end collision lawyer",
"reason": "Blocking high-intent traffic. This term had 3 conversions before being negated on 2026-03-15",
"risk": "medium",
"auto_approvable": false
}
],
"metrics_snapshot": {
"search_terms_reviewed": 247,
"negatives_to_add": 12,
"negatives_to_remove": 3,
"conflicts_detected": 1
},
"requires_human_review": true
}
Risk Tiers and Auto-Approval¶
| Risk | Examples | Approval |
|---|---|---|
| Low | Add obvious negative (criminal, divorce, DUI), update sitelink text | Auto-approvable (still shown in Slack, just pre-checked) |
| Medium | Remove a negative, pause a keyword, change a bid modifier | Requires Slack approval |
| High | Change bidding strategy, adjust budget >20%, modify conversion actions | Requires Slack approval + highlighted |
| Critical | Anything touching attribution/tracking, campaign enable/disable | Always requires approval, shown as urgent |
Slack Message Format¶
The consolidated Slack message looks like:
SAIL Google Ads War Room — 2026-04-16
8 agents ran. 4 have proposed changes.
ATTRIBUTION AGENT: All clear
Conversion tracking healthy. GA4 linked. No action needed.
NEGATIVE KEYWORDS AGENT: 12 adds, 3 removals
[Auto] Add 9 account-level negatives (criminal, divorce, DUI terms)
[APPROVE?] Add 3 ad-group negatives (borderline terms)
[APPROVE?] Remove 3 stale negatives blocking good traffic
Details: [link to full manifest]
ACTIVE KEYWORDS AGENT: 2 new opportunities, 1 pause
[APPROVE?] Add "rear end collision lawyer louisville" (exact)
[APPROVE?] Add "kentucky truck accident settlement" (phrase)
[APPROVE?] Pause "personal injury attorney" (broad) — $142 spend, 0 conversions in 30d
Details: [link to full manifest]
BID ADJUSTMENTS AGENT: 2 modifier changes
[APPROVE?] Mobile bid +15% on Car Accidents (mobile CVR 2.3x desktop)
[APPROVE?] Schedule bid -20% on weekends (0 conversions Sat-Sun last 60d)
AD COPY / ASSETS / BID STRUCTURE / OFFLINE CONVERSIONS: No changes proposed.
Reply with numbers to approve (e.g., "approve 1,2,4")
or "approve all" / "reject all"
Deployment Pipeline¶
- Agents run and produce manifests
- Orchestrator consolidates into Slack message
- Sam replies with approvals
- Approved changes execute via Google Ads MCP write tools
- Execution results logged to Notion as a handoff doc
- Confirmation Slack message sent with what was deployed
Escalation Rules¶
An agent must escalate (flag for human review, never auto-approve) when: - A proposed change would affect spend by more than 20% - A negative keyword removal would expose the account to previously blocked traffic - Any change touches conversion tracking or attribution - Two agents propose conflicting changes - Data quality is poor (insufficient sample size for a recommendation) - The agent detects anomalous patterns it hasn't seen before
Credentials Required¶
| Secret | Used by |
|---|---|
GOOGLE_ADS_* |
All 8 agents (read + write) |
SF_* |
Offline Conversions agent |
GA4_* |
Attribution agent |
SLACK_* |
Orchestrator (notification + approval) |
Related¶
- Google Ads Daily Negatives Pipeline — the predecessor to this system
- Google Ads Engine Build — how the account was built
- Google Ads Ad Copy Review — prior ad copy work
- MCP Server Landscape — the MCP tools these agents use
- Salesforce / Litify AI Toolkit — CRM integration for offline conversions