DEV Community

Atlas Whoff
Atlas Whoff

Posted on

The SaaS Metrics That Actually Matter: MRR, Churn, and CAC

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Churn Rate

Monthly Churn Rate = (customers lost this month / customers at start of month) × 100
Enter fullscreen mode Exit fullscreen mode

Healthy SaaS: < 2% monthly churn. 5%+ is a crisis.

Customer Acquisition Cost (CAC)

CAC = Total Sales & Marketing Spend / New Customers Acquired
Enter fullscreen mode Exit fullscreen mode

The Critical Ratio: LTV:CAC

LTV = ARPU / Churn Rate
LTV:CAC target = 3:1 or better
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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(),
  };
}
Enter fullscreen mode Exit fullscreen mode

Stripe integration for MRR tracking, subscription analytics, and a metrics dashboard are built into the AI SaaS Starter Kit.

Top comments (0)