---
name: consolidate-fragmented-account
description: >-
  Repairs an account where too many ad sets are splitting the same conversion pool: audits every
  campaign with mads_list_campaigns/mads_list_adsets plus a mads_run_insights pull of the
  last 7-14 days, flags ad sets clearing fewer than ~50 optimization events/week, groups ad sets
  with heavily overlapping audiences (the self-competition signature behind rising CPMs), and
  merges each group into fewer, better-fed cells that pool the same optimization event. Reach for
  it when multiple ad sets show Learning Limited simultaneously, when CPM is climbing with no
  external cause, or before any scaling attempt on a base that is still fragmented. It ends at a
  consolidated structure with a documented before/after CPA, it does not diagnose non-structural
  causes of Learning Limited on a single healthy-shaped ad set (exit-learning-limited).
---
# Consolidate a Fragmented Account to Escape Learning Limited

## Purpose
Fragmentation is one root cause with two symptoms. Too many ad sets targeting overlapping audiences off a
shared conversion pool means each one starves below the ~50-event/week learning threshold, and the same
ad sets end up bidding against each other inside Meta's auction, which inflates CPMs account-wide with no
external explanation. Consolidation fixes both at once: fewer ad sets, each fed by a merged audience and a
pooled optimization event, escape Learning Limited and stop competing with their own siblings for the same
impressions.

## When to run
- Multiple ad sets in the same campaign or account show Learning Limited status at the same time.
- CPMs are rising account-wide with competitive pressure and seasonality already ruled out, the
  self-competition signature.
- An audit turns up ad sets with heavily overlapping audience definitions (same interests, same lookalike
  source, same geo).
- Before scaling anything, a fragmented base makes `scale-budget-vertically` or
  `scale-horizontally-with-duplication` unreliable.

## When NOT to run
- The account is already consolidated and simply under-budgeted → `set-minimum-viable-budget` or
  `scale-budget-vertically` instead.
- Learning Limited exists on a single, well-shaped ad set with no fragmentation present → the broader
  diagnosis and non-structural fixes live in `exit-learning-limited`.
- Building a brand-new account with nothing to consolidate yet → `design-account-structure`.

## Prerequisites
- Read access across the account: `mads_list_campaigns`, `mads_list_adsets`, and
  `mads_run_insights` / `mads_get_insights` (or `mads_get_insights` for smaller pulls).
- At least 7-14 days of insights history per ad set, to distinguish genuine Learning Limited from an ad
  set that simply launched recently.
- Write approval from the account owner before any merge is committed.

## Procedure
1. **Pull the full inventory.** `mads_list_campaigns`, then `mads_list_adsets` per campaign, capture
   objective, `optimization_goal`, targeting summary, and daily/lifetime budget for every active ad set.
2. **Pull delivery health per ad set.** `mads_run_insights` (then `mads_get_insights`, or
   `mads_get_insights` for a smaller pull) over the last 7-14 days. Flag every ad set clearing fewer
   than ~50 results in that window as Learning Limited or at risk.
3. **Map audience overlap.** Compare targeting definitions, interests, custom/lookalike source, geo,
   age/gender, across ad sets in the same campaign. Group ad sets whose audiences overlap heavily; these
   are both the self-competition candidates and the consolidation targets.
4. **Decide merge groups.** For each overlap group, design the single consolidated ad set that replaces
   it (broadest reasonable audience, or Advantage+ audience, with the group's combined budget pooled in
   minor currency units). Apply the same ceiling `design-account-structure` uses: surviving ad sets ≤
   combined expected weekly conversions ÷ 50.
5. **Pool the conversion event.** Confirm every ad set in a merge group already optimizes for the same
   `optimization_goal` before merging. IF two ad sets in a group optimize for different events, THEN align
   the event first, merging mismatched events just produces one confused cell instead of two clear ones.
6. **Preview the consolidated map and get sign-off.** HUMAN STEP: show old structure vs. new, ad-set
   count reduction, expected event volume per survivor, budget per survivor, and get explicit approval
   before any write.
7. **Execute the merge.** Create the new consolidated ad set(s) with `mads_create_adset` at
   `status=PAUSED` using the pooled budget and merged audience. Once verified, archive the redundant ad
   sets it replaces via `mads_update_adset` (prefer `ARCHIVED` over `mads_delete_adset`, deletion is
   irreversible and forfeits the historical record used in step 9). If touching many ad sets, batch the
   pause/archive writes with `mads_batch_execute` and stay under the mutation rate cap rather than firing
   dozens of individual calls; re-query with `mads_list_adsets` before retrying anything that looks like it
   failed, since there is no idempotency key.
8. **Communicate the learning reset.** Consolidation is a significant edit (audience change plus budget
   change), surviving and new ad sets re-enter learning. Set the expectation for roughly 7 days of
   volatility before judging results.
9. **Measure CPA before vs. after.** Compare the pre-consolidation CPA/CPM snapshot from step 2 against
   the consolidated structure's CPA/CPM once it clears the new learning phase (~50 events or ~7 days,
   whichever governs). This comparison is the proof the consolidation worked.

## Decision rules
- **Consolidation candidate:** 2+ ad sets in the same campaign, overlapping audience definitions, that
  combined would clear ~50 events/week but individually do not.
- **CPM self-competition signal:** CPM trending up with flat or falling relevance/quality signals and no
  external cause, overlapping ad sets bidding against each other in the same auction.
- **Merge event-compatibility gate:** never merge ad sets optimizing for different events or objectives, align the event first, or keep them separate.
- **Survivor count:** target ad-set count ≤ expected combined weekly conversions ÷ 50, the same ceiling
  `design-account-structure` uses for a fresh build.
- **Archive, don't delete.** IF an ad set is being replaced by a merge, THEN archive it, hard delete is
  irreversible and destroys the record the before/after comparison needs.
- **Done means:** merge groups identified and approved, consolidated ad sets live and progressing through
  their reset, redundant ad sets archived, and a before/after CPA comparison captured once the new
  structure clears learning.

## Common failure modes
- **Merging without pooling the event**, an `OFFSITE_CONVERSIONS` ad set and a `LINK_CLICKS` ad set
  merged into one cell that chases neither well.
- **Declaring victory before the reset finishes.** Judging the consolidated structure's CPA in its first
  3-4 days re-litigates the same volatility the merge was meant to fix.
- **Consolidating audiences that weren't actually overlapping**, merging genuinely distinct segments
  (cold prospecting and warm retargeting) destroys a useful distinction instead of fixing fragmentation.
- **Hard-deleting the losing ad sets** instead of archiving, losing the historical performance record
  needed for the before/after comparison.
- **Skipping the approval step** because the merge looks obviously correct, structural changes are
  exactly the writes that need an explicit preview/approval gate.

## Related skills
- Pairs with: `exit-learning-limited` (broader diagnosis; this skill is the structural fix when
  fragmentation is the cause).
- Shares logic with: `design-account-structure` (same ad-set count ceiling), `choose-cbo-vs-abo`
  (re-decide budget placement for the merged structure).
- Run after, if needed: `select-campaign-objective` (when the audit reveals the underlying event choice
  was also wrong).
