---
name: optimize-audience-performance
description: >-
  The recurring audience review for Video and Demand Gen campaigns: pulls segment-level performance with GAQL,
  classifies every attached audience (remarketing vs prospecting), applies explicit keep/adjust/pause thresholds,
  graduates or retires observation-mode segments, tunes manual-bid modifiers, prunes demographic outliers, audits
  expansion impact, and checks list health. Run it monthly (bi-weekly light passes on high-volume accounts), or
  immediately when a segment's CPA runs past 3x campaign average for two weeks, a remarketing list falls under 100
  users, or heavy cross-campaign overlap appears. It assumes audiences already exist and are wired correctly, for
  first-time setup use set-up-audience-targeting; for PMax signal work (signals cannot be judged per-segment) use
  set-up-audience-signals; for rebuilding or refreshing the underlying customer lists use build-customer-match-lists;
  for the go/no-go on growing reach use expand-audience-reach.
---
# Audience Performance Review and Cleanup

## Purpose
Audiences are usually configured once and never revisited: lists go stale, observation segments never graduate,
losers keep spending, and expansion features drift the delivery away from what anyone chose. This skill is the
recurring corrective, a data pull, a set of hard thresholds, and a short list of previewed writes that keep the
audience layer of Video and Demand Gen campaigns clean and earning.

## When to run
- On cadence: monthly full pass for most accounts; add a bi-weekly light pass (data pull + remarketing/prospecting
  triage) once a campaign clears ~100 conversions/month.
- Immediately when: a segment's CPA exceeds ~3x campaign average (or ROAS falls under ~a third of it) for 14+
  straight days; a remarketing list drops below 100 users and stops serving; overlap analysis shows two campaigns
  chasing largely the same users; or right after targeting-mode/segment changes settle.

## When NOT to run
- No audiences configured yet, or targeting fundamentally miswired → `set-up-audience-targeting`.
- The campaign is Performance Max → `set-up-audience-signals` (PMax audiences are signals; per-segment judgment
  does not apply there).
- The Customer Match list itself needs building or a major overhaul → `build-customer-match-lists`.
- You are choosing what expansion to attempt next, not reviewing what runs today → `expand-audience-reach`.

## Prerequisites
- Video or Demand Gen campaigns live 30+ days with audience segments attached.
- A stated per-campaign efficiency target (CPA, ROAS, or CPL), every threshold below is relative to it.
- Last cycle's review notes if they exist (carry-forward decisions need checking before new ones are made).

## Procedure
1. **Consult the policy guardrail.** Call `gads_policy_guardrail` before the session's first Google Ads write.
2. **Pull the dataset.** Call `gads_run_gaql_query` against the audience views (ad group and campaign level) for
   the last 30 days, stretch to 60 when the campaign converts under ~30 times/month. Capture per segment: name,
   type, campaign/ad group, mode, impressions, clicks, CTR, cost, conversions, conversion value, CPA/ROAS,
   conversion rate. Pull the campaign averages alongside, every rule below compares against them.
3. **Classify and flag.** Sort each segment into remarketing (site visitors, abandoners, customer lists,
   channel-engaged) or prospecting (custom intent, in-market/life events, lookalikes, affinity). Then flag:
   underperformer (CPA >2x average or ROAS <50% of it for 14+ days), zero-converter (0 conversions on 50+ clicks),
   ghost (<100 impressions in 30 days), star (CPA <half average with 10+ conversions), and too-new (<30 days, observe only). Flags select candidates; actions still require the data floors in Decision rules.
4. **Triage remarketing.** Shorter recency windows almost always win, if the 7-day list has 1,000+ users, budget
   should concentrate there over 30/60-day lists. Apply the keep/adjust/pause grid (Decision rules). Verify a
   recent-converter exclusion exists on every remarketing campaign; if missing, adding one is the highest-impact
   single fix in this whole skill (write it if the toolset allows, otherwise HUMAN STEP with exact window).
5. **Check the customer-list layer.** Call `gads_list_user_lists`: match rate healthy at 40%+ (investigate under
   29%), matched size 1,000+, refreshed within 30 days. Refresh overdue lists via `gads_add_customer_match_members`
   and purge opt-outs/lapsed records via `gads_remove_customer_match_members`, preview first, apply only after
   user approval. If the list underperforms as a whole, propose splitting it (top-20% value, active, lapsed) rather
   than pausing first-party data outright.
6. **Triage prospecting.** Custom intent segments: keep/scale winners; on losers diagnose the inputs (informational
   queries → replace with transactional converters; irrelevant URLs → true competitors) and rebuild rather than
   tinker. In-market/life-event segments have one lever: keep or remove, remove at CPA >2x target sustained 30+
   days, or 0 conversions on 200+ clicks. Affinity only earns its place on awareness goals; on conversion goals it
   goes. Lookalikes (Demand Gen only): move reach one notch at a time, widen a notch when efficient but
   volume-starved, tighten a notch when CPA >2x target, replace the seed when already narrow and still failing;
   wait 14+ days between notch changes.
