Calculate total mortgage interest paid over the full loan term
See what a fixed-rate mortgage really costs over its full term: 300,000 at 6.5% for 30 years means 360 payments and 382,633.47 in total interest, on top of the amount borrowed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Principal amount
- 300,000
- Annual rate
- 6.5
- Term years
- 30
- Number of payments
- 360
- Monthly payment
- 1,896.2
- Total payments
- 682,633.47
- Total interest
- 382,633.47
This total mortgage interest calculator shows how much a fixed-rate loan costs across its entire scheduled term. Enter the original principal, annual interest rate, and term in years to calculate the monthly payment, the sum of all scheduled payments, and the total interest paid above the amount borrowed. It also expresses interest as a percentage of principal, making it easier to compare loan structures that have different balances, rates, or repayment periods without confusing the borrowed amount with the financing cost.
Understand total interest versus principal
The principal is the amount originally borrowed, while total interest is the additional amount paid to the lender for financing that principal over time. For a standard fixed-rate, fully amortizing mortgage, every scheduled installment contains some principal and some interest. Early installments usually contain more interest because the outstanding balance is larger; later installments direct more of the same payment toward principal.
The calculator does not build a row-by-row schedule because the requested result can be obtained directly from the amortization formula. It first computes the level monthly payment, multiplies that payment by the number of scheduled payments, and subtracts the original principal. A result of 75 percent, for example, means the scheduled financing cost is equal to three quarters of the original amount borrowed.
It does not mean that the annual interest rate was 75 percent.
How the fixed-rate calculation works
The calculation converts that annual percentage to a monthly decimal rate by dividing by 1,200 and converts years to scheduled monthly payments by multiplying by 12. It then applies the conventional annuity payment formula used for a fully amortizing fixed-rate loan. The implementation uses numerically stable logarithmic and exponential functions so ordinary loans and very small rates behave consistently.
Currency outputs are rounded to two decimal places, while the interest-to-principal percentage retains four decimal places. The total is based on the mathematical payment before display rounding, so it avoids magnifying a rounded monthly installment across hundreds of months. This gives a more faithful estimate of the underlying amortization formula.
Interpret the estimate and compare scenarios
Use the result as a clean baseline for comparing fixed-rate loan offers. A shorter term commonly raises the monthly payment but sharply reduces total interest because the balance is outstanding for fewer months. A longer term commonly lowers the required payment while increasing the financing cost.
The calculation assumes the rate and scheduled payment pattern remain unchanged for the full term. It does not include property taxes, homeowners insurance, mortgage insurance, lender fees, discount points, closing costs, adjustable-rate changes, late charges, extra principal payments, refinancing, or an early payoff. Those items can make actual cash paid differ from this estimate.
Results therefore describe the contractual amortization baseline rather than a lender payoff quote.
What you can do with it
Compare mortgage terms
Measure how a 15-year and 30-year schedule trade monthly affordability against total lifetime interest.
Evaluate competing rates
Quantify the full-term interest difference between lender offers with the same principal and term.
Explain borrowing cost
Show total interest beside principal and express that cost as a percentage of the amount borrowed.
FAQ
Are taxes, insurance, and fees included?
No. The calculation covers principal and interest for a fixed-rate amortizing loan only.
How is total mortgage interest calculated?
The calculator works out the level monthly payment, multiplies it by the number of payments and subtracts the amount borrowed. For 300,000 at 6.5% over 30 years, 360 payments add up to 682,633.47, so the interest is 382,633.47.
What does interest as a percentage of the loan mean?
It is total interest divided by the amount borrowed. A result of 75 percent means the financing costs three quarters of the original loan; it does not mean the annual rate was 75 percent.
Does a shorter mortgage term really save interest?
Usually yes. A shorter term raises the monthly payment but sharply cuts total interest, because the balance is outstanding for fewer months. A longer term lowers the payment and raises the financing cost.
Should I enter the rate as 6.5 or 0.065?
Enter 6.5 for a 6.5 percent annual rate. The calculator turns it into a monthly rate by dividing by 1,200. With a rate of zero, the payment is simply the loan divided by the number of months and interest is zero.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/realestate/amortization-total-interest \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"principal":300000,"annual_rate":6.5,"term_years":30}'const res = await fetch("https://api.kit.forhosting.com/realestate/amortization-total-interest", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"principal": 300000,
"annual_rate": 6.5,
"term_years": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/realestate/amortization-total-interest",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"principal": 300000,
"annual_rate": 6.5,
"term_years": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/realestate/amortization-total-interest", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"principal":300000,"annual_rate":6.5,"term_years":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"principal":300000,"annual_rate":6.5,"term_years":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/realestate/amortization-total-interest", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"principal": 300000,
"annual_rate": 6.5,
"term_years": 30
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "realestate.amortization_total_interest",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Understand total interest versus principal
This calculator keeps those figures separate and returns both total_payments and total_interest. The interest_to_principal_percent field then divides total interest by principal.
How the fixed-rate calculation works
Enter principal as a positive currency amount, annual_rate as a percentage, and term_years as a positive number. An annual_rate of 6.5 means 6.5 percent, not 0.065. When annual_rate is zero, it uses a direct principal-divided-by-payments calculation, producing zero total interest without a division-by-zero error.
Interpret the estimate and compare scenarios
Keep principal constant and change annual_rate to see the lifetime effect of a rate difference, or keep the rate constant and compare shorter and longer terms. The API uses the same deterministic calculation as the browser tool, costs $0.002 per successful request, and rejects a zero or negative term instead of returning a misleading result.
Technical questions
What does annual_rate mean?
It is the nominal annual rate expressed as a percentage. Enter 6.5 for a 6.5% annual rate.
Does total interest include the principal?
No. total_interest is the amount above principal; total_payments includes both principal and interest.
What happens when the interest rate is zero?
The principal is divided evenly across all monthly payments, and total_interest is zero.
What if the term is zero or negative?
The request returns an invalid_input error because term_years must be positive.