Annual Recurring Revenue (ARR)

Yearly value of recurring revenue from subscription customers normalized to a 12-month period

Overview

Annual Recurring Revenue (ARR) represents the yearly value of recurring revenue from subscription customers, normalized to a 12-month period. It's the foundational metric for SaaS businesses, providing a clear view of predictable revenue and business growth trajectory.

ARR excludes one-time fees, professional services, and variable usage charges, focusing solely on the predictable, recurring subscription revenue. This makes it an essential metric for understanding the health and growth potential of subscription-based businesses.

Formula:
ARR = Monthly Recurring Revenue (MRR) × 12

ARR Components

New ARR: Revenue from new customers
Expansion ARR: Upsells and cross-sells to existing customers
Contracted ARR: Downgrades from existing customers
Churned ARR: Revenue lost from canceled customers

Why It Matters

  • Business Valuation: Primary metric for SaaS company valuation and fundraising
  • Growth Tracking: Measures sustainable, predictable revenue growth
  • Financial Planning: Enables accurate forecasting and budget planning
  • Investor Relations: Key metric for board meetings and investor updates
  • Operational Decisions: Guides hiring, investment, and scaling decisions
  • Performance Benchmarking: Industry standard for comparing SaaS performance

How to Measure It

Calculate ARR by annualizing recurring subscription revenue, excluding one-time charges and variable fees.

Basic ARR Calculation

-- Calculate current ARR from active subscriptions
WITH current_subscriptions AS (
  SELECT 
    customer_id,
    subscription_id,
    plan_name,
    monthly_amount,
    annual_amount,
    billing_frequency,
    subscription_status,
    start_date,
    end_date
  FROM subscriptions
  WHERE subscription_status = 'active'
    AND (end_date IS NULL OR end_date > CURRENT_DATE)
),
arr_calculation AS (
  SELECT 
    customer_id,
    subscription_id,
    plan_name,
    CASE 
      WHEN billing_frequency = 'monthly' THEN monthly_amount * 12
      WHEN billing_frequency = 'quarterly' THEN monthly_amount * 12
      WHEN billing_frequency = 'annual' THEN annual_amount
      ELSE 0
    END as annual_value
  FROM current_subscriptions
)
SELECT 
  COUNT(DISTINCT customer_id) as total_customers,
  COUNT(DISTINCT subscription_id) as total_subscriptions,
  SUM(annual_value) as current_arr,
  AVG(annual_value) as avg_arr_per_customer,
  ROUND(SUM(annual_value) / COUNT(DISTINCT customer_id), 2) as arpu_annual
FROM arr_calculation;

ARR Movement Analysis

-- Track ARR movements (new, expansion, contraction, churn)
WITH monthly_arr_changes AS (
  SELECT 
    DATE_TRUNC('month', event_date) as month,
    customer_id,
    event_type,  -- 'new', 'expansion', 'contraction', 'churn'
    arr_change
  FROM subscription_events
  WHERE event_date >= CURRENT_DATE - INTERVAL '12 months'
),
arr_movements AS (
  SELECT 
    month,
    SUM(CASE WHEN event_type = 'new' THEN arr_change ELSE 0 END) as new_arr,
    SUM(CASE WHEN event_type = 'expansion' THEN arr_change ELSE 0 END) as expansion_arr,
    SUM(CASE WHEN event_type = 'contraction' THEN arr_change ELSE 0 END) as contraction_arr,
    SUM(CASE WHEN event_type = 'churn' THEN arr_change ELSE 0 END) as churned_arr,
    SUM(arr_change) as net_arr_change
  FROM monthly_arr_changes
  GROUP BY 1
)
SELECT 
  month,
  new_arr,
  expansion_arr,
  ABS(contraction_arr) as contraction_arr,  -- Show as positive
  ABS(churned_arr) as churned_arr,  -- Show as positive
  net_arr_change,
  SUM(net_arr_change) OVER (ORDER BY month) as cumulative_arr_change,
  ROUND(100.0 * expansion_arr / (new_arr + expansion_arr), 1) as expansion_rate_of_growth
FROM arr_movements
ORDER BY month;

ARR Cohort Analysis

-- Analyze ARR retention by acquisition cohort
WITH customer_cohorts AS (
  SELECT 
    customer_id,
    DATE_TRUNC('month', MIN(subscription_start_date)) as acquisition_month,
    SUM(CASE WHEN billing_frequency = 'monthly' THEN monthly_amount * 12 
             WHEN billing_frequency = 'annual' THEN annual_amount 
             ELSE 0 END) as initial_arr
  FROM subscriptions
  WHERE subscription_start_date >= '2023-01-01'
  GROUP BY 1
),
monthly_customer_arr AS (
  SELECT 
    c.customer_id,
    c.acquisition_month,
    c.initial_arr,
    DATE_TRUNC('month', s.month_date) as revenue_month,
    SUM(s.monthly_recurring_revenue * 12) as current_arr
  FROM customer_cohorts c
  JOIN subscription_revenue s ON c.customer_id = s.customer_id
  WHERE s.month_date >= c.acquisition_month
  GROUP BY 1, 2, 3, 4
),
cohort_retention AS (
  SELECT 
    acquisition_month,
    revenue_month,
    EXTRACT(months FROM AGE(revenue_month, acquisition_month)) as months_since_acquisition,
    COUNT(DISTINCT customer_id) as active_customers,
    SUM(current_arr) as cohort_arr,
    SUM(initial_arr) as initial_cohort_arr
  FROM monthly_customer_arr
  GROUP BY 1, 2, 3
)
SELECT 
  acquisition_month,
  months_since_acquisition,
  active_customers,
  cohort_arr,
  initial_cohort_arr,
  ROUND(100.0 * cohort_arr / initial_cohort_arr, 1) as arr_retention_rate,
  ROUND(cohort_arr / active_customers, 0) as avg_arr_per_customer
FROM cohort_retention
WHERE months_since_acquisition <= 24
ORDER BY acquisition_month, months_since_acquisition;

ARR Calculation Guidelines

Include only recurring subscription fees. Exclude setup fees, professional services, and variable usage charges. Use committed contract values for annual plans.

Best Practices

1. ARR Recognition Standards

  • Include only recurring subscription revenue
  • Exclude one-time setup fees and professional services
  • Use signed contract value for annual commitments
  • Account for discounts and promotional pricing accurately

2. Movement Tracking

  • Track new, expansion, contraction, and churned ARR separately
  • Monitor net revenue retention rates
  • Analyze ARR movements by customer segment
  • Use consistent timing for ARR recognition

3. Segmentation Analysis

  • By customer size (SMB, mid-market, enterprise)
  • By product line or package tier
  • By geographic region
  • By acquisition channel or sales team

4. Forecasting ARR

  • Use historical patterns for seasonal adjustments
  • Factor in sales pipeline conversion rates
  • Account for expected churn and expansion
  • Include contract renewal probabilities

5. Growth Strategies

  • New Customer Acquisition: Invest in sales and marketing efficiency
  • Expansion Revenue: Drive upsells and cross-sells to existing customers
  • Churn Reduction: Improve customer success and product value
  • Pricing Optimization: Test pricing strategies and packaging