---
name: design-account-structure
description: >-
  Turns a chosen objective into a concrete campaign-to-ad-set-to-creative map before the first
  mads_create_campaign call: one campaign per ODAX objective (not per audience), an ad-set count
  capped by how many cells the account's expected weekly conversion volume can actually feed at
  ~50 optimization events each, and 3-6 quality creatives per ad set since Meta concentrates
  delivery on the top 1-2 regardless of how many are uploaded. Consolidation is the default, fragmenting into one ad set per interest or audience segment causes audience overlap, self-
  competition inside the same auction, and inflated CPMs, on top of starving every cell below the
  learning threshold. Reach for it when standing up a new account or campaign, or before adding a
  new segment to a live one. It ends at a written campaign/ad-set/creative map, it does not
  choose the objective (select-campaign-objective) or decide where the budget lives
  (choose-cbo-vs-abo).
---
# Design the Meta Account Structure

## Purpose
Meta's auction punishes fragmentation twice over: an ad set split too thin never gathers the ~50 weekly
optimization events it needs to exit learning, and a cluster of ad sets with overlapping audiences ends up
bidding against itself in the same auction, which shows up as inflated CPMs with no external cause. The fix
is structural, not tactical, build fewer, better-fed ad sets from the start. This skill turns the objective
decision into that map: how many campaigns, how many ad sets each, how many creatives each, and a naming
convention that keeps the account legible as it grows.

## When to run
- Standing up a new ad account or campaign from scratch, immediately after the objective is chosen.
- Adding a new product line, geography, or audience segment to a live account.
- An account has grown ad hoc (campaigns added one at a time with no shared plan) and needs a deliberate
  map before the next build.
- Before scaling, a clean map now is cheaper than untangling fragmentation later.

## When NOT to run
- The objective and optimization event are not yet decided → `select-campaign-objective` first.
- The map exists and the only open question is budget placement → `choose-cbo-vs-abo`.
- The account is already live and visibly fragmented → `consolidate-fragmented-account` (repairs toward
  this skill's target shape rather than planning it from zero).
- You are laying out prospecting/mid-funnel/retargeting stages specifically → `map-full-funnel-structure`.

## Prerequisites
- Objective, optimization_goal, billing_event, and budget floor already decided (`select-campaign-objective`
  output).
- A realistic expected weekly conversion volume for the account or the segment being added.
- An inventory of available creative assets, or a plan to source 3-6 quality variants per planned ad set.
- `mads_list_campaigns` / `mads_list_adsets` access to review current structure on a non-greenfield account.

## Procedure
1. **Audit what already exists.** On a non-greenfield account, call `mads_list_campaigns` and `mads_list_adsets`
   to capture current campaign count, ad-set count, and audience definitions before adding to them.
2. **Start from one campaign per objective.** Default to one campaign per ODAX objective in active use (e.g.,
   one `OUTCOME_SALES` campaign), never one campaign per audience or product, audiences live at ad-set level.
3. **Compute the ad-set count ceiling.** Divide expected weekly conversion volume by ~50 (the per-ad-set
   learning-event threshold). IF the desired number of segments exceeds that ceiling, THEN merge segments
   into fewer, broader ad sets rather than building one per segment.
4. **Assign 3-6 creatives per ad set.** Enough variety for Meta's delivery system to find winners without
   splitting impressions so thin that no single ad accumulates signal; expect the system to concentrate
   delivery on the top 1-2 regardless.
5. **Fix a naming convention and hold every build to it.** For example `{objective}_{stage}_{date}` for
   campaigns and `{audience-or-geo}_{budget-type}_{creative-theme}` for ad sets, so `mads_list_campaigns` /
   `mads_list_adsets` output stays legible months later.
6. **Write the map and get sign-off.** Campaign → ad sets → planned creative count, with the ad-set count
   ceiling shown against the plan. HUMAN STEP: review the map with the account owner, including confirming
   that 3-6 creative variants per ad set either exist or can be produced, before any create call.
7. **Build every node PAUSED.** `mads_create_campaign`, then `mads_create_adset`, then `mads_create_ad`, all
   with `status=PAUSED`. Activation to `ACTIVE` is a separate, later, explicitly confirmed step. Re-query
   with `mads_list_campaigns`/`mads_list_adsets` before retrying any create that appears to have failed, there
   is no idempotency key, and a blind retry can duplicate the node.

## Decision rules
- **Split into a new ad set when:** the audience is materially different (cold prospecting vs. warm
  retargeting), the budget or geo is materially different, or the segment needs a genuinely separate
  optimization event. IF none of those apply, THEN keep it inside the existing consolidated ad set.
- **Keep consolidated when:** splitting would drop either resulting ad set below ~50 events/week, or the
  audiences overlap significantly. When in doubt, consolidate, broad delivery outperforms a hand-drawn
  segment map more often than not.
- **Ad-set count ceiling:** ad sets per campaign ≤ expected weekly conversions ÷ 50. Never plan more cells
  than the event volume can feed.
- **Creative count band:** 3-6 per ad set. Below 3 starves testing; above 6 splits budget without adding
  signal, since delivery concentrates on 1-2 winners either way.
- **One campaign per objective, not per audience.** Multiple campaigns chasing the same objective/event
  compete with each other in the same auction, the self-competition problem one level up from ad sets.
- **Done means:** a written campaign → ad-set → creative-count map, ad-set count within the event-volume
  ceiling, a naming convention applied to every planned node, and nothing yet created with `status=ACTIVE`.

## Common failure modes
- **One ad set per interest or audience segment.** The classic fragmentation pattern: a dozen ad sets each
  getting a handful of conversions a week, all Learning Limited, all bidding against each other.
- **One campaign per audience instead of per objective.** Multiplies the self-competition problem to the
  campaign level.
- **One ad set with 15-20 creatives** "to test everything", dilutes signal instead of concentrating it.
- **No naming convention.** Six months and dozens of nodes later, nobody can read the account from
  `mads_list_campaigns`/`mads_list_adsets` output alone.
- **Skipping the audit step** on a non-greenfield account and duplicating structure that already exists.

## Related skills
- Run before: `select-campaign-objective` (objective must be decided first).
- Run after: `choose-cbo-vs-abo` (budget placement for the map), `set-minimum-viable-budget` (size each
  ad set's budget).
- Related: `consolidate-fragmented-account` (repairs a structure that skipped this), `map-full-funnel-structure`
  (funnel-stage version of this same map).
