---
name: launch-advantage-plus-catalog-ads
description: >-
  Turns a populated, pixel-matched catalog into live Advantage+ catalog ads (formerly Dynamic Ads/DPA) - one
  ad auto-generated per product instead of a hand-built single-image ad. Covers both modes: retargeting,
  where pixel/CAPI events (ViewContent, AddToCart, Purchase) carrying content_ids drive which products a
  warm visitor sees again, and broad-audience prospecting, where Meta selects products for cold users with
  no event history. Builds the ad set (mads_create_adset) with product-set targeting, the dynamic creative
  template (mads_create_creative) that references the catalog, and the ad (mads_create_ad) - always created
  PAUSED. Reach for it once set-up-product-catalog is done and the goal is dynamic, per-viewer product ads.
  It ends at a running catalog-ad campaign - it does not fix matching problems
  (maintain-catalog-feed-hygiene), build the Collection/Instant-Experience format
  (build-collection-ads-and-product-sets), or instrument the pixel (set-up-pixel-and-standard-events).
---
# Launch Advantage+ Catalog Ads

## Purpose
Advantage+ catalog ads (formerly Dynamic Ads / DPA) generate one ad per product straight from the
catalog, personalized per viewer, instead of a media buyer hand-building an ad per SKU. This skill
takes a catalog and pixel that are already in place and turns them into a live ad set, dynamic
creative, and ad, in retargeting mode (chasing warm pixel events), broad-audience mode (Meta
picks products for cold prospects), or both as separate ad sets in the same campaign.

## When to run
- The catalog is populated and pixel-linked (`set-up-product-catalog` is done) and the goal is
  dynamic retargeting of site visitors, cart abandoners, or past purchasers.
- The goal is cold-audience prospecting driven by the catalog rather than a single hero product.
- Expanding existing catalog ads to a new product set, new audience window, or new campaign.

## When NOT to run
- No catalog yet, or it's empty → `set-up-product-catalog`.
- Catalog ads exist but products aren't rendering or matching → `maintain-catalog-feed-hygiene`.
- The goal is the grid + Instant Experience Collection format specifically →
  `build-collection-ads-and-product-sets`.
- The pixel isn't instrumented yet → `set-up-pixel-and-standard-events`.

## Prerequisites
- A live catalog with items, `mads_list_catalogs` confirms count > 0.
- A pixel firing ViewContent/AddToCart/Purchase where content_ids equal the catalog's
  retailer_id, content_type is correct, and value + currency are present, `mads_list_pixels` for a
  surface check (deep troubleshooting belongs to `maintain-catalog-feed-hygiene`).
- At least one product set to scope targeting eligibility.
- A campaign already created with a conversion-oriented objective, build one first if it doesn't
  exist (out of scope here).

## Procedure
1. **Decide the mode with the user.** Retargeting (warm, event-driven), broad-audience
   prospecting (cold, Meta-selected), or both as parallel ad sets under the same campaign.
2. **Retargeting: define the event window and confirm parity.** Typical windows: ViewContent
   7-day, AddToCart 3-day, Purchase excluded as a suppression. Before building, spot-check that
   pixel events actually carry matching content_ids, `mads_list_pixels`, and optionally
   `mads_send_conversion_event` with a known retailer_id to confirm the pipe is live end to end.
3. **Prospecting: skip the custom audience.** Target broad demographics/interests instead and let
   the catalog + Advantage+ delivery pick which products to show each person.
4. **Pick the product-set targeting scope.** The set that should be eligible to render, reuse the
   default set from `set-up-product-catalog`, or a purpose-built one from
   `build-collection-ads-and-product-sets`. Exclude out-of-stock or discontinued items here.
5. **Build the ad set.** `mads_create_adset` with the catalog ID, product-set ID, optimization
   goal (typically OFFSITE_CONVERSIONS on Purchase), targeting from steps 2-4, and budget in minor
   currency units (a $50.00 daily budget is `daily_budget=5000`). Preview → plain-English diff →
   explicit user approval → commit.
6. **Build the dynamic creative template.** `mads_create_creative` referencing the catalog with
   product-level placeholders (name, price, image) rather than one fixed image, this is what
   makes it "one ad, many products." Preview → approval → commit.
7. **Create the ad, always PAUSED.** `mads_create_ad` linking the ad set and creative with
   status=PAUSED. Never create catalog ads live.
8. **Preview rendered products before asking for go-live.** HUMAN STEP: spot-check a handful of
   product previews in Ads Manager, correct titles, prices, images actually populate.
9. **Get explicit go-live approval, then activate.** Only after the user approves, flip status
   from PAUSED to ACTIVE via `mads_update_adset`.
10. **Check delivery after 24-48h.** `mads_run_insights` / `mads_get_insights` for
    spend and impression sanity. Near-zero delivery despite a healthy budget is the classic
    "products not matching" symptom, route to `maintain-catalog-feed-hygiene`.

## Decision rules
- **Retargeting needs volume to be worth building.** If weekly ViewContent/AddToCart events per ad
  set are too thin to plausibly support learning, start broad/prospecting instead and add
  retargeting once event volume exists.
- **Product-set scope:** broad prospecting → the full in-stock set; retargeting → the same set is
  usually fine since Advantage+ shows the exact items each viewer interacted with regardless of
  the set's size, the set mainly exists to exclude items that should never serve.
- **Always create PAUSED.** No exceptions, regardless of mode or urgency.
- **Screen the product set for prohibited categories** (tobacco, weapons, IP-infringing goods)
  before go-live, not after a disapproval.
- **Done means:** ad set, creative, and ad all exist; status is PAUSED until the user approves;
  rendered previews were spot-checked; content_id parity was spot-checked; go-live approval is
  logged before the activation call.

## Common failure modes
- **content_id mismatch between pixel events and catalog retailer_id.** The single most common
  cause of "ads have nothing to show", verify before building, not after launch.
- **Retargeting launched on too little pixel volume.** Stuck in learning, wastes spend before
  anyone notices.
- **A static single-image creative slipped in instead of the dynamic template.** Defeats the point
  of a catalog ad, always use product-level placeholders.
- **Forgetting PAUSED at creation.** Live spend starts before anyone reviewed the rendered ad.
- **Wrong product-set scope surfaces out-of-stock or discontinued items.**
- **Missing value/currency on conversion events** silently breaks value-based optimization and
  ROAS reporting without throwing an obvious error.

## Related skills
- Run after: `set-up-product-catalog` (catalog must exist and be pixel-linked first).
- Run before/adjacent: `maintain-catalog-feed-hygiene` (matching troubleshooting),
  `build-collection-ads-and-product-sets` (the grid + Instant Experience variant),
  `set-up-pixel-and-standard-events` (measurement) for event depth.
