Skip to main content
โšก Calmops

SaaS Metrics and Analytics Complete Guide 2026

Introduction

Understanding your metrics is crucial for SaaS success. This guide covers the essential SaaS metrics, how to measure them, and how to build analytics that drive growth.

Core SaaS Metrics

Revenue Metrics

class SAASMetrics:
    def __init__(self, customers, subscriptions, transactions):
        self.customers = customers
        self.subscriptions = subscriptions
        self.transactions = transactions
    
    def calculate_mrr(self):
        """Monthly Recurring Revenue"""
        mrr = 0
        for sub in self.subscriptions:
            if sub.status == 'active':
                mrr += sub.monthly_price
        return mrr
    
    def calculate_arr(self):
        """Annual Recurring Revenue"""
        return self.calculate_mrr() * 12
    
    def calculate_arpu(self):
        """Average Revenue Per User"""
        active_customers = [c for c in self.customers if c.status == 'active']
        if not active_customers:
            return 0
        return self.calculate_mrr() / len(active_customers)

Growth Metrics

Growth Metrics:
โ”œโ”€โ”€ MRR Growth Rate
โ”‚   โ””โ”€โ”€ ((Current MRR - Previous MRR) / Previous MRR) ร— 100
โ”‚
โ”œโ”€โ”€ Net Revenue Retention (NRR)
โ”‚   โ””โ”€โ”€ (Starting MRR + Expansion - Contraction - Churn) / Starting MRR
โ”‚
โ”œโ”€โ”€ Gross Revenue Retention (GRR)
โ”‚   โ””โ”€โ”€ (Starting MRR - Churn) / Starting MRR
โ”‚
โ””โ”€โ”€ Logo Growth
    โ””โ”€โ”€ (New Customers - Churned Customers) / Previous Customers

Customer Metrics

Churn Analysis

def calculate_churn_metrics(customers, period='month'):
    """Calculate various churn metrics"""
    
    # Customer Churn Rate
    start_count = customers.start_count
    churned = customers.churned_count
    customer_churn = (churned / start_count) * 100
    
    # Revenue Churn
    start_mrr = customers.start_mrr
    churned_mrr = customers.churned_mrr
    revenue_churn = (churned_mrr / start_mrr) * 100
    
    # Net Churn (includes expansion)
    expansion = customers.expansion_mrr
    contraction = customers.contraction_mrr
    net_churn = ((churned_mrr + contraction - expansion) / start_mrr) * 100
    
    return {
        'customer_churn': customer_churn,
        'revenue_churn': revenue_churn,
        'net_churn': net_churn
    }

LTV and CAC

def calculate_ltv_cac(customers, subscriptions):
    """Calculate LTV and CAC"""
    
    # Average Revenue Per User
    arpu = calculate_arpu(customers, subscriptions)
    
    # Gross Margin (typical SaaS: 70-80%)
    gross_margin = 0.75
    
    # Customer Lifespan (in months)
    churn_rate = 0.05  # 5% monthly churn
    lifespan = 1 / churn_rate
    
    # Customer Lifetime Value
    ltv = arpu * lifespan * gross_margin
    
    # Customer Acquisition Cost
    total_acquisition_spend = customers.acquisition_spend
    new_customers = customers.new_customers_count
    cac = total_acquisition_spend / new_customers
    
    # LTV:CAC Ratio
    ltv_cac_ratio = ltv / cac
    
    return {
        'ltv': ltv,
        'cac': cac,
        'ltv_cac_ratio': ltv_cac_ratio
    }

Building Analytics Dashboards

Dashboard Components

SaaS Dashboard Essentials:
โ”œโ”€โ”€ Revenue Overview
โ”‚   โ”œโ”€โ”€ MRR/ARR
โ”‚   โ”œโ”€โ”€ Revenue by plan
โ”‚   โ””โ”€โ”€ Revenue growth trend
โ”‚
โ”œโ”€โ”€ Customer Metrics
โ”‚   โ”œโ”€โ”€ Total customers
โ”‚   โ”œโ”€โ”€ New customers
โ”‚   โ”œโ”€โ”€ Churned customers
โ”‚   โ””โ”€โ”€ Net revenue retention
โ”‚
โ”œโ”€โ”€ Product Usage
โ”‚   โ”œโ”€โ”€ Active users
โ”‚   โ”œโ”€โ”€ Feature usage
โ”‚   โ””โ”€โ”€ Session duration
โ”‚
โ””โ”€โ”€ Financial Health
    โ”œโ”€โ”€ Burn rate
    โ”œโ”€โ”€ Runway
    โ””โ”€โ”€ Unit economics

SQL Queries

-- MRR Calculation
SELECT 
    DATE_TRUNC('month', subscription_start_date) as month,
    SUM(CASE 
        WHEN subscription_status = 'active' 
        THEN monthly_price 
        ELSE 0 
    END) as mrr
FROM subscriptions
GROUP BY DATE_TRUNC('month', subscription_start_date)
ORDER BY month;

-- Cohort Analysis
WITH cohorts AS (
    SELECT 
        customer_id,
        DATE_TRUNC('month', first_subscription_date) as cohort_month,
        subscription_start_date
    FROM customers
)
SELECT 
    cohort_month,
    DATE_TRUNC('month', subscription_start_date) as month_num,
    COUNT(DISTINCT customer_id) as customers,
    SUM(monthly_price) as revenue
FROM cohorts c
JOIN subscriptions s ON c.customer_id = s.customer_id
WHERE s.subscription_status = 'active'
GROUP BY cohort_month, month_num
ORDER BY cohort_month, month_num;

Conclusion

SaaS metrics provide visibility into business health. Track these consistently and make data-driven decisions.

Comments