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.
- package/dist/migrate.js +81 -43
- package/dist/setup.js +20 -1
- package/package.json +1 -1
- package/stacks/_shared/ads-agents/README.md +452 -0
- package/stacks/_shared/ads-agents/RESEARCH-REPORT.md +157 -0
- package/stacks/_shared/ads-agents/SKILL.md +210 -0
- package/stacks/_shared/ads-agents/SKILLS-UPDATE-REPORT.md +255 -0
- package/stacks/_shared/ads-agents/agents/audit-budget.md +116 -0
- package/stacks/_shared/ads-agents/agents/audit-compliance.md +131 -0
- package/stacks/_shared/ads-agents/agents/audit-creative.md +127 -0
- package/stacks/_shared/ads-agents/agents/audit-google.md +113 -0
- package/stacks/_shared/ads-agents/agents/audit-meta.md +112 -0
- package/stacks/_shared/ads-agents/agents/audit-tracking.md +134 -0
- package/stacks/_shared/ads-agents/agents/copy-writer.md +188 -0
- package/stacks/_shared/ads-agents/agents/creative-strategist.md +199 -0
- package/stacks/_shared/ads-agents/agents/format-adapter.md +175 -0
- package/stacks/_shared/ads-agents/agents/visual-designer.md +245 -0
- package/stacks/_shared/ads-agents/references/additional-platforms.md +106 -0
- package/stacks/_shared/ads-agents/references/benchmarks.md +257 -0
- package/stacks/_shared/ads-agents/references/bidding-strategies.md +333 -0
- package/stacks/_shared/ads-agents/references/brand-dna-template.md +190 -0
- package/stacks/_shared/ads-agents/references/budget-allocation.md +150 -0
- package/stacks/_shared/ads-agents/references/compliance.md +280 -0
- package/stacks/_shared/ads-agents/references/conversion-tracking.md +246 -0
- package/stacks/_shared/ads-agents/references/copy-frameworks.md +187 -0
- package/stacks/_shared/ads-agents/references/funnel-content-copy-rules.md +44 -0
- package/stacks/_shared/ads-agents/references/gaql-notes.md +49 -0
- package/stacks/_shared/ads-agents/references/google-audit.md +217 -0
- package/stacks/_shared/ads-agents/references/google-creative-specs.md +119 -0
- package/stacks/_shared/ads-agents/references/image-providers.md +133 -0
- package/stacks/_shared/ads-agents/references/linkedin-audit.md +141 -0
- package/stacks/_shared/ads-agents/references/linkedin-creative-specs.md +129 -0
- package/stacks/_shared/ads-agents/references/mcp-integration.md +125 -0
- package/stacks/_shared/ads-agents/references/meta-audit.md +141 -0
- package/stacks/_shared/ads-agents/references/meta-creative-specs.md +134 -0
- package/stacks/_shared/ads-agents/references/microsoft-audit.md +158 -0
- package/stacks/_shared/ads-agents/references/microsoft-creative-specs.md +123 -0
- package/stacks/_shared/ads-agents/references/platform-specs.md +276 -0
- package/stacks/_shared/ads-agents/references/scoring-system.md +169 -0
- package/stacks/_shared/ads-agents/references/tiktok-audit.md +165 -0
- package/stacks/_shared/ads-agents/references/tiktok-creative-specs.md +139 -0
- package/stacks/_shared/ads-agents/references/voice-to-style.md +87 -0
- package/stacks/_shared/ads-agents/references/youtube-creative-specs.md +134 -0
- package/stacks/_shared/ads-agents/skills/ads-apple/SKILL.md +225 -0
- package/stacks/_shared/ads-agents/skills/ads-audit/SKILL.md +108 -0
- package/stacks/_shared/ads-agents/skills/ads-budget/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-competitor/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-create/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-creative/SKILL.md +208 -0
- package/stacks/_shared/ads-agents/skills/ads-dna/SKILL.md +245 -0
- package/stacks/_shared/ads-agents/skills/ads-generate/SKILL.md +173 -0
- package/stacks/_shared/ads-agents/skills/ads-google/SKILL.md +192 -0
- package/stacks/_shared/ads-agents/skills/ads-landing/SKILL.md +186 -0
- package/stacks/_shared/ads-agents/skills/ads-linkedin/SKILL.md +200 -0
- package/stacks/_shared/ads-agents/skills/ads-math/SKILL.md +216 -0
- package/stacks/_shared/ads-agents/skills/ads-meta/SKILL.md +167 -0
- package/stacks/_shared/ads-agents/skills/ads-microsoft/SKILL.md +163 -0
- package/stacks/_shared/ads-agents/skills/ads-photoshoot/SKILL.md +220 -0
- package/stacks/_shared/ads-agents/skills/ads-plan/SKILL.md +176 -0
- package/stacks/_shared/ads-agents/skills/ads-test/SKILL.md +199 -0
- package/stacks/_shared/ads-agents/skills/ads-tiktok/SKILL.md +190 -0
- package/stacks/_shared/ads-agents/skills/ads-youtube/SKILL.md +199 -0
- package/stacks/_shared/hooks/_state.ts +8 -2
- package/stacks/_shared/hooks/plan-gate.ts +138 -0
- package/stacks/_shared/memories/funnel-content-copy.md +81 -0
- 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.
|