The SaaS Metrics That Actually Matter: MRR, Churn, and CAC
Vanity metrics (page views, signups) feel good. These metrics tell you if the business is working.
MRR: Monthly Recurring Revenue
The most important number for a subscription SaaS:
MRR = (# paying customers) × (average monthly revenue per customer)
Track these components separately:
- New MRR: revenue from new customers
- Expansion MRR: revenue from upgrades
- Churn MRR: revenue lost from cancellations
- Net New MRR = New MRR + Expansion MRR - Churn MRR
// Pull from Stripe
const subscriptions = await stripe.subscriptions.list({
status: 'active',
expand: ['data.items.data.price'],
});
const mrr = subscriptions.data.reduce((sum, sub) => {
const monthlyAmount = sub.items.data.reduce((s, item) => {
const price = item.price;
const monthly = price.recurring?.interval === 'year'
? price.unit_amount! / 12
: price.unit_amount!;
return s + (monthly * item.quantity);
}, 0);
return sum + monthlyAmount;
}, 0) / 100; // Convert from cents
Churn Rate
Monthly Churn Rate = (customers lost this month / customers at start of month) × 100
Healthy SaaS: < 2% monthly churn. 5%+ is a crisis.
Customer Acquisition Cost (CAC)
CAC = Total Sales & Marketing Spend / New Customers Acquired
The Critical Ratio: LTV:CAC
LTV = ARPU / Churn Rate
LTV:CAC target = 3:1 or better
If LTV:CAC < 3:1, you're spending too much to acquire customers who don't stick around.
Activation Rate
Often overlooked but critical:
Activation Rate = users who complete core onboarding / total signups
Fix activation before pouring money into acquisition. A leaky funnel means growth spend is wasted.
Building a Metrics Dashboard
// Calculate key metrics from Stripe + your DB
async function getDashboardMetrics() {
const [mrr, newCustomers, churnedCustomers, activeTrials] = await Promise.all([
calculateMRR(),
getNewCustomersThisMonth(),
getChurnedCustomersThisMonth(),
getActiveTrials(),
]);
return {
mrr,
churnRate: (churnedCustomers / (await getTotalActiveCustomers())) * 100,
newMRR: await getNewMRRThisMonth(),
trialConversionRate: await getTrialConversionRate(),
};
}
Stripe integration for MRR tracking, subscription analytics, and a metrics dashboard are built into the AI SaaS Starter Kit.
Top comments (0)