Acquisition Channels
Build and optimize customer acquisition channels including product-led growth, content marketing, paid acquisition, and partnerships
The Acquisition Channels workflow helps you identify, test, and scale the customer acquisition strategies that work for your product. From product-led growth to paid advertising, this guide provides frameworks for prioritizing and optimizing your growth channels.
Overview#
| Property | Value |
|---|---|
| Channels | 4 main categories |
| Tier | Free |
| Typical Duration | Ongoing optimization |
| Best For | Post-PMF startups ready to scale |
Outcomes#
A successful acquisition workflow delivers:
- Prioritized list of channels to test
- Frameworks for evaluating channel performance
- Implementation guides for each channel
- CAC and payback benchmarks
- Scalable growth playbook
Channel Categories#
┌─────────────────────────────────────────────────────────────────┐
│ ACQUISITION CHANNELS │
├─────────────────┬─────────────────┬─────────────────┬───────────┤
│ PRODUCT-LED │ CONTENT │ PAID │ PARTNER │
├─────────────────┼─────────────────┼─────────────────┼───────────┤
│ • Freemium │ • SEO/Blog │ • Search Ads │ • API │
│ • Free trial │ • Social │ • Social Ads │ • Resell │
│ • Viral loops │ • Video │ • Retargeting │ • Referral│
│ • Open source │ • Community │ • Sponsorships │ • Affiliate│
└─────────────────┴─────────────────┴─────────────────┴───────────┘
│ │ │ │
▼ ▼ ▼ ▼
Low CAC Medium CAC High CAC Variable CAC
Long setup Long setup Fast setup Medium setup
Channel 1: Product-Led Growth (PLG)#
PLG Models#
Freemium:
- Free forever tier with limited features
- Conversion to paid for advanced features
- Examples: Slack, Notion, Figma
Free Trial:
- Full access for limited time
- Requires payment to continue
- Examples: Netflix, Salesforce
Viral Loops:
- Users invite others as part of product use
- Built-in growth mechanism
- Examples: Dropbox, Calendly
Implementing Freemium#
1// lib/plans.ts
2export const plans = {
3 free: {
4 name: 'Free',
5 price: 0,
6 limits: {
7 projects: 3,
8 members: 1,
9 storage: '100MB',
10 features: ['basic_analytics', 'email_support'],
11 },
12 },
13 pro: {
14 name: 'Pro',
15 price: 29,
16 limits: {
17 projects: Infinity,
18 members: 10,
19 storage: '10GB',
20 features: ['advanced_analytics', 'priority_support', 'api_access'],
21 },
22 },
23 team: {
24 name: 'Team',
25 price: 99,
26 limits: {
27 projects: Infinity,
28 members: Infinity,
29 storage: '100GB',
30 features: ['all', 'sso', 'audit_logs', 'dedicated_support'],
31 },
32 },
33};Upgrade Triggers:
1// components/UpgradeTrigger.tsx
2export function checkUpgradeTrigger(usage: Usage, plan: Plan) {
3 const triggers = [];
4
5 // Approaching limits
6 if (usage.projects >= plan.limits.projects * 0.8) {
7 triggers.push({
8 type: 'limit_approaching',
9 message: `You've used ${usage.projects} of ${plan.limits.projects} projects`,
10 });
11 }
12
13 // Feature gate
14 if (usage.wantedFeature && !plan.limits.features.includes(usage.wantedFeature)) {
15 triggers.push({
16 type: 'feature_gate',
17 message: `Upgrade to unlock ${usage.wantedFeature}`,
18 });
19 }
20
21 // Value realization
22 if (usage.daysActive > 7 && usage.actionsCompleted > 50) {
23 triggers.push({
24 type: 'value_realized',
25 message: 'You're getting great value - upgrade for even more',
26 });
27 }
28
29 return triggers;
30}Viral Mechanics#
Referral Program:
1// app/api/referrals/route.ts
2export async function POST(request: NextRequest) {
3 const session = await auth();
4 const { referredEmail } = await request.json();
5
6 // Create referral
7 const referral = await prisma.referral.create({
8 data: {
9 referrerId: session.user.id,
10 referredEmail,
11 code: generateCode(),
12 status: 'PENDING',
13 },
14 });
15
16 // Send invite email
17 await sendReferralEmail(referredEmail, referral.code, session.user.name);
18
19 return NextResponse.json({ success: true, code: referral.code });
20}
21
22// When referred user signs up
23export async function claimReferral(userId: string, code: string) {
24 const referral = await prisma.referral.update({
25 where: { code, status: 'PENDING' },
26 data: {
27 referredId: userId,
28 status: 'COMPLETED',
29 completedAt: new Date(),
30 },
31 });
32
33 // Reward both parties
34 await Promise.all([
35 addCredits(referral.referrerId, 100), // Referrer gets credits
36 addCredits(userId, 50), // Referred gets credits
37 ]);
38}PLG Metrics#
| Metric | Definition | Target |
|---|---|---|
| Free to Paid Conversion | % of free users who convert | 2-5% |
| Time to Value | Time to first "aha" moment | < 5 minutes |
| Viral Coefficient | New users per existing user | > 1.0 |
| Activation Rate | % completing key action | > 40% |
Channel 2: Content Marketing#
Content Strategy Framework#
Content Pillars:
- Educational - How to solve problems (SEO)
- Thought Leadership - Industry perspectives
- Product - Feature announcements, tutorials
- Social Proof - Case studies, testimonials
SEO Implementation#
Blog Post Schema:
1// types/content.ts
2interface BlogPost {
3 slug: string;
4 title: string;
5 description: string;
6 content: string;
7 keywords: string[];
8 publishedAt: Date;
9 author: Author;
10 category: string;
11 readingTime: number;
12}
13
14// Generate SEO metadata
15export function generateSEOMetadata(post: BlogPost) {
16 return {
17 title: `${post.title} | Your Company Blog`,
18 description: post.description,
19 openGraph: {
20 title: post.title,
21 description: post.description,
22 type: 'article',
23 publishedTime: post.publishedAt.toISOString(),
24 authors: [post.author.name],
25 },
26 keywords: post.keywords.join(', '),
27 };
28}Content Calendar:
| Week | Educational | Product | Social Proof |
|---|---|---|---|
| 1 | How-to guide | Feature spotlight | |
| 2 | Industry trends | Customer story | |
| 3 | Tutorial | Integration guide | |
| 4 | Best practices | Case study |
Social Media Strategy#
Platform Selection:
| Platform | Best For | Content Type |
|---|---|---|
| B2B, professional | Thought leadership | |
| Twitter/X | Tech, real-time | Product updates, engagement |
| YouTube | Tutorials, demos | Educational video |
| TikTok | B2C, younger audience | Short-form, trending |
Content Metrics#
| Metric | Definition | Target |
|---|---|---|
| Organic Traffic | Visitors from search | 10%+ MoM growth |
| Time on Page | Engagement indicator | > 3 minutes |
| Conversion Rate | Visitors to signups | 2-5% |
| Backlinks | External links to content | Growing |
Channel 3: Paid Acquisition#
Channel Selection#
Search Ads (Google, Bing):
- High intent traffic
- Best for known problem/solution
- Competitive keywords can be expensive
Social Ads (Meta, LinkedIn, Twitter):
- Awareness and consideration
- Good targeting options
- Works for creating demand
Retargeting:
- Re-engage website visitors
- High conversion rates
- Lower cost per acquisition
Campaign Structure#
1// Campaign organization
2const campaignStructure = {
3 awareness: {
4 objective: 'reach',
5 audiences: ['lookalike', 'interest_based'],
6 content: ['educational_videos', 'blog_posts'],
7 budget: '20%',
8 },
9 consideration: {
10 objective: 'traffic',
11 audiences: ['website_visitors', 'engaged_social'],
12 content: ['feature_highlights', 'comparisons'],
13 budget: '30%',
14 },
15 conversion: {
16 objective: 'conversions',
17 audiences: ['high_intent', 'trial_users', 'cart_abandoners'],
18 content: ['testimonials', 'offers', 'demos'],
19 budget: '50%',
20 },
21};Landing Page Optimization#
Test these elements:
- Headline variations
- CTA button text and color
- Social proof placement
- Form length
- Page length
1// A/B test implementation
2export function LandingPage({ variant }: { variant: 'A' | 'B' }) {
3 const headlines = {
4 A: 'Build faster with AI-powered development',
5 B: 'Ship 10x faster than your competition',
6 };
7
8 // Track which variant user sees
9 useEffect(() => {
10 analytics.track('landing_page_view', { variant });
11 }, [variant]);
12
13 return (
14 <h1>{headlines[variant]}</h1>
15 );
16}Paid Acquisition Metrics#
| Metric | Definition | Target |
|---|---|---|
| CAC | Cost to acquire customer | < 1/3 of LTV |
| ROAS | Return on ad spend | > 3x |
| CTR | Click-through rate | > 2% |
| CVR | Conversion rate | > 5% |
| Payback | Time to recover CAC | < 12 months |
Channel 4: Partnerships#
Partnership Types#
Integration Partners:
- Build into other products' ecosystems
- Examples: Slack apps, Shopify plugins
Referral Partners:
- Other companies refer customers
- Revenue share or flat fee
Reseller Partners:
- Partners sell your product
- Higher touch, enterprise focused
Affiliate Partners:
- Individuals promote your product
- Commission-based
Integration Partnership#
1// Building an integration partner program
2interface PartnerIntegration {
3 partnerId: string;
4 partnerName: string;
5 integrationType: 'oauth' | 'api_key' | 'webhook';
6 apiVersion: string;
7 endpoints: string[];
8 rateLimits: RateLimit;
9 documentation: string;
10}
11
12// Track partner-sourced users
13async function trackPartnerReferral(userId: string, partnerId: string) {
14 await prisma.userAttribution.create({
15 data: {
16 userId,
17 source: 'partner',
18 partnerId,
19 createdAt: new Date(),
20 },
21 });
22
23 // Calculate and record partner revenue share
24 // when user converts to paid
25}Affiliate Program Setup#
1// lib/affiliates.ts
2interface AffiliateConfig {
3 commissionRate: number; // Percentage of first payment
4 cookieDuration: number; // Days to track attribution
5 minimumPayout: number; // Minimum balance to withdraw
6 paymentSchedule: 'monthly' | 'weekly';
7}
8
9const affiliateConfig: AffiliateConfig = {
10 commissionRate: 0.20, // 20%
11 cookieDuration: 30,
12 minimumPayout: 100,
13 paymentSchedule: 'monthly',
14};
15
16// Track affiliate conversion
17async function trackAffiliateConversion(
18 userId: string,
19 affiliateId: string,
20 amount: number
21) {
22 const commission = amount * affiliateConfig.commissionRate;
23
24 await prisma.affiliateEarning.create({
25 data: {
26 affiliateId,
27 referredUserId: userId,
28 amount,
29 commission,
30 status: 'PENDING',
31 },
32 });
33}Channel Prioritization Framework#
ICE Scoring#
Rate each channel on:
- Impact - Potential effect (1-10)
- Confidence - Certainty it'll work (1-10)
- Ease - Difficulty to implement (1-10)
ICE Score = (Impact + Confidence + Ease) / 3
| Channel | Impact | Confidence | Ease | ICE Score |
|---|---|---|---|---|
| SEO/Blog | 8 | 6 | 5 | 6.3 |
| Product viral loop | 9 | 5 | 4 | 6.0 |
| Google Ads | 7 | 8 | 7 | 7.3 |
| Integration partner | 7 | 5 | 3 | 5.0 |
Testing Framework#
Minimum Viable Test:
- Budget: $1,000-$5,000 or 2-4 weeks effort
- Goal: Determine if channel can work
- Metric: CAC within acceptable range
Scaling Decision:
- Channel CAC < target CAC? Scale
- Channel CAC > 2x target CAC? Abandon
- Channel CAC between? Optimize or test variations
Recommended Agents#
| Phase | Agent | Purpose |
|---|---|---|
| Strategy | strategy-expert | Channel prioritization |
| Content | copywriting-expert | Blog and social content |
| Ads | marketing-expert | Paid campaign setup |
| Technical | frontend-expert | PLG implementation |
Deliverables#
| Deliverable | Description |
|---|---|
| Channel audit | Current state assessment |
| Prioritization matrix | ICE-scored channel list |
| Implementation plan | Roadmap for top channels |
| Tracking setup | Analytics for attribution |
| CAC dashboard | Cost tracking by channel |
Best Practices#
- Focus on 1-2 channels - Master before diversifying
- Measure everything - Can't optimize what you don't track
- Match channel to product - PLG for self-serve, sales for enterprise
- Iterate quickly - Test, learn, adjust
- Content compounds - SEO takes time but scales
- CAC discipline - Never scale unprofitable channels
Common Pitfalls#
- Spreading too thin - Better to master one channel
- Ignoring attribution - Know where customers come from
- Premature scaling - Don't scale before channel is profitable
- Short-term thinking - Some channels take time (SEO, community)
- No testing - Always A/B test before scaling
Related Workflows#
- Product-Market Fit - Validate before scaling
- Metrics Dashboard - Track growth KPIs
- Retention - Keep acquired users
- Landing Page - Convert traffic