Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0ec3146b6e | |||
| 6b068a2c92 | |||
| 17923c78a9 | |||
| 194afa2f09 | |||
| 11e3b0ff69 | |||
| e18a04403b | |||
| 34501dd36c | |||
| 20443e1361 | |||
| 9698318a30 | |||
| c8e2d11556 | |||
| f23b665461 |
@@ -6,7 +6,7 @@
|
||||
},
|
||||
"metadata": {
|
||||
"description": "Marketing skills for AI agents — conversion optimization, copywriting, SEO, paid ads, and growth",
|
||||
"version": "1.0.0",
|
||||
"version": "1.8.0",
|
||||
"repository": "https://github.com/coreyhaines31/marketingskills"
|
||||
},
|
||||
"plugins": [
|
||||
|
||||
@@ -33,9 +33,10 @@ Skills reference each other and build on shared context. The `product-marketing-
|
||||
│seo-audit │ │page-cro │ │copywritng│ │paid-ads │ │referral │ │revops │ │mktg-ideas │
|
||||
│ai-seo │ │signup-cro│ │copy-edit │ │ad-creative │ │free-tool │ │sales-enable │ │mktg-psych │
|
||||
│site-arch │ │onboard │ │cold-email│ │ab-test │ │churn- │ │launch │ │customer- │
|
||||
│programm │ │form-cro │ │email-seq │ │analytics │ │ prevent │ │pricing │ │research │
|
||||
│schema │ │popup-cro │ │social │ │ │ │ │ │competitor │ │ │
|
||||
│content │ │paywall │ │ │ │ │ │ │ │ │ │ │
|
||||
│programm │ │form-cro │ │email-seq │ │analytics │ │ prevent │ │pricing │ │ research │
|
||||
│schema │ │popup-cro │ │social │ │ │ │community │ │comp-alts │ │ │
|
||||
│content │ │paywall │ │ │ │ │ │lead-magnt│ │comp-profile │ │ │
|
||||
│aso-audit │ │ │ │ │ │ │ │ │ │directory │ │ │
|
||||
└────┬─────┘ └────┬─────┘ └────┬─────┘ └─────┬──────┘ └────┬─────┘ └──────┬──────┘ └─────┬─────┘
|
||||
│ │ │ │ │ │ │
|
||||
└────────────┴─────┬──────┴──────────────┴─────────────┴──────────────┴──────────────┘
|
||||
|
||||
+17
@@ -8,13 +8,17 @@ Current versions of all skills. Agents can compare against local versions to che
|
||||
| ad-creative | 1.2.0 | 2026-03-14 |
|
||||
| ai-seo | 1.2.0 | 2026-03-14 |
|
||||
| analytics-tracking | 1.2.0 | 2026-03-14 |
|
||||
| aso-audit | 1.0.0 | 2026-04-21 |
|
||||
| churn-prevention | 1.2.0 | 2026-03-14 |
|
||||
| cold-email | 1.2.0 | 2026-03-14 |
|
||||
| competitor-alternatives | 1.2.0 | 2026-03-14 |
|
||||
| community-marketing | 1.0.0 | 2026-04-21 |
|
||||
| competitor-profiling | 1.0.0 | 2026-04-07 |
|
||||
| content-strategy | 1.2.0 | 2026-03-14 |
|
||||
| copy-editing | 1.2.0 | 2026-03-14 |
|
||||
| copywriting | 1.2.0 | 2026-03-14 |
|
||||
| customer-research | 1.0.0 | 2026-04-21 |
|
||||
| directory-submissions | 1.0.0 | 2026-04-21 |
|
||||
| email-sequence | 1.2.0 | 2026-03-14 |
|
||||
| form-cro | 1.2.0 | 2026-03-14 |
|
||||
| free-tool-strategy | 1.2.0 | 2026-03-14 |
|
||||
@@ -41,6 +45,19 @@ Current versions of all skills. Agents can compare against local versions to che
|
||||
|
||||
## Recent Changes
|
||||
|
||||
### 2026-04-21
|
||||
- Added `directory-submissions` skill for Product Hunt, G2, AI directories, and backlink strategy
|
||||
- Added `competitor-profiling` skill for competitive intelligence research
|
||||
- Added international SEO & localization section to `seo-audit` (1.2.0)
|
||||
- Added conversion tracking reference to `paid-ads` (cross-platform pixel setup)
|
||||
- Added Zapier SDK integration for 8,000+ app access
|
||||
- Fixed plugin loading: removed `./` prefix from marketplace.json skill paths (#243)
|
||||
- Hardened CLI tools: Supermetrics API key moved to header, ZoomInfo JWT masked by default
|
||||
- Fixed community-marketing YAML frontmatter (#240)
|
||||
- Fixed Zapier webhook URL validation (#247)
|
||||
- Added missing skills to VERSIONS.md (aso-audit, community-marketing, customer-research — shipped in prior releases)
|
||||
- Total skills: 38
|
||||
|
||||
### 2026-03-14
|
||||
- Added `lead-magnets` skill for lead magnet strategy, format selection, and conversion optimization
|
||||
- Added Composio integration layer for MCP access to OAuth-heavy tools (HubSpot, Salesforce, Meta Ads, LinkedIn Ads, Google Sheets, Slack, Notion, etc.)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name: paid-ads
|
||||
description: "When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' 'audience targeting,' 'Google Ads,' 'Facebook ads,' 'LinkedIn ads,' 'ad budget,' 'cost per click,' 'ad spend,' or 'should I run ads.' Use this for campaign strategy, audience targeting, bidding, and optimization. For bulk ad creative generation and iteration, see ad-creative. For landing page optimization, see page-cro."
|
||||
metadata:
|
||||
version: 1.1.0
|
||||
version: 1.2.0
|
||||
---
|
||||
|
||||
# Paid Ads
|
||||
@@ -245,6 +245,8 @@ Before launching campaigns, ensure proper tracking and account setup.
|
||||
|
||||
**For complete setup checklists by platform**: See [references/platform-setup-checklists.md](references/platform-setup-checklists.md)
|
||||
|
||||
**For conversion pixel installation and event setup**: See [references/conversion-tracking.md](references/conversion-tracking.md)
|
||||
|
||||
### Universal Pre-Launch Checklist
|
||||
- [ ] Conversion tracking tested with real conversion
|
||||
- [ ] Landing page loads fast (<3 sec)
|
||||
@@ -302,7 +304,7 @@ For implementation, see the [tools registry](../../tools/REGISTRY.md). Key adver
|
||||
| **LinkedIn Ads** | B2B, job title targeting | - | [linkedin-ads.md](../../tools/integrations/linkedin-ads.md) |
|
||||
| **TikTok Ads** | Younger demographics, video | - | [tiktok-ads.md](../../tools/integrations/tiktok-ads.md) |
|
||||
|
||||
For tracking, see also: [ga4.md](../../tools/integrations/ga4.md), [segment.md](../../tools/integrations/segment.md)
|
||||
For tracking setup, see [references/conversion-tracking.md](references/conversion-tracking.md), [ga4.md](../../tools/integrations/ga4.md), [segment.md](../../tools/integrations/segment.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,361 @@
|
||||
# Conversion Tracking Setup
|
||||
|
||||
How to set up conversion tracking pixels across ad platforms. This guide covers installation, event configuration, and validation — everything a marketer needs to ensure ad spend is properly attributed.
|
||||
|
||||
---
|
||||
|
||||
## Why This Matters
|
||||
|
||||
Without conversion tracking:
|
||||
- Ad platforms can't optimize for your actual goals
|
||||
- You're flying blind on ROAS and CPA
|
||||
- Retargeting audiences can't be built
|
||||
- You'll waste budget on impressions that don't convert
|
||||
|
||||
Get tracking right before spending a dollar on ads.
|
||||
|
||||
---
|
||||
|
||||
## Platform Pixels Overview
|
||||
|
||||
| Platform | Pixel/Tag Name | Events API | Key Events |
|
||||
|----------|---------------|:----------:|------------|
|
||||
| **Google Ads** | Google tag (gtag.js) | Enhanced Conversions | purchase, sign_up, generate_lead |
|
||||
| **Meta** | Meta Pixel + CAPI | Conversions API | Purchase, Lead, ViewContent, AddToCart |
|
||||
| **LinkedIn** | Insight Tag | Conversions API | conversion (URL or event-based) |
|
||||
| **TikTok** | TikTok Pixel | Events API | Purchase, ViewContent, AddToCart, CompleteRegistration |
|
||||
| **Twitter/X** | Twitter Pixel | - | Purchase, SignUp, Download |
|
||||
|
||||
---
|
||||
|
||||
## Google Ads
|
||||
|
||||
### Install the Google tag
|
||||
|
||||
Add to every page, in `<head>`:
|
||||
|
||||
```html
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-XXXXXXXXX"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'AW-XXXXXXXXX');
|
||||
</script>
|
||||
```
|
||||
|
||||
Replace `AW-XXXXXXXXX` with your Conversion ID from Google Ads > Tools > Conversions.
|
||||
|
||||
### Set up conversion actions
|
||||
|
||||
In Google Ads > Goals > Conversions > New conversion action:
|
||||
|
||||
| Conversion | Category | Value | Count |
|
||||
|-----------|----------|-------|-------|
|
||||
| Purchase | Purchase | Dynamic (order value) | Every |
|
||||
| Sign up / Lead | Sign-up | Fixed ($X estimated value) | One |
|
||||
| Demo request | Lead | Fixed ($X estimated value) | One |
|
||||
| Free trial start | Sign-up | Fixed ($X estimated value) | One |
|
||||
|
||||
### Fire conversion events
|
||||
|
||||
```javascript
|
||||
// Purchase
|
||||
gtag('event', 'conversion', {
|
||||
'send_to': 'AW-XXXXXXXXX/CONVERSION_LABEL',
|
||||
'value': 99.00,
|
||||
'currency': 'USD',
|
||||
'transaction_id': 'ORDER-123'
|
||||
});
|
||||
|
||||
// Lead / Sign up
|
||||
gtag('event', 'conversion', {
|
||||
'send_to': 'AW-XXXXXXXXX/CONVERSION_LABEL',
|
||||
'value': 50.00,
|
||||
'currency': 'USD'
|
||||
});
|
||||
```
|
||||
|
||||
### Enhanced Conversions
|
||||
|
||||
Sends hashed first-party data (email, phone) to improve attribution after cookie restrictions. Enable in Google Ads > Goals > Settings > Enhanced conversions.
|
||||
|
||||
```javascript
|
||||
gtag('set', 'user_data', {
|
||||
'email': 'user@example.com', // auto-hashed by gtag
|
||||
'phone_number': '+11234567890'
|
||||
});
|
||||
```
|
||||
|
||||
### Google Tag Manager alternative
|
||||
|
||||
If using GTM instead of inline gtag.js:
|
||||
1. Install GTM container on all pages
|
||||
2. Create Google Ads conversion tags in GTM
|
||||
3. Set triggers for conversion events (form submissions, purchases)
|
||||
4. Use the Data Layer to pass dynamic values (order amount, transaction ID)
|
||||
5. Test with GTM Preview mode before publishing
|
||||
|
||||
---
|
||||
|
||||
## Meta (Facebook/Instagram)
|
||||
|
||||
### Install the Meta Pixel
|
||||
|
||||
Add to every page, in `<head>`:
|
||||
|
||||
```html
|
||||
<script>
|
||||
!function(f,b,e,v,n,t,s)
|
||||
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
||||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
|
||||
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
|
||||
n.queue=[];t=b.createElement(e);t.async=!0;
|
||||
t.src=v;s=b.getElementsByTagName(e)[0];
|
||||
s.parentNode.insertBefore(t,s)}(window, document,'script',
|
||||
'https://connect.facebook.net/en_US/fbevents.js');
|
||||
fbq('init', 'YOUR_PIXEL_ID');
|
||||
fbq('track', 'PageView');
|
||||
</script>
|
||||
```
|
||||
|
||||
Replace `YOUR_PIXEL_ID` from Meta Events Manager.
|
||||
|
||||
### Standard events
|
||||
|
||||
```javascript
|
||||
// View a product or key page
|
||||
fbq('track', 'ViewContent', {
|
||||
content_name: 'Pro Plan',
|
||||
content_category: 'Pricing',
|
||||
value: 29.00,
|
||||
currency: 'USD'
|
||||
});
|
||||
|
||||
// Lead capture (form submit, demo request)
|
||||
fbq('track', 'Lead', {
|
||||
content_name: 'Demo Request',
|
||||
value: 50.00,
|
||||
currency: 'USD'
|
||||
});
|
||||
|
||||
// Purchase
|
||||
fbq('track', 'Purchase', {
|
||||
value: 99.00,
|
||||
currency: 'USD',
|
||||
content_type: 'product',
|
||||
contents: [{ id: 'pro-plan', quantity: 1 }]
|
||||
});
|
||||
|
||||
// Add to cart (e-commerce)
|
||||
fbq('track', 'AddToCart', {
|
||||
content_ids: ['SKU-123'],
|
||||
content_type: 'product',
|
||||
value: 49.00,
|
||||
currency: 'USD'
|
||||
});
|
||||
```
|
||||
|
||||
### Conversions API (CAPI)
|
||||
|
||||
Server-side tracking that works alongside the pixel. Required for accurate tracking after iOS 14+ and cookie restrictions.
|
||||
|
||||
Set up via:
|
||||
- **Direct integration** — send events from your server to Meta's API
|
||||
- **Partner integrations** — Shopify, WooCommerce, Segment, etc. have built-in CAPI support
|
||||
- **Conversions API Gateway** — Meta's managed solution via AWS
|
||||
|
||||
Key: send the same events from both pixel (browser) AND CAPI (server), with a shared `event_id` for deduplication.
|
||||
|
||||
### Aggregated Event Measurement
|
||||
|
||||
Required for iOS 14+ tracking. In Events Manager > Aggregated Event Measurement:
|
||||
1. Verify your domain
|
||||
2. Configure and prioritize your top 8 events in order of business importance
|
||||
3. Purchase should typically be #1, Lead #2
|
||||
|
||||
---
|
||||
|
||||
## LinkedIn
|
||||
|
||||
### Install the Insight Tag
|
||||
|
||||
Add to every page, before `</body>`:
|
||||
|
||||
```html
|
||||
<script type="text/javascript">
|
||||
_linkedin_partner_id = "YOUR_PARTNER_ID";
|
||||
window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
|
||||
window._linkedin_data_partner_ids.push(_linkedin_partner_id);
|
||||
(function(l) {
|
||||
if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])};
|
||||
window.lintrk.q=[]}
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
var b = document.createElement("script");
|
||||
b.type = "text/javascript";b.async = true;
|
||||
b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
|
||||
s.parentNode.insertBefore(b, s);})(window.lintrk);
|
||||
</script>
|
||||
```
|
||||
|
||||
### Conversion tracking
|
||||
|
||||
LinkedIn supports two methods:
|
||||
|
||||
**URL-based**: Fires when someone visits a specific URL (e.g., `/thank-you`).
|
||||
Set up in Campaign Manager > Analyze > Conversion Tracking > Create Conversion.
|
||||
|
||||
**Event-based**: Fire manually on specific actions:
|
||||
|
||||
```javascript
|
||||
window.lintrk('track', { conversion_id: YOUR_CONVERSION_ID });
|
||||
```
|
||||
|
||||
### LinkedIn CAPI
|
||||
|
||||
For server-side tracking, LinkedIn offers a Conversions API. Set up via partner integrations (Segment, Tealium) or direct API calls. Deduplicates with the Insight Tag automatically when configured correctly.
|
||||
|
||||
---
|
||||
|
||||
## TikTok
|
||||
|
||||
### Install the TikTok Pixel
|
||||
|
||||
Add to every page, in `<head>`:
|
||||
|
||||
```html
|
||||
<script>
|
||||
!function (w, d, t) {
|
||||
w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];
|
||||
ttq.methods=["page","track","identify","instances","debug","on","off",
|
||||
"once","ready","alias","group","enableCookie","disableCookie","holdConsent",
|
||||
"revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e)
|
||||
{t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};
|
||||
for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);
|
||||
ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;
|
||||
n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e};
|
||||
ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",
|
||||
o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,
|
||||
ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},
|
||||
ttq._o[e]=n||{};var s=document.createElement("script");
|
||||
s.type="text/javascript",s.async=!0,s.src=r+"?sdkid="+e+"&lib="+t;
|
||||
var a=document.getElementsByTagName("script")[0];
|
||||
a.parentNode.insertBefore(s,a)};
|
||||
ttq.load('YOUR_PIXEL_ID');
|
||||
ttq.page();
|
||||
}(window, document, 'ttq');
|
||||
</script>
|
||||
```
|
||||
|
||||
### Standard events
|
||||
|
||||
```javascript
|
||||
// View content
|
||||
ttq.track('ViewContent', {
|
||||
content_id: 'pro-plan',
|
||||
content_type: 'product',
|
||||
content_name: 'Pro Plan',
|
||||
value: 29.00,
|
||||
currency: 'USD'
|
||||
});
|
||||
|
||||
// Complete registration / sign up
|
||||
ttq.track('CompleteRegistration', {
|
||||
content_name: 'Free Trial'
|
||||
});
|
||||
|
||||
// Purchase
|
||||
ttq.track('Purchase', {
|
||||
content_id: 'pro-plan',
|
||||
content_type: 'product',
|
||||
value: 99.00,
|
||||
currency: 'USD',
|
||||
quantity: 1
|
||||
});
|
||||
|
||||
// Add to cart
|
||||
ttq.track('AddToCart', {
|
||||
content_id: 'SKU-123',
|
||||
content_type: 'product',
|
||||
value: 49.00,
|
||||
currency: 'USD'
|
||||
});
|
||||
```
|
||||
|
||||
### Events API (server-side)
|
||||
|
||||
TikTok's Events API works like Meta's CAPI — send the same events from your server for better attribution. Use `event_id` for deduplication with browser pixel events.
|
||||
|
||||
### Advanced Matching
|
||||
|
||||
Pass hashed user data for better attribution:
|
||||
|
||||
```javascript
|
||||
ttq.identify({
|
||||
email: 'user@example.com', // auto-hashed
|
||||
phone_number: '+11234567890'
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Validation Checklist
|
||||
|
||||
After installing any pixel, verify before going live:
|
||||
|
||||
### Browser-side checks
|
||||
|
||||
- [ ] Pixel fires on every page (check via browser extension)
|
||||
- [ ] Conversion events fire at the right moment (after confirmed action, not on button click)
|
||||
- [ ] Event parameters contain correct values (currency, amount, content IDs)
|
||||
- [ ] No duplicate events firing on the same action
|
||||
- [ ] Events fire on both desktop and mobile
|
||||
|
||||
### Platform-side checks
|
||||
|
||||
- [ ] Events appear in the platform's event manager/diagnostics
|
||||
- [ ] Test conversions show correct values
|
||||
- [ ] Event match quality is acceptable (Meta: score > 6)
|
||||
- [ ] Server-side events are deduplicating with browser events (not double-counting)
|
||||
|
||||
### Debugging tools
|
||||
|
||||
| Platform | Tool |
|
||||
|----------|------|
|
||||
| Google | Google Tag Assistant, Chrome DevTools Network tab |
|
||||
| Meta | Meta Pixel Helper (Chrome extension), Events Manager Test Events |
|
||||
| LinkedIn | Insight Tag Validator in Campaign Manager |
|
||||
| TikTok | TikTok Pixel Helper (Chrome extension), Events Manager |
|
||||
| All | GTM Preview Mode (if using Google Tag Manager) |
|
||||
|
||||
---
|
||||
|
||||
## Common Mistakes
|
||||
|
||||
- **Firing purchase events on button click instead of confirmed payment** — always fire on the success/thank-you page or after server confirmation
|
||||
- **Missing deduplication between pixel and server events** — without a shared `event_id`, you'll double-count conversions
|
||||
- **Not testing on mobile** — many pixels break on mobile browsers or in-app webviews
|
||||
- **Hardcoded test values** — remove test transaction amounts before going live
|
||||
- **Forgetting to exclude internal traffic** — your team's visits inflate conversion data
|
||||
- **Installing pixels without consent management** — GDPR/CCPA require user consent before firing tracking pixels in applicable regions
|
||||
- **Pixel installed but no conversion actions created** — the pixel collects data, but the ad platform won't optimize without defined conversion actions
|
||||
|
||||
---
|
||||
|
||||
## When to Use Server-Side Tracking
|
||||
|
||||
Browser-only tracking is increasingly unreliable due to:
|
||||
- iOS 14+ App Tracking Transparency
|
||||
- Third-party cookie deprecation
|
||||
- Ad blockers (30%+ of tech audiences)
|
||||
|
||||
**Use server-side (CAPI/Events API) when:**
|
||||
- Running Meta or TikTok ads (strongly recommended)
|
||||
- Your audience is tech-savvy (higher ad blocker usage)
|
||||
- You need accurate purchase/revenue attribution
|
||||
- You're spending >$5K/month on any platform
|
||||
|
||||
**Server-side is optional when:**
|
||||
- Running Google Ads only (Enhanced Conversions covers most gaps)
|
||||
- Low ad spend / testing phase
|
||||
- B2B with LinkedIn only (Insight Tag is still reliable)
|
||||
@@ -1,8 +1,8 @@
|
||||
---
|
||||
name: social-content
|
||||
description: "When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms. Also use when the user mentions 'LinkedIn post,' 'Twitter thread,' 'social media,' 'content calendar,' 'social scheduling,' 'engagement,' 'viral content,' 'what should I post,' 'repurpose this content,' 'tweet ideas,' 'LinkedIn carousel,' 'social media strategy,' or 'grow my following.' Use this for any social media content creation, repurposing, or scheduling task. For broader content strategy, see content-strategy."
|
||||
description: "When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms. Also use when the user mentions 'LinkedIn post,' 'Twitter thread,' 'social media,' 'content calendar,' 'social scheduling,' 'engagement,' 'viral content,' 'what should I post,' 'repurpose this content,' 'tweet ideas,' 'LinkedIn carousel,' 'social media strategy,' 'grow my following,' 'TikTok video,' 'Reels,' 'Shorts,' 'video script,' 'video hook,' 'short-form video,' or 'create a reel.' Use this for social media content creation, repurposing, scheduling, and short-form video scripting. For broader content strategy, see content-strategy. For paid video ads, see ad-creative."
|
||||
metadata:
|
||||
version: 1.2.0
|
||||
version: 1.3.0
|
||||
---
|
||||
|
||||
# Social Content
|
||||
@@ -309,6 +309,87 @@ Instead of guessing, analyze what's working for top creators in your niche:
|
||||
|
||||
---
|
||||
|
||||
## Short-Form Video (TikTok, Reels, Shorts)
|
||||
|
||||
Short-form video is the highest-reach format on every major platform. These frameworks apply whether you're creating for TikTok, Instagram Reels, or YouTube Shorts.
|
||||
|
||||
### Platform Specs
|
||||
|
||||
| Platform | Optimal Length | Aspect Ratio | Key Difference |
|
||||
|----------|---------------|--------------|----------------|
|
||||
| TikTok | 15-60 sec | 9:16 | Trending sounds, raw/authentic feel |
|
||||
| Reels | 15-30 sec | 9:16 | Polished content, rewards saves/shares |
|
||||
| Shorts | 30-60 sec | 9:16 | YouTube SEO applies, searchable titles |
|
||||
|
||||
### The 3-Second Rule
|
||||
|
||||
You have 3 seconds to stop the scroll. Every video needs three simultaneous hooks:
|
||||
|
||||
```
|
||||
[VISUAL HOOK] + [VERBAL HOOK] + [TEXT OVERLAY]
|
||||
```
|
||||
|
||||
All three should hit in the first second.
|
||||
|
||||
### Video Structures
|
||||
|
||||
**Problem-Solution (15-30 sec):**
|
||||
```
|
||||
[0-3s] Hook: State the problem
|
||||
[3-10s] Agitate: Why it matters
|
||||
[10-25s] Solution: Your method/product/tip
|
||||
[25-30s] CTA: What to do next
|
||||
```
|
||||
|
||||
**List Format (30-60 sec):**
|
||||
```
|
||||
[0-3s] Hook: "X things that [outcome]"
|
||||
[3-50s] Items: One every 5-8 seconds
|
||||
[50-60s] CTA
|
||||
```
|
||||
|
||||
**Tutorial (30-60 sec):**
|
||||
```
|
||||
[0-3s] Hook: Show the end result first
|
||||
[3-8s] Overview: "Here's how..."
|
||||
[8-50s] Steps: Quick, clear instructions
|
||||
[50-60s] Result + CTA
|
||||
```
|
||||
|
||||
### Caption & Subtitle Best Practices
|
||||
|
||||
Captions increase watch time by 25-40%. Most social video is watched without sound.
|
||||
|
||||
- **MAX 2 lines** on screen at once
|
||||
- **3-5 words per line**
|
||||
- Bold, sans-serif font with black outline
|
||||
- **Highlight key words** in a different color
|
||||
- Match timing to speech exactly
|
||||
|
||||
Tools: CapCut (free), Descript, Captions.ai, Premiere Pro
|
||||
|
||||
### Content Ideas by Type
|
||||
|
||||
| Business Type | Video Ideas |
|
||||
|---------------|-------------|
|
||||
| SaaS | Feature demos (show outcome first), before/after, "Watch me do X in Y seconds" |
|
||||
| E-commerce | Unboxing, comparisons, how it's made, customer reviews |
|
||||
| Services | Process reveals, client transformations, myth-busting |
|
||||
| Personal brand | Lessons learned, controversial takes, day-in-the-life |
|
||||
|
||||
### Common Mistakes
|
||||
|
||||
1. **Slow hooks** — don't build up to the point
|
||||
2. **No text overlay** — many watch without sound
|
||||
3. **Poor audio** — bad audio kills retention instantly
|
||||
4. **Too long** — if it can be shorter, make it shorter
|
||||
5. **No CTA** — tell viewers what to do
|
||||
6. **Ignoring comments** — engagement in first hour matters
|
||||
|
||||
**For video hook formulas and scripting templates**: See [references/short-form-video.md](references/short-form-video.md)
|
||||
|
||||
---
|
||||
|
||||
## Task-Specific Questions
|
||||
|
||||
1. What platform(s) are you focusing on?
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
# Short-Form Video: Hooks, Scripts & Strategy
|
||||
|
||||
Detailed reference for creating short-form video content on TikTok, Instagram Reels, and YouTube Shorts.
|
||||
|
||||
---
|
||||
|
||||
## Video Hook Library
|
||||
|
||||
### Curiosity Hooks (Best for engagement)
|
||||
|
||||
**The "Secret" Formula:**
|
||||
- "The secret to [outcome] that nobody talks about"
|
||||
- "I found the hidden feature in [product/platform] that changes everything"
|
||||
- "I can't believe this actually works..."
|
||||
|
||||
**The Unexpected Discovery:**
|
||||
- "I tried [thing] for 30 days and I was NOT expecting this"
|
||||
- "This completely changed how I think about [topic]"
|
||||
- "Nobody talks about this, but..."
|
||||
|
||||
**The Question:**
|
||||
- "Why does nobody talk about this?"
|
||||
- "Am I the only one who didn't know this?"
|
||||
- "The reason [common thing] doesn't work is..."
|
||||
|
||||
### Value Hooks (Best for saves)
|
||||
|
||||
**The Promise:**
|
||||
- "How to [achieve outcome] in [specific timeframe]"
|
||||
- "[Number] [things] that will [benefit]"
|
||||
- "Everything you need to know about [topic] in 60 seconds"
|
||||
|
||||
**The Hack/Shortcut:**
|
||||
- "[Outcome] hack that actually works"
|
||||
- "The [adjective] way to [outcome]"
|
||||
- "If you're struggling with [problem], watch this"
|
||||
|
||||
**The Warning:**
|
||||
- "Stop doing [common practice] — here's why"
|
||||
- "[Number] mistakes that are killing your [results]"
|
||||
- "Why [thing you think is good] is actually hurting you"
|
||||
|
||||
### Story Hooks (Best for watch time)
|
||||
|
||||
**The Transformation:**
|
||||
- "3 months ago, I [bad state]. Today, I [good state]."
|
||||
- "Here's how I went from [before] to [after]"
|
||||
- "I used to think [old belief]. Then [event] changed everything."
|
||||
|
||||
**The Failure:**
|
||||
- "I made a huge mistake with [topic]"
|
||||
- "Here's why I stopped [common practice]"
|
||||
- "I lost [something significant] because of this mistake"
|
||||
|
||||
**The Journey:**
|
||||
- "So this just happened..."
|
||||
- "This changed everything for me"
|
||||
- "Let me tell you about the time I [interesting situation]"
|
||||
|
||||
### Controversial Hooks (Best for comments)
|
||||
|
||||
- "Unpopular opinion: [bold statement]"
|
||||
- "[Common advice] is actually wrong"
|
||||
- "I'm going to get hate for this, but..."
|
||||
- "Most [audience] get this completely wrong"
|
||||
|
||||
---
|
||||
|
||||
## Scripting Template
|
||||
|
||||
```markdown
|
||||
## Video: [Working Title]
|
||||
|
||||
**Platform:** TikTok / Reels / Shorts
|
||||
**Length:** XX seconds
|
||||
**Format:** [Talking head / Slideshow / Demo / Screen recording]
|
||||
|
||||
### Hook (0-3 sec)
|
||||
- Visual: [What viewer sees]
|
||||
- Audio: [What they hear]
|
||||
- Text overlay: [On-screen text]
|
||||
|
||||
### Body (3-X sec)
|
||||
- [Timestamp] - [What happens/what you say]
|
||||
- [Timestamp] - [Next beat]
|
||||
- [Continue...]
|
||||
|
||||
### CTA (final 3-5 sec)
|
||||
- Verbal: [What you say]
|
||||
- Text: [On-screen text]
|
||||
- Action: [Follow, comment, link in bio, etc.]
|
||||
|
||||
### Production Notes
|
||||
- Music/sound: [Trending sound or music choice]
|
||||
- B-roll needed: [List any clips needed]
|
||||
- Graphics: [Any text animations or overlays]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Additional Video Structures
|
||||
|
||||
### The Story Arc (45-60 sec)
|
||||
|
||||
```
|
||||
[0-3s] Hook: Tease the outcome
|
||||
[3-15s] Setup: Context and stakes
|
||||
[15-45s] Journey: What happened
|
||||
[45-55s] Resolution: The result
|
||||
[55-60s] Lesson/CTA
|
||||
```
|
||||
|
||||
Best for: Personal stories, case studies, testimonials
|
||||
|
||||
### The POV/Skit (15-30 sec)
|
||||
|
||||
```
|
||||
[0-3s] Setup: Text overlay sets the scene
|
||||
[3-25s] Performance: Act out the relatable scenario
|
||||
[25-30s] Punchline or twist
|
||||
```
|
||||
|
||||
Best for: Relatable content, humor, niche communities
|
||||
|
||||
---
|
||||
|
||||
## Visual Patterns
|
||||
|
||||
### Talking Head
|
||||
- Good lighting (ring light or window light)
|
||||
- Eye contact with camera
|
||||
- Hand gestures for emphasis
|
||||
- Interesting background (bookshelf, plants, studio setup)
|
||||
|
||||
### Slideshow/Carousel Video
|
||||
- Strong visual on each slide (2-4 seconds per slide)
|
||||
- Text overlays with key points
|
||||
- Consistent style/branding
|
||||
- Voiceover or trending sound
|
||||
|
||||
### Screen Recording
|
||||
- Zoom in on important areas
|
||||
- Add cursor highlight or click animations
|
||||
- Keep movements smooth and intentional
|
||||
- Overlay your face in corner (optional but boosts engagement)
|
||||
|
||||
### B-Roll Heavy
|
||||
- Show don't tell
|
||||
- Quick cuts (1-3 seconds per shot)
|
||||
- Match cuts to voiceover beats
|
||||
- Mix wide, medium, and close-up shots
|
||||
|
||||
---
|
||||
|
||||
## Audio Strategy
|
||||
|
||||
### When to Use Trending Sounds
|
||||
- Entertainment/lifestyle content where the sound fits your message
|
||||
- When the trend is still rising (check platform trending pages)
|
||||
- Don't use when it distracts from your message or is already declining
|
||||
|
||||
### When to Use Original Audio
|
||||
- Educational content where you're speaking
|
||||
- Storytimes and personal narratives
|
||||
- Product demos and tutorials
|
||||
- Building a recognizable brand voice
|
||||
|
||||
### Voiceover Tips
|
||||
- Speak slightly faster than normal conversation
|
||||
- Vary your tone — avoid monotone delivery
|
||||
- Pause for emphasis on key points
|
||||
- Record in a quiet space, use noise removal
|
||||
- AI voices work for faceless content (ElevenLabs, etc.)
|
||||
|
||||
### Music Selection
|
||||
- Match energy to content (upbeat for tips, emotional for stories)
|
||||
- Avoid copyrighted music on Reels/Shorts
|
||||
- Use platform music libraries for safety
|
||||
- Lower music volume under voiceover (ducking)
|
||||
|
||||
---
|
||||
|
||||
## Posting Strategy
|
||||
|
||||
### Optimal Posting Times (test your audience)
|
||||
|
||||
| Platform | Best Times (local) |
|
||||
|----------|-------------------|
|
||||
| TikTok | 7-9 AM, 12-3 PM, 7-11 PM |
|
||||
| Reels | 9 AM, 12 PM, 7-9 PM |
|
||||
| Shorts | 12-3 PM, 7-9 PM |
|
||||
|
||||
### Frequency Recommendations
|
||||
|
||||
| Goal | Minimum | Optimal |
|
||||
|------|---------|---------|
|
||||
| Growing | 1/day | 2-4/day |
|
||||
| Maintaining | 3/week | 1/day |
|
||||
| Testing | 2/week | 5/week |
|
||||
|
||||
### Batch Creation Workflow
|
||||
|
||||
1. **Ideate** (30 min): Generate 10-20 concepts
|
||||
2. **Script** (1 hour): Write scripts for 5-10 videos
|
||||
3. **Batch film** (2 hours): Record all talking head content
|
||||
4. **Edit** (2-3 hours): Edit and add captions
|
||||
5. **Schedule** (30 min): Queue for optimal times
|
||||
|
||||
---
|
||||
|
||||
## Analytics & Iteration
|
||||
|
||||
### Metrics That Matter
|
||||
|
||||
| Metric | What It Tells You |
|
||||
|--------|-------------------|
|
||||
| Watch time % | Is content engaging throughout? |
|
||||
| Completion rate | Did hook + content deliver? |
|
||||
| Saves | Is content valuable enough to revisit? |
|
||||
| Shares | Is content worth spreading? |
|
||||
| Comments | Did content spark conversation? |
|
||||
| Follows | Did viewer want more from you? |
|
||||
|
||||
### What to Test
|
||||
|
||||
1. **Hooks**: Same content, different opening
|
||||
2. **Length**: 15 sec vs 30 sec vs 60 sec
|
||||
3. **Format**: Talking head vs slideshow vs demo
|
||||
4. **Time**: Morning vs afternoon vs evening
|
||||
5. **CTA**: Different calls to action
|
||||
|
||||
### When to Pivot
|
||||
|
||||
- 5+ videos with <1% completion rate → change hooks
|
||||
- High views but low follows → check CTA and content-audience fit
|
||||
- High saves but low shares → content is valuable but not social
|
||||
- Lots of comments but negative → lean into controversy or adjust tone
|
||||
@@ -9,17 +9,18 @@ if (!API_KEY) {
|
||||
}
|
||||
|
||||
async function api(method, path, body) {
|
||||
const separator = path.includes('?') ? '&' : '?'
|
||||
const url = `${BASE_URL}${path}${separator}api_key=${API_KEY}`
|
||||
const url = `${BASE_URL}${path}`
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'x-api-key': API_KEY,
|
||||
}
|
||||
if (args['dry-run']) {
|
||||
return { _dry_run: true, method, url: url.replace(API_KEY, '***'), headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: body || undefined }
|
||||
return { _dry_run: true, method, url, headers: { ...headers, 'x-api-key': '***' }, body: body || undefined }
|
||||
}
|
||||
const res = await fetch(url, {
|
||||
method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
headers,
|
||||
body: body ? JSON.stringify(body) : undefined,
|
||||
})
|
||||
const text = await res.text()
|
||||
|
||||
@@ -92,7 +92,14 @@ async function main() {
|
||||
break
|
||||
}
|
||||
const token = await authenticate()
|
||||
result = { jwt: token }
|
||||
if (args['show-token']) {
|
||||
result = { jwt: token }
|
||||
} else {
|
||||
const masked = token.length > 12
|
||||
? token.slice(0, 6) + '…' + token.slice(-6)
|
||||
: '***'
|
||||
result = { jwt: masked, hint: 'Use --show-token to reveal full JWT' }
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
@@ -188,7 +195,7 @@ async function main() {
|
||||
result = {
|
||||
error: 'Unknown command',
|
||||
usage: {
|
||||
auth: 'auth — authenticate and get JWT token',
|
||||
auth: 'auth [--show-token] — authenticate and get JWT token (masked by default)',
|
||||
contacts: {
|
||||
search: 'contacts search [--job-title <t>] [--company <c>] [--location <l>] [--seniority <s>] [--department <d>] [--page <n>]',
|
||||
enrich: 'contacts enrich --email <email> | --person-id <id>',
|
||||
|
||||
Reference in New Issue
Block a user