Determine the maximum home price you can afford based on your income and debts.
Your Estimated Buying Power:$0
How Much House Can I Afford?
Buying a home is the most significant financial decision most people will ever make. To determine your "buying power," lenders primarily look at your Debt-to-Income ratio (DTI). This calculator uses the industry-standard 36% DTI rule to estimate a purchase price that keeps your finances balanced.
The 28/36 Rule Explained
Financial experts often recommend the 28/36 rule:
Front-End Ratio (28%): Your total monthly housing costs (mortgage, taxes, insurance) should not exceed 28% of your gross monthly income.
Back-End Ratio (36%): Your total debt obligations (housing costs plus car loans, student loans, and credit cards) should not exceed 36% of your gross monthly income.
Example Calculation:
If you earn $100,000 annually, your gross monthly income is $8,333.
Applying the 36% rule, your total monthly debt shouldn't exceed $3,000. If you already have a $500 car payment, your maximum available mortgage payment would be $2,500.
Factors That Impact Your Affordability
Interest Rates: Even a 1% change in interest rates can shift your buying power by tens of thousands of dollars.
Down Payment: A larger down payment reduces your loan-to-value ratio, often securing better interest rates and removing the need for Private Mortgage Insurance (PMI).
Credit Score: Higher scores result in lower interest rates, which directly increases the amount you can borrow with the same monthly payment.
Local Property Taxes: High-tax areas reduce the amount of your monthly payment that goes toward the actual principal of the loan.
function calculateAffordability() {
var income = parseFloat(document.getElementById('annualIncome').value);
var debt = parseFloat(document.getElementById('monthlyDebt').value);
var down = parseFloat(document.getElementById('downPayment').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var term = parseFloat(document.getElementById('loanTerm').value);
var taxRate = parseFloat(document.getElementById('propertyTax').value);
// Validate inputs
if (isNaN(income) || isNaN(debt) || isNaN(down) || isNaN(rate) || isNaN(term) || isNaN(taxRate)) {
alert("Please fill in all fields with valid numbers.");
return;
}
// Monthly Gross Income
var monthlyGross = income / 12;
// Maximum Monthly Debt allowed (36% DTI)
var maxTotalMonthlyDebt = monthlyGross * 0.36;
// Available for Mortgage (PITI)
var availableForPITI = maxTotalMonthlyDebt – debt;
if (availableForPITI <= 0) {
document.getElementById('affordabilityResult').style.display = "block";
document.getElementById('maxHomePrice').innerHTML = "Ineligible";
document.getElementById('monthlyBreakdown').innerHTML = "Your current monthly debts exceed the recommended 36% debt-to-income ratio.";
return;
}
// Convert annual rate to monthly decimal
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = term * 12;
// Account for taxes and insurance (roughly)
// We adjust the monthly payment available for just Principal & Interest
var monthlyTaxAndInsuranceFactor = (taxRate / 100) / 12;
// Formula for Home Price based on monthly payment, interest, term, and tax factor
// PMT = (P * r) / (1 – (1+r)^-n) + (HomePrice * monthlyTaxFactor)
// Here we estimate HomePrice.
// Mortgage Payment Factor = (r * (1+r)^n) / ((1+r)^n – 1)
var pmtFactor = (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
// Solve for Loan Amount where: availableForPITI = (Loan * pmtFactor) + ((Loan + Down) * monthlyTaxFactor)
// availableForPITI = Loan * pmtFactor + Loan * monthlyTaxFactor + Down * monthlyTaxFactor
// availableForPITI – (Down * monthlyTaxFactor) = Loan * (pmtFactor + monthlyTaxFactor)
var loanAmount = (availableForPITI – (down * monthlyTaxAndInsuranceFactor)) / (pmtFactor + monthlyTaxAndInsuranceFactor);
var maxHomePrice = loanAmount + down;
if (maxHomePrice < down) {
maxHomePrice = down;
}
// Display Results
document.getElementById('affordabilityResult').style.display = "block";
document.getElementById('maxHomePrice').innerHTML = "$" + maxHomePrice.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('monthlyBreakdown').innerHTML = "Based on a maximum monthly payment of $" + availableForPITI.toFixed(2) + " (Principal, Interest, Taxes & Insurance).";
}