Estimate how much house you can actually afford based on your income and debts.
30 Years Fixed
20 Years Fixed
15 Years Fixed
10 Years Fixed
Conservative (36%)
Standard (43%)
Aggressive (45%)
Max Recommended Home Price:$0
Estimated Monthly Payment (P&I):$0
Total Loan Amount:$0
Understanding Home Affordability
Determining how much house you can afford involves more than just looking at your bank balance. Lenders primarily use the Debt-to-Income (DTI) ratio to assess your borrowing capacity. This ratio compares your total monthly debt obligations against your gross monthly income.
How the Calculation Works
The calculator uses the "Back-End Ratio" formula. Here is the step-by-step breakdown of the math used above:
Gross Monthly Income: Your annual salary divided by 12.
Allowable Monthly Debt: Your Gross Monthly Income multiplied by your chosen DTI (e.g., 43%).
Maximum Monthly Mortgage Payment: The Allowable Monthly Debt minus your existing monthly obligations (car loans, student loans, etc.).
Maximum Loan Amount: We use the standard amortization formula to reverse-engineer the loan principal based on the monthly payment, interest rate, and term.
Total Home Price: The Loan Amount plus your Down Payment.
Real-World Example
Suppose you earn $90,000 per year with $500 in monthly debts (student loans and a car payment). You have $50,000 for a down payment and the current interest rate is 6.5% for a 30-year term.
Using a 43% DTI ratio:
Monthly Income = $7,500
Max Debt Allowed (43%) = $3,225
Max Mortgage Payment = $3,225 – $500 = $2,725
Estimated Loan Amount = ~$431,000
Max House Price = $481,000
Factors That Influence Your Budget
While this calculator provides a solid estimate, keep these variables in mind:
Property Taxes & Insurance: This calculator focuses on Principal and Interest (P&I). In reality, your monthly "PITI" payment includes Taxes and Insurance, which can reduce your purchasing power by 15-20%.
Credit Score: Higher credit scores qualify for lower interest rates, significantly increasing the amount you can borrow.
Private Mortgage Insurance (PMI): If your down payment is less than 20%, you will likely need to pay PMI, which adds to your monthly cost.
function calculateAffordability() {
var annualIncome = parseFloat(document.getElementById("annualIncome").value);
var monthlyDebts = parseFloat(document.getElementById("monthlyDebts").value) || 0;
var downPayment = parseFloat(document.getElementById("downPayment").value) || 0;
var interestRate = parseFloat(document.getElementById("interestRate").value);
var loanTerm = parseInt(document.getElementById("loanTerm").value);
var dtiLimit = parseFloat(document.getElementById("dtiRatio").value) / 100;
if (isNaN(annualIncome) || isNaN(interestRate) || annualIncome <= 0 || interestRate <= 0) {
alert("Please enter valid positive numbers for income and interest rate.");
return;
}
// 1. Calculate Monthly Gross Income
var monthlyGross = annualIncome / 12;
// 2. Calculate Max Total Monthly Debt Allowed
var maxTotalMonthlyDebt = monthlyGross * dtiLimit;
// 3. Subtract current debts to find max allowed Mortgage Payment (P&I)
var maxMonthlyPayment = maxTotalMonthlyDebt – monthlyDebts;
if (maxMonthlyPayment <= 0) {
alert("Your current debts exceed the recommended DTI ratio for your income level.");
return;
}
// 4. Calculate Max Loan Amount using the Present Value of an Annuity formula
// Formula: P = PMT * [ (1 – (1 + r)^-n) / r ]
// r = monthly interest rate, n = total number of payments
var monthlyRate = (interestRate / 100) / 12;
var totalPayments = loanTerm * 12;
var loanAmount = maxMonthlyPayment * ((1 – Math.pow(1 + monthlyRate, -totalPayments)) / monthlyRate);
// 5. Total Home Price
var homePrice = loanAmount + downPayment;
// Display results
document.getElementById("resHomePrice").innerText = "$" + homePrice.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById("resMonthlyPayment").innerText = "$" + maxMonthlyPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resLoanAmount").innerText = "$" + loanAmount.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById("resultBox").style.display = "block";
}