Business Models & Revenue
SaaS Metrics That Matter
Track the 10 key SaaS metrics that reveal the health of your business and guide growth decisions.
The SaaS Metrics You Must Track
SaaS businesses live and die by a set of well-defined metrics. Investors speak this language. Your team should too. These metrics are not just reporting tools — they are diagnostic instruments that tell you what to fix.
MRR: Monthly Recurring Revenue
MRR is the heartbeat of SaaS. It is the total predictable revenue your business generates each month from subscriptions.
// MRR components
const mrr = {
new: 2500, // Revenue from customers who signed up this month
expansion: 800, // Revenue from upgrades and plan changes
contraction: -300, // Revenue lost to downgrades
churned: -400, // Revenue lost to cancellations
netNew: 2500 + 800 - 300 - 400, // = $2,600 net MRR added this month
};
const currentMRR = previousMRR + mrr.netNew;ARR (Annual Recurring Revenue) = MRR × 12. Used for annual planning and investor conversations.
Churn Rate
Churn is the percentage of revenue (or customers) lost in a period.
// Logo churn (customer count)
const logoChurnRate = customersLost / startingCustomers;
// 5 customers left out of 100 = 5% monthly logo churn
// Revenue churn (dollar amount)
const revenueChurnRate = mrrLost / startingMRR;
// $500 MRR lost from $10,000 = 5% monthly revenue churnGood churn benchmarks:
- Consumer SaaS: < 5% monthly
- SMB SaaS: < 3% monthly
- Enterprise SaaS: < 1% monthly
Net Revenue Retention (NRR)
NRR measures revenue from existing customers including expansions, contractions, and churn. NRR > 100% means existing customers are growing revenue faster than they churn.
function calculateNRR(
startingMRR: number,
expansionMRR: number,
contractionMRR: number,
churnedMRR: number
): number {
return (startingMRR + expansionMRR - contractionMRR - churnedMRR) / startingMRR;
}
// NRR = (10000 + 1500 - 300 - 500) / 10000 = 107%NRR benchmarks: > 100% = good, > 110% = great, > 120% = exceptional.
CAC: Customer Acquisition Cost
CAC is how much it costs to acquire one paying customer.
const cac = (salesExpense + marketingExpense) / newCustomersAcquired;
// ($15,000 sales + $10,000 marketing) / 50 new customers = $500 CACLTV: Lifetime Value
LTV is the total revenue you expect from the average customer over their lifetime.
const ltv = arpu / monthlyChurnRate;
// $49 ARPU / 0.04 churn rate = $1,225 LTVLTV:CAC Ratio
The ratio of lifetime value to acquisition cost. The most important unit economics metric.
| Ratio | Interpretation |
|---|---|
| < 1:1 | You lose money on every customer |
| 1:1 - 3:1 | Break-even to marginal |
| 3:1+ | Healthy business |
| 5:1+ | Exceptional — may be underinvesting in growth |
const ltvCacRatio = ltv / cac; // $1,225 / $500 = 2.45:1 — needs improvementCAC Payback Period
How many months until you recoup the cost of acquiring a customer.
const cacPaybackMonths = cac / arpu; // $500 / $49 = 10.2 monthsUnder 12 months is good. Under 6 months is excellent.
ARPU: Average Revenue Per User
const arpu = mrr / totalCustomers; // $49,000 / 1,000 = $49 ARPUTracking ARPU over time reveals whether you're moving upmarket (good) or downmarket (risky).
The Rule of 40
A heuristic for SaaS business health: your growth rate + profit margin should equal or exceed 40%.
const ruleOf40 = annualGrowthRate + profitMargin;
// 30% growth + 15% margin = 45 — healthy
// 50% growth + (-10%) margin = 40 — aggressive growth stage, acceptable
// 10% growth + (-20%) margin = -10 — problematicKey Takeaways
- MRR is the heartbeat of SaaS — track new, expansion, contraction, and churned MRR separately
- NRR > 100% means existing customers are growing revenue — this is the hallmark of a healthy SaaS business
- LTV:CAC ratio should be 3:1 or better — below 1:1 means you're destroying value with every new customer
- CAC payback under 12 months provides financial sustainability — you're not funding growth indefinitely before recouping costs
- The Rule of 40: growth rate + profit margin ≥ 40% is the benchmark for a healthy SaaS company
Example
// SaaS metrics calculator
interface SaaSMetrics {
mrr: number;
customers: number;
salesExpense: number;
marketingExpense: number;
newCustomers: number;
monthlyChurn: number;
expansionMRR: number;
churnedMRR: number;
}
function calculateMetrics(data: SaaSMetrics) {
const arpu = data.mrr / data.customers;
const cac = (data.salesExpense + data.marketingExpense) / data.newCustomers;
const ltv = arpu / data.monthlyChurn;
const ltvCacRatio = ltv / cac;
const cacPaybackMonths = cac / arpu;
const nrr = (data.mrr + data.expansionMRR - data.churnedMRR) / data.mrr;
return {
arpu: arpu.toFixed(2),
cac: cac.toFixed(2),
ltv: ltv.toFixed(2),
ltvCacRatio: ltvCacRatio.toFixed(2),
cacPaybackMonths: cacPaybackMonths.toFixed(1),
nrr: (nrr * 100).toFixed(1) + '%',
isHealthy: ltvCacRatio >= 3 && cacPaybackMonths <= 12,
};
}