Skip to content

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

  1. Agents run and produce manifests
  2. Orchestrator consolidates into Slack message
  3. Sam replies with approvals
  4. Approved changes execute via Google Ads MCP write tools
  5. Execution results logged to Notion as a handoff doc
  6. 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)