Instructions references/attribution-guide.md references/campaign-templates.md references/hubspot-workflows.md references/international-playbooks.md scripts/calculate_cac.py
name: “marketing-demand-acquisition”
description: Creates demand generation campaigns, optimizes paid ad spend across LinkedIn, Google, and Meta, develops SEO strategies, and structures partnership programs for Series A+ startups scaling internationally. Use when planning marketing strategy, growth marketing, advertising campaigns, PPC optimization, lead generation, pipeline generation, or startup marketing budgets. Covers multi-channel acquisition (Google Ads, LinkedIn Ads, Meta Ads), CAC analysis, MQL/SQL workflows, attribution modeling, technical SEO, and co-marketing partnerships for hybrid PLG/Sales-Led motions in EU/US/Canada markets.
triggers:
demand gen
demand generation
paid ads
paid media
LinkedIn ads
Google ads
Meta ads
CAC
customer acquisition cost
lead generation
MQL
SQL
pipeline generation
acquisition strategy
HubSpot campaigns
metadata:
version: 1.1.0
author: Alireza Rezvani
category: marketing
domain: demand-generation
updated: 2025-01
Marketing Demand & Acquisition
Acquisition playbook for Series A+ startups scaling internationally (EU/US/Canada) with hybrid PLG/Sales-Led motion.
Table of Contents
Core KPIs
Demand Gen: MQL/SQL volume, cost per opportunity, marketing-sourced pipeline $, MQL→SQL rate
Paid Media: CAC, ROAS, CPL, CPA, channel efficiency ratio
SEO: Organic sessions, non-brand traffic %, keyword rankings, technical health score
Partnerships: Partner-sourced pipeline $, partner CAC, co-marketing ROI
Demand Generation Framework
Funnel Stages
Stage Tactics Target TOFU Paid social, display, content syndication, SEO Brand awareness, traffic MOFU Paid search, retargeting, gated content, email nurture MQLs, demo requests BOFU Brand search, direct outreach, case studies, trials SQLs, pipeline $
Campaign Planning Workflow
Define objective, budget, duration, audience
Select channels based on funnel stage
Create campaign in HubSpot with proper UTM structure
Configure lead scoring and assignment rules
Launch with test budget, validate tracking
Validation: UTM parameters appear in HubSpot contact records
UTM Structure
utm_source={channel} // linkedin, google, meta
utm_medium={type} // cpc, display, email
utm_campaign={campaign-id} // q1-2025-linkedin-enterprise
utm_content={variant} // ad-a, email-1
utm_term={keyword} // [paid search only]
Channel Selection Matrix
Channel Best For CAC Range Series A Priority LinkedIn Ads B2B, Enterprise, ABM $150-400 High Google Search High-intent, BOFU $80-250 High Google Display Retargeting $50-150 Medium Meta Ads SMB, visual products $60-200 Medium
LinkedIn Ads Setup
Create campaign group for initiative
Structure: Awareness → Consideration → Conversion campaigns
Target: Director+, 50-5000 employees, relevant industries
Start $50/day per campaign
Scale 20% weekly if CAC < target
Validation: LinkedIn Insight Tag firing on all pages
Google Ads Setup
Prioritize: Brand → Competitor → Solution → Category keywords
Structure ad groups with 5-10 tightly themed keywords
Create 3 responsive search ads per ad group (15 headlines, 4 descriptions)
Maintain negative keyword list (100+)
Start Manual CPC, switch to Target CPA after 50+ conversions
Validation: Conversion tracking firing, search terms reviewed weekly
Budget Allocation (Series A, $40k/month)
Channel Budget Expected SQLs LinkedIn $15k 10 Google Search $12k 20 Google Display $5k 5 Meta $5k 8 Partnerships $3k 5
See campaign-templates.md for detailed structures.
SEO Strategy
Technical Foundation Checklist
Keyword Strategy
Tier Type Volume Priority 1 High-intent BOFU 100-1k First 2 Solution-aware MOFU 500-5k Second 3 Problem-aware TOFU 1k-10k Third
On-Page Optimization
URL: Include primary keyword, 3-5 words
Title tag: Primary keyword + brand (60 chars)
Meta description: CTA + value prop (155 chars)
H1: Match search intent (one per page)
Content: 2000-3000 words for comprehensive topics
Internal links: 3-5 relevant pages
Validation: Google Search Console shows page indexed, no errors
Link Building Priorities
Digital PR (original research, industry reports)
Guest posting (DA 40+ sites only)
Partner co-marketing (complementary SaaS)
Community engagement (Reddit, Quora)
Partnerships
Partnership Tiers
Tier Type Effort ROI 1 Strategic integrations High Very high 2 Affiliate partners Medium Medium-high 3 Customer referrals Low Medium 4 Marketplace listings Medium Low-medium
Partnership Workflow
Identify partners with overlapping ICP, no competition
Outreach with specific integration/co-marketing proposal
Define success metrics, revenue model, term
Create co-branded assets and partner tracking
Enable partner sales team with demo training
Validation: Partner UTM tracking functional, leads routing correctly
Affiliate Program Setup
Select platform (PartnerStack, Impact, Rewardful)
Configure commission structure (20-30% recurring)
Create affiliate enablement kit (assets, links, content)
Recruit through outbound, inbound, events
Validation: Test affiliate link tracks through to conversion
See international-playbooks.md for regional tactics.
Attribution
Model Selection
Model Use Case First-Touch Awareness campaigns Last-Touch Direct response W-Shaped (40-20-40) Hybrid PLG/Sales (recommended)
HubSpot Attribution Setup
Navigate to Marketing → Reports → Attribution
Select W-Shaped model for hybrid motion
Define conversion event (deal created)
Set 90-day lookback window
Validation: Run report for past 90 days, all channels show data
Weekly Metrics Dashboard
Metric Target MQLs Weekly target SQLs Weekly target MQL→SQL Rate >15% Blended CAC <$300 Pipeline Velocity <60 days
See attribution-guide.md for detailed setup.
scripts/
Script Purpose Usage calculate_cac.pyCalculate blended and channel CAC python scripts/calculate_cac.py --spend 40000 --customers 50
HubSpot Integration
Campaign tracking with UTM parameters
Lead scoring and MQL/SQL workflows
Attribution reporting (multi-touch)
Partner lead routing
See hubspot-workflows.md for workflow templates.
References
Channel Benchmarks (B2B SaaS Series A)
Metric LinkedIn Google Search SEO Email CTR 0.4-0.9% 2-5% 1-3% 15-25% CVR 1-3% 3-7% 2-5% 2-5% CAC $150-400 $80-250 $50-150 $20-80 MQL→SQL 10-20% 15-25% 12-22% 8-15%
MQL→SQL Handoff
SQL Criteria
Required:
✅ Job title: Director+ or budget authority
✅ Company size: 50-5000 employees
✅ Budget: $10k+ annual
✅ Timeline: Buying within 90 days
✅ Engagement: Demo requested or high-intent action
SLA
Handoff Target SDR responds to MQL 4 hours AE books demo with SQL 24 hours First demo scheduled 3 business days
Validation: Test lead through workflow, verify notifications and routing.
Proactive Triggers
Over-relying on one channel → Single-channel dependency is a business risk. Diversify.
No lead scoring → Not all leads are equal. Route to revenue-operations for scoring.
CAC exceeding LTV → Demand gen is unprofitable. Optimize or cut channels.
No nurture for non-ready leads → 80% of leads aren’t ready to buy. Nurture converts them later.
paid-ads : For executing paid acquisition campaigns.
content-strategy : For content-driven demand generation.
email-sequence : For nurture sequences in the demand funnel.
campaign-analytics : For measuring demand gen effectiveness.
Attribution Guide
Multi-touch attribution setup, analysis, and reporting.
Table of Contents
Attribution Models
Model Comparison
Model
Credit Distribution
Best For
First-Touch
100% to first interaction
Awareness campaigns
Last-Touch
100% to last interaction
Direct response, BOFU
Linear
Equal across all touchpoints
Simple full-funnel view
Time Decay
More credit to recent touches
Long sales cycles
W-Shaped
40% first, 20% middle, 40% last
Hybrid PLG/Sales-Led
Recommended Model: W-Shaped
For Series A hybrid motion:
40% credit to first touch (awareness)
20% distributed across middle touches
40% credit to last touch (conversion)
Rationale: Balances discovery and closing influence.
HubSpot Attribution Setup
Enable Attribution Reports
Navigate to Marketing → Reports → Attribution
Select attribution model (W-Shaped recommended)
Define conversion event (deal created, SQL stage)
Set lookback window (90 days typical)
Attribution Report Types
Report
Purpose
Frequency
Revenue Attribution
Credit revenue to channels
Monthly
Content Attribution
Credit to content assets
Weekly
Campaign Attribution
Credit to campaigns
Per campaign
Custom Attribution Report
Create: Marketing → Reports → Create Report
Metrics:
Marketing-sourced pipeline $
Marketing-influenced revenue
CAC by channel
ROAS by campaign
Dimensions:
Channel (Organic, Paid, Email, Social, Referral)
Campaign
Region (US, EU, Canada)
Funnel stage (TOFU, MOFU, BOFU)
Validation: Run report for past 90 days. Verify all channels appear with data.
Google Analytics Configuration
GA4 Events to Track
Engagement Events:
page_view (auto-tracked)
scroll (75% depth)
video_play (product demos)
file_download (whitepapers, eBooks) Conversion Events:
sign_up (free trial, account)
demo_request (calendar booking)
contact_form (inbound interest)
pricing_view (pricing page visit) Custom Dimensions
Dimension
Source
Purpose
User Type
CRM sync
Free vs Paid
Plan Type
CRM sync
Starter, Pro, Enterprise
Lead Status
HubSpot
MQL, SQL, Customer
Campaign ID
UTM
HubSpot campaign
GA4 + HubSpot Integration
Install HubSpot tracking code (includes GA4)
Or use Google Tag Manager for advanced tracking
Sync GA4 audiences → HubSpot lists for retargeting
Import GA4 conversions to Google Ads
Validation: Real-time report shows events firing. Conversion events marked correctly.
Reporting Dashboards
Weekly Performance Dashboard
Metric
Purpose
Target
Visits
Traffic volume
+10% WoW
Unique visitors
Reach
+5% WoW
Bounce rate
Engagement
<50%
MQLs
Lead volume
Weekly target
SQLs
Pipeline
Weekly target
Conversion rate
Efficiency
>2%
Monthly Executive Dashboard
KPI
Formula
Target
Marketing-Sourced Pipeline
Sum of new pipeline $
$X/month
Marketing-Sourced Revenue
Closed-won from marketing
$Y/month
Blended CAC
Total spend / customers
<$Z
MQL→SQL Rate
SQLs / MQLs
>15%
Pipeline Velocity
Avg days in pipeline
<60 days
ROMI
Revenue / Marketing spend
>3:1
Dashboard Build Process
Define KPIs with leadership
Create data sources in HubSpot
Build visualizations (charts, tables)
Set up automated refresh
Schedule weekly/monthly distribution
Validation: Dashboard shows last 7 days data. All metrics calculating correctly.
A/B Testing Framework
ICE Prioritization
Formula: ICE = (Impact × Confidence × Ease) ÷ 3
Factor
Rating
Description
Impact
1-10
Effect on primary metric
Confidence
1-10
Certainty of success
Ease
1-10
Implementation difficulty
Test Template
Hypothesis: [Adding a case study carousel to pricing will
increase demo requests by 20%]
Metric: [Demo requests from /pricing page]
Sample Size: [1000 visitors per variant]
Duration: [2 weeks or until significance]
Success Criteria: [20% lift, 95% confidence]
Variant A (Control): [Current pricing page]
Variant B (Treatment): [Pricing page + case study carousel]
Tools: [HubSpot A/B test or Google Optimize] Statistical Requirements
Minimum confidence: 95%
Minimum sample: 1000 visitors per variant
Minimum duration: 2 weeks
Do not stop tests early (false positives)
Common Test Categories
Landing Page:
Headline variations
CTA copy and color
Form length
Social proof placement
Hero image type
Ad Creative:
Format (static vs video)
Messaging angle
Audience targeting
Landing page destination
Email:
Subject line length
Personalization depth
Send time
CTA placement
Test Velocity Target
Series A: 4-6 tests per month
Realistic win rate: 30-40%
Document all results (wins and losses)
Build testing knowledge base
Validation: Test reaches statistical significance before declaring winner.
Campaign Templates
Ready-to-use campaign briefs and structures for LinkedIn, Google, and Meta.
Table of Contents
Campaign Brief Template
Use for every campaign:
Campaign Name: [Q2-2025-LinkedIn-ABM-Enterprise]
Objective: [Generate 50 SQLs from Enterprise accounts ($50k+ ACV)]
Budget: [$15k/month]
Duration: [90 days]
Channels: [LinkedIn Ads, Retargeting, Email]
Audience: [Director+ at SaaS companies, 500-5000 employees, EU/US]
Offer: [Gated Industry Benchmark Report]
Success Metrics:
- Primary: 50 SQLs, <$300 CPO
- Secondary: 500 MQLs, 10% MQL→SQL rate, 40% email open rate
HubSpot Setup:
- Campaign ID: [create in HubSpot]
- Lead scoring: +20 for download, +30 for demo request
- Attribution: First-touch + Multi-touch
Handoff Protocol:
- SQL criteria: Title + Company size + Budget confirmed
- Routing: Enterprise SDR team via HubSpot workflow
- SLA: 4-hour response time Validation: Campaign appears in HubSpot with all assets tagged.
LinkedIn Ads Structure
Account Hierarchy
Account
└─ Campaign Group: [Q2-2025-Enterprise-ABM]
├─ Campaign 1: [Awareness - Thought Leadership]
│ ├─ Ad Set: [CTO/VP Eng, US, Tech Companies]
│ └─ Creatives: [3 carousel posts, 2 video ads]
├─ Campaign 2: [Consideration - Product Education]
│ ├─ Ad Set: [Engaged audience, retargeting]
│ └─ Creatives: [2 lead gen forms, 1 landing page]
└─ Campaign 3: [Conversion - Demo Requests]
├─ Ad Set: [Website visitors, content downloaders]
└─ Creatives: [Direct demo CTA, case study] Targeting Settings
Parameter
Series A Sweet Spot
Company Size
50-5000 employees
Job Titles
Director+, VP+, C-level
Industries
Software, SaaS, Tech Services
Budget
Start $50/day per campaign
Scaling Rules
CAC < target → Increase budget 20% weekly
CAC > target → Pause, optimize, relaunch
Scale 20% weekly maximum to maintain performance
Lead Gen Forms vs Landing Pages
Type
Conversion
Quality
Use Case
Lead Gen Forms
2-3x higher
Lower
TOFU/MOFU
Landing Pages
Lower
Higher
BOFU/demos
Validation: LinkedIn Insight Tag firing. Matched audiences syncing.
Google Ads Structure
Campaign Priority
Search - Brand (highest priority, protect brand terms)
Search - Competitor (steal market share)
Search - Solution (problem-aware buyers)
Search - Product Category (earlier stage)
Display - Retargeting (re-engage warm traffic)
Search Campaign Template
Campaign: [Search-Solution-Keywords]
├─ Ad Group: [project management software]
│ ├─ Keywords:
│ │ - "project management software" [Phrase]
│ │ - "best project management tool" [Phrase]
│ │ - +project +management +solution [Broad Match Modifier]
│ └─ Ads: [3 responsive search ads]
│
└─ Ad Group: [team collaboration tools]
├─ Keywords: [5-10 tightly themed keywords]
└─ Ads: [3 responsive search ads] Keyword Strategy
Type
Match
Bid Priority
Brand Terms
Exact
High - protect brand
Competitor Terms
Phrase
Medium - comparison
Solution Terms
Phrase
Medium - category
Problem Terms
Broad
Lower - education
Negative Keywords (Maintain 100+)
free, cheap, jobs, career, reviews, salary, login, support,
download, tutorial, course, certification, example, template Bid Strategy Progression
New campaigns: Manual CPC (control)
After 50+ conversions: Target CPA
After 100+ conversions: Maximize Conversions with tCPA
EU markets: Bid 15-20% higher for same quality
Validation: Conversion tracking firing. Search terms report reviewed weekly.
Meta Ads Structure
When to Use Meta
Scenario
Meta
LinkedIn
ACV <$10k
✅
❌
Visual product
✅
❌
SMB audience
✅
❌
Enterprise
❌
✅
Campaign Template
Campaign Objective: [Conversions]
├─ Ad Set 1: [Lookalike - 1% of converters]
│ └─ Placement: [Feed + Stories, Auto]
├─ Ad Set 2: [Interest - Business Software]
│ └─ Placement: [Feed only]
└─ Ad Set 3: [Retargeting - Website 30d]
└─ Placement: [All placements] Creative Best Practices
Video format: 1:1 or 9:16 for Stories
First 3 seconds: Hook with problem or result
Show product UI in action
Add captions (85% watch muted)
Test 3-5 variants per campaign
Validation: Meta Pixel events firing. Conversion values passing correctly.
Ad Copy Frameworks
LinkedIn Thought Leadership
[Industry insight or contrarian take]
[Supporting data point or experience]
[Call to discuss or engage]
#RelevantHashtag #Industry LinkedIn Social Proof
[Customer result with specific numbers]
"[Customer quote]"
- [Name, Title, Company]
[Soft CTA: See how →] Google Responsive Search Ads
Headlines (15 required):
H1-3: Value props (Save 10 hours/week, Trusted by 500+ teams)
H4-6: Features (AI-powered, Real-time sync, Mobile app)
H7-9: Social proof (4.8★ G2 rating, Used by Microsoft)
H10-12: CTAs (Start free trial, Book demo, See pricing)
H13-15: Dynamic keyword insertion
Descriptions (4 required):
D1: Primary value prop + CTA (30-60 chars)
D2: Feature list + differentiator (60-90 chars)
D3: Social proof + urgency (45-90 chars)
D4: Backup generic (60-90 chars)
Validation: Ad strength score of "Excellent" before launch.
HubSpot Workflow Templates
Pre-built workflow configurations for lead scoring, nurturing, and assignment.
Table of Contents
Campaign Tracking Setup
Create Campaign in HubSpot
Navigate to Marketing → Campaigns → Create Campaign
Name using convention: Q[N]-[YEAR]-[CHANNEL]-[CAMPAIGN-TYPE]
Example: Q2-2025-LinkedIn-ABM-Enterprise
Tag all assets (landing pages, emails, ads) with campaign ID
UTM Parameter Structure
utm_source={channel} // linkedin, google, facebook
utm_medium={type} // cpc, display, email, organic
utm_campaign={campaign-id} // q2-2025-linkedin-abm-enterprise
utm_content={variant} // ad-variant-a, email-1
utm_term={keyword} // [for paid search only] Validation: Verify UTM parameters appear in HubSpot contact records after test submission.
Lead Scoring Configuration
Navigate to Configuration
Settings → Marketing → Lead Scoring
Scoring Rules
Action
Points
Rationale
Content download
+10 to +20
Based on content depth
Demo request
+30
High intent signal
Pricing page visit
+15
Commercial intent
Webinar attendance
+20
Engaged prospect
Email open
+2
Basic engagement
Email click
+5
Active interest
Channel Quality Modifiers
Source
Points
Rationale
LinkedIn
+5
Professional context
Google Search
+10
Active search intent
Organic
+15
Self-discovery
Referral
+20
Pre-qualified
Validation: Test lead scoring by creating a test contact and triggering each action.
MQL to SQL Workflow
SQL Definition Criteria
Required (all must be true):
✅ Job title: Director+ (or Budget Authority confirmed)
✅ Company size: 50-5000 employees
✅ Budget: $10k+ annual
✅ Timeline: Buying within 90 days
✅ Engagement: Demo requested OR High intent action Workflow Configuration
Trigger: Lead score reaches MQL threshold (>75 points)
Action 1: Send automated email to SDR with lead details
Action 2: Create task for SDR qualification call
Branch Logic:
If qualified → Update lifecycle stage to SQL, assign to AE
If not qualified → Move to nurture list, reduce lead score by 30
SLA Configuration
Handoff
Target
Escalation
SDR responds to MQL
4 hours
Manager notification
AE books demo with SQL
24 hours
Director notification
First demo scheduled
3 business days
VP notification
Validation: Test workflow with a sample lead. Verify notifications trigger correctly.
Partner Lead Tracking
Create Partner Property
Settings → Properties → Create Property
Property name: Partner Source
Type: Dropdown select
Values: Partner A, Partner B, Affiliate Network, Direct
Partner UTM Configuration
Partner links: ?utm_source=partner-name&utm_medium=referral Lead Assignment Workflow
Trigger: Contact property Partner Source is set
Action: Assign to Partner Manager
Notification: Slack alert when partner lead arrives
Partner Reporting Dashboard
Create custom report: Marketing → Reports → Create Report
Metrics: Leads, Pipeline, Revenue by Partner Source
Dimensions: Partner Name, Time Period
Validation: Submit test lead with partner UTM. Verify property populates and routing works.
Nurture Sequences
Lost Opportunity Recycle
Trigger: Deal stage = Closed Lost
Sequence:
Day 0: Add to nurture list, remove from active campaigns
Day 30: Educational content email
Day 60: Industry insights email
Day 90: Re-engagement offer email
Month 6: SDR re-qualification task
TOFU to MOFU Progression
Trigger: Contact downloads 2+ content pieces
Sequence:
Day 0: Thank you email with related content
Day 3: Case study email
Day 7: Webinar invitation
Day 14: Demo offer (soft CTA)
Closed Lost Reason Tracking
Configure deal properties to capture:
Price too high
Missing features
Chose competitor
No budget
Bad timing
Champion left company
Use data to inform: Product roadmap, pricing adjustments, competitive positioning.
International Market Playbooks
Market-specific tactics for EU, US, and Canada expansion.
Table of Contents
EU Market Entry
Compliance Requirements
Requirement
Implementation
GDPR consent
Double opt-in for email
Cookie consent
Explicit consent banner
Data storage
EU data center option
Privacy policy
EU-specific language
HubSpot Configuration:
Enable double opt-in in Forms settings
Configure consent tracking properties
Set up GDPR deletion workflows
Localization Priority
Language
Market Priority
Revenue Potential
German (DE)
High
Largest EU economy
French (FR)
High
Second largest EU
Spanish (ES)
Medium
Growing tech sector
Dutch (NL)
Medium
English proficiency
Italian (IT)
Lower
Later expansion
Channel Mix (EU)
Channel
Budget %
Rationale
LinkedIn
40%
Primary B2B channel
Google Ads
25%
High intent capture
SEO
20%
Long-term investment
Partnerships
15%
Local credibility
EU Messaging Adjustments
More formal tone than US
Focus on data security and compliance
Emphasize local customer references
Include EU headquarters or presence
Display prices in EUR
Validation: Test landing pages with EU VPN. Verify consent flows work correctly.
US Market Entry
Market Characteristics
Aspect
US Approach
Messaging
Direct, ROI-focused
Tone
Less formal than EU
Sales cycle
Faster decision-making
Proof points
Dollar impact, not features
Channel Mix (US)
Channel
Budget %
Rationale
Google Ads
35%
High commercial intent
LinkedIn
30%
B2B targeting
SEO
20%
Competitive necessity
Partnerships
15%
Industry associations
Partner Ecosystem
Partner Type
Examples
Review sites
G2, Capterra, TrustRadius
Industry associations
SaaStr, ProductLed
Integration partners
Salesforce, HubSpot
Channel partners
VARs, consultants
Content Adjustments
Case studies with $ impact metrics
Faster, more aggressive CTAs
Video testimonials with customers
Comparison pages (vs. competitors)
Validation: US-based speed test. Payment processing in USD functional.
Canada Market Entry
Market Characteristics
Aspect
Canada Approach
Language
English + French (Quebec)
Regulation
PIPEDA compliance
Messaging
Mix of US and EU styles
Pricing
CAD display preferred
Regional Considerations
Region
Language
Focus
Ontario
English
Tech hub, Toronto
British Columbia
English
Vancouver tech scene
Quebec
French
Requires localization
Alberta
English
Energy sector
Channel Mix (Canada)
Channel
Budget %
Rationale
Google Ads
35%
Primary acquisition
LinkedIn
30%
Professional targeting
SEO
20%
Local content
Partnerships
15%
Local associations
Validation: French Quebec landing page tested. CAD pricing displays correctly.
Budget Allocation by Region
Series A Recommended Split
Region
Budget %
Expected CAC
US
50%
$150-300
EU
35%
$200-400
Canada
15%
$175-350
Channel by Region Matrix
Channel
US
EU
Canada
LinkedIn
30%
40%
30%
Google
35%
25%
35%
SEO
20%
20%
20%
Partners
15%
15%
15%
Scaling Criteria
Expand regional budget when:
CAC < 80% of target for 4 consecutive weeks
MQL→SQL rate > regional benchmark
Sales team has regional capacity
Localization Checklist
Website Localization
Content Localization
Campaign Localization
Legal Localization
Validation: Native speaker review of all localized content before launch.
#!/usr/bin/env python3
"""
CAC (Customer Acquisition Cost) Calculator
Calculate blended and channel-specific CAC for marketing campaigns.
Supports multiple time periods and channel breakdowns.
"""
import sys
from typing import Dict, List
def calculate_cac (total_spend: float , customers_acquired: int ) -> float :
"""Calculate basic CAC"""
if customers_acquired == 0 :
return 0.0
return round (total_spend / customers_acquired, 2 )
def calculate_channel_cac (channel_data: List[Dict]) -> Dict:
"""
Calculate CAC per channel
Args:
channel_data: List of dicts with 'channel', 'spend', 'customers' keys
Returns:
Dict with channel CAC breakdown and blended CAC
"""
results = {}
total_spend = 0
total_customers = 0
for channel in channel_data:
name = channel[ 'channel' ]
spend = channel[ 'spend' ]
customers = channel[ 'customers' ]
cac = calculate_cac(spend, customers)
results[name] = {
'spend' : spend,
'customers' : customers,
'cac' : cac
}
total_spend += spend
total_customers += customers
results[ 'blended' ] = {
'total_spend' : total_spend,
'total_customers' : total_customers,
'blended_cac' : calculate_cac(total_spend, total_customers)
}
return results
def print_results (results: Dict):
"""Pretty print CAC results"""
print ( " \n " + "=" * 60 )
print ( "CAC CALCULATION RESULTS" )
print ( "=" * 60 + " \n " )
for channel, data in results.items():
if channel == 'blended' :
print ( "-" * 60 )
print ( f "BLENDED CAC" )
print ( f " Total Spend: $ { data[ 'total_spend' ] :,.2f } " )
print ( f " Total Customers: { data[ 'total_customers' ] :, } " )
print ( f " Blended CAC: $ { data[ 'blended_cac' ] :,.2f } " )
else :
print ( f " { channel.upper() } " )
print ( f " Spend: $ { data[ 'spend' ] :,.2f } " )
print ( f " Customers: { data[ 'customers' ] :, } " )
print ( f " CAC: $ { data[ 'cac' ] :,.2f } " )
print ()
def main ():
# Example data - replace with your actual numbers
example_data = [
{ 'channel' : 'LinkedIn Ads' , 'spend' : 15000 , 'customers' : 10 },
{ 'channel' : 'Google Search' , 'spend' : 12000 , 'customers' : 20 },
{ 'channel' : 'SEO/Organic' , 'spend' : 5000 , 'customers' : 15 },
{ 'channel' : 'Partnerships' , 'spend' : 3000 , 'customers' : 5 },
]
print ( "Marketing CAC Calculator" )
print ( "Edit the script to input your actual channel data \n " )
results = calculate_channel_cac(example_data)
print_results(results)
# CAC benchmarks
print ( " \n " + "=" * 60 )
print ( "B2B SAAS BENCHMARKS (Series A)" )
print ( "=" * 60 )
print ( "LinkedIn Ads: $150-$400" )
print ( "Google Search: $80-$250" )
print ( "SEO/Organic: $50-$150" )
print ( "Partnerships: $100-$300" )
print ( "Blended Target: <$300" )
if __name__ == "__main__" :
main()