Estimate your monthly lease payment and total cost of ownership.
24 Months
36 Months
48 Months
60 Months
Estimated Monthly Payment (incl. tax)
$0.00
Depreciation Fee:
Finance Fee:
Total Base Payment:
Tax Amount:
Gross Cap Cost:
Residual Value:
Understanding Your Car Lease Calculation
Leasing a vehicle is often more complex than financing because you are essentially paying for the depreciation of the car over a fixed period, plus interest and taxes. This calculator breaks down the three core components of a lease payment.
1. The Depreciation Fee
The largest part of your payment is the depreciation. This is the difference between the Gross Capitalized Cost (the price you agreed to pay minus down payments or trade-ins) and the Residual Value (what the car is worth at the end of the lease). We divide this difference by the number of months in the term.
2. The Finance Fee (Money Factor)
Instead of an "Interest Rate," leases use a Money Factor. To convert a Money Factor to an APR, multiply it by 2,400. For example, a money factor of 0.00125 is roughly equivalent to a 3% APR. The finance fee is calculated by adding the Cap Cost and Residual Value and multiplying by the Money Factor.
3. Sales Tax
In most states, sales tax is applied to the monthly payment. Some states, however, require you to pay the tax on the full value of the vehicle upfront. This calculator uses the monthly method, which is the most common for consumer leases.
Lease Example
Vehicle MSRP: $40,000
Residual Value (55%): $22,000
Lease Term: 36 Months
Down Payment: $2,000
Money Factor: 0.0015 (3.6% APR)
In this scenario, you are paying for $16,000 of depreciation ($40k – $2k down – $22k residual) over 36 months, which is about $444/month plus interest and tax.
function calculateLeasePayment() {
var msrp = parseFloat(document.getElementById("msrp").value);
var downPayment = parseFloat(document.getElementById("downPayment").value);
var tradeIn = parseFloat(document.getElementById("tradeIn").value);
var term = parseInt(document.getElementById("leaseTerm").value);
var residualPercent = parseFloat(document.getElementById("residualPercent").value) / 100;
var moneyFactor = parseFloat(document.getElementById("moneyFactor").value);
var taxRate = parseFloat(document.getElementById("salesTax").value) / 100;
if (isNaN(msrp) || msrp <= 0) {
alert("Please enter a valid MSRP.");
return;
}
// 1. Gross Capitalized Cost
var capCost = msrp – downPayment – tradeIn;
// 2. Residual Value
var residualValue = msrp * residualPercent;
// 3. Depreciation Fee
var depreciationFee = (capCost – residualValue) / term;
if (depreciationFee < 0) depreciationFee = 0;
// 4. Finance Fee (Money Factor)
var financeFee = (capCost + residualValue) * moneyFactor;
// 5. Monthly Base Payment
var basePayment = depreciationFee + financeFee;
// 6. Monthly Tax
var monthlyTax = basePayment * taxRate;
// 7. Total Monthly Payment
var totalMonthly = basePayment + monthlyTax;
// Display Results
document.getElementById("resultArea").style.display = "block";
document.getElementById("monthlyPaymentDisplay").innerText = "$" + totalMonthly.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("depreciationDisplay").innerText = "$" + depreciationFee.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("financeDisplay").innerText = "$" + financeFee.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("basePaymentDisplay").innerText = "$" + basePayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("taxDisplay").innerText = "$" + monthlyTax.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("capCostDisplay").innerText = "$" + capCost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("residualValDisplay").innerText = "$" + residualValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Smooth scroll to result
document.getElementById("resultArea").scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}