skills/ads/references/meta-decision-system.md
A quantified kill/keep/scale engine for Meta ads. Every threshold derives from one anchor number, so decisions become arithmetic instead of vibes. Pairs with the strategy-level Meta playbook in SKILL.md (creative-as-targeting, creative volume) — this file is the operating layer.
TCPL = Target Cost Per Qualified Lead (qualified = meets your ICP bar, not just a form-fill). Set it one of three ways:
Every rule below is expressed in multiples of TCPL. Review TCPL monthly.
More active ads than your budget can feed = every ad starves and nothing gets a fair read.
Ceiling = (daily budget × 14) / (2 × TCPL) — i.e., over a 14-day evaluation window, each ad needs at least 2× TCPL of spend to be judged.
$1,000/day at $500 TCPL → ceiling of 14 ads; run 6–10 (winners + 2–3 test slots). At the ceiling, launching a new test requires killing something first.
Run two CBO campaigns over the same audience:
Why: inside a single CBO, proven ads always starve new ads — tests never get enough spend to be judged. Why not ABO for testing: equal forced distribution keeps spending on ads Meta has already deprioritized. The separation is budget protection, not audience segmentation.
Image-first validation: launch new concepts as statics first; only produce the video/carousel/UGC version after the image passes the checks below. Exception: concepts that are inherently video (testimonial, demo, UGC).
CBO's spend allocation is itself a signal — Meta pre-screens your ads. At day 7 for each test ad:
When iterating on a delivery-killed ad, change the hook/visual/format only — the audience never got far enough for copy or CTA to matter.
Run in order; stop at the first triggered action:
Graduate only when all are true: ≥5 qualified leads · qualified rate ≥60% · cost per QL ≤ TCPL · running ≥14 days · ≥1 QL in the last 7 days.
Frequency bands by campaign type (safe / warning / critical):
| Campaign type | Safe | Warning | Critical |
|---|---|---|---|
| Cold prospecting | 1.0–2.5 | 2.5–4.0 | >4.0 |
| Retargeting | 2.0–4.0 | 4.0–6.0 | >6.0 |
| ABM (small audiences) | 2.0–5.0 | 5.0–8.0 | >8.0 |
Other signals, in urgency order: CTR down 20%+ from baseline over 7 days; CPM up 30%+ over 2 weeks (leading indicator — moves before CTR); ad relevance rankings "below average"; CPA up with stable targeting.
For scaling-campaign ads, apply a deliberately stricter bar than the general bands — these ads carry ~80% of spend, so fatigue there costs the most: warning at frequency 3.0–3.5 or cost +20% → start 2 iterations now (they take ~14 days to be ready); swap at >3.5, cost +40%, or >1.5× TCPL for 2 weeks.
Lifespan expectations (B2B): statics 14–28 days; short video and carousels 21–35; UGC/testimonial 28–42. Small B2B audiences build frequency fast — plan refresh every 14–21 days.
Retire (don't iterate) when CTR drops 30%+ from peak or frequency crosses the campaign type's critical band above — the concept is exhausted, not the execution.
Rotation without resetting learning: never edit creative inside a performing ad — that resets the learning phase. Launch new ads alongside existing ones, or spin up a new ad set with the same targeting. Pausing doesn't reset; editing does.
Never pause without a replacement. Keep 2–3 iterations staged; replacement live within 7 days, immediately for critical fatigue. If the pipeline is empty, redirect the budget to proven ads rather than leaving a zombie running. What to change depends on why it died: delivery kill → hook/visual; quality kill → angle and ICP language; cost kill → offer and audience; fatigue → fresh execution of the same proven concept.
Scale only when all: proven-ad count meets the next budget level's minimum; account frequency <3.0; cost per QL ≤ TCPL for 2+ consecutive weeks; 3+ replacements staged.
The #1 B2B Meta lead-quality problem: frictionless auto-filled forms produce leads who don't remember converting ("social amnesia"). Intentional friction = awareness = quality:
Lead form vs. landing page: LP converting ≥5% → use the LP; LP under ~2% → lead form; demo/trial offers → LP; content/webinar → form.
Manual is where you learn; Advantage+ is where you earn. Transition a campaign to Advantage+ only after: a proven offer, a validated audience, and ~50 conversions/week on the optimization event (the learning-phase exit bar — budget needed ≈ target CPA × 50 ÷ 7 per day). If you can't hit 50/week on the target event, optimize a higher-volume event up-funnel and retarget converters. Advantage+ conflicts with strict ABM (you can't lock it to a list) — see the ABM playbook. Watch Campaign Score directionally (70+ healthy, <50 = fighting the algorithm) but never trade lead quality for score.
B2B SaaS Meta ranges (practitioner-reported; recalibrate on your own first 30 days): CTR 1.0–1.5% (red flag <0.8%); CPM $10–20 (red flag >$25); CPL (form) $20–50 (red flag >$75); landing page CVR 8–12%. Seasonality: Q1 CPMs are the year's lowest (scale aggressively); Q4 runs +60–80% (consider reducing B2B spend and banking budget for January).
Framework lineage: this decision system is adapted (re-expressed, reconciled, and restructured) from practitioner operating systems, notably Ivan Falco's ads-skills. All thresholds are starting points — recalibrate against your own account.