---
name: run-pmax-ecommerce-optimization-cycle
description: >-
  Recurring maintenance loop for ecommerce Performance Max campaigns (both feed-only and full-asset builds):
  gate on learning-period status, sweep search terms weekly and push waste into shared negative lists, tier
  creative assets bi-weekly, then monthly check channel mix against healthy ranges, brand bleed, asset-group
  structure, product/feed performance, and placements. Use it when an ecommerce PMax campaign is at least four
  weeks old, out of learning, and due for its weekly, bi-weekly, or monthly pass. Do not use it for lead-gen or
  SaaS PMax (run-pmax-lead-gen-saas-optimization-cycle), for standing up a new campaign
  (launch-pmax-feed-only-campaign / launch-pmax-full-assets-ecommerce-campaign), for deep query-promotion work
  (manage-pmax-search-terms-and-brand-defense), for feed repair (set-up-and-optimize-product-feed), or as a
  substitute for the account-wide check-in (run-a-weekly-performance-review).
---
# Ecommerce Performance Max Optimization Cycle

## Purpose
Keep an established ecommerce PMax campaign healthy through a fixed-cadence review that touches queries,
creative, channel distribution, structure, products, and placements, in that order. The discipline here is
restraint: PMax rebuilds its internal model after most changes, so the cycle makes a small number of deliberate
edits per pass and leaves the algorithm alone in between. Every finding either becomes an approved change now
or a documented item for the next pass.

## When to run
- The campaign launched 4+ weeks ago, records roughly 30+ conversions/month, and no structural edit
  (asset-group change, bid-strategy change) happened in the last 2 weeks.
- Weekly: the query and negative-keyword sweep (steps 2-4).
- Bi-weekly: add the asset review (step 5), full-asset campaigns only.
- Monthly: the full pass including channels, brand, structure, products, placements (steps 6-10).
- Ad hoc: spend or ROAS moved sharply and you need to find where inside the black box it happened.

## When NOT to run
- Lead-gen or SaaS PMax, use run-pmax-lead-gen-saas-optimization-cycle (quality-signal logic differs).
- Campaign not yet built, use launch-pmax-feed-only-campaign or launch-pmax-full-assets-ecommerce-campaign.
- You specifically want to move winning PMax queries into Search, use manage-pmax-search-terms-and-brand-defense.
- Root cause is the product feed itself, use set-up-and-optimize-product-feed.
- You want the whole-account picture, not one campaign, use run-a-weekly-performance-review.
- Campaign is inside a learning period (see decision rules), log the exit date and return then.

## Prerequisites
- Conversion tracking verified and reconciling with the platform UI.
- Know whether the campaign is feed-only (listing groups only, zero creative assets) or full-asset, feed-only campaigns skip the asset step and the audience-signal review entirely.
- A shared negative keyword list already linked, or willingness to create one in step 4.
- Target CPA or ROAS for the campaign, to price "wasted spend" thresholds.

## Procedure
Before the first Google Ads write of the session, call `gads_policy_guardrail` and honor its output.
Every write below is previewed first (validate_only=true default) and committed only after explicit user approval.

1. **Learning-period gate.** Use `gads_run_gaql_query` to pull campaign status, serving state, and the last
   30 days of change history (bid strategy, budget, asset-group mutations). Map any recent change to the
   learning windows in the decision rules. If the campaign is still inside a window: STOP, report the estimated
   exit date, and end the cycle, edits made now reset the clock.
2. **Query sweep (weekly).** Call `gads_get_search_terms_report` for the PMax campaign, last 7 days, sorted by
   cost descending, and review the top 50-100 rows. Bucket each query: profitable and on-topic (leave alone);
   heavy spend with zero conversions; off-topic for the catalog; contains your brand (hold for step 7);
   contains a competitor brand (judge on its numbers); research-stage phrasing like price-comparison or
   how-to queries (cut unless upper-funnel traffic is wanted).
3. **Brand-share check.** From the same report, compute the share of impressions on brand-containing queries.
   Above 30% means reported performance is propped up by demand you already own, flag it for step 7.
4. **Apply negatives (write).** If no shared list exists, create one with `gads_create_shared_negative_set` and
   link it via `gads_link_shared_set_to_campaign`. Add the step-2 exclusion candidates with
   `gads_add_negative_keywords`, preview first, apply only after user approval. Before committing, re-check
   with `gads_run_gaql_query` that no new negative collides with a query that converts. For high-volume
   campaigns, run the run-n-gram-analysis skill on a 30-day export to catch waste patterns single queries hide.
5. **Asset review (bi-weekly, full-asset campaigns only).** List groups with `gads_list_asset_groups`, inspect
   each with `gads_get_asset_group`, and pull per-asset impressions/clicks/conversions through
   `gads_run_gaql_query` on the asset-group-asset report. Grade each asset with the tier rules below. Judge on
   these delivered metrics, not on Google's ad-strength grade. Queue at most 1-2 replacements per asset type,
   each testing a genuinely different message angle; execute swaps through the run-a-creative-testing-cycle
   skill. HUMAN STEP (outside VigilDog): disable Google's auto-generated video in the UI if you supply your own.
