Measure your retention health and monthly customer loss.
Customer Churn Rate:0%
Total Customers Lost:0
Estimated Revenue Lost:$0
Customer Retention Rate:0%
Understanding SaaS Churn Rate
For any Software-as-a-Service (SaaS) business, the Churn Rate is arguably the most critical metric. It represents the percentage of customers who cancel their subscriptions over a specific period. High churn is a "leaky bucket" problem—no matter how many new customers you acquire, your business cannot grow if you are losing them just as fast.
How to Calculate Churn Rate
The standard formula for customer churn rate is:
Churn Rate = (Lost Customers / Starting Customers) x 100
Where Lost Customers = (Starting Customers + New Customers) – Ending Customers.
Example Calculation
Imagine your SaaS company starts the month with 500 customers. During the month, you sign up 100 new users. At the end of the month, you have 550 total users.
Starting: 500
Ending: 550
New: 100
Calculation: (500 + 100) – 550 = 50 lost customers.
Churn Rate: (50 / 500) * 100 = 10% Churn.
What is a "Good" Churn Rate?
Churn benchmarks vary significantly based on your target market (SMB vs. Enterprise):
Market Segment
Target Monthly Churn
Annual Churn Equivalent
Enterprise
< 1%
< 10%
Mid-Market
1% – 2%
12% – 22%
SMB (Small Business)
3% – 7%
31% – 58%
Three Ways to Reduce Churn
Improve Onboarding: Ensure customers reach their "Aha!" moment as quickly as possible.
Monitor Health Scores: Track login frequency and feature usage to identify "at-risk" customers before they cancel.
Annual Plans: Offer discounts for yearly commitments to lock in users and reduce decision points.
function calculateSaaSChurn() {
var start = parseFloat(document.getElementById("startCustomers").value);
var added = parseFloat(document.getElementById("newCustomers").value);
var end = parseFloat(document.getElementById("endCustomers").value);
var arpu = parseFloat(document.getElementById("avgRevenue").value) || 0;
var resultDiv = document.getElementById("churnResult");
if (isNaN(start) || isNaN(added) || isNaN(end) || start <= 0) {
alert("Please enter valid numbers. Starting customers must be greater than zero.");
return;
}
// Logic: Lost = (Start + Added) – End
var lost = (start + added) – end;
// Ensure we don't show negative churn as "lost" in a confusing way
if (lost < 0) lost = 0;
var churnRate = (lost / start) * 100;
var retentionRate = 100 – churnRate;
var revenueLost = lost * arpu;
document.getElementById("resChurnRate").innerHTML = churnRate.toFixed(2) + "%";
document.getElementById("resLostCust").innerHTML = lost.toLocaleString();
document.getElementById("resRevLost").innerHTML = "$" + revenueLost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resRetention").innerHTML = (retentionRate < 0 ? 0 : retentionRate).toFixed(2) + "%";
resultDiv.style.display = "block";
resultDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}