Introduction
Understanding your metrics is crucial for SaaS success. This guide covers the essential SaaS metrics, how to measure them, and how to build analytics that drive growth.
Core SaaS Metrics
Revenue Metrics
class SAASMetrics:
def __init__(self, customers, subscriptions, transactions):
self.customers = customers
self.subscriptions = subscriptions
self.transactions = transactions
def calculate_mrr(self):
"""Monthly Recurring Revenue"""
mrr = 0
for sub in self.subscriptions:
if sub.status == 'active':
mrr += sub.monthly_price
return mrr
def calculate_arr(self):
"""Annual Recurring Revenue"""
return self.calculate_mrr() * 12
def calculate_arpu(self):
"""Average Revenue Per User"""
active_customers = [c for c in self.customers if c.status == 'active']
if not active_customers:
return 0
return self.calculate_mrr() / len(active_customers)
Growth Metrics
Growth Metrics:
โโโ MRR Growth Rate
โ โโโ ((Current MRR - Previous MRR) / Previous MRR) ร 100
โ
โโโ Net Revenue Retention (NRR)
โ โโโ (Starting MRR + Expansion - Contraction - Churn) / Starting MRR
โ
โโโ Gross Revenue Retention (GRR)
โ โโโ (Starting MRR - Churn) / Starting MRR
โ
โโโ Logo Growth
โโโ (New Customers - Churned Customers) / Previous Customers
Customer Metrics
Churn Analysis
def calculate_churn_metrics(customers, period='month'):
"""Calculate various churn metrics"""
# Customer Churn Rate
start_count = customers.start_count
churned = customers.churned_count
customer_churn = (churned / start_count) * 100
# Revenue Churn
start_mrr = customers.start_mrr
churned_mrr = customers.churned_mrr
revenue_churn = (churned_mrr / start_mrr) * 100
# Net Churn (includes expansion)
expansion = customers.expansion_mrr
contraction = customers.contraction_mrr
net_churn = ((churned_mrr + contraction - expansion) / start_mrr) * 100
return {
'customer_churn': customer_churn,
'revenue_churn': revenue_churn,
'net_churn': net_churn
}
LTV and CAC
def calculate_ltv_cac(customers, subscriptions):
"""Calculate LTV and CAC"""
# Average Revenue Per User
arpu = calculate_arpu(customers, subscriptions)
# Gross Margin (typical SaaS: 70-80%)
gross_margin = 0.75
# Customer Lifespan (in months)
churn_rate = 0.05 # 5% monthly churn
lifespan = 1 / churn_rate
# Customer Lifetime Value
ltv = arpu * lifespan * gross_margin
# Customer Acquisition Cost
total_acquisition_spend = customers.acquisition_spend
new_customers = customers.new_customers_count
cac = total_acquisition_spend / new_customers
# LTV:CAC Ratio
ltv_cac_ratio = ltv / cac
return {
'ltv': ltv,
'cac': cac,
'ltv_cac_ratio': ltv_cac_ratio
}
Building Analytics Dashboards
Dashboard Components
SaaS Dashboard Essentials:
โโโ Revenue Overview
โ โโโ MRR/ARR
โ โโโ Revenue by plan
โ โโโ Revenue growth trend
โ
โโโ Customer Metrics
โ โโโ Total customers
โ โโโ New customers
โ โโโ Churned customers
โ โโโ Net revenue retention
โ
โโโ Product Usage
โ โโโ Active users
โ โโโ Feature usage
โ โโโ Session duration
โ
โโโ Financial Health
โโโ Burn rate
โโโ Runway
โโโ Unit economics
SQL Queries
-- MRR Calculation
SELECT
DATE_TRUNC('month', subscription_start_date) as month,
SUM(CASE
WHEN subscription_status = 'active'
THEN monthly_price
ELSE 0
END) as mrr
FROM subscriptions
GROUP BY DATE_TRUNC('month', subscription_start_date)
ORDER BY month;
-- Cohort Analysis
WITH cohorts AS (
SELECT
customer_id,
DATE_TRUNC('month', first_subscription_date) as cohort_month,
subscription_start_date
FROM customers
)
SELECT
cohort_month,
DATE_TRUNC('month', subscription_start_date) as month_num,
COUNT(DISTINCT customer_id) as customers,
SUM(monthly_price) as revenue
FROM cohorts c
JOIN subscriptions s ON c.customer_id = s.customer_id
WHERE s.subscription_status = 'active'
GROUP BY cohort_month, month_num
ORDER BY cohort_month, month_num;
Conclusion
SaaS metrics provide visibility into business health. Track these consistently and make data-driven decisions.
Comments