---
name: configure-account-alerts
description: >-
  Stands up a scheduled monitoring layer for a Google Ads account: baselines normal spend, CPC, and
  conversion volume, then defines nine threshold checks (overspend, zero spend, budget-limited,
  zero conversions, volume drop, CPA blowout, CPC spike, disapprovals, dead ad groups) that VigilDog
  evaluates via gads_run_gaql_query and gads_get_disapproved_ads instead of native Google email
  rules. Reach for it during onboarding, after taking over an account, or when a settings review
  shows monitoring gaps. Do not use it to actually perform the daily scan (that is
  run-a-daily-account-health-check) or to chase down why a metric moved (that is
  investigate-performance-anomalies), this skill only builds and tunes the detection net that
  feeds those two.
---
# Build an Automated Alert Net for a Google Ads Account

## Purpose
Set up a repeatable set of threshold checks so tracking breakage, runaway spend, and policy
problems get caught between manual reviews instead of after they have burned budget. VigilDog runs
the checks directly against the API, which means the alert logic lives in queries you control
rather than in Google's rule builder, and results can be pushed to whatever channel the team uses.

## When to run
- A new account is being onboarded and has no monitoring beyond ad-hoc logins.
- You are inheriting an existing account and cannot yet trust its history or its owners' habits.
- A quarterly settings review found categories of failure (e.g., disapprovals) nobody would notice.
- Alert thresholds have gone stale after a major change in account scale or targets.

## When NOT to run
- You want to execute today's triage pass, use run-a-daily-account-health-check.
- A metric already moved and you need the cause, use investigate-performance-anomalies.
- An alert about disapproved ads already fired, go straight to resolve-ad-disapprovals.

## Prerequisites
- Read access to the Google Ads account through VigilDog.
- Agreed target CPA and/or ROAS per campaign (needed for efficiency thresholds).
- Expected daily spend per campaign and expected weekly conversion volume (or 30+ days of history
  from which to derive them).
- A delivery channel decision: where should triggered alerts land (Slack, email digest, report)?

## Procedure
1. Baseline the account. Use `gads_run_gaql_query` to pull the last 30 days of campaign-level
   cost, average CPC, conversions, and conversion value, segmented by date. From this compute per
   campaign: typical daily spend, typical CPC, and typical weekly conversion count. These numbers
   parameterize every threshold below.
2. Confirm targets. Ask the user for target CPA/ROAS per campaign if not already known. HUMAN STEP
   (outside VigilDog): the user supplies business targets; do not invent them from averages alone.
3. Define the budget checks (all evaluated with `gads_run_gaql_query`):
   - Overspend: yesterday's campaign cost above 120% of that campaign's typical daily spend.
   - Silent campaign: an ENABLED campaign with zero cost yesterday.
   - Budget-limited: `search_budget_lost_impression_share` above 20% over the trailing 7 days.
4. Define the conversion checks:
   - Zero conversions with meaningful spend: 0 conversions over 7 days while cost exceeded a
     floor scaled to the account (default: roughly one target CPA of spend).
   - Volume drop: trailing-7-day conversions below 40% of the expected weekly volume.
5. Define the efficiency checks:
   - CPA breach: 14-day cost-per-conversion above 2x target CPA, only when the window contains at
     least 5 conversions.
   - CPC spike: 7-day average CPC above 150% of the campaign's typical CPC.
6. Define the policy and delivery checks:
   - Disapprovals: run `gads_get_disapproved_ads` daily; any DISAPPROVED or approved-with-limits
     ad triggers.
   - Dead ad group: an ENABLED ad group with zero impressions over 7 days (via GAQL), usually
     means no eligible ads or no eligible keywords.
7. Dry-run every check once against live data before adopting it. A check that fires on more than
   a handful of entities on day one has a mis-set threshold; widen it before it trains the team to
   ignore alerts.
8. Add a weekly supplementary sweep of `gads_list_recommendations`, auto-generated repair-type
   recommendations (e.g., broken conversion setups) often surface issues the nine checks miss.
9. Record the alert inventory: for each check, its threshold, lookback window, evaluation
   frequency (daily vs weekly), and delivery channel. Store it where the team will find it.
10. HUMAN STEP (outside VigilDog): if the team also wants Google-native automated email rules as a
    redundant layer, those are created in the Google Ads UI (Bulk Actions > Rules); VigilDog has no
    tool for them. The GAQL checks above are the primary net either way.
11. Scheduling: if the user wants these evaluated automatically on a cadence, set that up in their
    orchestration layer of choice; VigilDog executes the reads on demand. No Google Ads writes occur
    in this skill, so no preview/approval cycle is required.

## Decision rules
- Never evaluate conversion-based checks on windows shorter than 7 days: conversion lag makes
  1-3 day windows fire falsely on healthy campaigns.
- Zero account-level conversions in a normally converting account is always urgent, it means
  tracking, not performance, and outranks every other alert.
- CPA checks need a minimum of about 5 conversions in the window; below that the ratio is noise.
- Daily cadence: overspend, silent campaign, disapprovals. Weekly cadence: everything else.
  Evaluating the weekly checks daily just multiplies false positives.
- Threshold defaults (120% spend, 20% IS lost, 40% volume floor, 2x CPA, 150% CPC) are starting
  points; tune monthly based on the false-positive rate, loosening first and tightening later.
- Scope checks to "all enabled campaigns" rather than a hand-picked list, so newly launched
  campaigns are covered automatically.

Check catalog at a glance:

| Check | Lookback | Cadence | Trigger |
|---|---|---|---|
| Overspend | 1 day | Daily | Cost > 120% of typical daily spend |
| Silent campaign | 1 day | Daily | ENABLED campaign, zero cost |
| Budget-limited | 7 days | Weekly | IS lost (budget) > 20% |
| Zero conversions | 7 days | Weekly | 0 conv. with cost above floor (~1x tCPA) |
| Volume drop | 7 days | Weekly | Conversions < 40% of expected weekly |
| CPA breach | 14 days | Weekly | Cost/conv > 2x target, >= 5 conversions |
| CPC spike | 7 days | Weekly | Avg CPC > 150% of typical |
| Disapprovals | current | Daily | Any disapproved / limited ad or asset |
| Dead ad group | 7 days | Weekly | ENABLED ad group, zero impressions |

## Common failure modes
- Alert fatigue: thresholds set tight to feel thorough, then every alert gets skimmed and ignored.
  Start loose; a net that catches only real problems is the one people act on.
- Coverage rot: checks parameterized against last year's spend levels keep firing (or never fire)
  after the account doubles. Re-baseline whenever budgets change materially, and at least
  quarterly.
- Substituting alerts for triage: the checks catch discrete breakage, not gradual decay. Keep the
  daily health check running; alerts shorten it, they don't replace it.
- Monitoring only ads: asset-level disapprovals (sitelinks, images) and dead ad groups are the
  classic blind spots. Steps 6's two checks exist precisely for these.
- No owner for the alert channel: alerts landing in an unwatched channel are the same as no
  alerts. Confirm someone is accountable for acting on each category.

## Related skills
- run-a-daily-account-health-check, the manual scan this alert net accelerates; run it daily.
- investigate-performance-anomalies, where a fired anomaly-type alert gets diagnosed.
- resolve-ad-disapprovals, where a fired disapproval alert gets fixed.
