Calculate your Customer Retention Rate (CRR) accurately.
Monthly Retention Rate
0%
Churn Rate
0%
Customers Lost
0
How to Calculate Monthly Retention Rate
The Monthly Retention Rate (MRR) is a critical Key Performance Indicator (KPI) for SaaS companies, subscription boxes, and membership sites. It measures the percentage of customers who remained with your service over a specific month, excluding any new growth.
The Retention Rate Formula
To calculate your retention rate, you need three specific data points:
(S) Start: The number of customers you had on the first day of the month.
(E) End: The number of customers you had on the last day of the month.
(N) New: The number of new customers who signed up during that month.
The standard formula is:
Retention Rate = ((E – N) / S) × 100
We subtract new customers (N) from the end count (E) to isolate the original cohort. If we didn't do this, rapid new growth could mask a high churn rate.
Example Calculation
Imagine you run a software company:
You started May with 200 customers.
You ended May with 210 customers.
During May, you acquired 25 new customers.
Even though your total count went up by 10, let's look at retention:
Customers Retained = 210 (End) – 25 (New) = 185
Customers Lost = 200 (Start) – 185 (Retained) = 15
Retention Rate = (185 / 200) × 100 = 92.5%
What is a Good Retention Rate?
For B2B SaaS, a monthly retention rate above 98% (less than 2% churn) is considered excellent. For B2C subscriptions, retention rates can vary widely but generally hover around 90-95% for healthy businesses. Consistently tracking this metric helps you understand product health and customer satisfaction.
function calculateRetention() {
// Get input values
var startCust = document.getElementById("customersStart").value;
var endCust = document.getElementById("customersEnd").value;
var newCust = document.getElementById("customersNew").value;
// Convert to numbers
var S = parseFloat(startCust);
var E = parseFloat(endCust);
var N = parseFloat(newCust);
// Validation
if (isNaN(S) || isNaN(E) || isNaN(N)) {
alert("Please enter valid numbers for all fields.");
return;
}
if (S <= 0) {
alert("Customers at start of month must be greater than 0.");
return;
}
if (N < 0 || E 100) {
retentionRate = 100;
churnRate = 0;
lostCustomers = 0; // Data likely inconsistent but capping at logical max
}
// Update UI
document.getElementById("mrrResults").style.display = "block";
document.getElementById("displayRetention").innerHTML = retentionRate.toFixed(2) + "%";
document.getElementById("displayChurn").innerHTML = churnRate.toFixed(2) + "%";
// Handle negative lost customers (implies data error input by user, but strictly mathematically valid in formula)
if(lostCustomers < 0) lostCustomers = 0;
document.getElementById("displayLost").innerHTML = lostCustomers;
// Dynamic Explanation
var explanation = "Analysis: You started with " + S + " customers. ";
explanation += "After removing the " + N + " new acquisitions from your end total (" + E + "), ";
explanation += "you successfully retained " + retainedCustomers + " of your original users. ";
explanation += "This results in a " + retentionRate.toFixed(1) + "% retention rate.";
document.getElementById("resultExplanation").innerHTML = explanation;
}