---
name: monitor-and-maintain-bid-strategy-health
description: >-
  The recurring six-part checkup for every active bid strategy in the account: learning status
  (hold flags on anything still calibrating), conversion-volume sufficiency against per-strategy
  thresholds, target-vs-actual variance scoring with a root-cause diagnostic, gradual target
  corrections (10-20% max per move), migration-readiness up the automation ladder, and portfolio
  hygiene (grouping, forgotten CPC caps, stale bid adjustments). Run it monthly on stable accounts,
  bi-weekly on active ones, and within 48 hours of any major change. It is the maintenance loop, not initial selection (select-a-bidding-strategy), not target derivation (calculate-bid-targets),
  not deliberate scaling (scale-bids-and-budgets), and not the dedicated budget-cap rescue
  (handle-budget-limited-campaigns).
---
# Bid Strategy Health Check and Maintenance

## Purpose
Bid strategies degrade silently: volume drifts below what the algorithm needs, a target set last
quarter loses touch with breakeven, a CPC cap from an old emergency quietly throttles bids, and
leftover manual-era adjustments clutter campaigns that ignore them. This skill sweeps every active
strategy on a schedule, catches those regressions early, and applies only gradual, documented
corrections.

## When to run
- Scheduled cadence: monthly (stable accounts) or bi-weekly (high spend / recent changes).
- Within 48 hours after any major change: strategy switch, budget move >30%, targeting overhaul,
  conversion-action edits.
- Immediately on a detected performance decline.
- First week after onboarding an account; at each seasonal transition; within 3 days after a
  learning period completes.

## When NOT to run
- Choosing a first strategy -> select-a-bidding-strategy.
- Deriving targets from economics -> calculate-bid-targets.
- Healthy strategy, deliberate growth push -> scale-bids-and-budgets.
- Single campaign pinned by its budget cap -> handle-budget-limited-campaigns (this skill only
  flags the condition).
- Broken conversion tracking -> set-up-google-ads-conversion-tracking; no bidding maintenance is
  meaningful on bad signal.

## Prerequisites
- Breakeven CPA/ROAS/profit-per-spend per strategy (from calculate-bid-targets).
- Known conversion lag; last 30 days of data beyond it.
- The change log from previous health checks (what was adjusted, when, why).

## Procedure
1. **Session guardrail.** Call `gads_policy_guardrail` before the session's first write.
2. **Inventory + learning status.** Pull all strategies via `gads_list_bidding_strategies`
   (portfolios) and `gads_get_campaign` / `gads_run_gaql_query` on
   `campaign.bidding_strategy_system_status` (campaign-level). Classify each: fully operational;
   learning (recent change, HOLD, no changes of any kind until ~two conversion cycles pass);
   learning-limited (cannot exit, diagnose: volume too thin -> step 3, budget too small ->
   budget fix, tracking broken -> fix tracking, target too aggressive -> flag for step 5);
   budget-limited (note for step 4); misconfigured (fix immediately, this is the one exception to
   the learning HOLD).
3. **Volume sufficiency.** For each non-held strategy, pull 30 days of conversions (window
   extended by conversion lag, trailing lag days excluded) via `gads_run_gaql_query`. Judge
   against the Decision-rules thresholds (portfolios judge the pooled total). For shortfalls, in
   priority order: verify tracking (`gads_list_conversion_actions` + GAQL by conversion action);
   consolidate 2-3 same-goal campaigns via `gads_create_portfolio_bidding_strategy` (previewed,
   approved); temporarily drop the target (tCPA -> Maximize Conversions, tROAS -> Maximize
   Conversion Value) via `gads_set_campaign_bidding_strategy`; consider optimizing on a
   higher-volume upstream event while data builds; or raise budget in ~20% steps via
   `gads_update_budget`. Every write: preview -> user approval -> apply.
4. **Variance scorecard.** For each healthy-volume strategy, compute (actual - target)/target
   from `gads_get_account_performance` / GAQL. Classify per Decision rules. For underperformers,
   walk the diagnostic in order and stop at the first hit: recent structural change still
   settling; junk queries or new competitors eating spend; market contraction; over-broad
   negatives blocking good queries; evaluation window shorter than the conversion cycle;
   short-term seasonality; conversion-rate drop on the landing page/offer (not a bidding problem).
   Only if none apply is the target itself the suspect. Budget-limited entries: IS lost to budget
   10-25% -> raise budget if growth matters; >25% -> raise budget or, if capped, set the target
   5-10% looser than recent actuals to recapture volume within spend (a tighter target under a
   binding cap buys fewer, pricier auctions).
