Monthly Recurring Revenue (MRR)

Predictable monthly revenue from subscription customers, the foundation of SaaS business tracking

Overview

Monthly Recurring Revenue (MRR) is the most critical metric for subscription-based businesses, representing the predictable revenue generated from subscriptions on a monthly basis. MRR provides a clear view of revenue trends and business growth momentum.

Unlike one-time sales, MRR focuses on the recurring portion of revenue, making it easier to forecast future performance and understand the health of your subscription business. It's the foundation for calculating other important SaaS metrics like growth rate, churn impact, and customer lifetime value.

Formula:
MRR = Sum of all monthly subscription revenue from active customers

Key Insight

MRR should only include recurring subscription revenue. Exclude one-time fees, setup costs, and variable usage charges for the purest view of recurring business health.

New MRR

+$X

Expansion MRR

+$X

Contraction MRR

-$X

Churned MRR

-$X

Why It Matters

  • Revenue Predictability: Provides clear visibility into recurring revenue streams
  • Growth Tracking: Shows month-over-month business growth trends
  • Business Valuation: Key metric for SaaS company valuations and investor discussions
  • Strategic Planning: Enables accurate forecasting and resource planning
  • Performance Benchmarking: Standard metric for comparing SaaS business performance
  • Operational Decisions: Informs hiring, investment, and expansion decisions

How to Measure It

MRR calculation involves summing all monthly recurring subscription revenue and breaking it down into components for deeper analysis.

Basic MRR Calculation

-- Calculate total MRR by month
SELECT 
  DATE_TRUNC('month', subscription_start_date) as month,
  SUM(monthly_amount) as total_mrr,
  COUNT(DISTINCT customer_id) as active_customers,
  ROUND(SUM(monthly_amount) / COUNT(DISTINCT customer_id), 2) as arpu
FROM subscriptions
WHERE status = 'active'
  AND subscription_start_date <= CURRENT_DATE
  AND (subscription_end_date IS NULL OR subscription_end_date >= CURRENT_DATE)
GROUP BY 1
ORDER BY 1;

MRR Movement Analysis

-- Calculate MRR movements (New, Expansion, Contraction, Churn)
WITH mrr_changes AS (
  SELECT 
    customer_id,
    DATE_TRUNC('month', change_date) as month,
    change_type, -- 'new', 'expansion', 'contraction', 'churn'
    SUM(mrr_change) as mrr_impact
  FROM subscription_changes
  WHERE change_date >= '2024-01-01'
  GROUP BY 1, 2, 3
),
monthly_summary AS (
  SELECT 
    month,
    SUM(CASE WHEN change_type = 'new' THEN mrr_impact ELSE 0 END) as new_mrr,
    SUM(CASE WHEN change_type = 'expansion' THEN mrr_impact ELSE 0 END) as expansion_mrr,
    SUM(CASE WHEN change_type = 'contraction' THEN mrr_impact ELSE 0 END) as contraction_mrr,
    SUM(CASE WHEN change_type = 'churn' THEN mrr_impact ELSE 0 END) as churned_mrr
  FROM mrr_changes
  GROUP BY 1
)
SELECT 
  month,
  new_mrr,
  expansion_mrr,
  contraction_mrr,
  churned_mrr,
  (new_mrr + expansion_mrr + contraction_mrr + churned_mrr) as net_new_mrr,
  SUM(new_mrr + expansion_mrr + contraction_mrr + churned_mrr) 
    OVER (ORDER BY month) as cumulative_mrr
FROM monthly_summary
ORDER BY month;

MRR by Customer Segment

-- MRR breakdown by customer segments
SELECT 
  customer_segment,
  plan_type,
  COUNT(DISTINCT customer_id) as customers,
  SUM(monthly_amount) as segment_mrr,
  ROUND(AVG(monthly_amount), 2) as avg_mrr_per_customer,
  ROUND(100.0 * SUM(monthly_amount) / SUM(SUM(monthly_amount)) OVER (), 2) as mrr_percentage
FROM subscriptions s
JOIN customers c ON s.customer_id = c.id
WHERE s.status = 'active'
  AND s.subscription_start_date <= CURRENT_DATE
  AND (s.subscription_end_date IS NULL OR s.subscription_end_date >= CURRENT_DATE)
GROUP BY 1, 2
ORDER BY segment_mrr DESC;

Data Requirements

Track subscription start/end dates, monthly amounts, customer segments, plan changes, and ensure accurate active subscription status in your data model.

Best Practices

1. MRR Components Tracking

  • New MRR: Revenue from customers who started their first subscription
  • Expansion MRR: Additional revenue from existing customers (upgrades, add-ons)
  • Contraction MRR: Lost revenue from existing customers (downgrades)
  • Churned MRR: Revenue lost from customers who cancelled

2. Revenue Recognition Rules

  • Include only recurring subscription revenue
  • Exclude one-time setup fees and implementation costs
  • Normalize annual plans to monthly equivalent
  • Handle discounts and promotions consistently

3. Timing and Attribution

  • Use subscription start date for new MRR attribution
  • Track changes on the date they become effective
  • Handle mid-month changes with prorated calculations
  • Maintain historical MRR accuracy for trend analysis

4. Segmentation Strategies

Segment MRR By

Plan Type: Starter, Professional, Enterprise
Customer Size: SMB, Mid-market, Enterprise
Acquisition Channel: Organic, Paid, Referral
Geography: North America, Europe, APAC

5. Monitoring and Alerts

  • Set up automated MRR movement tracking
  • Create alerts for unusual MRR changes
  • Monitor MRR growth rate month-over-month
  • Track MRR per customer trends