National Average
California (+0.12%)
Texas (-0.05%)
Florida (+0.08%)
New York (+0.15%)
Illinois (-0.10%)
Pennsylvania (+0.02%)
Ohio (-0.08%)
Georgia (+0.05%)
North Carolina (-0.03%)
Michigan (+0.10%)
30 Years Fixed
15 Years Fixed
Estimated Interest Rate
0.00%
Based on your credit profile
Estimated Monthly Payment (P&I)
$-
Principal & Interest Only
Total Interest Over Life of Loan
$-
Cost of borrowing
Credit Score Impact: If you improve your credit score to the next tier (), you could reduce your interest rate to % and save over the life of the loan.
Understanding the CFPB Rate Checker Tool
The Consumer Financial Protection Bureau (CFPB) provides resources to help consumers understand how interest rates are determined in the mortgage market. Unlike a standard loan calculator, a rate checker focuses heavily on the correlation between your credit score and the interest rate lenders are likely to offer you.
How Credit Scores Impact Your Mortgage Rate
Your credit score is one of the most significant factors in determining the cost of your loan. Lenders use risk-based pricing, meaning borrowers with higher credit scores are viewed as lower risk and are offered lower interest rates. As demonstrated by the calculator above:
760+ (Excellent): Typically qualifies for the most competitive market rates.
620-639 (Fair/Poor): Borrowers in this range often face significantly higher rates, sometimes 1.5% to 2% higher than those with excellent credit.
Even a small difference in percentage points—such as 0.5%—can result in tens of thousands of dollars in extra interest costs over a 30-year term.
Why Location Matters
Interest rates can vary slightly by state due to foreclosure laws, default rates, and local economic conditions. The CFPB Rate Checker allows you to input your state to see more localized data. While national averages provide a baseline, checking rates specific to your geography ensures a more accurate estimate of your potential monthly housing costs.
Using This Data to Negotiate
Knowledge is leverage. By understanding the prevailing rates for your credit tier and location, you can:
Identify if a lender's quote is too high compared to the market average.
Decide whether to delay your purchase to improve your credit score.
Shop around with multiple lenders (banks, credit unions, and online lenders) to find the best deal.
Always remember that the "Annual Percentage Rate" (APR) is the true cost of the loan, as it includes the interest rate plus points, broker fees, and other charges.
function calculateRateImpact() {
// 1. Get Inputs
var scoreInput = document.getElementById('creditScore');
var selectedScore = parseInt(scoreInput.value);
var stateAdjustment = parseFloat(document.getElementById('stateSelect').value);
var loanAmount = parseFloat(document.getElementById('loanAmount').value);
var termYears = parseInt(document.getElementById('loanTerm').value);
// 2. Validate Inputs
if (isNaN(loanAmount) || loanAmount = 760) {
rateModifier = -0.4; // Best rate
} else if (selectedScore >= 700) {
rateModifier = 0; // Baseline
} else if (selectedScore >= 680) {
rateModifier = 0.25;
} else if (selectedScore >= 660) {
rateModifier = 0.5;
} else if (selectedScore >= 640) {
rateModifier = 1.0;
} else if (selectedScore >= 620) {
rateModifier = 1.6;
} else {
rateModifier = 2.5; // High risk
}
// Adjust for loan term (15 year usually lower rate)
if (termYears === 15) {
baseRate -= 0.75;
}
// Calculate Final Estimated Rate
var finalRate = baseRate + rateModifier + stateAdjustment;
// Cap minimum realistic rate
if (finalRate < 3.0) finalRate = 3.0;
// 4. Calculate Financials
var monthlyRate = finalRate / 100 / 12;
var numPayments = termYears * 12;
// Standard Amortization Formula: P * r * (1+r)^n / ((1+r)^n – 1)
var monthlyPayment = loanAmount * monthlyRate * (Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
var totalPayment = monthlyPayment * numPayments;
var totalInterest = totalPayment – loanAmount;
// 5. Display Results
document.getElementById('results-area').style.display = 'block';
document.getElementById('displayRate').innerText = finalRate.toFixed(3) + "%";
document.getElementById('displayPayment').innerText = "$" + monthlyPayment.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('displayTotalInterest').innerText = "$" + totalInterest.toLocaleString('en-US', {minimumFractionDigits: 0, maximumFractionDigits: 0});
// 6. Calculate Comparison/Savings Logic (The "Checker" Aspect)
// Check if there is a better tier
var savingsBox = document.getElementById('savingsBox');
var nextTierRate = 0;
var nextTierName = "";
var canImprove = false;
if (selectedScore < 760) {
// Determine next tier up logic
if (selectedScore < 620) {
// Moving from <620 to 620-639
// Current mod 2.5, Target mod 1.6. Diff = 0.9
nextTierRate = finalRate – 0.9;
nextTierName = "620 – 639";
} else if (selectedScore === 620) {
// Moving to 640
// Current 1.6, Target 1.0. Diff 0.6
nextTierRate = finalRate – 0.6;
nextTierName = "640 – 659";
} else if (selectedScore === 640) {
nextTierRate = finalRate – 0.5;
nextTierName = "660 – 679";
} else if (selectedScore === 660) {
nextTierRate = finalRate – 0.25;
nextTierName = "680 – 699";
} else if (selectedScore === 680) {
nextTierRate = finalRate – 0.25;
nextTierName = "700 – 759";
} else if (selectedScore === 700) {
nextTierRate = finalRate – 0.4;
nextTierName = "760+";
}
canImprove = true;
}
if (canImprove) {
// Calculate scenarios for the better rate
var betterMonthlyRate = nextTierRate / 100 / 12;
var betterPayment = loanAmount * betterMonthlyRate * (Math.pow(1 + betterMonthlyRate, numPayments)) / (Math.pow(1 + betterMonthlyRate, numPayments) – 1);
var betterTotalPayment = betterPayment * numPayments;
var betterTotalInterest = betterTotalPayment – loanAmount;
var interestSaved = totalInterest – betterTotalInterest;
document.getElementById('nextTierName').innerText = nextTierName;
document.getElementById('betterRate').innerText = nextTierRate.toFixed(3);
document.getElementById('totalSavings').innerText = "$" + interestSaved.toLocaleString('en-US', {minimumFractionDigits: 0, maximumFractionDigits: 0});
savingsBox.style.display = 'block';
} else {
savingsBox.style.display = 'none';
}
}