Introduction
Unit economics are the fundamental financial metrics that determine whether your SaaS business is sustainable. Understanding and optimizing CAC, LTV, and their relationship is essential for growth.
This guide provides deep dives into the key unit economics metrics every SaaS founder needs to master.
Customer Acquisition Cost (CAC)
What is CAC?
CAC is the total cost of acquiring a new customer:
CAC = Total Acquisition Costs / Number of New Customers
CAC Components
Acquisition Costs Include:
| Category | Examples |
|---|---|
| Marketing | Ads, content, events |
| Sales | Salaries, commissions, tools |
| Marketing ops | Software, agencies |
| Overhead | Allocated costs |
CAC Calculation
def calculate_cac():
marketing_spend = get_marketing_spend()
sales_spend = get_sales_spend()
total_acquisition = marketing_spend + sales_spend
new_customers = get_new_customers()
cac = total_acquisition / new_customers
return cac
CAC by Channel
def cac_by_channel():
channels = ['paid', 'organic', 'referral', 'direct']
for channel in channels:
spend = get_channel_spend(channel)
customers = get_customers_by_channel(channel)
cac = spend / customers if customers > 0 else 0
print(f"{channel}: ${cac}")
CAC Benchmarks
| Stage | CAC | Notes |
|---|---|---|
| Early stage | $200-$500 | Building foundation |
| Growth | $500-$1,500 | Scaling channels |
| Mature | $1,500-$5,000 | Enterprise focus |
Customer Lifetime Value (LTV)
What is LTV?
LTV is the total revenue expected from a customer:
LTV = ARPU ร Gross Margin ร Customer Lifetime
LTV Calculation Methods
Simple LTV:
LTV = Average Revenue Per User ร Gross Margin ร Churned Months
Example:
ARPU: $100/month
Gross Margin: 80%
Churn: 5%/month (20 month lifetime)
LTV = $100 ร 0.80 ร 20 = $1,600
Advanced LTV:
def calculate_ltv():
# Get cohort data
cohort = get_cohort_data()
# Project future revenue
projected_revenue = 0
margin = 0.80
discount_rate = 0.10
for month in range(1, 37):
probability = cohort.survival_rate(month)
revenue = cohort.revenue(month)
projected_revenue += probability * revenue / ((1 + discount_rate) ** month)
return projected_revenue * margin
LTV Benchmarks
| Segment | LTV | Typical Range |
|---|---|---|
| SMB | $1,000-$5,000 | 12-24 months |
| Mid-Market | $10K-$50K | 24-48 months |
| Enterprise | $50K-$500K | 36-60+ months |
The LTV:CAC Ratio
What is LTV:CAC?
The ratio measures the return on acquisition investment:
LTV:CAC = LTV / CAC
Healthy Ratios
| Ratio | Interpretation |
|---|---|
| < 1:1 | Losing money on acquisition |
| 1:1 to 3:1 | Healthy, room for improvement |
| 3:1 to 5:1 | Excellent efficiency |
| > 5:1 | Underinvesting in growth |
Optimizing LTV:CAC
Ways to Improve:
-
Increase LTV
- Raise prices
- Reduce churn
- Drive expansion
- Improve gross margin
-
Decrease CAC
- Optimize marketing channels
- Improve conversion rates
- Build referral programs
- Better targeting
Payback Period
What is Payback Period?
Payback period is how long until acquired customers become profitable:
Payback Period = CAC / (ARPU ร Gross Margin)
Calculation
def calculate_payback():
cac = get_cac()
arpu = get_arpu()
gross_margin = 0.80
monthly_margin = arpu * gross_margin
payback_months = cac / monthly_margin
return payback_months # in months
Payback Benchmarks
| Stage | Payback | Target |
|---|---|---|
| Bootstrapped | < 12 months | 6-9 months |
| VC-backed | 12-18 months | 12-15 months |
CLTV:CAC Ratio
What is CLTV:CAC?
Customer Lifetime Value to CAC ratio considers cost to serve:
CLTV:CAC = (LTV - Cost to Serve) / CAC
Cost to Serve
Include:
- Support costs
- Hosting/infrastructure
- Variable costs
- Credit card fees
def cost_to_serve(customer):
support_cost = customer.support_tickets * 15
hosting_cost = customer.usage_gb * 0.10
fees = customer.revenue * 0.029
return support_cost + hosting_cost + fees
Cohort Analysis for Unit Economics
Building Cohorts
def cohort_analysis():
cohorts = {}
for customer in get_all_customers():
cohort_key = customer.signup_month
if cohort_key not in cohorts:
cohorts[cohort_key] = []
cohorts[cohort_key].append(customer)
for month, cohort in cohorts.items():
cac = cohort.acquisition_cost / cohort.size
ltv = cohort.ltv_24_months()
print(f"{month}: CAC=${cac}, LTV=${ltv}, Ratio={ltv/cac}")
Cohort Comparison
| Metric | Q1 Cohort | Q2 Cohort | Q3 Cohort |
|---|---|---|---|
| CAC | $500 | $450 | $400 |
| 12-month LTV | $1,200 | $1,400 | $1,600 |
| LTV:CAC | 2.4x | 3.1x | 4.0x |
Optimization Strategies
Improving Unit Economics
CAC Optimization:
| Strategy | Impact |
|---|---|
| Better targeting | -20% to -30% CAC |
| Conversion optimization | -15% to -25% CAC |
| Referral programs | -20% to -40% CAC |
| Content marketing | -30% to -50% CAC |
LTV Optimization:
| Strategy | Impact |
|---|---|
| Price increase | +10% to +20% LTV |
| Churn reduction | +15% to +30% LTV |
| Expansion revenue | +20% to +50% LTV |
| Upsell programs | +15% to +30% LTV |
Unit Economics by Channel
def channel_unit_economics():
channels = get_channels()
for channel in channels:
cac = channel.cac()
ltv = channel.ltv()
ratio = ltv / cac if cac > 0 else 0
efficiency = 'Healthy' if ratio > 3 else 'Needs Work'
print(f"{channel}: LTV:CAC = {ratio}x ({efficiency})")
Modeling and Forecasting
Building Financial Models
Revenue Forecast:
def forecast_revenue():
current_mrr = 100000
growth_rate = 0.10
for month in range(1, 13):
new_customers = calculate_new_customers(month)
churned = calculate_churn(month)
current_mrr = current_mrr * (1 + growth_rate) - churned
print(f"Month {month}: ${current_mrr}")
Scenario Planning
Models:
| Scenario | Growth | CAC | Churn |
|---|---|---|---|
| Optimistic | 15%/mo | -10% | -20% |
| Base | 10%/mo | Baseline | Baseline |
| Conservative | 5%/mo | +10% | +20% |
Conclusion
Unit economics are the foundation of SaaS financial health. Master CAC, LTV, and their relationship. Optimize continuously. The best companies achieve 3:1+ LTV:CAC with payback under 12 months.
Resources
Related articles: SaaS Metrics Analytics Complete Guide and SaaS Data-Driven Decision Making
Comments