
Facebook Ads
- 93 installs
- 93 repo stars
- Updated May 14, 2026
- thatrebeccarae/claude-marketing
Helps with ai & agent building tasks.
About
facebook-ads is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- facebook-ads
- AI & Agent Building
- AI-coding skill
Facebook Ads by the numbers
- 93 all-time installs (skills.sh)
- +11 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #4,706 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/thatrebeccarae/claude-marketing --skill facebook-adsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 93 |
|---|---|
| repo stars | ★ 93 |
| Last updated | May 14, 2026 |
| Repository | thatrebeccarae/claude-marketing ↗ |
What it does
Helps with ai & agent building tasks.
Files
Meta Ads (Facebook & Instagram)
Expert-level guidance for Meta Ads — auditing, building, and optimizing campaigns across Facebook, Instagram, Messenger, and the Audience Network.
Install
git clone https://github.com/thatrebeccarae/claude-marketing.git && cp -r claude-marketing/skills/facebook-ads ~/.claude/skills/Core Capabilities
Campaign Auditing & Optimization
- Full account audit: structure, objectives, audiences, creative, tracking, attribution
- Identify creative fatigue, audience overlap, and budget inefficiencies
- Diagnose performance drops (iOS privacy, audience saturation, creative burnout)
- Advantage+ Shopping and Advantage+ Audience recommendations
Campaign Objectives (Outcome-Based)
- Awareness — Reach, brand awareness, video views
- Traffic — Link clicks, landing page views
- Engagement — Post engagement, messages, conversions on-platform
- Leads — Instant Forms, Messenger, website lead gen
- App Promotion — App installs, app events
- Sales — Website conversions, catalog sales, Advantage+ Shopping
Audience Strategy
- Core Audiences — Demographics, interests, behaviors, location
- Custom Audiences — Website (pixel/CAPI), customer list, app activity, video viewers, engagement
- Lookalike Audiences — 1-10% based on custom audience seed (value-based LALs preferred)
- Advantage+ Audience — Meta's AI-driven targeting (audience suggestions as signals, not constraints)
- Broad targeting — No interests/LAL, rely on creative + pixel data + Meta's ML
Creative Strategy
- Ad format selection: single image, carousel, video, collection, Instant Experience
- Creative testing frameworks: concept testing vs iterative testing
- UGC (user-generated content) integration and creator whitelisting
- Dynamic Creative Optimization (DCO) vs manual A/B testing
- Creative fatigue signals and refresh cadence
- Platform-specific creative (Feed, Stories, Reels, Explore)
Tracking & Attribution
- Meta Pixel — Standard events, custom events, microdata, aggregated event measurement
- Conversions API (CAPI) — Server-side tracking for privacy resilience
- Aggregated Event Measurement (AEM) — iOS 14.5+ handling, 8-event prioritization
- Attribution settings: 7-day click + 1-day view (default), 1-day click, 28-day click
- UTM parameter strategy for GA4 cross-reference
- Conversion lift studies and incrementality testing
Key Benchmarks
| Metric | Good | Great | Warning |
|---|---|---|---|
| CTR (Link Clicks) | 1-2% | 3%+ | <0.8% |
| CPC (Link Click) | $0.50-$1.50 | <$0.50 | >$2.00 |
| CPM | $8-$15 | <$8 | >$20 |
| Conversion Rate (Landing Page) | 3-5% | 8%+ | <2% |
| ROAS (ecommerce) | 3-4x | 6x+ | <2x |
| Cost Per Lead | Industry dependent | Below industry avg | Rising trend |
| Frequency (prospecting) | 1.5-2.5 | 1-1.5 | >3.5 |
| Frequency (retargeting) | 3-6 | 2-3 | >10 |
| Thumb-Stop Rate (video) | 25-35% | 40%+ | <20% |
| Hook Rate (3s video views %) | 30-40% | 50%+ | <25% |
Campaign Structure (Modern Best Practice)
Ad Account
├── Advantage+ Shopping Campaign (ecommerce)
│ ├── Broad targeting (Meta AI optimizes)
│ ├── Existing customer budget cap (10-20%)
│ └── Mixed creative (image, video, UGC, carousel)
├── Prospecting Campaign (Conversions/Sales)
│ ├── Ad Set: Broad (no targeting, trust the pixel)
│ ├── Ad Set: Lookalike 1-3% (value-based)
│ └── Ad Set: Interest stacks (if needed)
├── Retargeting Campaign (Conversions/Sales)
│ ├── Ad Set: Website visitors 1-30 days
│ ├── Ad Set: Engaged (video viewers, IG/FB engaged)
│ └── Ad Set: Cart abandoners
├── Lead Gen Campaign (if applicable)
│ ├── Ad Set: Lookalikes of converters
│ └── Ad Set: Interest-based
└── Brand / Top-of-Funnel (optional)
├── Video Views (awareness content)
└── Traffic (blog, resources)Modern trend: Consolidate ad sets. Meta's algorithm performs better with fewer, broader ad sets and more creative diversity within each.
Workflow: Full Account Audit
When asked to audit a Meta Ads account:
1. Pixel & CAPI Health — Event tracking, CAPI coverage, event match quality score, AEM config 2. Account Structure — Campaign consolidation, objective alignment, naming conventions 3. Audience Strategy — Overlap analysis, LAL seeds, audience size, Advantage+ adoption 4. Creative Analysis — Format mix, creative fatigue (frequency + declining CTR), testing velocity 5. Budget & Bidding — CBO vs ABO, budget allocation, bid strategy (lowest cost vs cost cap vs bid cap) 6. Funnel Coverage — Prospecting vs retargeting balance, exclusions between funnels 7. Attribution — Window settings, cross-platform reconciliation (vs GA4), CAPI deduplication 8. Placement Optimization — Advantage+ placements vs manual, creative per placement 9. Shopping / Catalog — Feed quality, product sets, dynamic ads setup 10. Recommendations — Prioritized with expected impact and creative direction
Post-iOS 14.5 Best Practices
- Implement CAPI alongside pixel (aim for 90%+ event match quality)
- Prioritize 8 conversion events per domain in Events Manager
- Use value optimization when possible (Purchase over Add to Cart)
- Broader audiences outperform narrow (give Meta's ML room to optimize)
- UTM tracking + GA4 as secondary attribution source
- Creative is the new targeting — invest in creative testing over audience testing
How to Use This Skill
Ask me questions like:
- "Audit my Facebook Ads account performance"
- "My ROAS is declining — what should I investigate?"
- "Help me set up Conversions API (CAPI)"
- "Design a creative testing framework for my brand"
- "Should I use Advantage+ Shopping or manual campaigns?"
- "Build a full-funnel campaign structure for my DTC brand"
- "My frequency is too high — how do I manage audience fatigue?"
- "Plan a lead gen campaign for B2B on Facebook/Instagram"
For detailed Meta Ads API reference, pixel implementation, and advanced configurations, see REFERENCE.md.
Hard Rules
These constraints must never be violated in recommendations:
1. Pixel + CAPI both required. Post-iOS 14.5, browser-only tracking loses 30-40% of conversion data. 2. Event deduplication must be active (event_id matching) — without it, conversions are double-counted. 3. Event Match Quality ≥8.0 for Purchase event. Below 6.0 is critical. 4. Budget must be ≥5x target CPA per ad set — below this, the algorithm cannot exit learning phase. 5. Never recommend edits during active learning phase — wait for ~50 conversions/week or intentional reset. 6. Creative fatigue = action required. CTR decline >20% over 14 days with frequency >3 = replace creative immediately. 7. <30% of ad sets in Learning Limited — above this threshold, consolidation is mandatory. 8. Purchasers/converters must be excluded from prospecting campaigns. 9. Special Ad Categories must be declared before campaign creation for Housing, Employment, Credit, and Financial Products.
Scored Audit
When performing an account audit, load skills/shared/scoring-system.md for the weighted scoring algorithm and CHECKS.md for the 46-check Meta Ads audit checklist. Produce a health score (0-100, grade A-F) with Quick Wins and a prioritized action plan.
# Meta Ads API Configuration
# ==========================
# This file is a template. Copy it to .env and fill in your values.
# NEVER commit .env to version control.
# Meta Access Token (System User token recommended for production)
# Business Settings > System Users > Generate Token
META_ACCESS_TOKEN=your-access-token-here
# Meta Ad Account ID (starts with "act_")
# Business Settings > Accounts > Ad Accounts
META_AD_ACCOUNT_ID=act_1234567890
# Meta Pixel ID (for CAPI and pixel analysis)
# Events Manager > Data Sources > Select Pixel
META_PIXEL_ID=1234567890
# Meta App ID (from Facebook Developers portal)
META_APP_ID=1234567890
# Meta App Secret (from Facebook Developers portal)
META_APP_SECRET=your-app-secret-here
# How to set up:
# 1. Go to Facebook Business Settings (business.facebook.com)
# 2. Create a System User with ads_management and ads_read permissions
# 3. Generate a token for the System User
# 4. Copy your Ad Account ID (Accounts > Ad Accounts)
# 5. Copy your Pixel ID (Events Manager > Data Sources)
# 6. Copy this file to .env and fill in your values
#
# NEVER commit .env or access tokens to version control!
Meta Ads Audit Checklist
<!-- Total Checks: 46 | Categories: 4 | See skills/shared/scoring-system.md for weights and algorithm -->
Quick Reference
| Category | Weight | Checks |
|---|---|---|
| Pixel / CAPI Health | 30% | M-PX1 through M-PX10 (10 checks) |
| Creative Diversity & Fatigue | 30% | M-CR1 through M-CR12 (12 checks) |
| Account Structure | 20% | M-ST1 through M-ST18 (18 checks) |
| Audience & Targeting | 20% | M-AU1 through M-AU6 (6 checks) |
---
Pixel / CAPI Health (Weight: 30%)
M-PX1: Meta Pixel Installed [Critical, 5.0]
- Check: Meta Pixel firing on all pages
- Pass: Pixel firing on all pages (verified in Events Manager)
- Warning: Firing on most pages (>90%)
- Fail: Pixel not firing
- Quick Win: No
M-PX2: Conversions API (CAPI) Active [Critical, 5.0]
- Check: Server-side events sending alongside pixel events
- Pass: CAPI active with events flowing
- Warning: CAPI planned but not yet deployed
- Fail: No CAPI (30-40% data loss post-iOS 14.5)
- Quick Win: Yes (15 min via CAPI Gateway)
M-PX3: Event Deduplication [Critical, 5.0]
- Check: event_id matching between pixel and CAPI events to prevent double-counting
- Pass: event_id matching active, ≥90% deduplication rate
- Warning: event_id present but <90% deduplication rate
- Fail: Missing event_id (double-counting conversions)
- Quick Win: No
M-PX4: Event Match Quality (EMQ) [Critical, 5.0]
- Check: EMQ score for primary conversion event (Purchase or Lead)
- Pass: EMQ ≥8.0
- Warning: EMQ 6.0-7.9
- Fail: EMQ <6.0
- Quick Win: No
M-PX5: Domain Verification [High, 2.5]
- Check: Business domain verified in Business Manager
- Pass: Domain verified
- Warning: —
- Fail: Domain not verified (limits AEM and conversion optimization)
- Quick Win: Yes (5 min)
M-PX6: Aggregated Event Measurement (AEM) [High, 2.5]
- Check: Top 8 web events configured and prioritized
- Pass: Events configured and correctly prioritized
- Warning: Events configured but not properly prioritized
- Fail: AEM not configured
- Quick Win: Yes (10 min)
M-PX7: Standard vs Custom Events [High, 2.5]
- Check: Using Meta standard events vs custom events
- Pass: Standard events used (Purchase, AddToCart, Lead, etc.)
- Warning: Mix of standard and custom events
- Fail: Custom events replacing standard events (limits optimization)
- Quick Win: No
M-PX8: CAPI Gateway [Medium, 1.5]
- Check: CAPI Gateway deployed for simplified server-side tracking
- Pass: CAPI Gateway active
- Warning: Direct CAPI integration active (functional but more maintenance)
- Fail: —
- Quick Win: No
M-PX9: Attribution Window Configuration [High, 2.5]
- Check: Attribution window set appropriately
- Pass: 7-day click / 1-day view configured
- Warning: 1-day click only (missing view-through and longer click window)
- Fail: Attribution not configured (default may not match business model)
- Quick Win: Yes (2 min)
M-PX10: Data Freshness [Medium, 1.5]
- Check: Event data freshness in Events Manager
- Pass: Events firing in real-time (no >1hr lag)
- Warning: <4hr lag
- Fail: >4hr lag or intermittent firing
- Quick Win: No
---
Creative Diversity & Fatigue (Weight: 30%)
M-CR1: Creative Format Diversity [Critical, 5.0]
- Check: Number of creative formats active across account
- Pass: ≥3 formats active (static image, video, carousel)
- Warning: 2 formats
- Fail: Only 1 format used
- Quick Win: Yes (15 min — add second format)
M-CR2: Creative Volume Per Ad Set [High, 2.5]
- Check: Number of creatives per ad set
- Pass: 5-8 creatives per ad set (optimal for Andromeda algorithm)
- Warning: 3-4 creatives
- Fail: <3 creatives per ad set
- Quick Win: No
M-CR3: Video Aspect Ratios [High, 2.5]
- Check: 9:16 vertical video present for Reels/Stories placements
- Pass: 9:16 vertical video present
- Warning: Only 1:1 or 4:5 video
- Fail: No video assets
- Quick Win: No
M-CR4: Creative Fatigue Detection [Critical, 5.0]
- Check: CTR trends on active creatives
- Pass: No creatives with CTR decline >20% over 14 days
- Warning: CTR decline 10-20% on some creatives
- Fail: CTR decline >20% + frequency >3 (fatigue confirmed)
- Quick Win: No (requires new creative production)
M-CR5: Video Hook Rate [High, 2.5]
- Check: Video ad performance in first 3 seconds
- Pass: <50% skip rate in first 3 seconds
- Warning: 50-70% skip rate
- Fail: >70% skip rate (hook not engaging)
- Quick Win: No
M-CR6: Social Proof Utilization [Medium, 1.5]
- Check: Organic posts boosted as paid ads
- Pass: Top organic posts used as Spark/partnership ads
- Warning: Some organic content boosted
- Fail: No organic content leveraged in paid
- Quick Win: Yes (10 min)
M-CR7: UGC / Social-Native Content [High, 2.5]
- Check: Percentage of creative assets that are UGC or social-native
- Pass: ≥30% of creatives are UGC or social-native
- Warning: 10-30% UGC content
- Fail: <10% UGC (all polished/corporate — lower engagement)
- Quick Win: No
M-CR8: Advantage+ Creative [Medium, 1.5]
- Check: Advantage+ creative enhancements tested
- Pass: Advantage+ Creative enabled with test vs control
- Warning: —
- Fail: Not tested
- Quick Win: Yes (5 min)
M-CR9: Creative Freshness [High, 2.5]
- Check: Last time new creative was tested
- Pass: New creative tested within last 30 days
- Warning: New creative 30-60 days ago
- Fail: No new creative in >60 days
- Quick Win: No
M-CR10: Prospecting Frequency [High, 2.5]
- Check: Ad set frequency for prospecting campaigns (7-day window)
- Pass: Frequency <3.0
- Warning: Frequency 3.0-5.0
- Fail: Frequency >5.0 (audience exhausted)
- Quick Win: No
M-CR11: Retargeting Frequency [Medium, 1.5]
- Check: Ad set frequency for retargeting campaigns (7-day window)
- Pass: Frequency <8.0
- Warning: Frequency 8.0-12.0
- Fail: Frequency >12.0
- Quick Win: No
M-CR12: CTR Benchmark [High, 2.5]
- Check: Overall CTR vs platform benchmarks
- Pass: CTR ≥1.0%
- Warning: CTR 0.5-1.0%
- Fail: CTR <0.5%
- Quick Win: No
---
Account Structure (Weight: 20%)
M-ST1: Campaign Count [High, 2.5]
- Check: Number of active campaigns per country/funnel stage
- Pass: ≤5 active campaigns per segment
- Warning: 6-8 campaigns per segment
- Fail: >8 campaigns (over-fragmented, splits learning data)
- Quick Win: No
M-ST2: CBO vs ABO Appropriateness [High, 2.5]
- Check: Budget optimization type matches spend level
- Pass: CBO for >$500/day budgets; ABO for testing <$100/day
- Warning: Mismatched but functional
- Fail: CBO on <$100/day OR ABO on >$500/day
- Quick Win: Yes (5 min)
M-ST3: Learning Phase Status [Critical, 5.0]
- Check: Percentage of ad sets in Learning Limited
- Pass: <30% of ad sets in Learning Limited
- Warning: 30-50% Learning Limited
- Fail: >50% ad sets Learning Limited
- Quick Win: No
M-ST4: Learning Phase Stability [High, 2.5]
- Check: Unnecessary edits during active learning phases
- Pass: No unnecessary edits during learning
- Warning: 1-2 minor learning phase resets
- Fail: Frequent resets from edits during learning
- Quick Win: No (behavioral change)
M-ST5: Advantage+ Sales Campaign [Medium, 1.5]
- Check: Advantage+ Shopping Campaign tested for eligible ecommerce accounts
- Pass: ASC active with catalog
- Warning: ASC tested but paused
- Fail: Not tested despite eligible product catalog
- Quick Win: No
M-ST6: Ad Set Consolidation [High, 2.5]
- Check: Audience overlap between active ad sets
- Pass: No overlapping ad sets targeting same audience
- Warning: Minor overlap (<20%)
- Fail: Significant audience overlap (>30%) — self-competition
- Quick Win: No
M-ST7: Minimum Budget Distribution [High, 2.5]
- Check: Minimum daily budget per ad set
- Pass: All ad sets getting ≥$10/day
- Warning: Some ad sets $5-$10/day
- Fail: Ad sets getting <$5/day (insufficient for optimization)
- Quick Win: Yes (5 min — consolidate or increase)
M-ST8: Campaign Objective Alignment [High, 2.5]
- Check: Campaign objective matches actual business goal
- Pass: Objective aligned (e.g., Sales for ecommerce, Leads for lead gen)
- Warning: —
- Fail: Objective mismatched (e.g., Traffic objective for Sales goal)
- Quick Win: No (requires campaign rebuild)
M-ST9: Advantage+ Placements [Medium, 1.5]
- Check: Placement optimization setting
- Pass: Advantage+ Placements enabled (Meta optimizes distribution)
- Warning: Manual placements with documented justification
- Fail: Manual placements limiting delivery without clear reason
- Quick Win: Yes (2 min)
M-ST10: Placement Performance Review [Medium, 1.5]
- Check: Placement breakdown reviewed regularly
- Pass: Reviewed monthly; underperformers excluded
- Warning: Reviewed quarterly
- Fail: Never reviewed
- Quick Win: Yes (10 min)
M-ST11: Attribution Setting Consistency [High, 2.5]
- Check: Attribution window configured consistently
- Pass: 7-day click / 1-day view across campaigns
- Warning: 1-day click only
- Fail: Attribution not configured or inconsistent across campaigns
- Quick Win: Yes (2 min)
M-ST12: Bid Strategy Appropriateness [High, 2.5]
- Check: Bid strategy matches business goals
- Pass: Cost Cap for margin protection; Lowest Cost for volume
- Warning: —
- Fail: Bid Cap set below historical CPA (severely limits delivery)
- Quick Win: Yes (5 min)
M-ST13: Campaign Frequency Monitoring [High, 2.5]
- Check: Campaign-level prospecting frequency (7-day window)
- Pass: Frequency <4.0
- Warning: Frequency 4.0-6.0
- Fail: Frequency >6.0 (audience saturation)
- Quick Win: No
M-ST14: Breakdown Reporting [Medium, 1.5]
- Check: Age, gender, placement, platform breakdown reviewed
- Pass: Reviewed monthly
- Warning: Reviewed quarterly
- Fail: Never reviewed
- Quick Win: Yes (10 min)
M-ST15: UTM Parameters [Medium, 1.5]
- Check: UTM parameters on all ad URLs for GA4 attribution
- Pass: UTMs on all ads (via campaign URL template)
- Warning: UTMs on some ads
- Fail: No UTM parameters
- Quick Win: Yes (5 min)
M-ST16: A/B Testing Active [Medium, 1.5]
- Check: Active A/B test using Meta Experiments
- Pass: At least 1 active A/B test
- Warning: Test planned
- Fail: No testing infrastructure
- Quick Win: No
M-ST17: Budget Adequacy [High, 2.5]
- Check: Daily budget relative to target CPA
- Pass: Daily budget ≥5× target CPA per ad set
- Warning: Budget 2-5× CPA
- Fail: Budget <2× target CPA (insufficient for learning)
- Quick Win: Yes (5 min — increase or consolidate)
M-ST18: Budget Utilization [Medium, 1.5]
- Check: Percentage of daily budget being utilized
- Pass: >80% of daily budget utilized
- Warning: 60-80% utilization
- Fail: <60% utilization (indicates targeting or bid issues)
- Quick Win: No
---
Audience & Targeting (Weight: 20%)
M-AU1: Audience Overlap [High, 2.5]
- Check: Overlap between active ad sets
- Pass: <20% overlap between active ad sets
- Warning: 20-40% overlap
- Fail: >40% overlap (self-competition in auction)
- Quick Win: No
M-AU2: Custom Audience Freshness [High, 2.5]
- Check: Age of Website Custom Audiences
- Pass: Custom Audiences refreshed within 180 days
- Warning: 180-365 days old
- Fail: >365 days old or not created
- Quick Win: No
M-AU3: Lookalike Source Quality [Medium, 1.5]
- Check: Size and quality of Lookalike Audience source
- Pass: Source ≥1,000 users from high-value events (purchasers, high-LTV)
- Warning: 500-1,000 users
- Fail: <500 users or low-value source event
- Quick Win: No
M-AU4: Advantage+ Audience Testing [Medium, 1.5]
- Check: Advantage+ Audience tested vs manual targeting
- Pass: Tested (with or without suggestions as starting point)
- Warning: —
- Fail: Not tested
- Quick Win: Yes (5 min)
M-AU5: Purchaser/Converter Exclusions [High, 2.5]
- Check: Existing customers excluded from prospecting campaigns
- Pass: Purchasers/converters excluded from all prospecting
- Warning: Partial exclusions
- Fail: No purchaser exclusions from prospecting (wasted spend)
- Quick Win: Yes (10 min)
M-AU6: First-Party Data Utilization [High, 2.5]
- Check: Customer list uploaded for Custom Audiences and Lookalikes
- Pass: Customer list uploaded and refreshed within 90 days
- Warning: List uploaded but not refreshed
- Fail: No first-party data uploaded
- Quick Win: No
---
Context Notes
- Detailed targeting exclusions removed (Jan 2026): Meta fully removed detailed targeting exclusions. Use Custom Audience exclusions or Advantage+ Audience instead.
- Flexible Ads (2024): Automatically optimizes creative elements per placement. Evaluate alongside Advantage+ Creative.
- Financial Products Special Ad Category (Jan 2025): Financial products now enforced as Special Ad Category with same restrictions as Housing/Employment/Credit.
---
Special Ad Categories Compliance
If running ads in restricted categories, these additional checks apply:
| Category | Restrictions | Enforcement |
|---|---|---|
| Housing | No ZIP code targeting, age 18-65+ only, no Lookalike | Campaign disapproval |
| Employment | Same as Housing | Campaign disapproval |
| Credit | Same as Housing | Campaign disapproval |
| Financial Products (Jan 2025) | Same restrictions as above | Campaign disapproval |
Must declare Special Ad Category BEFORE campaign creation.
---
Quick Wins Summary
| Check | Fix | Time |
|---|---|---|
| M-PX2 — CAPI setup | Deploy via CAPI Gateway | 15 min |
| M-PX5 — Domain verification | Verify domain in Business Manager | 5 min |
| M-PX9 — Attribution window | Set to 7-day click / 1-day view | 2 min |
| M-AU5 — Purchaser exclusions | Create Custom Audience, exclude from prospecting | 10 min |
| M-CR1 — Format diversity | Add video or carousel to single-format ad sets | 15 min |
| M-ST15 — UTM parameters | Add UTM template at campaign level | 5 min |
| M-ST11 — Attribution consistency | Set 7-day click / 1-day view across campaigns | 2 min |
| M-ST9 — Advantage+ Placements | Enable Advantage+ Placements | 2 min |
Meta Ads Skill — Examples
Realistic examples showing how this skill handles common Meta Ads analysis requests.
---
1. Full Account Audit
User Request: "Audit my Meta Ads account. We're spending $45K/month across 12 campaigns and ROAS has dropped from 4.2x to 2.8x over the past 6 weeks."
Analysis Steps: 1. Pull account-level metrics for the trailing 90 days — segment by campaign, week, and placement to isolate when and where ROAS declined. 2. Check pixel and CAPI health: event match quality scores, deduplication status, and AEM priority configuration. 3. Evaluate account structure for campaign overlap, audience fragmentation, and budget distribution across funnel stages. 4. Assess creative performance: identify fatigue signals (rising frequency + declining CTR), format mix, and testing velocity. 5. Review attribution settings and cross-reference Meta-reported conversions against GA4 to quantify any attribution gap.
Sample Output:
Account Health Summary
| Metric | 6 Weeks Ago | Current | Trend |
|---|---|---|---|
| Monthly Spend | $44,200 | $46,100 | +4.3% |
| ROAS | 4.2x | 2.8x | -33% |
| CPM | $11.40 | $16.80 | +47% |
| CTR (Link) | 2.1% | 1.3% | -38% |
| Frequency (Prospecting) | 1.8 | 3.6 | +100% |
| Purchases | 1,854 | 1,290 | -30% |
Critical Findings
P0 — Audience Saturation (Impact: High) Prospecting frequency has doubled to 3.6. Three campaigns target overlapping interest stacks with no exclusions. Estimated audience overlap: 40-55%. Consolidate into one prospecting campaign with broad targeting and exclude past purchasers (180 days).
P1 — Creative Fatigue (Impact: High) Top 4 ads have been running 8+ weeks with no new variants. CTR has declined 38%. Only 2 new ads introduced in 6 weeks vs. recommended 4-6 per cycle. Immediate creative refresh needed — prioritize UGC and new hook angles.
P2 — CPM Inflation from Competition (Impact: Medium) CPMs rose 47%, consistent with seasonal auction pressure. However, the frequency issue is compounding this — narrower exhausted audiences cost more to reach. Broadening targeting will partially offset.
P3 — CAPI Gaps (Impact: Medium) Event match quality is 5.2/10 — missing fbc/fbp cookie passthrough on 60% of server events. Fix deduplication (event_id not set on 3 of 8 standard events). Estimated 15-20% of conversions are being lost in attribution.
Recommended Action Plan
1. This week: Consolidate 5 prospecting campaigns into 1 broad campaign (CBO). Add purchaser exclusions. 2. This week: Launch 4 new creative concepts (2 UGC, 1 testimonial carousel, 1 product demo video). 3. Next week: Fix CAPI implementation — add fbc/fbp passthrough and event_id deduplication. 4. Next week: Reprioritize AEM events — move Subscribe below Purchase/InitiateCheckout. 5. Ongoing: Establish 2-week creative testing cadence with 3-4 new ads per cycle.
---
2. Creative Fatigue Diagnosis
User Request: "Our Facebook ads CTR keeps dropping. We refresh creative every month but performance still declines by week 3. What's going on?"
Analysis Steps: 1. Pull ad-level metrics by week for the trailing 60 days — CTR, frequency, impressions, and spend per ad. 2. Identify fatigue inflection points: the week where CTR begins declining and frequency begins rising for each ad. 3. Analyze creative diversity — how many distinct concepts vs. minor variations are in rotation. 4. Check audience size relative to budget to calculate expected saturation rate.
Sample Output:
Creative Fatigue Analysis
| Ad Name | Week 1 CTR | Week 2 CTR | Week 3 CTR | Week 4 CTR | Frequency at Week 3 |
|---|---|---|---|---|---|
| Spring_Sale_Static_v1 | 2.4% | 2.1% | 1.4% | 0.9% | 3.2 |
| Spring_Sale_Static_v2 | 2.2% | 1.9% | 1.2% | 0.8% | 3.4 |
| Spring_Sale_Video_v1 | 3.1% | 2.8% | 2.0% | 1.3% | 2.9 |
| Spring_Sale_Carousel_v1 | 1.8% | 1.6% | 1.1% | 0.7% | 3.5 |
Diagnosis
The problem is not refresh cadence — it is creative diversity. All four ads share the same concept (spring sale, discount-forward messaging) with only format differences. Meta's algorithm treats these as one "idea" and your audience sees the same message repeatedly regardless of which ad is served.
Audience saturation math: Your prospecting audience is ~1.2M with $800/day spend and $14 CPM. That is ~57K impressions/day across 1.2M people = frequency of 1.0 every 3 weeks. With 4 same-concept ads, effective frequency feels much higher because the message is identical.
Recommendations
1. Concept diversity over format diversity: Each refresh cycle should include 3+ distinct angles (e.g., testimonial, problem-agitation, lifestyle aspiration, product demo, founder story) — not just the same pitch in image vs. video. 2. Stagger launches: Instead of replacing all ads on day 1 of the month, introduce 2 new ads every 2 weeks so there is always something fresh in the mix. 3. Increase audience size: Move from interest stacks (1.2M) to broad or 1-5% Lookalike (5-10M). Larger pool slows frequency buildup. 4. Add UGC: UGC typically maintains CTR 30-50% longer than studio creative because it reads as organic content in-feed. 5. Kill threshold: Pause any ad where CTR drops below 1.0% AND frequency exceeds 3.0. Do not wait for end-of-month.
---
3. CAPI & Pixel Health Check
User Request: "We set up Conversions API through our Shopify integration 3 months ago but I'm not sure it's working correctly. Our event match quality score is 4.8. Can you help diagnose?"
Analysis Steps: 1. Check Events Manager for CAPI event delivery — verify which events are sending via browser pixel only, CAPI only, or both (redundant setup). 2. Evaluate event match quality parameters: which user data fields are being passed and which are missing. 3. Verify deduplication is working — check for event_id consistency between pixel and CAPI events. 4. Review AEM configuration and event priority ranking.
Sample Output:
CAPI Health Dashboard
| Event | Pixel | CAPI | Deduplicated | EMQ Score |
|---|---|---|---|---|
| PageView | Yes | No | N/A | — |
| ViewContent | Yes | Yes | No | 4.2 |
| AddToCart | Yes | Yes | No | 4.5 |
| InitiateCheckout | Yes | Yes | Yes | 5.8 |
| Purchase | Yes | Yes | Yes | 6.1 |
| Lead | Yes | No | N/A | — |
| Search | Yes | No | N/A | — |
| CompleteRegistration | Yes | No | N/A | — |
Issues Found
Issue 1: Incomplete CAPI Coverage Only 4 of 8 events are sending via CAPI. PageView, Lead, Search, and CompleteRegistration are browser-pixel-only, which means iOS 14.5+ users blocking the pixel will not have these events tracked at all.
Issue 2: Missing Deduplication on ViewContent and AddToCart These events fire via both pixel and CAPI but without matching event_id values. Meta cannot deduplicate them, so you are likely seeing inflated ViewContent and AddToCart counts (estimated 15-30% over-count). This distorts funnel metrics and can confuse the optimization algorithm.
Issue 3: Low User Data Parameters Your CAPI events are passing email and phone (hashed), but missing:
fbccookie (the_fbcURL parameter / cookie) — this is the single highest-impact parameter for match qualityfbpcookie (the_fbpfirst-party cookie)client_ip_address— not being forwarded from Shopifyexternal_id— Shopify customer ID not mapped
EMQ Improvement Plan
| Action | Current EMQ Impact | Estimated New EMQ |
|---|---|---|
| Add fbc cookie passthrough | +1.5-2.0 points | 6.3-6.8 |
| Add fbp cookie passthrough | +0.5-1.0 points | 6.8-7.8 |
| Add client IP address | +0.5 points | 7.3-8.3 |
| Add external_id (Shopify customer ID) | +0.3 points | 7.6-8.6 |
| Fix deduplication on ViewContent/AddToCart | Accuracy improvement | — |
Target: EMQ of 8.0+ across all CAPI events.
Implementation Steps
1. In Shopify admin, go to Settings > Customer Events > Meta pixel. Verify "Use Conversions API" is enabled with "Maximum" data sharing. 2. If using a custom CAPI integration, update server-side code to read _fbc and _fbp cookies from the request and pass them in the UserData object. 3. Add event_id to both pixel and CAPI calls for ViewContent and AddToCart events — use the same unique ID (e.g., {event}_{timestamp}_{product_id}). 4. Map Shopify customer ID to external_id in the CAPI UserData payload. 5. After changes, monitor Events Manager > Test Events for 48 hours to verify deduplication and parameter delivery.
---
4. Audience Overlap Analysis
User Request: "We're running 6 prospecting campaigns with different audiences but performance has been declining across all of them. Could they be competing against each other?"
Analysis Steps: 1. List all active prospecting campaigns with their audience definitions, sizes, and spend. 2. Use the Audience Overlap tool (or manual analysis) to estimate overlap percentages between each pair. 3. Calculate the effective unique reach vs. total combined audience size. 4. Design a consolidation plan that preserves audience signals while eliminating internal competition.
Sample Output:
Campaign Inventory
| Campaign | Audience | Est. Size | Daily Budget | CPA (Last 14d) |
|---|---|---|---|---|
| Prospecting - Fitness Interest | Fitness & Wellness interests | 2.1M | $150 | $38.20 |
| Prospecting - Yoga Interest | Yoga, Pilates, Meditation | 1.4M | $120 | $41.50 |
| Prospecting - Health Food | Organic food, Clean eating | 1.8M | $100 | $44.10 |
| Prospecting - LAL Purchase 1% | 1% Lookalike of purchasers | 2.3M | $200 | $29.40 |
| Prospecting - LAL ATC 3% | 3% Lookalike of add-to-cart | 6.9M | $150 | $35.80 |
| Prospecting - LAL Email 1% | 1% Lookalike of email list | 2.3M | $100 | $42.90 |
Overlap Matrix
| Fitness | Yoga | Health Food | LAL Purch | LAL ATC | LAL Email | |
|---|---|---|---|---|---|---|
| Fitness | — | 62% | 48% | 35% | 28% | 33% |
| Yoga | 62% | — | 41% | 30% | 22% | 28% |
| Health Food | 48% | 41% | — | 27% | 21% | 25% |
| LAL Purch | 35% | 30% | 27% | — | 55% | 68% |
| LAL ATC | 28% | 22% | 21% | 55% | — | 45% |
| LAL Email | 33% | 28% | 25% | 68% | 45% | — |
Key Finding
You are bidding against yourself in Meta's auction. The three interest campaigns overlap 41-62% with each other, and the three Lookalike campaigns overlap 45-68%. Combined unique reach is approximately 8.2M — not the 16.8M implied by adding all audience sizes.
With $820/day across 6 campaigns, Meta is serving the same users ads from multiple campaigns and your CPAs are inflated by 20-35% due to internal auction competition.
Consolidation Plan
New Structure (3 campaigns down from 6):
| Campaign | Audience | Budget | Rationale |
|---|---|---|---|
| Prospecting - Broad | No targeting constraints, Advantage+ Audience with interest suggestions | $450/day | Combines all interest signals. Meta's ML finds the best users from the full pool. |
| Prospecting - Value LAL | 1% Lookalike of purchasers (value-based) | $250/day | Highest-performing audience. Keep isolated for budget control. |
| Prospecting - Scale LAL | 3-5% Lookalike of purchasers | $120/day | Broader reach when primary LAL saturates. |
Exclusions to add: Purchasers (180 days), website visitors (30 days), all retargeting Custom Audiences.
Expected impact: CPA reduction of 15-25% within 2 weeks as auction competition resolves. Combined unique reach increases because Meta can optimize across the full addressable audience.
---
5. Advantage+ Shopping Evaluation
User Request: "We're an ecommerce brand doing $200K/month on Meta. Should we move to Advantage+ Shopping campaigns? We're currently using manual campaigns with Lookalike audiences."
Analysis Steps: 1. Assess readiness criteria: pixel data maturity, creative volume, catalog setup, and conversion volume. 2. Review current manual campaign performance as a baseline. 3. Design a migration plan with a testing phase before full cutover. 4. Define guardrails — existing customer budget cap, minimum creative requirements.
Sample Output:
Readiness Assessment
| Criteria | Status | Notes |
|---|---|---|
| Monthly conversions (Purchase) | 320/month | Above 100/month threshold — good |
| Pixel maturity | 18 months of data | Strong signal for Meta's ML |
| CAPI implemented | Yes, EMQ 7.4 | Good data quality |
| Product catalog | 240 SKUs, feed via Shopify | Clean feed, no disapprovals |
| Creative assets | 8 active ads | Minimum 10-15 recommended — need more |
| Existing customer % of revenue | ~35% | Need budget cap to protect prospecting |
Verdict: Ready for Advantage+ Shopping with minor preparation.
Current Performance Baseline
| Metric | Manual Campaigns (Last 30d) |
|---|---|
| Spend | $48,200 |
| Revenue (Meta-attributed) | $196,400 |
| ROAS | 4.07x |
| Purchases | 412 |
| CPA | $117.00 |
| CPM | $13.20 |
Migration Plan
Phase 1 — Preparation (Week 1)
- Create 6-8 additional creative assets (UGC, lifestyle, product close-up, carousel) to reach 15+ total
- Set up product sets for top sellers vs. full catalog
- Verify catalog feed quality — titles, descriptions, images, pricing all current
Phase 2 — Test (Weeks 2-3)
- Launch Advantage+ Shopping campaign at 20% of prospecting budget ($200/day)
- Set existing customer budget cap at 15% (prevents ASC from just retargeting past buyers)
- Run alongside manual campaigns — do not pause them yet
- Creative: load all 15+ ads into the single ASC campaign (Meta mixes and matches)
Phase 3 — Evaluate (Week 4)
- Compare ASC vs. manual on: ROAS, CPA, incremental reach, new customer %
- If ASC ROAS is within 80% of manual at higher spend efficiency, begin shifting budget
Phase 4 — Scale (Weeks 5-8)
- Increase ASC to 50%, then 70% of prospecting budget
- Maintain 1 manual retargeting campaign for cart abandoners (ASC does not handle retargeting segmentation well)
- Keep 1 manual prospecting campaign at reduced budget as a control
Guardrails
- Existing customer budget cap: Start at 15%, adjust based on new vs. returning customer split
- Creative refresh: ASC burns through creative faster — plan for 4-6 new assets every 2 weeks
- Do not: Put all budget into ASC on day 1. The algorithm needs 1-2 weeks to learn.
---
6. iOS 14.5+ Attribution Review
User Request: "Meta says we did $380K in purchases last month but GA4 only shows $290K attributed to Facebook. Which number is right and how do we reconcile?"
Analysis Steps: 1. Compare attribution models: Meta's default (7-day click, 1-day view) vs. GA4's last-click model. 2. Quantify the expected gap from view-through attribution, cross-device conversions, and iOS modeled data. 3. Check CAPI and pixel event consistency to rule out tracking gaps. 4. Build a reconciliation framework for ongoing reporting.
Sample Output:
Attribution Gap Analysis
| Source | Attributed Revenue | Purchases | Avg. Order Value |
|---|---|---|---|
| Meta Ads Manager (7d click, 1d view) | $380,400 | 1,268 | $300 |
| Meta Ads Manager (1d click only) | $312,600 | 1,042 | $300 |
| GA4 (last-click, facebook/paid) | $290,200 | 967 | $300 |
| GA4 (first-click, facebook/paid) | $318,400 | 1,061 | $300 |
Where the $90K Gap Comes From
| Factor | Estimated Revenue Impact | Explanation |
|---|---|---|
| View-through conversions (1-day) | $67,800 | Meta credits purchases within 1 day of ad view even without a click. GA4 does not track view-through at all. |
| Cross-device conversions | $22,400 | User clicks ad on mobile, purchases on desktop. Meta's people-based tracking connects these; GA4 sees two separate sessions. |
| iOS modeled conversions | $18,200 | ~30% of iOS conversions are statistically modeled by Meta due to ATT opt-outs. These may not have corresponding GA4 sessions. |
| UTM parameter loss | $8,600 | Redirect chains, app-to-browser handoffs, and Safari ITP strip UTM parameters. GA4 attributes these to direct/organic. |
| Subtotal (over-count factors) | $117,000 | |
| GA4 under-attribution (cookie loss) | -$26,800 | 7-day ITP cookie expiry means GA4 loses attribution on delayed purchases. Meta's server-side data retains this. |
| Net expected gap | $90,200 | Matches observed $90,200 gap |
Reconciliation Framework
Neither number is "right" — they measure different things. Use this framework:
| Reporting Context | Use This Number | Source |
|---|---|---|
| Media efficiency / ROAS optimization | Meta 7d click, 1d view | Meta Ads Manager |
| Conservative revenue attribution | Meta 1d click only | Meta Ads Manager |
| Cross-channel comparison (apples-to-apples) | GA4 last-click | GA4 |
| Incrementality / true contribution | Conversion lift study | Meta Experiments |
| Board / finance reporting | Blended: GA4 last-click + 20-30% uplift factor | Calculated |
Recommendations
1. Add 1-day click column to your Meta dashboard as a secondary reference — it is closer to GA4's model and useful for conservative planning. 2. Run a conversion lift study ($5K-10K test budget, 2-4 weeks) to measure true incremental impact. This resolves the "which number is real" question definitively. 3. Fix UTM tracking: Ensure all ads use consistent utm_source=facebook&utm_medium=paid&utm_campaign={campaign_name} parameters. Check for redirect chains that strip parameters. 4. Monitor the gap ratio monthly: A $90K gap on $380K (24%) is within normal range for a 7d-click/1d-view window. If the gap exceeds 35%, investigate CAPI or pixel issues.
---
7. Full-Funnel Campaign Design
User Request: "We're a DTC skincare brand launching on Meta Ads for the first time. Budget is $15K/month. Design a full-funnel campaign structure."
Analysis Steps: 1. Determine funnel stages needed based on brand maturity (new brand = heavier top-of-funnel). 2. Allocate budget across prospecting, retargeting, and retention based on a new-brand ratio. 3. Define audience strategy for each stage — broad prospecting for new brands with limited pixel data. 4. Recommend creative types and volume for launch. 5. Set KPI targets for each funnel stage.
Sample Output:
Budget Allocation
| Funnel Stage | Budget | % of Total | Objective |
|---|---|---|---|
| Prospecting (Cold) | $10,500/mo | 70% | Sales — Purchases |
| Retargeting (Warm) | $3,000/mo | 20% | Sales — Purchases |
| Retention (Hot) | $1,500/mo | 10% | Sales — Repeat Purchase |
Campaign Structure
Ad Account: [Brand] Skincare
│
├── Campaign: Prospecting - Broad (CBO, $350/day)
│ ├── Ad Set: Broad - Women 25-54 (no interests, Advantage+ Audience)
│ │ ├── Ad: UGC testimonial video (15s, 9:16 + 1:1)
│ │ ├── Ad: Before/after carousel (4 cards)
│ │ ├── Ad: Founder story video (30s)
│ │ ├── Ad: Product close-up static (key ingredient focus)
│ │ ├── Ad: Problem-agitation static ("Tired of...")
│ │ └── Ad: Social proof static (reviews + star rating)
│ │
│ └── Ad Set: LAL 1% - Email Subscribers (if 1,000+ list)
│ └── [Same 6 ads]
│
├── Campaign: Retargeting - Warm (ABO, $100/day)
│ ├── Ad Set: Website Visitors 1-30 days (excl. purchasers) — $50/day
│ │ ├── Ad: Testimonial carousel (different from prospecting)
│ │ ├── Ad: Limited-time offer static
│ │ └── Ad: "Still thinking about it?" dynamic product ad
│ │
│ └── Ad Set: Engaged 1-60 days (IG/FB interaction, video viewers) — $50/day
│ ├── Ad: Ingredient deep-dive carousel
│ ├── Ad: UGC "my routine" video
│ └── Ad: Free shipping offer static
│
└── Campaign: Retention - Repeat Purchase (ABO, $50/day)
└── Ad Set: Past Purchasers 30-180 days — $50/day
├── Ad: New product launch announcement
├── Ad: Bundle/subscription offer
└── Ad: Loyalty reward / referralKPI Targets (First 90 Days)
| Stage | Primary KPI | Target | Secondary KPI | Target |
|---|---|---|---|---|
| Prospecting | CPA (Purchase) | <$45 | CTR | >1.5% |
| Prospecting | ROAS | >2.5x | CPM | <$15 |
| Retargeting | CPA (Purchase) | <$25 | ROAS | >5x |
| Retargeting | Frequency | <6 | CTR | >2.5% |
| Retention | CPA (Repeat Purchase) | <$20 | ROAS | >6x |
Launch Checklist
- [ ] Pixel installed on all pages with standard events (ViewContent, AddToCart, InitiateCheckout, Purchase)
- [ ] CAPI configured via platform integration (Shopify, WooCommerce, etc.)
- [ ] AEM events prioritized: Purchase > InitiateCheckout > AddToCart > ViewContent > Lead > CompleteRegistration > Subscribe > PageView
- [ ] UTM parameters on all ads:
utm_source=facebook&utm_medium=paid&utm_campaign={campaign_name}&utm_content={ad_name} - [ ] Exclusion audiences created: Purchasers (180d), Website Visitors (30d)
- [ ] Creative assets ready: minimum 6 for prospecting, 3 for retargeting, 2 for retention
- [ ] Advantage+ Placements enabled (all placements, let Meta optimize)
- [ ] Attribution window: 7-day click, 1-day view (default)
- [ ] Domain verified in Business Settings
- [ ] GA4 configured as secondary attribution source
Month 1-3 Roadmap
Month 1: Launch structure above. Focus on creative testing — identify winning concepts. Expect ROAS of 1.5-2.5x as pixel learns.
Month 2: Scale winning creative. Introduce 4-6 new ad variants based on Month 1 learnings. Pixel data matures — ROAS should improve to 2.5-3.5x. Consider Advantage+ Shopping test at 20% of prospecting budget.
Month 3: Full optimization. Kill underperformers, scale winners, test new audiences (LALs from purchaser data). Target ROAS of 3-4x. Evaluate budget increase if CPA targets are hit.
---
Common Analysis Patterns
Pattern: Performance Drop Diagnosis
1. Identify WHEN the drop started (weekly trend analysis)
2. Check WHAT changed: creative, audience, budget, attribution, external factors
3. Isolate WHERE: which campaigns/ad sets/ads declined vs. held
4. Determine WHY: fatigue, overlap, tracking, competition, seasonality
5. Recommend fixes prioritized by impact and effortPattern: Creative Testing Audit
1. Inventory all active and recent ads by concept, format, and age
2. Plot CTR and CPA by ad age (days since launch)
3. Identify fatigue threshold (when metrics degrade)
4. Assess concept diversity vs. variation diversity
5. Recommend testing cadence, kill criteria, and concept pipelinePattern: Tracking & Attribution Validation
1. Map all events: pixel-only, CAPI-only, both (deduplicated?)
2. Check EMQ scores per event
3. Verify AEM priority ranking matches business value
4. Compare Meta vs. GA4 numbers to quantify attribution gap
5. Build reconciliation framework for stakeholder reportingPattern: Budget Reallocation
1. Rank campaigns/ad sets by marginal ROAS or CPA
2. Identify diminishing returns (spend vs. CPA curve)
3. Find underfunded high-performers and overfunded low-performers
4. Model reallocation scenarios with expected outcomes
5. Implement gradually (20% shifts per week, not overnight)---
Pro Tips
Instead of asking "How are my Facebook ads doing?" ask "My prospecting CPA rose from $28 to $41 in the last 3 weeks — what should I investigate first?" Specific metrics and timeframes yield actionable analysis.
Instead of asking "Should I use broad targeting?" ask "We have 14 months of pixel data and 200+ purchases/month. Is our account mature enough for broad targeting to outperform our 1% Lookalikes?" Context about data maturity changes the recommendation.
Instead of asking "How do I fix my ROAS?" ask "ROAS is 2.1x on prospecting and 6.8x on retargeting, but retargeting frequency is at 9. Should I shift budget from retargeting to prospecting even though prospecting ROAS is lower?" This reveals the real tradeoff between efficiency and scale.
Instead of asking "Set up CAPI for me" ask "We're on Shopify Plus with a headless Hydrogen frontend. What's the best CAPI implementation path — platform integration, partner integration, or custom Gateway API?" Platform details determine the right approach.
Instead of asking "What's a good CTR?" ask "Our Feed CTR is 1.8% but Stories CTR is 0.6%. Is the Stories CTR concerning or is that expected given placement behavior differences?" Benchmarks vary dramatically by placement, objective, and industry.
---
8. Scored Account Audit (Health Score)
User Request:
"Score my Meta Ads account health and tell me what to fix first."
Analysis Steps: 1. Load skills/shared/scoring-system.md for scoring algorithm and CHECKS.md for the 46-check audit 2. Evaluate each applicable check as PASS, WARNING, or FAIL based on account data 3. Calculate category scores using severity multipliers and category weights 4. Identify Quick Wins (Critical/High severity, ≤15 min fix time) 5. Produce health score, grade, and prioritized action plan
Sample Output:
Account Health Score: 71/100 (Grade C — Needs Improvement)
Quick Wins (fix in ≤15 min, high impact)
1. [Critical] Deploy CAPI via Gateway — M-PX2 (15 min) 2. [High] Verify domain in Business Manager — M-PX5 (5 min) 3. [High] Set attribution to 7-day click / 1-day view — M-PX9 (2 min) 4. [High] Exclude purchasers from prospecting — M-AU5 (10 min) 5. [Critical] Add video/carousel formats — M-CR1 (15 min)
Category Breakdown
| Category | Weight | Score | Grade | Top Issue |
|---|---|---|---|---|
| Pixel / CAPI Health | 30% | 55 | D | No CAPI active, EMQ at 5.8 |
| Creative Diversity & Fatigue | 30% | 74 | C | Only static images, no video |
| Account Structure | 20% | 82 | B | 2 ad sets in Learning Limited |
| Audience & Targeting | 20% | 78 | B | No purchaser exclusions |
Prioritized Action Plan
Immediate (This Week) 1. Deploy CAPI via Gateway and verify event deduplication 2. Verify domain in Business Manager 3. Set 7-day click / 1-day view attribution on all campaigns 4. Create purchaser Custom Audience and exclude from prospecting
This Month 5. Produce video creatives in 9:16 vertical for Reels/Stories 6. Add UGC content to creative mix (target ≥30%) 7. Test Advantage+ Audience vs manual targeting 8. Upload and refresh Customer Match list
Next Quarter 9. Test Advantage+ Shopping Campaign with product catalog 10. Build A/B testing cadence using Meta Experiments
MIT License
Copyright (c) 2026 Rebecca Rae Barton
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Meta Ads Reference
Account Hierarchy
Business Manager
└── Ad Account
└── Campaign (Objective)
└── Ad Set (Targeting, Budget, Schedule)
└── Ad (Creative, Copy, CTA)Campaign Objectives (Current)
| Objective | Optimization Goals | Best For |
|---|---|---|
| Awareness | Reach, Brand Awareness, Video Views, Store Location Awareness | Top-of-funnel brand building |
| Traffic | Link Clicks, Landing Page Views | Driving website visits |
| Engagement | Messenger, Instagram, WhatsApp, Video Views, Post Engagement | On-platform interaction |
| Leads | Instant Forms, Messenger, Conversions, Calls | Lead generation |
| App Promotion | App Installs, App Events | Mobile app marketing |
| Sales | Conversions, Catalog Sales, Messenger, Calls | Revenue / ROAS |
Ad Set Settings
Budget Types
- Campaign Budget Optimization (CBO): Budget set at campaign level, auto-distributed
- Ad Set Budget (ABO): Budget set per ad set, manual control
- Daily Budget: Average daily spend
- Lifetime Budget: Total budget for campaign duration
Bid Strategies
| Strategy | Description | Use Case |
|---|---|---|
| Lowest Cost | Get most results for budget (no cap) | Default, volume-focused |
| Cost Per Result Goal | Target average CPA | Efficiency control |
| Bid Cap | Max bid per auction | Strict cost control |
| ROAS Goal | Target return on ad spend | Revenue optimization |
| Highest Value | Maximize purchase value | High-value customer acquisition |
Placement Options
| Placement | Formats |
|---|---|
| Facebook Feed | Image, Video, Carousel, Collection |
| Facebook Marketplace | Image, Video |
| Facebook Video Feeds | Video |
| Facebook Right Column | Image |
| Facebook Stories | Image, Video (9:16) |
| Facebook Reels | Video (9:16) |
| Instagram Feed | Image, Video, Carousel, Collection |
| Instagram Stories | Image, Video (9:16) |
| Instagram Reels | Video (9:16) |
| Instagram Explore | Image, Video |
| Messenger Inbox | Image |
| Messenger Stories | Image, Video |
| Audience Network | Image, Video, Native |
Recommendation: Use Advantage+ Placements (all placements) and let Meta optimize. Create assets for each format.
Audience Reference
Core Audiences (Interest/Demographic)
Demographics:
├── Age (13-65+)
├── Gender
├── Location (country, state, city, zip, radius)
├── Language
├── Education level
├── Relationship status
├── Job title / industry
└── Household income (US only, limited)
Interests:
├── Business & Industry
├── Entertainment (movies, music, TV)
├── Family & Relationships
├── Fitness & Wellness
├── Food & Drink
├── Hobbies & Activities
├── Shopping & Fashion
└── Technology
Behaviors:
├── Digital activities
├── Purchase behavior
├── Travel
├── Device usage
└── Expat/traveler statusCustom Audiences
| Source | Lookback | Min Size |
|---|---|---|
| Website (Pixel/CAPI) | Up to 180 days | 100 |
| Customer List | Upload CSV/sync | 100 (match rate varies) |
| App Activity | Up to 180 days | 100 |
| Video Views | Up to 365 days | 100 |
| Lead Form | Up to 90 days | 100 |
| Instagram Account | Up to 365 days | 100 |
| Facebook Page | Up to 365 days | 100 |
| Shopping (Catalog) | Up to 180 days | 100 |
Lookalike Audiences
- Seed: Any Custom Audience (value-based preferred for Purchase LALs)
- Percentage: 1-10% of country population
- Best practice: Test 1% (most similar), 1-3% (broader), 3-5% (scale)
- Value-based LALs: Uses purchase value for better quality matching
- Country: Must select target country(ies)
Advantage+ Audience
- Meta's AI-driven targeting
- You provide "suggestions" (interests, Custom Audiences) as signals
- Algorithm can go beyond suggestions to find converters
- Replacing traditional detailed targeting for many advertisers
- Works best with strong pixel data and good creative
Meta Pixel & CAPI Reference
Pixel Base Code
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'YOUR_PIXEL_ID');
fbq('track', 'PageView');
</script>Standard Events
| Event | Parameters | When |
|---|---|---|
| PageView | — | Every page load |
| ViewContent | content_ids, content_type, value, currency | Product/content pages |
| AddToCart | content_ids, content_type, value, currency | Add to cart action |
| InitiateCheckout | content_ids, value, currency, num_items | Checkout start |
| AddPaymentInfo | content_category, value, currency | Payment info entered |
| Purchase | content_ids, value, currency, content_type | Order complete |
| Lead | value, currency, content_name | Form submission |
| CompleteRegistration | value, currency, content_name | Signup complete |
| Search | search_string, content_category | Site search |
| Subscribe | value, currency, predicted_ltv | Subscription start |
Pixel Event Code
// Standard event
fbq('track', 'Purchase', {
content_ids: ['SKU123', 'SKU456'],
content_type: 'product',
value: 99.99,
currency: 'USD',
num_items: 2
});
// Custom event
fbq('trackCustom', 'FreeTrial', {
trial_type: 'premium',
duration: 14
});Conversions API (CAPI)
Server-side event sending for privacy resilience.
# Python example using Facebook Business SDK
from facebook_business.adobjects.serverside.event import Event
from facebook_business.adobjects.serverside.event_request import EventRequest
from facebook_business.adobjects.serverside.user_data import UserData
from facebook_business.adobjects.serverside.custom_data import CustomData
from facebook_business.api import FacebookAdsApi
import time, hashlib
FacebookAdsApi.init(access_token='YOUR_ACCESS_TOKEN')
user_data = UserData(
emails=[hashlib.sha256('customer@example.com'.encode()).hexdigest()],
phones=[hashlib.sha256('+11234567890'.encode()).hexdigest()],
client_ip_address='1.2.3.4',
client_user_agent='Mozilla/5.0...',
fbc='fb.1.1234567890.AbCdEfG', # _fbc cookie
fbp='fb.1.1234567890.1234567890' # _fbp cookie
)
custom_data = CustomData(
value=99.99,
currency='USD',
content_ids=['SKU123'],
content_type='product'
)
event = Event(
event_name='Purchase',
event_time=int(time.time()),
user_data=user_data,
custom_data=custom_data,
event_source_url='https://example.com/checkout/success',
action_source='website'
)
request = EventRequest(pixel_id='YOUR_PIXEL_ID', events=[event])
response = request.execute()Event Match Quality (EMQ)
Score 1-10 measuring how well your CAPI events can be matched to Meta users.
| Score | Quality | Action |
|---|---|---|
| 8-10 | Great | Maintain current setup |
| 6-7 | Good | Add more user data parameters |
| 4-5 | Fair | Implement fbc/fbp cookies, add email/phone |
| 1-3 | Poor | Review CAPI implementation, check hashing |
Key parameters for high EMQ: email, phone, fbc cookie, fbp cookie, client IP, user agent, external ID.
Aggregated Event Measurement (AEM)
iOS 14.5+ privacy handling:
- 8-event limit per domain (priority-ranked)
- Prioritization: Highest-value event wins attribution (e.g., Purchase > AddToCart)
- Delayed reporting: Up to 72 hours for iOS conversions
- Modeled conversions: Statistical modeling fills attribution gaps
Recommended priority order: 1. Purchase 2. InitiateCheckout 3. AddToCart 4. ViewContent 5. Lead 6. CompleteRegistration 7. Subscribe 8. PageView
Creative Specifications
Image Ads
| Placement | Ratio | Size |
|---|---|---|
| Feed (FB/IG) | 1:1 | 1080x1080px |
| Stories/Reels | 9:16 | 1080x1920px |
| Right Column | 1.91:1 | 1200x628px |
| Marketplace | 1:1 | 1080x1080px |
Video Ads
| Placement | Ratio | Duration |
|---|---|---|
| Feed | 1:1 or 4:5 | 15-60s (15s optimal) |
| Stories/Reels | 9:16 | 15-30s |
| In-stream | 16:9 | 5-15s |
Text Limits
| Element | Character Limit | Recommended |
|---|---|---|
| Primary Text | 125 chars (before "See more") | Under 125 |
| Headline | 40 chars | Under 40 |
| Description | 30 chars | Under 30 |
| CTA Button | Preset options | Match intent |
Creative Testing Framework
Concept Testing (Big Swings)
Test fundamentally different approaches:
- UGC vs studio-produced
- Testimonial vs product demo
- Problem-agitation vs aspiration
- Static image vs video
- Different value propositions/angles
Iterative Testing (Optimization)
Refine winning concepts:
- Hook variations (first 3 seconds of video)
- Headline/copy variations
- CTA variations
- Color/visual treatment
- Format (carousel vs single vs video)
Testing Structure
Campaign: Creative Testing
├── Ad Set: Broad targeting (consistent audience)
│ ├── Ad 1: Concept A - Variation 1
│ ├── Ad 2: Concept A - Variation 2
│ ├── Ad 3: Concept B - Variation 1
│ └── Ad 4: Concept B - Variation 2- Use DCO (Dynamic Creative) for element-level testing
- Or separate ads for concept-level testing
- Statistical significance: Wait for 50+ conversions per variant
Reporting & Attribution
Attribution Windows
| Window | Description | Default? |
|---|---|---|
| 7-day click, 1-day view | Credit conversions within 7d of click OR 1d of view | Yes |
| 1-day click | Only credit within 1 day of click | Conservative |
| 7-day click | Credit within 7 days of click only (no view-through) | — |
| 28-day click | Extended click window | — |
Key Metrics
| Metric | Definition |
|---|---|
| CPM | Cost per 1,000 impressions |
| CPC (Link Click) | Cost per link click |
| CTR (Link Click) | Link clicks / impressions |
| CPA | Cost per conversion action |
| ROAS | Purchase conversion value / spend |
| Frequency | Average times ad shown per person |
| Reach | Unique people who saw the ad |
| ThruPlay Rate | Video views to completion (or 15s) / impressions |
| Hook Rate | 3-second video views / impressions |
| Hold Rate | ThruPlays / 3-second video views |
Reporting Breakdowns
- Delivery: Age, gender, country, region, platform, placement, device, time of day
- Action: Conversion device, carousel card, destination, product ID
- Dynamic Creative: Image, headline, text, CTA, description
API Reference (Marketing API)
Base URL
https://graph.facebook.com/v19.0/Authentication
Access Token: User token or System User token
Required permissions: ads_management, ads_read, business_managementKey Endpoints
# Account
GET /{ad_account_id}/campaigns
GET /{ad_account_id}/adsets
GET /{ad_account_id}/ads
# Insights (Reporting)
GET /{ad_account_id}/insights?fields=impressions,clicks,spend,actions
GET /{campaign_id}/insights
GET /{adset_id}/insights
GET /{ad_id}/insights
# Audiences
POST /{ad_account_id}/customaudiences
GET /{custom_audience_id}
# Conversions API
POST /{pixel_id}/events
# Catalog
GET /{product_catalog_id}/products
POST /{product_catalog_id}/items_batch# Meta Ads skill dependencies
# Install with: pip install -r requirements.txt
facebook-business>=19.0.0,<21.0.0
python-dotenv>=1.0.0,<2.0.0