From metaflow-marketing-skills
Optimizes running Meta Ads campaigns: audience refinement, budget scaling, learning phase management, placement optimization, automation rules, and creative rotation coordination.
How this skill is triggered — by the user, by Claude, or both
Slash command
/metaflow-marketing-skills:meta-ads-optimizerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
1. **Diagnose** — Identify the specific performance issue (rising CPA, declining ROAS, learning phase stuck, placement inefficiency, etc.)
| Symptom | Most Likely Cause | Start Here |
|---|---|---|
| ROAS declining over 2-4 weeks | Creative fatigue (most common) | Creative Rotation → use meta-ads-creative-engine skill |
| CPA rising, frequency >4 | Confirmed creative fatigue | Creative Rotation |
| CPA rising, frequency normal | CPM inflation or competition | Budget/Bid Optimization → review CPM trend |
| Ad sets stuck in Learning Limited | Too many small ad sets OR weak signals | Learning Phase Management |
| Delivery dropping suddenly | Check disapprovals, Special Ad Category flags, payment issues | Account Health Check |
| Conversions dropped but clicks stable | Tracking issue — Pixel/CAPI problem | Use meta-ads-tracking-setup skill |
| ASC underperforming | Weak tracking, insufficient creative, or ratio wrong | ASC Optimization |
| Great CPA but can't scale | Audience saturation or budget jumps too aggressive | Scaling Playbook |
| Retargeting CPA worse than prospecting | Audience too small (<1K) or fatigued | Audience Refinement |
Meta's most critical optimization principle: keep ad sets OUT of learning phase as much as possible. Meta research: advertisers with <20% of spend in learning see up to 68% lower CPA.
| Rule | Detail |
|---|---|
| Duration | 5-7 days minimum (50 events needed to exit) |
| What resets learning | Budget change >20%, audience change, creative swap, bid/optimization change, attribution window change |
| What doesn't reset | Adding new ads (without removing old), small budget changes (<20%), pausing within ad set |
| Goal | <20% of total spend in learning phase |
| Event volume needed | 50+ conversions/week per ad set to exit learning optimally. 25+ minimum for stability |
| Cause | Fix |
|---|---|
| Budget too low for optimization event | Increase budget OR optimize for higher-funnel event (e.g., switch Purchase → AddToCart if <25 purchases/week) |
| Audience too narrow | Expand audience (broader lookalikes, remove restrictive filters) |
| Too many ad sets competing | Consolidate ad sets with overlapping audiences |
| Weak Pixel/CAPI signals | Fix tracking first — use meta-ads-tracking-setup skill |
| Creative failing to attract conversions | Test new creative (use meta-ads-creative-engine skill) |
Consolidation rule of thumb: If you have 5+ ad sets stuck in Learning Limited, consolidate to 2-3 larger ad sets with pooled budget. The algorithm prefers fewer, larger ad sets with sufficient event volume.
| Trigger | Action |
|---|---|
| Frequency >4 at creative level for 7+ days | Audience fatigue — expand audience or refresh creative |
| CPA rising with stable creative | Audience saturation — expand lookalikes or add broader audience |
| Retargeting audience <1,000 users | Too small — expand recency window or consolidate with cold |
| CRM list >60 days old | Refresh customer match list |
| Custom audience not growing | Check event pixel firing; audiences capture from creation date forward |
| Current State | Expansion Move |
|---|---|
| 1% lookalike saturated | Test 2-3% lookalike |
| 3% lookalike saturated | Test 5-10% or broad targeting |
| Narrow interest targeting | Remove interests, test Advantage+ audience |
| Country-specific lookalike | Expand to new countries with localized creative |
2025 best practice: Accounts with strong Pixel + CAPI signals typically find that broader audiences outperform narrower ones. The algorithm does the targeting work — your job is providing creative that converts.
Post-March 2025: Detailed targeting exclusions removed. Use customer list exclusions instead.
| Exclusion | Apply To | Refresh Cadence |
|---|---|---|
| Past purchasers (all time) | Prospecting campaigns | Monthly |
| Recent purchasers (30 days) | Retargeting campaigns | Monthly |
| Active subscribers | Prospecting | Monthly |
| Engaged leads in pipeline | Prospecting | Weekly |
| Action | Rule |
|---|---|
| Budget increase | 20% maximum per change |
| Frequency | No more than once per 3 days |
| Requirement | Ad set in Active status (not Learning), CPA at or below target for 3+ consecutive days |
| Monitor | Watch for efficiency decay after each increase |
| If efficiency drops | Hold for 7 days before next increase, or roll back |
Why 20%? Larger jumps can reset the learning phase or destabilize delivery by shifting the algorithm's pacing too quickly.
| Action | When |
|---|---|
| Duplicate winning ad set with new audience | Current ad set saturated (rising frequency) |
| Launch new lookalike tier (1% → 2% → 5%) | Need new audience pool |
| Launch in new geographies | Validated product-market fit in existing markets |
| Add new creative variants | Fatigue detected (frequency >4) |
Meta's average ad price rose 9% in 2025 (Meta Q1 2025 earnings). When diagnosing rising CPA, always check if CPM inflation is a contributing factor — it may be partial cause of efficiency decline, not creative or audience failure.
Let Meta distribute across all eligible placements. Recommended default unless:
Check placement-level performance monthly:
| Placement | Watch For | Fix |
|---|---|---|
| Facebook Feed | Strong baseline — primary performance | Ensure 4:5 vertical creative |
| Instagram Feed | Strong for younger audiences | Ensure 4:5 vertical creative |
| Instagram Stories | Ephemeral, high engagement | 9:16 full vertical, captions mandatory |
| Reels | Fastest-growing, mobile-first | 9:16, attention-grabbing hooks |
| Audience Network | Clicks but low quality? | Exclude if conversion quality poor |
| Messenger | Specific use cases | Only include with messaging objective |
| Right Column | Lower CTR but cheap CPM | Include for remarketing |
Decision rule: Exclude a placement if its CPA is >2x account average for 30+ days with sufficient volume (100+ clicks).
Set up rules in Meta Ads Manager OR use third-party tools (Birch — formerly Revealbot, Madgicx).
| Rule | Trigger | Action |
|---|---|---|
| Pause underperformers | CPA > 2x target for 3 days AND 100+ clicks | Pause ad |
| Budget scale winners | CPA < 70% of target for 3 days AND in Active status | Increase budget 15% |
| Frequency control | Frequency > 5 at creative level | Pause creative (or notify) |
| Low-quality placement exclusion | Placement CPA > 3x account avg for 7 days | Exclude placement |
| Budget reallocation | Ad set A CPA < B CPA by 30%+ | Shift 20% of B's budget to A |
| Creative refresh alert | CTR drops 20% below 7-day average | Notify team to add new creative |
Best practices:
Advantage+ Shopping Campaigns have limited manual levers. Optimize these:
| Lever | How |
|---|---|
| Creative quality and volume | Add new creatives weekly. Maintain 15-30 active creatives (max 150 per campaign) |
| Customer ratio (new vs existing) | Test 70/30, 80/20, 90/10 splits based on your actual new customer acquisition needs |
| Catalog quality | Keep product feed fresh and complete — ASC uses catalog for dynamic product ads |
| Budget sufficiency | Need 100+ conversions/week for ASC to work well. If volume insufficient, switch to manual campaigns |
| Pixel + CAPI strength | ASC relies entirely on signal quality. EMQ below 6.0 = ASC underperforms |
When to ditch ASC: If ASC underperforms manual campaigns after 30 days with strong creative and tracking, the account may not have sufficient conversion volume or signal quality for ASC to work. Fall back to manual 3-campaign structure (Prospecting + Retargeting + Testing).
## Meta Ads Optimization Plan
### Current Performance Summary
| Metric | Current | Target | Gap |
|--------|---------|--------|-----|
| CPA | $[X] | $[X] | [gap] |
| ROAS | [X]x | [X]x | [gap] |
| Frequency | [X] | <4 | [status] |
| Learning phase spend % | [X]% | <20% | [status] |
### Root Cause Diagnosis
[Specific reason for the issue, tied to the Diagnostic Decision Tree]
### Optimization Actions (ICE-prioritized)
| Priority | Action | Lever | ICE Score | Timeline |
|----------|--------|-------|-----------|----------|
| 1 | [action] | [audience/budget/placement/automation] | [score] | [when] |
### Automation Rules to Add
[Specific rules with thresholds]
### Monitoring Plan
- Check [metric] after [X] days (minimum 5-7 for learning phase)
- Success criteria: [specific]
- Rollback plan: [if it doesn't work]
Input: "I run an ecommerce store on Meta. Spending $12K/month. ROAS was 4.5x last month, now 2.8x. Frequency on my top ad set is 5.2. Using ASC. What should I do?"
Output:
| Metric | Current | Target | Gap |
|---|---|---|---|
| ROAS | 2.8x | 4.5x | -38% |
| Frequency | 5.2 | <4.0 | +30% over threshold |
| CPA | (implied rising) | Historical | Needs calculation |
| Learning phase spend % | Unknown | <20% | Needs check |
Creative fatigue is the primary driver. Frequency at 5.2 is well past Meta's fatigue threshold (>4). Meta's own research: 45% conversion rate drop at 4+ exposures. Your ROAS decline (-38%) is consistent with severe fatigue.
Secondary factor: Meta's average CPM rose 9% in 2025, contributing some background cost pressure.
| Priority | Action | Lever | ICE Score | Timeline |
|---|---|---|---|---|
| 1 | Refresh ASC creative: add 6-10 new creative variants, pause highest-frequency creatives | Creative | 10×9×8 = 720 | Day 1-3 |
| 2 | Verify CAPI + EMQ (ASC depends on signal quality) | Tracking | 9×8×8 = 576 | Day 1 |
| 3 | Check customer ratio setting — if 50/50, test 80/20 (new/existing) to push more acquisition | ASC config | 7×7×9 = 441 | Day 2 |
| 4 | Add fatigue automation rule: pause creatives at frequency 5+ | Automation | 7×8×8 = 448 | Week 1 |
| 5 | Mix formats — if ASC is heavy on static images, add video/Reels-native content | Creative | 7×7×6 = 294 | Week 1-2 |
Use the meta-ads-creative-engine skill for systematic creative testing. Immediate priorities:
| Rule | Threshold | Action |
|---|---|---|
| Fatigue pause | Creative frequency > 5.0 AND 7+ days active | Pause creative |
| Low performer | Ad CPA > 2x campaign avg AND 100+ clicks | Pause |
| Creative refresh alert | 3+ ads at frequency > 4 | Notify team |
action_source: physical_store or system_generated.7d_view and 28d_view windows removed from Insights API. If reports pull these, update reporting.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub narayan-metaflow/metaflow-marketing-skills --plugin metaflow-marketing-skills