start-vibing-stacks 2.28.0 → 2.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/migrate.js +81 -43
  2. package/dist/setup.js +20 -1
  3. package/package.json +1 -1
  4. package/stacks/_shared/ads-agents/README.md +452 -0
  5. package/stacks/_shared/ads-agents/RESEARCH-REPORT.md +157 -0
  6. package/stacks/_shared/ads-agents/SKILL.md +210 -0
  7. package/stacks/_shared/ads-agents/SKILLS-UPDATE-REPORT.md +255 -0
  8. package/stacks/_shared/ads-agents/agents/audit-budget.md +116 -0
  9. package/stacks/_shared/ads-agents/agents/audit-compliance.md +131 -0
  10. package/stacks/_shared/ads-agents/agents/audit-creative.md +127 -0
  11. package/stacks/_shared/ads-agents/agents/audit-google.md +113 -0
  12. package/stacks/_shared/ads-agents/agents/audit-meta.md +112 -0
  13. package/stacks/_shared/ads-agents/agents/audit-tracking.md +134 -0
  14. package/stacks/_shared/ads-agents/agents/copy-writer.md +188 -0
  15. package/stacks/_shared/ads-agents/agents/creative-strategist.md +199 -0
  16. package/stacks/_shared/ads-agents/agents/format-adapter.md +175 -0
  17. package/stacks/_shared/ads-agents/agents/visual-designer.md +245 -0
  18. package/stacks/_shared/ads-agents/references/additional-platforms.md +106 -0
  19. package/stacks/_shared/ads-agents/references/benchmarks.md +257 -0
  20. package/stacks/_shared/ads-agents/references/bidding-strategies.md +333 -0
  21. package/stacks/_shared/ads-agents/references/brand-dna-template.md +190 -0
  22. package/stacks/_shared/ads-agents/references/budget-allocation.md +150 -0
  23. package/stacks/_shared/ads-agents/references/compliance.md +280 -0
  24. package/stacks/_shared/ads-agents/references/conversion-tracking.md +246 -0
  25. package/stacks/_shared/ads-agents/references/copy-frameworks.md +187 -0
  26. package/stacks/_shared/ads-agents/references/funnel-content-copy-rules.md +44 -0
  27. package/stacks/_shared/ads-agents/references/gaql-notes.md +49 -0
  28. package/stacks/_shared/ads-agents/references/google-audit.md +217 -0
  29. package/stacks/_shared/ads-agents/references/google-creative-specs.md +119 -0
  30. package/stacks/_shared/ads-agents/references/image-providers.md +133 -0
  31. package/stacks/_shared/ads-agents/references/linkedin-audit.md +141 -0
  32. package/stacks/_shared/ads-agents/references/linkedin-creative-specs.md +129 -0
  33. package/stacks/_shared/ads-agents/references/mcp-integration.md +125 -0
  34. package/stacks/_shared/ads-agents/references/meta-audit.md +141 -0
  35. package/stacks/_shared/ads-agents/references/meta-creative-specs.md +134 -0
  36. package/stacks/_shared/ads-agents/references/microsoft-audit.md +158 -0
  37. package/stacks/_shared/ads-agents/references/microsoft-creative-specs.md +123 -0
  38. package/stacks/_shared/ads-agents/references/platform-specs.md +276 -0
  39. package/stacks/_shared/ads-agents/references/scoring-system.md +169 -0
  40. package/stacks/_shared/ads-agents/references/tiktok-audit.md +165 -0
  41. package/stacks/_shared/ads-agents/references/tiktok-creative-specs.md +139 -0
  42. package/stacks/_shared/ads-agents/references/voice-to-style.md +87 -0
  43. package/stacks/_shared/ads-agents/references/youtube-creative-specs.md +134 -0
  44. package/stacks/_shared/ads-agents/skills/ads-apple/SKILL.md +225 -0
  45. package/stacks/_shared/ads-agents/skills/ads-audit/SKILL.md +108 -0
  46. package/stacks/_shared/ads-agents/skills/ads-budget/SKILL.md +198 -0
  47. package/stacks/_shared/ads-agents/skills/ads-competitor/SKILL.md +198 -0
  48. package/stacks/_shared/ads-agents/skills/ads-create/SKILL.md +198 -0
  49. package/stacks/_shared/ads-agents/skills/ads-creative/SKILL.md +208 -0
  50. package/stacks/_shared/ads-agents/skills/ads-dna/SKILL.md +245 -0
  51. package/stacks/_shared/ads-agents/skills/ads-generate/SKILL.md +173 -0
  52. package/stacks/_shared/ads-agents/skills/ads-google/SKILL.md +192 -0
  53. package/stacks/_shared/ads-agents/skills/ads-landing/SKILL.md +186 -0
  54. package/stacks/_shared/ads-agents/skills/ads-linkedin/SKILL.md +200 -0
  55. package/stacks/_shared/ads-agents/skills/ads-math/SKILL.md +216 -0
  56. package/stacks/_shared/ads-agents/skills/ads-meta/SKILL.md +167 -0
  57. package/stacks/_shared/ads-agents/skills/ads-microsoft/SKILL.md +163 -0
  58. package/stacks/_shared/ads-agents/skills/ads-photoshoot/SKILL.md +220 -0
  59. package/stacks/_shared/ads-agents/skills/ads-plan/SKILL.md +176 -0
  60. package/stacks/_shared/ads-agents/skills/ads-test/SKILL.md +199 -0
  61. package/stacks/_shared/ads-agents/skills/ads-tiktok/SKILL.md +190 -0
  62. package/stacks/_shared/ads-agents/skills/ads-youtube/SKILL.md +199 -0
  63. package/stacks/_shared/hooks/_state.ts +8 -2
  64. package/stacks/_shared/hooks/plan-gate.ts +138 -0
  65. package/stacks/_shared/memories/funnel-content-copy.md +81 -0
  66. package/templates/CLAUDE-python.md +6 -0