6. **Channel mix (monthly).** Call `gads_get_pmax_channel_performance` and compare the spend split to the
   healthy ranges in the decision rules. Diagnose out-of-range channels: Shopping share collapsing points at
   feed or Merchant Center trouble (step 9); Display ballooning points at placements (step 10); Video spend
   with no uploaded videos means auto-generated video is running; Search unusually fat usually means brand
   bleed (step 7). A feed-only campaign spending meaningfully outside Shopping almost always means creative
   assets were accidentally attached, verify with `gads_get_asset_group`.
7. **Brand containment (monthly).** Cross-reference brand queries from step 2 against the dedicated brand
   Search campaign using `gads_run_gaql_query`: PMax paying more per brand click than Search, or Search brand
   volume sliding while PMax brand volume grows, means PMax is intercepting owned demand. HUMAN STEP (outside
   VigilDog): confirm the campaign's brand-exclusion list in the Google Ads UI covers the brand plus every
   misspelling seen in the report, and add new variants there. For the promotion side, run
   manage-pmax-search-terms-and-brand-defense.
8. **Structure review (monthly).** With `gads_list_asset_groups` plus a `gads_run_gaql_query` rollup of
   conversions per asset group, apply the consolidation/split thresholds below. Also scan listing groups for
   overlaps that make products compete with themselves. Propose at most ONE structural change per month; it
   restarts learning, so schedule it deliberately and note the new gate date for step 1.
9. **Product and feed health (monthly).** Use `gads_get_shopping_performance` and `gads_run_gaql_query` to rank
   products/listing groups by cost: spenders with no conversions become exclusion or re-segmentation
   candidates; zero-impression products signal feed-quality gaps (weak titles, missing identifiers, poor
   images). HUMAN STEP (outside VigilDog): check Merchant Center for approval rate (want >95%) and price or
   availability mismatches against the site. Deeper repair belongs to set-up-and-optimize-product-feed.
10. **Placement review (monthly).** Pull `gads_get_placement_report` sorted by impressions and flag entries per
    the placement rules below. Apply exclusions with `gads_add_negative_placements`, preview first, apply only
    after user approval, and warn the user that placement exclusions act account-wide, so a placement must be
    unwanted for every campaign before it goes on the list.
11. **Close the cycle.** Summarize findings, changes applied, deferred items with owners, and the date of the
    next weekly / bi-weekly / monthly pass. Persist any new learning-period gate dates for step 1.

## Decision rules
- Learning windows after a change: new campaign 4-6 weeks; bid-strategy change 2-4 weeks; budget moved more
  than ~20% 1-2 weeks; asset group added or removed 1-2 weeks; audience-signal overhaul 2-3 weeks. Inside a
  window: read-only, no optimization.
- Negative-keyword trigger: query spent roughly 3x your per-conversion target with zero conversions, or is
  plainly outside the catalog. When unsure on a borderline term, defer one week rather than block reach.
- Brand share of PMax impressions should stay under 30%; above that, treat reported ROAS as inflated.
- Asset tiers (per type, after 2+ weeks live): above-average CTR and conversion rate = keep; average with
  enough volume = watch; below-average with 1,000+ impressions = replace; under 500 impressions after 2 weeks =
  check approval status; 1,000+ impressions and zero conversions = replace immediately. Never swap more than
  1-2 assets per type per cycle.
- Channel spend, full-asset ecommerce: Shopping 40-70% (investigate under 30%); Search 15-35% (investigate
  under 10% or over 50%); Display 5-15% (investigate over 25% with weak conversions); Video 5-15% (investigate
  over 20% with no uploaded video); Gmail/Discover 2-10% (investigate over 15% with low engagement).
- Channel spend, feed-only: Shopping should hold 85%+; under 70%, or over 15% combined on other channels,
  hunt for accidentally attached creative assets.
- Asset-group volume: under 30 conversions/month = consolidation candidate; over 200/month = split candidate,
  provided each resulting group can sustain 100+ conversions/month. If the account segments products into
  performance tiers, keep every tier campaign on the same ROAS target so products migrate between tiers freely.
- Placements: exclude mobile-app placements with zero conversions, junk content domains, irrelevant video
  channels, and any single placement holding >5% of spend with zero conversions.

## Common failure modes
- Editing during learning because the graph looks scary, the edit itself extends the bad period. Gate first.
- Wholesale asset swaps: replacing everything at once means you never learn which change worked.
- Trusting "PMax manages queries itself" and skipping the weekly sweep, waste compounds silently.
- A structural tweak every week: each one restarts learning and the campaign never reaches steady state.
- Adding creative assets to a feed-only campaign "to help it", that quietly converts it into full-asset
  behavior and opens non-Shopping spend.
- Excluding a placement account-wide that another campaign actually needed, always state the blast radius in
  the approval preview.
- No notes between cycles, so slow trends (creeping brand share, channel drift) go unnoticed for months.

## Related skills
- Before: launch-pmax-feed-only-campaign or launch-pmax-full-assets-ecommerce-campaign (build), then wait out
  learning.
- Alongside: run-a-weekly-performance-review (account level), run-shopping-campaign-optimization-cycle
  (standard Shopping twin).
- Deep dives: manage-pmax-search-terms-and-brand-defense (query promotion and brand routing),
  run-n-gram-analysis (pattern-level negatives), run-a-creative-testing-cycle (asset swaps),
  set-up-and-optimize-product-feed (feed repair).
