.ltv-calc-container {
max-width: 800px;
margin: 20px auto;
background: #ffffff;
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.08);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
color: #333;
}
.ltv-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 25px;
}
@media (max-width: 768px) {
.ltv-grid {
grid-template-columns: 1fr;
}
}
.ltv-input-group {
margin-bottom: 20px;
}
.ltv-input-group label {
display: block;
font-weight: 600;
margin-bottom: 8px;
color: #2c3e50;
font-size: 14px;
}
.ltv-input-group input {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 6px;
font-size: 16px;
transition: border-color 0.3s;
box-sizing: border-box;
}
.ltv-input-group input:focus {
border-color: #3498db;
outline: none;
box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.2);
}
.ltv-input-hint {
font-size: 12px;
color: #7f8c8d;
margin-top: 5px;
}
.ltv-btn {
background-color: #3498db;
color: white;
border: none;
padding: 15px 30px;
font-size: 18px;
font-weight: bold;
border-radius: 6px;
cursor: pointer;
width: 100%;
margin-top: 10px;
transition: background-color 0.3s;
}
.ltv-btn:hover {
background-color: #2980b9;
}
.ltv-results {
margin-top: 30px;
padding: 25px;
background-color: #f8f9fa;
border-radius: 8px;
border-left: 5px solid #3498db;
display: none;
}
.ltv-result-row {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 15px;
border-bottom: 1px solid #e9ecef;
}
.ltv-result-row:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.ltv-result-label {
font-weight: 600;
color: #555;
}
.ltv-result-value {
font-size: 24px;
font-weight: 800;
color: #2c3e50;
}
.ltv-badge {
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
font-weight: bold;
color: white;
}
.badge-good { background-color: #27ae60; }
.badge-warn { background-color: #f39c12; }
.badge-bad { background-color: #e74c3c; }
.ltv-content {
margin-top: 50px;
line-height: 1.6;
}
.ltv-content h2 {
color: #2c3e50;
margin-top: 30px;
}
.ltv-content p {
margin-bottom: 15px;
}
.ltv-content ul {
margin-bottom: 20px;
padding-left: 20px;
}
.ltv-content li {
margin-bottom: 10px;
}
SaaS Customer Lifetime Value (LTV) Calculator
Calculate LTV Metrics
Customer Lifetime Value (LTV)
$0.00
CAC Payback Period
0 months
Understanding SaaS Customer Lifetime Value
For any subscription-based business, Customer Lifetime Value (LTV) is arguably the most critical metric to track. It represents the total amount of revenue a business can expect from a single customer account throughout their relationship with the company. Understanding your LTV allows you to make informed decisions about how much you can afford to spend on acquiring new customers (CAC).
How This Calculator Works
This tool uses the standard formula for calculating LTV in a SaaS environment, accounting for gross margin to give you a "profit-based" LTV rather than just revenue-based. The core inputs are:
ARPU (Average Revenue Per User): The average monthly recurring revenue you receive from a single active customer.
Churn Rate: The percentage of your subscribers who cancel or stop paying within a given month. Lower churn drastically increases LTV.
Gross Margin: The percentage of revenue left after covering the direct costs of servicing the customer (e.g., hosting, support, third-party API costs).
CAC (Customer Acquisition Cost): The total cost of sales and marketing divided by the number of new customers acquired in that period.
The Formulas
Our calculator determines your metrics using the following logic:
Customer Lifetime (Months) = 1 / Monthly Churn Rate
LTV = (ARPU × Gross Margin %) × Customer Lifetime
LTV:CAC Ratio = LTV / CAC
Interpreting Your LTV:CAC Ratio
The relationship between what a customer is worth (LTV) and what it costs to get them (CAC) dictates the health of your business.
Less than 1:1: You are losing money on every customer. This is unsustainable.
3:1: This is generally considered the industry benchmark for a healthy SaaS business.
5:1 or higher: You may be growing too slowly. You likely have the budget to spend more on marketing to accelerate growth.
function calculateSaaSLTV() {
// Get Input Values
var arpuInput = document.getElementById("ltvArpu").value;
var churnInput = document.getElementById("ltvChurn").value;
var marginInput = document.getElementById("ltvMargin").value;
var cacInput = document.getElementById("ltvCac").value;
// Parse Floats
var arpu = parseFloat(arpuInput);
var churn = parseFloat(churnInput);
var margin = parseFloat(marginInput);
var cac = parseFloat(cacInput);
// Validation
if (isNaN(arpu) || isNaN(churn) || isNaN(margin) || isNaN(cac)) {
alert("Please enter valid numbers in all fields.");
return;
}
if (churn 0) {
ratio = ltv / cac;
}
// 5. Calculate Payback Period (Months)
// CAC / Monthly Profit
var payback = 0;
if (monthlyProfit > 0) {
payback = cac / monthlyProfit;
}
// Display Results
document.getElementById("ltvResults").style.display = "block";
// Format Currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
document.getElementById("resultLTV").innerHTML = formatter.format(ltv);
document.getElementById("resultRatio").innerHTML = ratio.toFixed(2) + "x";
// Payback Logic
if (isFinite(payback)) {
document.getElementById("resultPayback").innerHTML = payback.toFixed(1) + " months";
} else {
document.getElementById("resultPayback").innerHTML = "Infinite (No Profit)";
}
// Badge Logic
var badgeElement = document.getElementById("ratioBadge");
badgeElement.className = "ltv-badge";
if (ratio = 1 && ratio = 3) {
badgeElement.innerHTML = "Excellent";
badgeElement.classList.add("badge-good");
}
}