@@ -0,0 +1,129 @@
1
+ # LinkedIn Creative Specs: Generation Guide
2
+
3
+ <!-- Updated: 2026-03-12 -->
4
+ <!-- Source: platform-specs.md + LinkedIn Campaign Manager requirements -->
5
+ <!-- Used by: ads-generate, visual-designer agent -->
6
+
7
+ ## Purpose
8
+
9
+ Generation-ready specifications for LinkedIn ad creative. LinkedIn is a professional
10
+ platform; tone, imagery style, and composition constraints differ significantly from
11
+ Meta and TikTok.
12
+
13
+ ---
14
+
15
+ ## Single Image Ad Specs
16
+
17
+ | Ratio | Dimensions | Priority | Notes |
18
+ |-------|-----------|----------|-------|
19
+ | 1:1 (square) | 1080×1080 | **Primary target** | Better engagement than landscape |
20
+ | 1.91:1 (landscape) | 1200×628 | Secondary | Legacy placements, desktop sidebar |
21
+
22
+ **File requirements:** PNG or JPG, max 5MB.
23
+
24
+ **Primary generation target: 1080×1080 (1:1)**
25
+ Square performs better in the LinkedIn feed because it takes up more vertical space
26
+ on mobile, increasing scroll-stop rate.
27
+
28
+ ---
29
+
30
+ ## Copy Limits
31
+
32
+ | Component | Recommended | Max |
33
+ |-----------|------------|-----|
34
+ | Intro text | 150 chars | 600 chars |
35
+ | Headline | 70 chars | 200 chars |
36
+ | Description | 100 chars |: (desktop only) |
37
+ | CTA button | Predefined list | N/A |
38
+
39
+ **Copy generation rule:** Write intro text ≤150 chars (truncated on mobile beyond this).
40
+ Headline ≤70 chars. The description only shows on desktop; treat as supplementary.
41
+
42
+ ---
43
+
44
+ ## Video Ad Specs
45
+
46
+ | Component | Requirement |
47
+ |-----------|------------|
48
+ | Format | MP4 (required) |
49
+ | File size | 75KB - 500MB |
50
+ | Duration | 3s - 30min (rec 15-30s) |
51
+ | Resolution | 360p min; 720p+ recommended |
52
+ | Aspect ratios | 16:9 (landscape), 1:1 (square), 9:16 (mobile only) |
53
+
54
+ For video thumbnail generation: use 1:1 (1080×1080) as the primary thumbnail size.
55
+
56
+ ---
57
+
58
+ ## Document Ad Specs
59
+
60
+ - Formats: PDF, DOC, DOCX, PPT, PPTX
61
+ - Max: 100MB, 300 pages (10-20 pages recommended)
62
+ - Cover image: 1200×628 (1.91:1); generate this as the document cover visual
63
+
64
+ ---
65
+
66
+ ## Audience Network / Programmatic
67
+
68
+ When LinkedIn Audience Network is enabled, ads run on partner sites.
69
+ Supported sizes for network: 300×250, 728×90, 160×600, 300×600.
70
+ These are not generation targets; LinkedIn resizes from your primary assets.
71
+
72
+ ---
73
+
74
+ ## B2B Tone Constraints
75
+
76
+ LinkedIn is a professional context. Apply these constraints to every generation prompt:
77
+
78
+ **Always include:**
79
+ - `"professional photography"` or `"B2B professional context"`
80
+ - `"clean, uncluttered background"`
81
+ - `"business-appropriate attire if people present"`
82
+ - `"high quality, corporate-grade visual"`
83
+
84
+ **Avoid in prompts:**
85
+ - `"casual"`, `"fun"`, `"playful"` (unless brand voice explicitly requires it)
86
+ - Lifestyle photography in non-work contexts
87
+ - Overly saturated or high-contrast styles (looks out of place in LinkedIn feed)
88
+ - Celebrity or influencer aesthetic
89
+
90
+ **Target audience contexts (use one per generation):**
91
+ - Person in office setting, focused on screen/work
92
+ - Abstract product/service visualization (SaaS dashboards, data viz)
93
+ - Clean product shot on neutral background
94
+ - Team collaboration scene (diverse, professional)
95
+
96
+ ---
97
+
98
+ ## Lead Gen Form Integration
99
+
100
+ LinkedIn Lead Gen Forms auto-populate from member profiles. When generating creative
101
+ that promotes lead gen forms:
102
+ - Image should visually represent the offer (e.g., whitepaper cover, webinar slide)
103
+ - For document/guide offers: generate a stylized cover image at 1200×628
104
+ - Avoid "download now" styled images (LinkedIn discourages heavy promotional aesthetics)
105
+
106
+ ---
107
+
108
+ ## Aspect Ratio Priority
109
+
110
+ When generating a single image for LinkedIn (time-constrained):
111
+ 1. `1080×1080` (1:1); covers Feed (best engagement)
112
+ 2. `1200×628` (1.91:1); covers legacy + desktop placements
113
+
114
+ Always generate both for full coverage.
115
+
116
+ ---
117
+
118
+ ## Image Generation Prompt Modifiers
119
+
120
+ **For Feed (1:1):**
121
+ - `"square composition, subject centered"`
122
+ - `"professional B2B photography style"`
123
+ - `"clean neutral background"`
124
+ - `"no lifestyle elements, business context"`
125
+
126
+ **For Landscape (1.91:1):**
127
+ - `"horizontal composition"`
128
+ - `"wide framing with subject left or center"`
129
+ - `"ample negative space on right for text overlay area"`
@@ -0,0 +1,125 @@
1
+ # MCP Integration Guide
2
+
3
+ <!-- Updated: 2026-05-14 | v1.6: added Google's official MCP server + TikTok/LinkedIn/Meta community MCPs -->
4
+ <!-- Purpose: How to pair claude-ads with live ad platform MCP servers -->
5
+
6
+ ## Overview
7
+
8
+ claude-ads works with manually provided data by default (exports, screenshots, pasted metrics). For live API access, pair it with MCP servers that connect Claude Code directly to ad platform APIs.
9
+
10
+ ## Available MCP Servers
11
+
12
+ ### Google Ads — Server Options (2026)
13
+
14
+ Three viable options exist as of 2026:
15
+
16
+ 1. **Google's Official MCP Server** (released early 2026): Free, self-hosted, designed with Gemini in mind. Supports Google Ads API v21, OAuth 2.0, 40+ automation tools (`list_accessible_customers`, GAQL `search`, etc.). Read-only in current release.
17
+ 2. **cohnen/mcp-google-ads** (community): 29 GAQL-based tools, friendlier developer experience than Google's official. Read-only.
18
+ 3. **Ryze AI MCP** (commercial, hosted): Adds safe write access, multi-account, OAuth-managed. Best for teams that want write operations.
19
+
20
+ ### Google Ads: cohnen/mcp-google-ads (community)
21
+
22
+ **Repo:** https://github.com/cohnen/mcp-google-ads
23
+ **Tools:** 29 GAQL-based tools (read-only)
24
+
25
+ **Setup:**
26
+ 1. Install: `pip install mcp-google-ads` (or clone repo)
27
+ 2. Configure Google Ads API credentials (OAuth2 or service account)
28
+ 3. Add to `.mcp.json`:
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "google-ads": {
33
+ "command": "python",
34
+ "args": ["-m", "mcp_google_ads"],
35
+ "env": {
36
+ "GOOGLE_ADS_DEVELOPER_TOKEN": "your-token",
37
+ "GOOGLE_ADS_CLIENT_ID": "your-client-id",
38
+ "GOOGLE_ADS_CLIENT_SECRET": "your-client-secret",
39
+ "GOOGLE_ADS_REFRESH_TOKEN": "your-refresh-token",
40
+ "GOOGLE_ADS_LOGIN_CUSTOMER_ID": "your-mcc-id"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ **What becomes automated:**
48
+ - Search term data for G13, G16, G17, G18, G19 (wasted spend checks)
49
+ - Quality Score data for G20-G25
50
+ - Campaign structure for G01-G12
51
+ - Conversion tracking status for G42-G49
52
+ - PMax asset group data for G31-G34, G-PM1 through G-PM6
53
+ - Budget and bidding data for G36-G41
54
+
55
+ **What stays manual:**
56
+ - Landing page analysis (G59-G61): use `analyze_landing.py`
57
+ - Creative quality assessment (subjective)
58
+ - Consent Mode V2 verification (requires GTM/tag audit)
59
+
60
+ ### Meta Ads: Adspirer MCP
61
+
62
+ **Docs:** https://www.adspirer.com/blog/connect-claude-meta-ads
63
+ **Type:** Commercial MCP server
64
+
65
+ **Setup:**
66
+ 1. Sign up at adspirer.com
67
+ 2. Connect Meta Business Manager account
68
+ 3. Add MCP server config per their docs
69
+
70
+ **What becomes automated:**
71
+ - Campaign performance data for M11-M18 (structure)
72
+ - Creative metrics for M25-M32 (fatigue detection)
73
+ - Audience overlap for M19 (overlap check)
74
+ - EMQ scores for M04 (requires Events Manager access)
75
+
76
+ **Alternative: Direct Meta API:**
77
+ Use the included `scripts/fetch_meta_ads.py` with Meta Marketing API credentials for a free, self-hosted option.
78
+
79
+ ### LinkedIn Ads: Multiple Options
80
+
81
+ **GrowthSpree MCP:** https://www.growthspreeofficial.com/blogs/connect-linkedin-ads-to-claude-mcp
82
+ **Adzviser MCP:** https://adzviser.com/mcp/linkedin-ads
83
+
84
+ Both provide campaign data access for LinkedIn Ads analysis. Setup follows standard MCP patterns.
85
+
86
+ ### TikTok Ads
87
+
88
+ Community MCPs now available as of mid-2026:
89
+ - `ysntony/tiktok-ads-mcp`: read-only access for TikTok Ads
90
+ - Pipeboard (commercial): TikTok Ads MCP alongside Meta and Google
91
+ - Loomstack MCP Gateway: includes TikTok Ads access in unified gateway
92
+
93
+ Manual fallback: TikTok Ads Manager exports (CSV) or TikTok Business API custom integration.
94
+
95
+ ### Microsoft Ads
96
+
97
+ No dedicated MCP server available as of April 2026. Use:
98
+ - Microsoft Ads Editor exports
99
+ - Google Ads import data (if mirrored)
100
+ - Microsoft Advertising API (custom integration)
101
+
102
+ ### Apple Ads
103
+
104
+ No dedicated MCP server available as of April 2026. Use:
105
+ - Apple Ads dashboard exports
106
+ - Apple Ads API (custom integration)
107
+
108
+ ## Hybrid Workflow
109
+
110
+ The recommended approach combines MCP live data with claude-ads structured analysis:
111
+
112
+ ```
113
+ 1. Connect MCP server(s) for available platforms
114
+ 2. Run /ads audit (claude-ads auto-detects MCP data sources)
115
+ 3. For platforms without MCP, provide exports manually
116
+ 4. claude-ads merges all data into unified audit
117
+ 5. Health Score calculated across all platforms regardless of data source
118
+ ```
119
+
120
+ ## Security Notes
121
+
122
+ - MCP servers run locally; no data leaves your machine (except API calls to ad platforms)
123
+ - Credentials stored in `.mcp.json` or environment variables
124
+ - Read-only access recommended for audit purposes
125
+ - For write operations (campaign changes), see the CEP safety protocol discussion in the itallstartedwithaidea/google-ads-skills repo
@@ -0,0 +1,141 @@
1
+ # Meta Ads Audit Checklist
2
+
3
+ <!-- Updated: 2026-05-14 | v1.6: Threads GA confirmed, EMQ tier guidance refined -->
4
+ <!-- Sources: Google Research PDF 1 (M01-M40), Claude Research (42-item extended), Gemini Research, 2026 Verification Pass -->
5
+ <!-- Total Checks: 50 | Categories: 5 | See scoring-system.md for weights and algorithm -->
6
+
7
+ ## Quick Reference
8
+
9
+ | Category | Weight | Check Count |
10
+ |----------|--------|-------------|
11
+ | Pixel / CAPI Health | 30% | M01-M10 (10 checks) |
12
+ | Creative (Diversity & Fatigue) | 30% | M25-M32 (8 checks) + M-CR1 through M-CR4 (4 extended) |
13
+ | Account Structure | 20% | M11-M18 + M33-M40 (16 checks) + M-ST1, M-ST2 (2 extended) |
14
+ | Audience & Targeting | 20% | M19-M24 (6 checks) |
15
+
16
+ ---
17
+
18
+ ## Pixel / CAPI Health (30% weight)
19
+
20
+ | ID | Check | Severity | Pass | Warning | Fail |
21
+ |----|-------|----------|------|---------|------|
22
+ | M01 | Meta Pixel installed | Critical | Pixel firing on all pages | Firing on most pages (>90%) | Pixel not firing |
23
+ | M02 | Conversions API (CAPI) active | Critical | Server-side events sending alongside pixel. Note: Offline Conversions API permanently discontinued May 2025. All offline tracking now uses CAPI with action_source="physical_store". Flag any accounts still configured for Offline Conversions API as FAIL | CAPI planned but not deployed | No CAPI (30-40% data loss post-iOS 14.5) OR still configured for discontinued Offline Conversions API |
24
+ | M03 | Event deduplication | Critical | event_id matching between pixel and CAPI events; ≥90% dedup rate | event_id present but <90% dedup rate | Missing event_id (double-counting) |
25
+ | M04 | Event Match Quality (EMQ) | Critical | Tiered EMQ targets: Purchase ≥8.5, AddToCart ≥6.5, PageView ≥5.5. Case study: EMQ 8.6→9.3 = CPA -18%, match rate +24%, ROAS +22% | EMQ 6.0-7.9 (Purchase) | EMQ <6.0 (Purchase) |
26
+ | M05 | Domain verification | High | Business domain verified in Business Manager | N/A | Domain not verified |
27
+ | M06 | Aggregated Event Measurement (AEM) | High | Top 8 events configured and prioritized correctly | Events configured but not prioritized | AEM not configured |
28
+ | M07 | Standard events vs custom | High | Using standard events (Purchase, AddToCart, Lead, etc.) | Mix of standard and custom | Custom events replacing standard events |
29
+ | M08 | CAPI Gateway | Medium | CAPI Gateway deployed for simplified server-side | Direct CAPI integration active | N/A |
30
+ | M09 | iOS attribution window | High | 7-day click / 1-day view configured | 1-day click only | Attribution not configured |
31
+ | M10 | Data freshness | Medium | Events firing in real-time (no >1hr lag in Events Manager) | <4hr lag | >4hr lag or intermittent firing |
32
+
33
+ ---
34
+
35
+ ## Creative: Diversity & Fatigue (30% weight)
36
+
37
+ | ID | Check | Severity | Pass | Warning | Fail |
38
+ |----|-------|----------|------|---------|------|
39
+ | M25 | Creative format diversity | Critical | ≥3 formats active (static image, video, carousel) | 2 formats | Only 1 format used |
40
+ | M26 | Creative volume per ad set | High | ≥10 creatives for Advantage+ Sales campaigns, ≥5 for standard. Research: 25 diverse creatives = 17% more conversions at 16% lower cost | 3-4 creatives | <3 creatives per ad set |
41
+ | M27 | Video aspect ratios | High | 9:16 vertical video present for Reels/Stories | Only 1:1 or 4:5 video | No video assets |
42
+ | M28 | Creative fatigue detection | Critical | No creatives with CTR drop >20% over 14 days while active. Andromeda compressed lifespan to 2-4 weeks (was 6-8). Creative Similarity Score: ads >60% similar get retrieval suppression by Andromeda | CTR drop 10-20% | CTR drop >20% + frequency >3 (fatigue confirmed) |
43
+ | M29 | Hook rate (video) | High | Video ads: <50% skip rate in first 3 seconds | 50-70% skip rate | >70% skip rate in first 3s |
44
+ | M30 | Social proof utilization | Medium | Top organic posts boosted as partnership/Spark ads | Some organic boosting | No organic content leveraged |
45
+ | M31 | UGC / social-native content | High | ≥30% of creative assets are UGC or social-native | 10-30% UGC content | <10% UGC (all polished/corporate) |
46
+ | M32 | Advantage+ Creative | Medium | Advantage+ enhancements enabled (test vs control) | N/A | Not tested |
47
+ | M-CR1 | Creative freshness | High | New creative tested within last 14-21 days (tightened from 30d due to Andromeda acceleration) | New creative 21-45 days ago | No new creative in >45 days |
48
+ | M-CR2 | Frequency: Prospecting (ad set) | High | Ad set frequency <3.0 in last 7 days | Frequency 3.0-5.0 | Frequency >5.0 (audience exhausted) |
49
+ | M-CR3 | Frequency: Retargeting | Medium | Ad set frequency <8.0 in last 7 days | Frequency 8.0-12.0 | Frequency >12.0 |
50
+ | M-CR4 | CTR benchmark | High | CTR ≥1.0% | CTR 0.5-1.0% | CTR <0.5% |
51
+
52
+ ---
53
+
54
+ ## Account Structure (20% weight)
55
+
56
+ | ID | Check | Severity | Pass | Warning | Fail |
57
+ |----|-------|----------|------|---------|------|
58
+ | M11 | Campaign count | High | 1-3 campaigns total recommended. Jon Loomer: "One campaign per goal. Rarely need multiple ad sets for targeting" | 4-5 campaigns | >5 campaigns (over-fragmented) |
59
+ | M12 | CBO vs ABO appropriateness | High | CBO for >$500/day; ABO for testing <$100/day | Mismatched but functional | CBO on <$100/day OR ABO on >$500/day |
60
+ | M13 | Learning phase status | Critical | <30% of ad sets in "Learning Limited" | 30-50% Learning Limited | >50% ad sets "Learning Limited" |
61
+ | M14 | Learning phase resets | High | No unnecessary edits during learning phase | 1-2 minor resets | Frequent resets from edits during learning |
62
+ | M15 | Advantage+ Sales campaign | Medium | Advantage+ Sales (renamed from ASC early 2025) active for e-commerce with catalog. Existing customer budget cap eliminated Feb 2025. Research: 22% higher ROAS, 11.7% CPA improvement | Advantage+ Sales tested but paused | Not tested despite eligible catalog |
63
+ | M16 | Ad set consolidation | High | No overlapping ad sets targeting same audience | Minor overlap (<20%) | Significant audience overlap (>30%) |
64
+ | M17 | Budget distribution | High | All ad sets getting ≥$10/day | Some ad sets $5-$10/day | Ad sets getting <$5/day |
65
+ | M18 | Campaign objective alignment | High | Objective matches actual business goal | N/A | Objective mismatched (e.g., Traffic for Sales) |
66
+ | M33 | Advantage+ Placements | Medium | Advantage+ Placements enabled (unless exclusion needed) | Manual placements (justified) | Manual placements limiting delivery without reason |
67
+ | M34 | Placement performance review | Medium | Breakdown reviewed monthly; underperformers excluded | Reviewed quarterly | Never reviewed |
68
+ | M35 | Attribution setting | High | Attribution windows verified post-Jan 2026 changes (7-day and 28-day view-through windows REMOVED January 2026). 7-day click / 1-day view configured where available | 1-day click only | Attribution not configured or still expecting removed view-through windows |
69
+ | M36 | Bid strategy appropriateness | High | Cost Cap for margin protection; Lowest Cost for volume | N/A | Bid Cap set below historical CPA |
70
+ | M37 | Frequency cap monitoring (campaign) | High | Campaign-level prospecting frequency <4.0 (7-day) | Frequency 4.0-6.0 | Frequency >6.0 |
71
+ | M38 | Breakdown reporting | Medium | Age, gender, placement, platform reviewed monthly | Reviewed quarterly | Never reviewed |
72
+ | M39 | UTM parameters | Medium | UTM parameters on all ad URLs for GA4 attribution | UTMs on some ads | No UTM parameters |
73
+ | M40 | A/B testing active | Medium | At least 1 active A/B test (Experiments) | Test planned | No testing infrastructure |
74
+ | M-ST1 | Budget adequacy | High | Daily budget ≥5× target CPA per ad set | Budget 2-5× CPA | Budget <2× target CPA |
75
+ | M-ST2 | Budget utilization | Medium | >80% of daily budget being utilized | 60-80% utilization | <60% utilization |
76
+
77
+ ---
78
+
79
+ ## Audience & Targeting (20% weight)
80
+
81
+ | ID | Check | Severity | Pass | Warning | Fail |
82
+ |----|-------|----------|------|---------|------|
83
+ | M19 | Audience overlap | High | <20% overlap between active ad sets | 20-40% overlap | >40% overlap between ad sets |
84
+ | M20 | Custom Audience freshness | High | Website Custom Audiences refreshed within 180 days | 180-365 days old | >365 days old or not created |
85
+ | M21 | Lookalike source quality | Medium | Lookalike source ≥1,000 users from high-value events | 500-1,000 users | <500 users or low-value source |
86
+ | M22 | Advantage+ Audience testing | Medium | Advantage+ Audience tested vs manual | N/A | Not tested |
87
+ | M23 | Exclusion audiences | High | Purchasers/converters excluded from prospecting | Partial exclusions | No purchaser exclusions from prospecting |
88
+ | M24 | First-party data utilization | High | Customer list uploaded for Custom Audience + Lookalike | List uploaded but not refreshed | No first-party data uploaded |
89
+
90
+ ---
91
+
92
+ ## Andromeda & Platform Changes (v1.5)
93
+
94
+ | ID | Check | Severity | Pass | Warning | Fail |
95
+ |----|-------|----------|------|---------|------|
96
+ | M-AN1 | Andromeda creative diversity | Critical | Ads genuinely diverse across creative concepts, messaging motivators, visual styles. Creative Similarity Score <60% across ad set. Different motivators unlock new audiences 89% of the time | Some diversity but similar visual templates or minor copy variations | All ads are minor variations (Andromeda clusters similar ads with Entity IDs; 100 minor variations = no better than 10) |
97
+ | M-AT1 | Attribution window post-Jan 2026 | High | Attribution windows verified and aligned with business model after Jan 2026 removal of 7-day/28-day view-through options | Using default settings without review | Attribution settings not configured or still expecting removed windows |
98
+ | M-IA1 | Incremental Attribution testing | Medium | Meta Incremental Attribution (launched April 2025) evaluated or active for measuring real causal impact via AI-powered holdout testing | N/A | Not evaluated despite sufficient budget (>$5K/month) |
99
+ | M-TH1 | Threads placement evaluation | Low | Threads placement reviewed. Timeline: limited test Jan 2025 (US/Japan) → global access April 2025 → expanded formats Oct 2025 (Advantage+ catalog, carousel) → fully GA Jan-Feb 2026 worldwide. Observed CPMs $2-$8 (40-60% lower than Instagram feed). Default placement in Advantage+ and Manual Placements. Worth testing for incremental reach | N/A | Not evaluated |
100
+
101
+ ---
102
+
103
+ ## Context Notes
104
+
105
+ - **Detailed targeting exclusions removal (2025-2026)**: Meta phased out detailed targeting exclusions starting March 2025, with full removal by January 2026. Advertisers must now use Custom Audience exclusions or Advantage+ Audience instead.
106
+ - **Flexible Ads (2024)**: Format launched mid-2024 that automatically optimizes creative elements (headline, image, video) per placement. Evaluate adoption alongside Advantage+ Creative enhancements.
107
+ - **Financial Products Special Ad Category (Jan 2025)**: Financial products (loans, insurance, credit cards, investment services) are now enforced as a Special Ad Category with the same targeting restrictions as Housing/Employment/Credit.
108
+ - **Andromeda (Oct 2025)**: Meta's AI retrieval engine filters tens of millions of ads down to ~1,000 candidates using 10,000x more complex models. Creative diversity is now the #1 performance lever.
109
+ - **Offline Conversions API (May 2025)**: Permanently discontinued. Use CAPI with action_source="physical_store" for offline tracking.
110
+ - **Link clicks redefinition (Feb 2025)**: Meta redefined "link clicks" to exclude social engagement clicks. Accounts comparing pre/post Feb 2025 data may see apparent CTR drops. This is a metric change, not a performance decline.
111
+ - **Meta Shops checkout (June-August 2025)**: Native checkout phased out, redirects to website.
112
+ - **Advantage+ Sales**: Renamed from ASC early 2025. Customer budget cap eliminated Feb 2025.
113
+
114
+ ---
115
+
116
+ ## Quick Wins (Meta)
117
+
118
+ | Check | Fix | Time |
119
+ |-------|-----|------|
120
+ | M02: CAPI setup | Deploy via CAPI Gateway (simplified) or direct integration | 15 min (Gateway) |
121
+ | M05: Domain verification | Verify domain in Business Manager | 5 min |
122
+ | M09: Attribution window | Set to 7-day click / 1-day view in ad set settings | 2 min |
123
+ | M23: Exclusion audiences | Create Custom Audience of purchasers, exclude from prospecting | 10 min |
124
+ | M25: Format diversity | Add video or carousel to single-image-only ad sets | 15 min |
125
+ | M39: UTM parameters | Add UTM template at campaign level | 5 min |
126
+ | M35: Attribution setting | Switch from 1-day click to 7-day click / 1-day view | 2 min |
127
+
128
+ ---
129
+
130
+ ## Special Ad Categories Compliance
131
+
132
+ If running ads in restricted categories, these ADDITIONAL checks apply:
133
+
134
+ | Category | Requirement | Enforcement |
135
+ |----------|-------------|-------------|
136
+ | Housing | No ZIP code targeting, age 18-65+ only, no Lookalike | Campaign disapproval |
137
+ | Employment | Same as Housing | Campaign disapproval |
138
+ | Credit | Same as Housing | Campaign disapproval |
139
+ | Financial Products | New Jan 2025: enforced as Special Category | Campaign disapproval |
140
+
141
+ Must declare Special Ad Category BEFORE campaign creation. See `compliance.md` for full details.
@@ -0,0 +1,134 @@
1
+ # Meta Creative Specs: Generation Guide
2
+
3
+ <!-- Updated: 2026-03-12 -->
4
+ <!-- Source: platform-specs.md + Meta Ads Manager requirements -->
5
+ <!-- Used by: ads-generate, visual-designer agent -->
6
+
7
+ ## Purpose
8
+
9
+ Generation-ready specifications for Meta (Facebook + Instagram) ad creative. Includes
10
+ safe zone diagrams, copy limits, and prompt modifiers for each placement type.
11
+
12
+ ---
13
+
14
+ ## Image Specs by Placement
15
+
16
+ | Placement | Ratio | Dimensions | Priority |
17
+ |-----------|-------|-----------|----------|
18
+ | Feed (preferred) | 4:5 | 1080×1350 | **Primary target** |
19
+ | Feed (square) | 1:1 | 1080×1080 | High |
20
+ | Stories | 9:16 | 1080×1920 | High |
21
+ | Reels | 9:16 | 1080×1920 | High |
22
+ | Right Column | 1:1 | 1080×1080 | Low |
23
+ | Max file size: 30MB. Min width: 600px (1080px recommended).
24
+
25
+ **Primary generation target: 1080×1350 (4:5)**
26
+ This ratio performs best in Feed and covers Instagram Feed.
27
+ Always generate this first. Generate 9:16 for Stories/Reels campaigns.
28
+
29
+ ---
30
+
31
+ ## Safe Zones: Reels and Stories (1080×1920)
32
+
33
+ ```
34
+ ┌─────────────────────────────────┐ ← Top (Y:0)
35
+ │ STATUS BAR │ ← Y:0-120 (avoid)
36
+ │ │
37
+ │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │ ← SAFE START Y:120
38
+ │ ▓ ▓ │
39
+ │ ▓ SAFE CONTENT ZONE ▓ │
40
+ │ ▓ 1080×1300px ▓ │
41
+ │ ▓ (center of frame) ▓ │
42
+ │ ▓ ▓ │
43
+ │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │ ← SAFE END Y:1420
44
+ │ │
45
+ │ CTA BUTTON / CAPTION AREA │ ← Y:1420-1920 (avoid)
46
+ │ REACTIONS / PROFILE INFO │
47
+ └─────────────────────────────────┘ ← Bottom (Y:1920)
48
+ ```
49
+
50
+ **Bottom 35% (~670px) is UI overlay.** Keep all critical text, faces, and product
51
+ in the center 1080×1300px zone.
52
+
53
+ **Generation instruction for 9:16 prompts:**
54
+ - Subject and key visual elements in top 60% of frame
55
+ - Bottom 450px should be background only (solid color or soft gradient)
56
+ - Vertical composition only; horizontal crops are rejected at upload
57
+
58
+ ---
59
+
60
+ ## Safe Zone: Feed (1080×1350, 4:5)
61
+
62
+ No hard safe zone required. The full frame is visible. However:
63
+ - Bottom 120px may be covered by the like/comment bar on mobile
64
+ - Keep primary subject in upper 80% of frame
65
+
66
+ ---
67
+
68
+ ## Copy Limits
69
+
70
+ | Component | Recommended | Platform Max |
71
+ |-----------|------------|-------------|
72
+ | Primary Text | 40-125 chars | 2,200 |
73
+ | Headline | 27-40 chars | N/A |
74
+ | Description | 20 chars (carousel) | N/A |
75
+ | Reels Primary Text | 72 chars max visible | N/A |
76
+ | CTA Button | Predefined list | N/A |
77
+
78
+ **Copy generation rule:** Write primary text ≤125 chars. Anything over 125 chars
79
+ gets truncated with "See More" on mobile; the critical message must land in 125.
80
+
81
+ ---
82
+
83
+ ## Carousel Specs
84
+
85
+ - 2-10 cards per carousel
86
+ - All cards: 1:1 (1080×1080)
87
+ - Per card: Headline ≤40 chars, Description ≤20 chars
88
+ - Generate each card as a separate image prompt
89
+ - Maintain consistent visual style across all cards (same background, same lighting)
90
+
91
+ ---
92
+
93
+ ## Advantage+ Creative
94
+
95
+ When Advantage+ Creative enhancements are enabled, Meta may:
96
+ - Crop the image to different aspect ratios
97
+ - Adjust brightness/contrast
98
+ - Add music to static images
99
+ - Generate text variations from your primary text
100
+
101
+ **Implication for generation:** Generate a "base" image that looks good at both
102
+ 1:1 and 4:5 ratios. Avoid placing critical elements near edges.
103
+
104
+ ---
105
+
106
+ ## Video Specs (for storyboard reference)
107
+
108
+ | Placement | Ratio | Resolution | Duration |
109
+ |-----------|-------|-----------|----------|
110
+ | Feed | 4:5 | 1080×1350 | Up to 241 min |
111
+ | Reels | 9:16 | 1080×1920 | ≤90s (rec 15-30s) |
112
+ | Stories | 9:16 | 1080×1920 | ≤120s |
113
+ | In-Stream | 16:9 | 1920×1080 | ≤15 min |
114
+
115
+ ---
116
+
117
+ ## Image Generation Prompt Modifiers
118
+
119
+ **For Feed (4:5 and 1:1):**
120
+ - `"vertical composition"` or `"square composition"`
121
+ - `"subject fills upper portion of frame"`
122
+ - `"clean, scroll-stopping visual"`
123
+ - `"no text overlay"` (text added via ad copy fields)
124
+
125
+ **For Stories/Reels (9:16):**
126
+ - `"vertical composition, subject in top 60% of frame"`
127
+ - `"bottom third is clear background or soft gradient"`
128
+ - `"bold, high-contrast visual"`
129
+ - `"mobile-first, designed for small screen viewing"`
130
+
131
+ **Always avoid:**
132
+ - Cluttered backgrounds (compete with feed content)
133
+ - Low contrast (thumb-stop requires visual pop)
134
+ - Faces cropped at edges (Instagram crops aggressively on some placements)