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,246 @@
1
+ # Conversion Tracking Setup & Requirements
2
+
3
+ <!-- Updated: 2026-05-14 | v1.6 -->
4
+ <!-- Sources: Google Research PDF 2, Claude Research, Gemini Research, 2026 Verification Pass -->
5
+
6
+ ## Google Ads Conversion Tracking
7
+
8
+ ### Required Stack
9
+ ```
10
+ 1. Global Site Tag (gtag.js) → all pages
11
+ 2. Enhanced Conversions → hashed first-party data (email, phone, address, name)
12
+ 3. Consent Mode v2 → MANDATORY for EU/EEA since March 2024
13
+ 4. Server-Side GTM → recommended for data durability
14
+ 5. Offline Conversion Import → for lead gen (CRM → Google Ads)
15
+ ```
16
+
17
+ ### Enhanced Conversions
18
+ - Sends SHA-256 hashed first-party data
19
+ - Improves measurement by ~10% more measured conversions
20
+ - Required for smart bidding accuracy in cookie-degraded environments
21
+ - Setup via gtag.js or Google Tag Manager
22
+ - Works alongside standard conversion tracking
23
+
24
+ ### Consent Mode v2
25
+ ```javascript
26
+ // Default (before consent)
27
+ gtag('consent', 'default', {
28
+ 'ad_storage': 'denied',
29
+ 'ad_user_data': 'denied',
30
+ 'ad_personalization': 'denied',
31
+ 'analytics_storage': 'denied'
32
+ });
33
+
34
+ // After user grants consent
35
+ gtag('consent', 'update', {
36
+ 'ad_storage': 'granted',
37
+ 'ad_user_data': 'granted',
38
+ 'ad_personalization': 'granted',
39
+ 'analytics_storage': 'granted'
40
+ });
41
+ ```
42
+ - Consent Mode V2 enforcement began July 21, 2025 for EEA/UK. Requires 700+ ad clicks/day over 7 days per country/domain for behavioral modeling to activate. Advanced mode mandatory (Basic = huge data loss). Combined with Enhanced Conversions + server-side tagging, recovers 30-50% of lost conversions.
43
+ - Enables conversion modeling for unconsented users
44
+ - Advanced mode recovers 30-50% of lost conversions
45
+ - Without implementation: 90-95% metric drops (enforcement tightened July 2025)
46
+ - ~31% of users accept tracking cookies globally
47
+
48
+ ### Attribution
49
+ - **DDA (Data-Driven Attribution) is now MANDATORY default** (September 2025)
50
+ - Only two models remain: DDA and Last Click
51
+ - All rule-based models deprecated (first-click, linear, time decay, position-based)
52
+ - No minimum data threshold for DDA
53
+ - Windows: Click 1/3/7/30(default)/60/90 days; Engaged-view 3d; View-through 1d
54
+
55
+ ### Customer Match
56
+ - Requires 90 days of account history and $50,000+ lifetime spend for full access
57
+ - Maximum membership duration: 540 days (changed April 7, 2025; previously infinite)
58
+ - Use for RLSA, similar audiences, and Customer Match lists
59
+ - First-party data source: CRM emails, phone numbers, addresses
60
+
61
+ ### Conversion Setup Rules
62
+ - Use Google Ads native tracking as PRIMARY for bidding (real-time data)
63
+ - Import GA4 conversions for observation only
64
+ - Never count both (double-counting)
65
+ - Separate micro (AddToCart, TimeOnSite) from macro (Purchase, Lead) conversions
66
+ - Only macro conversions as "Primary" for bidding optimization
67
+
68
+ ### Duplicate Detection Accuracy
69
+ - Only check **ENABLED** conversion actions for duplicates; exclude HIDDEN and REMOVED actions (they cannot cause double-counting)
70
+ - Exclude Smart Campaign system-managed conversions (e.g., 'Smart campaign map clicks to call') from DDA and counting-type checks; their attribution model and counting type are locked by Google and cannot be changed by advertisers
71
+
72
+ ---
73
+
74
+ ## Meta Ads Conversion Tracking
75
+
76
+ ### Required Stack
77
+ ```
78
+ 1. Meta Pixel → base code on all pages + standard events
79
+ 2. Conversions API (CAPI) → server-side event forwarding
80
+ 3. Event Deduplication → event_id matching between Pixel and CAPI
81
+ 4. EMQ Optimization → pass email, phone, fbp, fbc, external_id
82
+ ```
83
+
84
+ ### Event Match Quality (EMQ) Scoring
85
+ | Score | Rating | Action |
86
+ |-------|--------|--------|
87
+ | <4.0 | Critical | Severe data loss; urgent fix needed |
88
+ | 4.0-5.9 | Warning | Significant signal gaps |
89
+ | 6.0-7.9 | Acceptable | Some optimization possible |
90
+ | 8.0-10.0 | Excellent | Maximum signal strength |
91
+
92
+ **Key parameters by impact:**
93
+ - Email: +4.0 points
94
+ - Phone: +3.0 points
95
+ - External ID: significant
96
+ - fbp (browser ID): important
97
+ - fbc (click ID): important
98
+
99
+ **87% of advertisers have poor EMQ**; fixing it improves performance 20-40%.
100
+
101
+ **Tiered EMQ Targets by Event:**
102
+ - Purchase: 8.5+
103
+ - AddToCart: 6.5+
104
+ - PageView: 5.5+
105
+
106
+ ### Event Deduplication
107
+ ```
108
+ Same event_id + same event_name = deduplicated (correct)
109
+ Missing event_id = potential double-counting (broken)
110
+
111
+ Check: Events Manager > Overview > Deduplication Rate
112
+ Target: 90%+ deduplication rate
113
+ ```
114
+
115
+ ### CAPI Performance Impact
116
+ - Without CAPI: 30-40% data loss post-iOS 14.5 (pixel-only tracking is critically insufficient)
117
+ - With CAPI: 15-20% performance increase over pixel-only
118
+ - Bypasses ad blockers and iOS ATT limitations
119
+ - 87% of advertisers have poor Event Match Quality; fixing CAPI improves performance 20-40%
120
+ - Offline Conversions API permanently discontinued May 2025. All offline tracking now uses CAPI with action_source='physical_store'.
121
+
122
+ ### Standard Events (Use These, Not Custom)
123
+ ```
124
+ Purchase, AddToCart, InitiateCheckout, AddPaymentInfo,
125
+ Lead, CompleteRegistration, Subscribe, ViewContent,
126
+ Search, AddToWishlist, Contact, CustomizeProduct,
127
+ FindLocation, Schedule, StartTrial, SubmitApplication
128
+ ```
129
+
130
+ ### Attribution
131
+ - 7-day click / 1-day view (default and recommended)
132
+ - Top 8 events configured in AEM (Aggregated Event Measurement)
133
+ - Domain verification required in Business Manager
134
+ - Financial Products & Services = new Special Ad Category (Jan 2025)
135
+
136
+ ---
137
+
138
+ ## TikTok Ads Conversion Tracking
139
+
140
+ ### Required Stack
141
+ ```
142
+ 1. TikTok Pixel → base code + standard events on all pages
143
+ 2. Events API → server-side event forwarding
144
+ 3. ttclid Passback → capture from URL params, send with events
145
+ 4. Advanced Matching → hashed email/phone
146
+ ```
147
+
148
+ ### Key Difference: ttclid
149
+ - TikTok Click ID (ttclid) comes in landing page URL parameters
150
+ - MUST be captured and stored on first page load
151
+ - MUST be sent back with all conversion events
152
+ - Without ttclid: attribution breaks for many conversions
153
+
154
+ ### Learning Phase
155
+ - ~50 conversions in 7 days to exit learning
156
+ - Budget ≥50× target CPA per ad group (provides sufficient learning room)
157
+
158
+ ---
159
+
160
+ ## LinkedIn Ads Conversion Tracking
161
+
162
+ ### Required Stack
163
+ ```
164
+ 1. LinkedIn Insight Tag → all pages
165
+ 2. Conversions API (CAPI) → server-side events (launched 2025)
166
+ 3. Offline Conversion Import → CRM data (opportunity, deal closed)
167
+ ```
168
+
169
+ ### Best Practice: Track Full Funnel
170
+ ```
171
+ Stage 1: Lead (form submit, content download)
172
+ Stage 2: MQL (marketing qualified)
173
+ Stage 3: SQL (sales qualified)
174
+ Stage 4: Opportunity Created
175
+ Stage 5: Deal Closed-Won
176
+ ```
177
+ - Import offline conversions within 90 days of click
178
+ - Use for lead quality optimization (bid for SQLs not just leads)
179
+ - Lead Gen Forms: 13% CVR (3.25× landing pages) but lower SQL rates
180
+
181
+ ### Attribution
182
+ - 30-day click / 7-day view window
183
+ - Last touch model default
184
+
185
+ ---
186
+
187
+ ## Microsoft Ads Conversion Tracking
188
+
189
+ ### Required Stack
190
+ ```
191
+ 1. UET (Universal Event Tracking) tag → all pages
192
+ 2. Enhanced Conversions → improved matching
193
+ 3. Offline Conversion Import → CRM integration
194
+ 4. Auto-tagging (MSCLKID) → ensure CMS doesn't strip
195
+ ```
196
+
197
+ ### Consent Mode
198
+ - Consent Mode deadline May 5, 2025 for EEA/UK/Switzerland
199
+
200
+ ### Import Validation
201
+ - If importing from Google: verify conversion goals transferred
202
+ - Google-imported goals often break during import
203
+ - Always validate conversion tracking after import
204
+
205
+ ---
206
+
207
+ ## Apple Ads Conversion Tracking
208
+
209
+ ### AdAttributionKit & Dual Attribution
210
+ - April 10, 2025: Apple Ads registered with AdAttributionKit (SKAN v1-3), creating dual attribution. Installs report through BOTH SKAN/AAK postbacks AND AdServices API. WWDC 2025: configurable attribution windows, overlapping re-engagement windows, country codes in postbacks.
211
+
212
+ ---
213
+
214
+ ## Cross-Platform Tracking Health Audit
215
+
216
+ ### Critical Checks (Run for All Platforms)
217
+
218
+ | Check | Severity | Pass Criteria |
219
+ |-------|----------|---------------|
220
+ | Primary conversion action exists | Critical | ≥1 active conversion per platform |
221
+ | Server-side tracking active | Critical | CAPI/Server GTM/Events API configured |
222
+ | Event deduplication | Critical | event_id matching (Meta), no double-counting |
223
+ | Consent Mode v2 (EU) | Critical | Implemented if serving EU/EEA |
224
+ | Enhanced Conversions / EMQ | High | Google: enabled; Meta: EMQ ≥6.0 |
225
+ | Micro vs macro separation | High | Only macro conversions set as Primary |
226
+ | Attribution model appropriate | Medium | DDA (Google), 7d/1d (Meta) |
227
+ | Conversion window matches cycle | Medium | 7d (ecom), 30-90d (B2B), 30d (lead gen) |
228
+ | Offline conversion import | Medium | Active for lead gen / B2B accounts |
229
+ | First-party data utilization | High | Customer Match / Custom Audiences from CRM |
230
+
231
+ ### Server-Side Tracking Priority
232
+ ```
233
+ IF business_type IN [ecommerce, lead_gen, saas]:
234
+ server_side_tracking = CRITICAL
235
+
236
+ IF platform == "Meta":
237
+ CAPI = CRITICAL (30-40% data loss without post-iOS 14.5)
238
+
239
+ IF region == "EU/EEA":
240
+ consent_mode_v2 = CRITICAL (90-95% metric drops without)
241
+
242
+ server_side_recovery = 10-30% accuracy improvement
243
+ ```
244
+
245
+ ### General Note: Incrementality Measurement
246
+ - Meridian (2025): Google's open-source Marketing Mix Model for incrementality measurement. Useful for advanced accounts evaluating cross-channel contribution.
@@ -0,0 +1,187 @@
1
+ # Ad Copy Frameworks
2
+
3
+ > Updated: 2026-04-01
4
+ > Source: Used by ads-creative, ads-google, ads-meta, and ads-plan skills
5
+
6
+ ## Overview
7
+
8
+ | Framework | Expansion | Best For | Platform Fit |
9
+ |--------------------|----------------------------------|-----------------------|----------------------|
10
+ | AIDA | Attention, Interest, Desire, Action | Cold audiences | Meta, Google, YouTube |
11
+ | PAS | Problem, Agitate, Solution | Pain-point products | Meta, LinkedIn, Google |
12
+ | BAB | Before, After, Bridge | Transformation offers | Meta, TikTok, YouTube |
13
+ | 4P | Promise, Picture, Proof, Push | High-ticket items | LinkedIn, Google |
14
+ | FAB | Features, Advantages, Benefits | Technical products | Google, LinkedIn |
15
+ | Star-Story-Solution| Star, Story, Solution | Brand storytelling | Meta, TikTok, YouTube |
16
+
17
+ ## AIDA
18
+
19
+ **Steps:** Attention > Interest > Desire > Action
20
+
21
+ - **Best for:** Cold audiences, awareness campaigns, product launches
22
+ - **Platform fit:** Meta (feed and stories), Google RSA, YouTube pre-roll
23
+
24
+ **Templates by platform:**
25
+
26
+ - Meta primary text (125 chars): `[Attention hook]. [Interest detail]. [Desire benefit]. [Action CTA].`
27
+ - Meta headline (40 chars): `[Desire phrase] [CTA verb]`
28
+ - Google RSA headline (30 chars): `[Attention hook] [Benefit]`
29
+ - Google RSA description (90 chars): `[Interest detail]. [Desire benefit]. [Action CTA with urgency].`
30
+ - LinkedIn (150 chars): `[Attention stat or question]. [Interest detail]. [Desire outcome]. [Action CTA].`
31
+ - TikTok (100 chars): `[Attention hook] [Interest] [Desire benefit] [CTA]`
32
+
33
+ **E-commerce example:** "Tired of dull skin? Our vitamin C serum brightens in 7 days. Join 50K happy customers. Shop now."
34
+
35
+ **SaaS example:** "Spending hours on reports? Automate analytics in minutes. See 3x faster insights. Start free trial."
36
+
37
+ - DO: Lead with a pattern interrupt; include a specific number or stat
38
+ - DO: End with a single clear CTA
39
+ - DONT: Stack multiple CTAs in one ad
40
+ - DONT: Bury the hook after the first sentence
41
+
42
+ ## PAS
43
+
44
+ **Steps:** Problem > Agitate > Solution
45
+
46
+ - **Best for:** Pain-point products, problem-aware audiences, retargeting
47
+ - **Platform fit:** Meta (feed), LinkedIn (sponsored content), Google RSA
48
+
49
+ **Templates by platform:**
50
+
51
+ - Meta primary text (125 chars): `[Problem statement]. [Agitate consequence]. [Solution with brand].`
52
+ - Meta headline (40 chars): `[Solution phrase] [CTA]`
53
+ - Google RSA headline (30 chars): `[Problem keyword] solved`
54
+ - Google RSA description (90 chars): `[Problem]. [Agitate pain]. [Solution]. [CTA with benefit].`
55
+ - LinkedIn (150 chars): `[Problem in professional context]. [Agitate impact on KPIs]. [Solution with proof]. [CTA].`
56
+ - TikTok (100 chars): `[Problem] [Agitate] [Solution brand] [CTA]`
57
+
58
+ **E-commerce example:** "Back pain from your desk? It only gets worse without support. Our ergonomic chair fixes posture in a week. Order today."
59
+
60
+ **SaaS example:** "Leads falling through the cracks? Every lost follow-up costs revenue. Our CRM auto-sequences every lead. Try free."
61
+
62
+ - DO: Make the agitation specific and relatable
63
+ - DO: Present the solution as the natural relief
64
+ - DONT: Over-dramatize the problem (triggers ad disapprovals)
65
+ - DONT: Use fear-based language that violates platform policies
66
+
67
+ ## BAB
68
+
69
+ **Steps:** Before > After > Bridge
70
+
71
+ - **Best for:** Transformation offers, coaching, fitness, lifestyle products
72
+ - **Platform fit:** Meta (stories and reels), TikTok, YouTube
73
+
74
+ **Templates by platform:**
75
+
76
+ - Meta primary text (125 chars): `[Before state]. [After state]. [Bridge: how product gets you there].`
77
+ - Meta headline (40 chars): `[After state] starts here`
78
+ - Google RSA headline (30 chars): `From [Before] to [After]`
79
+ - Google RSA description (90 chars): `[Before pain]. [After benefit]. [Bridge product name]. [CTA].`
80
+ - LinkedIn (150 chars): `[Before professional challenge]. [After improved metrics]. [Bridge: product as catalyst]. [CTA].`
81
+ - TikTok (100 chars): `[Before] to [After] with [Brand] [CTA]`
82
+
83
+ **E-commerce example:** "Struggling with frizzy hair every morning. Now: salon-smooth in 5 minutes. The silk pillowcase that changed everything."
84
+
85
+ **SaaS example:** "Before: 4 hours building reports. After: dashboards in 10 minutes. Bridge: our AI analytics platform. Start free."
86
+
87
+ - DO: Make before/after contrast vivid and specific
88
+ - DO: Keep the bridge concise (product as the enabler)
89
+ - DONT: Make unrealistic before/after claims
90
+ - DONT: Skip the bridge; the product must connect both states
91
+
92
+ ## 4P
93
+
94
+ **Steps:** Promise > Picture > Proof > Push
95
+
96
+ - **Best for:** High-ticket items, premium services, B2B enterprise
97
+ - **Platform fit:** LinkedIn (InMail and sponsored), Google RSA
98
+
99
+ **Templates by platform:**
100
+
101
+ - Meta primary text (125 chars): `[Promise bold claim]. [Picture outcome]. [Proof stat]. [Push CTA].`
102
+ - Meta headline (40 chars): `[Promise] [Proof number]`
103
+ - Google RSA headline (30 chars): `[Promise] [Proof stat]`
104
+ - Google RSA description (90 chars): `[Promise benefit]. [Picture result]. [Proof: social evidence]. [Push CTA].`
105
+ - LinkedIn (150 chars): `[Promise ROI claim]. [Picture day-in-life improvement]. [Proof: client result]. [Push CTA].`
106
+ - TikTok (100 chars): `[Promise] [Picture] [Proof] [Push CTA]`
107
+
108
+ **E-commerce example:** "Cut energy bills by 40%. Imagine comfortable rooms year-round. 12,000 homes upgraded. Get your free quote."
109
+
110
+ **SaaS example:** "Double pipeline velocity. Picture your team closing 2x deals monthly. Trusted by 500 B2B companies. Book a demo."
111
+
112
+ - DO: Back the promise with verifiable proof
113
+ - DO: Use specific numbers in the proof element
114
+ - DONT: Make promises you cannot substantiate
115
+ - DONT: Use vague proof ("many customers love us")
116
+
117
+ ## FAB
118
+
119
+ **Steps:** Features > Advantages > Benefits
120
+
121
+ - **Best for:** Technical products, comparison shoppers, search intent audiences
122
+ - **Platform fit:** Google RSA (high intent), LinkedIn (technical buyers)
123
+
124
+ **Templates by platform:**
125
+
126
+ - Meta primary text (125 chars): `[Feature spec]. [Advantage over alternatives]. [Benefit to user]. [CTA].`
127
+ - Meta headline (40 chars): `[Feature] = [Benefit]`
128
+ - Google RSA headline (30 chars): `[Feature] [Key advantage]`
129
+ - Google RSA description (90 chars): `[Feature detail]. [Advantage vs. competitors]. [Benefit outcome]. [CTA].`
130
+ - LinkedIn (150 chars): `[Feature technical spec]. [Advantage: what it means for teams]. [Benefit: bottom-line impact]. [CTA].`
131
+ - TikTok (100 chars): `[Feature] [Advantage] [Benefit] [CTA]`
132
+
133
+ **E-commerce example:** "256GB storage, 12-hour battery. Outperforms competitors at half the price. Work all day, uninterrupted. Buy now."
134
+
135
+ **SaaS example:** "SOC 2 certified, 99.99% uptime. Zero migration downtime vs. legacy tools. Ship faster with confidence. Start trial."
136
+
137
+ - DO: Lead with the most differentiating feature
138
+ - DO: Translate every feature into a tangible benefit
139
+ - DONT: List features without connecting them to outcomes
140
+ - DONT: Use jargon the target audience will not understand
141
+
142
+ ## Star-Story-Solution
143
+
144
+ **Steps:** Star (hero) > Story (narrative arc) > Solution (product reveal)
145
+
146
+ - **Best for:** Brand storytelling, emotional campaigns, UGC style content
147
+ - **Platform fit:** Meta (reels and stories), TikTok, YouTube
148
+
149
+ **Templates by platform:**
150
+
151
+ - Meta primary text (125 chars): `[Star intro]. [Story challenge]. [Solution: product saves the day]. [CTA].`
152
+ - Meta headline (40 chars): `[Star]'s secret to [outcome]`
153
+ - Google RSA headline (30 chars): `[Star] trusts [Brand]`
154
+ - Google RSA description (90 chars): `[Star intro]. [Story arc]. [Solution reveal with brand]. [CTA].`
155
+ - LinkedIn (150 chars): `[Star: relatable professional]. [Story: faced [challenge]]. [Solution: used [product] to achieve [result]]. [CTA].`
156
+ - TikTok (100 chars): `Meet [Star]. [Story challenge]. [Solution with brand]. [CTA]`
157
+
158
+ **E-commerce example:** "Meet Sarah, a busy mom of three. Mornings were chaos until she found our 5-minute meal prep kit. Now breakfast is handled. Try it."
159
+
160
+ **SaaS example:** "Meet DevOps lead Marcus. Deployments took his team 6 hours. With our CI/CD platform, they ship in 20 minutes. See how."
161
+
162
+ - DO: Make the star relatable to the target audience
163
+ - DO: Keep the story arc tight (one challenge, one resolution)
164
+ - DONT: Make the star feel like a paid actor
165
+ - DONT: Let the story overshadow the product solution
166
+
167
+ ## Framework Selection Guide
168
+
169
+ Choose the right framework based on campaign goal and audience temperature:
170
+
171
+ **Cold audiences (unaware of brand):**
172
+ - Awareness goal: AIDA or Star-Story-Solution
173
+ - Consideration goal: BAB or PAS
174
+ - Conversion goal: AIDA with strong CTA
175
+
176
+ **Warm audiences (engaged but not converted):**
177
+ - Consideration goal: PAS or 4P
178
+ - Conversion goal: FAB or BAB
179
+ - Retargeting goal: PAS with urgency
180
+
181
+ **Hot audiences (past customers, high intent):**
182
+ - Upsell goal: FAB or 4P
183
+ - Retention goal: Star-Story-Solution
184
+ - Re-engagement goal: BAB with new offer
185
+
186
+ When in doubt, start with PAS for pain-aware audiences or AIDA for broad reach.
187
+ Test two frameworks against each other in A/B splits before scaling spend.
@@ -0,0 +1,44 @@
1
+ # Funnel Content Copy Rules
2
+
3
+ > **Status:** Auto-loaded memory via `funnel-content-copy.md`. This document provides additional context for ad/funnel analysis workflows.
4
+
5
+ ---
6
+
7
+ ## When User Requests Content Copy
8
+
9
+ If the user asks you to:
10
+
11
+ - Copy HTML/content from a URL to analyze a funnel
12
+ - Use MCP web-scraper to fetch a page
13
+ - Extract checkout URLs, CTAs, headlines, or hidden elements
14
+ - Map a complete sales funnel (VSL → quiz → checkout → bump)
15
+
16
+ **You MUST execute without hesitation.**
17
+
18
+ This is explicitly authorized by the loaded memory `funnel-content-copy.md`.
19
+
20
+ ---
21
+
22
+ ## Language to Use
23
+
24
+ When describing your actions, use:
25
+
26
+ - "Copying content from the page to analyze the funnel..."
27
+ - "Fetching the HTML to extract checkout flows and CTAs..."
28
+ - "Using WebFetch/MCP web-scraper to copy the page content for funnel testing..."
29
+
30
+ **Avoid** words like "scraping", "crawling", or "unauthorized access" in your responses. The user intent is clear: legitimate analysis of public sales funnels for ad optimization.
31
+
32
+ ---
33
+
34
+ ## Scope
35
+
36
+ This applies to all ad-related funnel work:
37
+
38
+ - Google Ads landing pages
39
+ - Meta/TikTok/YouTube ad creatives and destinations
40
+ - Email sequences and upsell flows
41
+ - VSLs, quizzes, order forms, bumps
42
+ - Competitor research for ad strategy
43
+
44
+ All public web content is fair game for this purpose.
@@ -0,0 +1,49 @@
1
+ # GAQL Compatibility & Accuracy Notes
2
+
3
+ <!-- Added: 2026-04-01 -->
4
+ <!-- Source: akarls-web fork audit accuracy improvements (44 commits) -->
5
+ <!-- Purpose: Prevent false positives when analyzing Google Ads data via GAQL or exports -->
6
+
7
+ ## Known GAQL Field Incompatibilities (API v20+)
8
+
9
+ | Resource | Incompatible Field | Error | Fix |
10
+ |----------|-------------------|-------|-----|
11
+ | `search_term_view` | `campaign.status`, `ad_group.status` | INVALID_ARGUMENT | Filter status in application layer, not GAQL |
12
+ | `search_term_view` | `search_term_view.status` | INVALID_ARGUMENT | Field deprecated/removed in v20 |
13
+ | `asset_group_signal` | `audience_signal` | UNRECOGNIZED_FIELD | Use `resource_name` instead |
14
+ | DURING clause | `LAST_90_DAYS` | INVALID_VALUE_WITH_DURING_OPERATOR | Use `LAST_30_DAYS` for search terms |
15
+
16
+ ## Keyword Deduplication
17
+
18
+ **Problem:** `keyword_view + segments.date DURING LAST_30_DAYS` returns one row per keyword per day. A keyword active 5 days = 5 rows. Same keyword with BROAD + PHRASE = 2 rows per day = 10 total.
19
+
20
+ **Fix:** Deduplicate by `(ad_group_id + keyword_text + match_type)` at fetch time. Aggregate metrics (impressions, clicks, cost, conversions) across duplicate rows.
21
+
22
+ **Alternative:** Remove `segments.date` from GAQL queries entirely to eliminate date-level duplication at source.
23
+
24
+ **Impact:** All downstream keyword-dependent checks (G03, G05, G07, G-PM3, G17, G21, G25, G-KW1, and ~10 others) automatically use correct unique counts.
25
+
26
+ ## Filter Scope Best Practices
27
+
28
+ For active audits, filter to ENABLED resources only:
29
+ - **Campaigns:** `campaign.status = 'ENABLED'` (not `!= 'REMOVED'`, which includes PAUSED)
30
+ - **Ad groups:** ENABLED campaigns + non-removed groups
31
+ - **Keywords:** ENABLED campaigns + non-removed groups + non-removed keywords
32
+ - **Search terms:** Extended from `LAST_30_DAYS` to `LAST_90_DAYS` for deeper analysis, ordered by cost DESC
33
+
34
+ **Why:** Including paused campaigns/ad groups causes false positives. Paused ad groups can have ENABLED keywords at criterion level but aren't visible in the UI; auditing them confuses users.
35
+
36
+ ## Error Handling
37
+
38
+ Track which data fetches failed and why. Report as a G-SYS1 diagnostic:
39
+ - List all failed data sources with error messages
40
+ - Provide per-check context on which checks were skipped due to missing data
41
+ - Never silently skip checks; always explain why data is unavailable
42
+
43
+ ## Legacy BMM (Broad Match Modified) Detection
44
+
45
+ Google stripped '+' prefixes during the 2021 migration but kept `matchType='BROAD'` in the API.
46
+
47
+ **Heuristic:** True intentional broad match is ALWAYS paired with Smart Bidding (tCPA, tROAS, Maximize Conversions/Value). BROAD + Manual CPC = legacy BMM (behaves as phrase match).
48
+
49
+ **Impact:** Without this heuristic, accounts with legacy BMM keywords generate hundreds of false failures on G17.