5. **Gradual target corrections (write).** For flagged strategies, adjust via
   `gads_update_campaign` / `gads_set_campaign_bidding_strategy` (portfolio targets via the
   portfolio resource). Loosening: max 15-20% per move. Tightening: max 10-15%. Anything needing
   >20% total gets split across multiple moves, one conversion cycle apart. Preview each change
   with old/new/reason; apply after approval; log to the change record with a next-review date.
6. **Migration readiness.** Score each strategy against the automation progression: manual ->
   Maximize Conversions once ~30 conversions have accumulated and tracking is clean; add a CPA
   target once 30+/month is sustained for 2 months with stable CPA and known breakeven; move to
   tROAS once 50+/month carry genuinely varied values; move to profit-based values once profit
   tracking is live and validated. Ecommerce naturally climbs to value/profit bidding; lead gen
   usually ends at tCPA unless imported deal values vary meaningfully. Execute migrations through
   migrate-from-manual-to-smart-bidding or set-up-value-based-bidding (experiment-first), not
   inline here.
7. **Portfolio hygiene.** For each portfolio (via `gads_list_bidding_strategies` + GAQL):
   members all one campaign type and one efficiency goal; no paused/ended stragglers attached; no
   member contributing <5% of pooled conversions as dead weight. CPC caps: expected OFF; if ON,
   the cap must sit at >=3x the average CPC of top converting terms, top-keyword CPCs must not
   plateau at the cap, IS lost to rank must not have climbed since it was set, otherwise raise or
   remove it (previewed, approved). Any minimum-CPC floor: remove. Shared budgets: no member
   consuming >60% disproportionately; daily budget >=10x target CPA for CPA portfolios.
8. **Bid-adjustment cleanup (write).** Smart Bidding ignores every percentage modifier except
   device -100%. Query existing adjustments via GAQL; zero out stale non-exclusion device /
   location / schedule / audience / demographic modifiers on Smart Bidding campaigns with
   `gads_set_bid_adjustments` (keep deliberate device -100% exclusions). Preview the cleanup list,
   apply after approval, these leftovers do nothing but mislead future readers of the account.
9. **Close out.** Update the change log (date, entity, old, new, reason, next review). Schedule
   the next check per cadence. 1-2 days after any target change: spot-check spend/volume via
   `gads_get_campaign`; one conversion cycle later: evaluate against the new target.

## Decision rules
- **Volume thresholds (30-day, per strategy):** Maximize Conversions / tCPA, 15 absolute floor,
  30 functional, 50+ comfortable. Maximize Conversion Value, 15/50/50+. tROAS, 30 absolute,
  50 functional/recommended, values must vary (identical values -> tROAS adds nothing over tCPA;
  use tCPA).
- **Variance bands:** within +/-10% -> healthy, hands off. 10-25% worse -> diagnose. >25% worse ->
  diagnose, escalated. 10-25% better -> check whether volume is being sacrificed. >25% better ->
  target likely over-tightened; loosen.
- **Adjustment limits:** loosen <=15-20%, tighten <=10-15%, one conversion cycle between moves;
  >20% in one move restarts learning.
- **Learning HOLD:** no target/budget/structural changes on strategies in learning; sole
  exception is fixing a genuine misconfiguration.
- **Seasonality:** for known 1-7 day conversion-rate events use a seasonality signal /
  set-up-data-exclusions route; for multi-week seasonal shifts adjust targets directly (loosen
  5-10% pre-peak, tighten back after).
- **Offline-import accounts:** thresholds apply to the imported action, and import lag (often
  7-30 days) extends every evaluation window.

## Common failure modes
- **Editing a learning strategy.** Resets the clock, extends volatility, and invites the next
  panic edit. Hold flags exist to be honored.
- **Lag-blind evaluation.** Scoring the last 7 days with a 14-day conversion cycle manufactures
  fake underperformance; trim the window every time.
- **The forgotten CPC cap.** Set in an emergency, correct for a month, wrong for a year. Check
  every cap, every cycle.
- **Treating demand problems as bidding problems.** Seasonal decline or a landing-page regression
  will not be fixed by target surgery; the step 4 diagnostic runs before any adjustment.
- **Undocumented changes.** Without the change log, the next session re-adjusts the same target
  and compounds the move past the 20% learning-reset line.

## Related skills
- Upstream: select-a-bidding-strategy, calculate-bid-targets,
  set-up-conversion-based-bidding / set-up-value-based-bidding (the setups this loop maintains).
- Downstream on findings: scale-bids-and-budgets (healthy + headroom),
  handle-budget-limited-campaigns (cap-bound), set-up-portfolio-bid-strategies (consolidation),
  migrate-from-manual-to-smart-bidding (ladder moves), set-up-google-ads-conversion-tracking
  (signal repairs), allocate-budget-across-campaigns (structural budget rethink).