7. **Review observation-mode segments.** A segment graduates to restrictive targeting (own ad group) once it shows
   better-than-average efficiency on 100+ clicks, 14+ days, and 10+ conversions. At-average: hold one more cycle.
   Clearly worse (CPA >2x average): remove. Anything sitting in observation 60–90 days without a signal gets
   removed to free the slot. Execute attachments via `gads_attach_audience_to_ad_group` (preview → approval);
   where a detach is not tool-reachable, mark HUMAN STEP with the exact segment and ad group.
8. **Tune bid modifiers (Manual CPC only, skip under Smart Bidding).** Call `gads_set_audience_bid_modifier` per
   the banded rules below, changing any one modifier by at most 20 points per cycle and waiting 14 days between
   rounds. Multiply out stacked audience x device x location modifiers before applying, stacks compound
   (e.g. +30% x +20% x +15% ≈ +79%) and can silently price you out or in. Preview → approval → apply.
9. **Prune demographic outliers (monthly).** Pull age/gender/parental/income splits via `gads_run_gaql_query` and
   `gads_get_device_performance` for the device cross-check. Exclude a demographic cell via
   `gads_set_demographic_targeting` when it shows CPA >2x average on 50+ clicks or 0 conversions on 100+ clicks
   (preview → approval); reverse mistaken exclusions with `gads_remove_demographic_targeting`. Treat the Unknown
   bucket as protected: it hides 15–30% of inventory, so exclude it only after 30+ days of sustained failure.
10. **Audit expansion impact (monthly).** Via `gads_run_gaql_query`, isolate the expansion/optimized-targeting
    delivery share and compare its CPA to the selected audiences'. Under 1.5x: leave on. 1.5–2x: watch another
    cycle. Over 2x: recommend OFF. Over half of conversions coming from expansion means the chosen audiences are
    too narrow, fix selection before killing expansion. Remarketing campaigns must show expansion OFF, full stop.
    The toggle itself is HUMAN STEP (outside VigilDog), deliver the exact instruction.
11. **Discovery (monthly).** From conversion-share and over-index data in the pulled reports, queue at most one new
    combined segment per cycle via `gads_create_combined_audience` (e.g. discovered in-market AND proven custom
    segment, NOT existing customers), attach it to its own test ad group via `gads_attach_audience_to_ad_group`,
    and give it 30 days. Preview → approval on both writes.
12. **Close the loop.** Log every action with its triggering numbers, schedule the next pass, and set re-check
    dates: 14 days for mode/bid changes, 30 days for new segments.

## Decision rules
- **Data floors before any action:** 30 days and 50+ clicks minimum; removals want 100+ clicks; graduation wants
  10+ conversions. Flags without floors are watchlist items, not actions.
- **Keep/adjust/pause grid (vs campaign target):** on-target → keep (scale if 10+ conversions); CPA 1–1.5x (ROAS
  67–100%) → adjust (recency window, creative, landing page); CPA 1.5–2x (ROAS 50–67%) → tighten harder; CPA >2x
  (ROAS <50%) sustained → pause/remove regardless of volume tier.
- **Remarketing recency:** expect efficiency to decay with distance from the visit, tighten at 31–60 days when
  CPA passes 1.5x target, pause 61–90+ day windows at 2x unless the purchase cycle is genuinely long. Keep
  membership duration under ~2x the purchase cycle; longer just pads the list with dead intent.
- **Converter exclusion windows:** impulse products 7–14 days; standard 14–30; considered/high-value 30–60;
  subscriptions exclude active subscribers outright.
- **List size bands:** 10,000+ healthy; 1,000–10,000 fine but watch the trend; 100–1,000 delivery-limited; <100
  not serving, broaden or merge. Delete lists unused 90+ days or stuck under 100 users for 60+.
- **Bid modifier bands (Manual CPC):** CPA ≥50% better than average → +20 to +40; 20–50% better → +10 to +20;
  within ±20% → leave alone; 20–50% worse → −10 to −20; ≥50% worse → −30 to −50 or remove.
- **Insight-driven additions:** a segment over-indexing ~3x among converters is a priority test; 1.5–3x with
  meaningful conversion share earns a separate-ad-group test; below 1.5x is noise. One new test per cycle.

## Common failure modes
- **Deciding on a week of data.** Seven days of segment stats is noise; hold to the 30-day/50-click floor even when
  a number looks dramatic.
- **Observation as a retirement home.** Segments that never graduate or retire just accumulate. Every observation
  segment carries an implicit 60-day decision deadline.
- **Cold audiences judged by remarketing yardsticks.** Prospecting CPAs run structurally higher; set expectations
  per audience warmth or you will pause everything cold and stall growth.
- **Stacked modifiers compounding unseen.** Three modest adjustments multiply into an extreme bid. Always compute
  the product before applying (step 8).
- **Expansion measured never.** Optimized targeting can quietly move most spend off the chosen audiences; without
  the step-10 comparison the drift is invisible in campaign-level numbers.
- **Excluding Unknown demographics casually**, it removes a big slice of reachable inventory for what is often a
  reporting artifact.
- **Skipping list health because "audiences" sounds like campaign work.** Sub-100-user lists silently stop serving;
  step 5 catches it before the campaign flatlines.

## Related skills
- Run before this (if foundations are missing): `set-up-audience-targeting`, `build-customer-match-lists`.
- Sibling for PMax: `set-up-audience-signals`, signal quality work, not per-segment judgment.
- Run after this: `expand-audience-reach` when everything is healthy and the question becomes where to grow next.
