How is Net Retention Rate Calculated

Net Retention Rate (NRR) Calculator .nrr-calculator-container { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; color: #333; line-height: 1.6; } .nrr-calc-wrapper { background-color: #f8f9fa; border: 1px solid #e9ecef; border-radius: 8px; padding: 30px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); margin-bottom: 40px; } .nrr-calc-title { text-align: center; margin-bottom: 25px; color: #2c3e50; font-size: 24px; font-weight: 700; } .nrr-input-group { margin-bottom: 20px; } .nrr-input-group label { display: block; margin-bottom: 8px; font-weight: 600; color: #495057; } .nrr-input-group input { width: 100%; padding: 12px; border: 1px solid #ced4da; border-radius: 4px; font-size: 16px; box-sizing: border-box; /* Fix padding issue */ transition: border-color 0.15s ease-in-out; } .nrr-input-group input:focus { border-color: #4dabf7; outline: none; box-shadow: 0 0 0 3px rgba(77, 171, 247, 0.25); } .nrr-help-text { font-size: 12px; color: #6c757d; margin-top: 4px; } .nrr-calculate-btn { display: block; width: 100%; padding: 14px; background-color: #007bff; color: white; border: none; border-radius: 4px; font-size: 18px; font-weight: 600; cursor: pointer; transition: background-color 0.2s; } .nrr-calculate-btn:hover { background-color: #0056b3; } .nrr-result-container { margin-top: 25px; background-color: #ffffff; border-radius: 6px; padding: 20px; border-left: 5px solid #007bff; display: none; /* Hidden by default */ } .nrr-result-header { font-size: 14px; text-transform: uppercase; color: #6c757d; letter-spacing: 1px; margin-bottom: 10px; } .nrr-result-value { font-size: 36px; font-weight: 800; color: #212529; margin-bottom: 10px; } .nrr-result-details { font-size: 15px; color: #495057; background: #f1f3f5; padding: 10px; border-radius: 4px; } .nrr-article-content h2 { color: #2c3e50; margin-top: 30px; border-bottom: 2px solid #007bff; padding-bottom: 10px; display: inline-block; } .nrr-article-content h3 { color: #343a40; margin-top: 20px; } .nrr-article-content ul { background: #f8f9fa; padding: 20px 40px; border-radius: 8px; } .nrr-article-content p { margin-bottom: 15px; } .metric-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } @media (max-width: 600px) { .metric-grid { grid-template-columns: 1fr; } }
SaaS Net Retention Rate (NRR) Calculator
Recurring revenue at the beginning of the period.
Upsells and cross-sells.
Downgrades by existing customers.
Revenue lost from cancellations.
Net Retention Rate
0%

How is Net Retention Rate Calculated?

Net Retention Rate (NRR), also known as Net Dollar Retention (NDR), is a critical SaaS metric that measures the percentage of recurring revenue retained from existing customers over a specific period. Unlike Gross Retention, NRR accounts for revenue growth (expansion) from upsells and cross-sells, making it a powerful indicator of a company's ability to grow without acquiring new customers.

The NRR Formula

To calculate Net Retention Rate manually, you apply the following formula:

NRR = [(Starting MRR + Expansion MRR – Contraction MRR – Churn MRR) / Starting MRR] × 100

Here is what each component represents:

  • Starting MRR: The Monthly Recurring Revenue from the specific cohort of customers at the beginning of the month (or period).
  • Expansion MRR: Additional revenue generated from that same cohort via upsells, cross-sells, or seat expansions.
  • Contraction MRR: Revenue lost from that cohort due to customers downgrading their subscription plans.
  • Churn MRR: Revenue lost from that cohort due to customers cancelling their subscriptions entirely.

Example Calculation

Imagine a SaaS company starts the month with $100,000 in MRR. During the month:

  • They generate $10,000 in expansion revenue (Upsells).
  • They lose $2,000 to downgrades (Contraction).
  • They lose $3,000 to cancellations (Churn).

The math works as follows:

($100,000 + $10,000 – $2,000 – $3,000) = $105,000 Ending Revenue

($105,000 / $100,000) × 100 = 105% NRR

What is a Good Net Retention Rate?

Benchmarks for NRR vary by industry and company stage, but generally:

  • > 120%: Considered best-in-class for high-growth SaaS companies. It implies the company is growing rapidly purely from its existing customer base.
  • 100% – 120%: Healthy growth. Expansions are outpacing churn and contractions.
  • < 100%: Warning sign. The company is losing revenue from its existing customer base faster than it can expand them. This "leaky bucket" requires new customer acquisition just to maintain flat revenue.

Why NRR Matters for Valuation

Investors scrutinize NRR because it reflects the health of the product-market fit. A high NRR suggests high customer satisfaction, strong sticky features, and a viable path to profitability through efficient growth (expanding existing clients is cheaper than acquiring new ones).

NRR vs. Gross Retention Rate (GRR)

While NRR can exceed 100% because it includes expansion revenue, Gross Retention Rate (GRR) cannot. GRR only measures how much of the original revenue was retained, excluding upsells. If you want to understand strictly how many customers stay, look at GRR. If you want to understand the total value growth of the cohort, look at NRR.

function calculateNetRetentionRate() { // 1. Get input values by specific ID var startMrrInput = document.getElementById('starting_mrr'); var expMrrInput = document.getElementById('expansion_mrr'); var conMrrInput = document.getElementById('contraction_mrr'); var churnMrrInput = document.getElementById('churn_mrr'); var resultContainer = document.getElementById('nrr-result'); var resultPercentage = document.getElementById('nrr-percentage'); var resultExplanation = document.getElementById('nrr-explanation'); // 2. Parse values to floats, defaulting to 0 if empty var startMrr = parseFloat(startMrrInput.value); var expMrr = parseFloat(expMrrInput.value) || 0; var conMrr = parseFloat(conMrrInput.value) || 0; var churnMrr = parseFloat(churnMrrInput.value) || 0; // 3. Validation if (isNaN(startMrr) || startMrr <= 0) { alert("Please enter a valid Starting MRR greater than 0."); return; } // Ensure negative inputs are treated as positive magnitudes for subtraction logic // (User enters 500 for churn, logic subtracts 500) expMrr = Math.abs(expMrr); conMrr = Math.abs(conMrr); churnMrr = Math.abs(churnMrr); // 4. Calculation Logic // Formula: (Start + Expansion – Contraction – Churn) / Start * 100 var endingMrr = startMrr + expMrr – conMrr – churnMrr; var nrrValue = (endingMrr / startMrr) * 100; // 5. Update UI resultContainer.style.display = 'block'; // Color coding based on health var color = '#28a745'; // Green var healthText = "Healthy Growth"; if (nrrValue = 100 && nrrValue < 110) { color = '#ffc107'; // Yellow/Orange resultPercentage.style.color = '#856404'; // Darker text for visibility healthText = "Stable (Moderate Growth)"; } else { // High growth color = '#28a745'; healthText = "Excellent (Best-in-class Growth)"; } if (nrrValue = 100) { resultPercentage.style.color = '#d39e00'; } else { resultPercentage.style.color = color; } resultPercentage.innerHTML = nrrValue.toFixed(2) + '%'; // Detailed breakdown resultExplanation.innerHTML = "Analysis: " + healthText + "" + "From a starting revenue of $" + startMrr.toLocaleString() + ", " + "your cohort ended with $" + endingMrr.toLocaleString() + "." + "Net change: $" + (endingMrr – startMrr).toLocaleString() + ""; }

Leave a Comment