Approval Pipeline¶
How the War Room gets changes from "proposed" to "deployed" with Sam in the loop via Slack.
Slack Channel¶
Create a dedicated #google-ads-warroom channel in Slack. All War
Room messages go here. This keeps ads management separate from
general firm communications.
Message Format¶
SAIL Google Ads War Room — [date]
ACCOUNT HEALTH: [score]/100
Attribution: [X] | Keywords: [X] | Ad Copy: [X]
Assets: [X] | Bidding: [X] | Offline Conv: [X]
---
CRITICAL (N items — needs immediate attention)
[ID] Description
Risk: explanation
Action: what needs to happen
---
NEEDS REVIEW (N items)
[NK-003] Remove negative "slip and fall" (PHRASE) from Car Accidents
Reason: Blocking all slip-and-fall PI queries, core practice area.
Evidence: 0 impressions for related terms in 30 days.
[Approve] [Reject]
[AK-001] Add keyword "truck accident attorney louisville" (EXACT)
Reason: 8 impressions, 2 clicks, 1 conversion. Not explicitly targeted.
[Approve] [Reject]
---
AUTO-APPROVED (N items — already applied)
[NK-001] Added negative "criminal defense attorney" (PHRASE) — account level
[NK-004] Removed 12 exact duplicate negatives
... (expand for full list)
---
OBSERVATIONS (no action needed)
- Brand Protection CTR: 14.04% (healthy)
- Spanish campaign: 0 conversions in 30 days (too early, 12 days live)
---
Reply: "approve all" / "approve NK-003, AK-001" / "reject BS-001"
Approval Methods¶
- Reply with IDs: "approve NK-003, AK-001" or "reject BS-001 — too aggressive"
- Shorthand: "approve all" or "reject all"
- Defer: "hold BA-001 until next week"
Risk Tiers¶
| Tier | Examples | Approval |
|---|---|---|
| Low / Safe | Add obvious negative, remove duplicates, remove orphaned assets | Auto-approved (shown in report) |
| Medium | Remove a negative, pause a keyword, change bid modifier | Requires Slack approval |
| High | Budget change >10%, tCPA adjustment >15% | Requires approval + highlighted |
| Critical | Attribution/tracking changes, strategy change, campaign enable/disable | Requires approval + urgent tag |
Auto-Approve Criteria¶
A change can auto-approve ONLY if ALL of these are true: - risk_level is "safe" - auto_approve_eligible is true - reversible is true - Falls into one of these categories: - Adding negative for clearly off-topic term (>=$20 spend, 0 conversions) - Removing exact duplicate negatives - Removing redundant EXACT negatives where PHRASE exists - Removing orphaned assets from paused/removed campaigns - Uploading offline conversions with valid gclid mapping - Adding audience observation layers (no bid impact) - Attribution window tightening
NEVER Auto-Approve¶
- Anything involving brand terms
- Any budget change
- Any bidding strategy change
- Any ad copy creation or modification
- Any keyword addition
- Any geographic targeting change
- Any conversion value >$50,000
Slack Integration Setup¶
Option A (simple, recommended for v1):
- Create Incoming Webhook for #google-ads-warroom
- POST formatted messages
- Sam replies in-thread
- Orchestrator polls for replies via Slack API
Option B (richer, for v2):
- Create Slack App with interactive message buttons
- Approve/Reject buttons per change
- Scopes needed: chat:write, reactions:read, channels:history
Both options can route through Pipedream Connect (app slug: slack)
if direct Slack API access is blocked.
Post-Deployment Confirmation¶
After executing approved changes, a follow-up Slack message:
War Room Deployment Complete — [date]
Executed: 12/14 approved changes
Failed: 2 (details below)
Failed:
[AK-002] Add keyword "semi truck wreck" — Error: ad group criterion limit reached
[BA-003] Set location modifier — Error: criterion not found
All other changes verified. Run logged to Notion.