Mortgage offset account savings
With 20,000 in an offset account against a 200,000 mortgage at 4%, monthly interest drops from 666.67 to 600, a saving of 66.67 a month. Enter your balance, savings and rate to see the monthly and yearly saving. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Mortgage balance
- 200,000
- Offset savings balance
- 20,000
- Annual interest rate %
- 4
- Decimal places
- 2
- Monthly interest without offset
- 666.67
- Monthly interest with offset
- 600
- Monthly interest saved
- 66.67
- Annual interest saved
- 800
Estimate monthly interest saved when an offset balance reduces charged principal. Search intent: mortgage offset calculator. No network calls, random seeds, or server state are required. Failed jobs are
How an offset account cuts your interest
An offset account holds savings linked to your mortgage that reduce the part of the loan charged interest. The calculator takes your mortgage balance, subtracts the money in the account and applies the annual rate divided by twelve to what remains. It repeats the calculation on the full balance, so you see the monthly interest with and without the account side by side. With a 200,000 balance, 20,000 in the account and a 4% rate, monthly interest falls from 666.67 to 600, a saving of 66.67 a month and 800 a year.
Reading the result without the usual mistakes
Enter the rate as a percentage, 4 for 4%, not as a decimal. The figures describe one month of interest at the balances you enter, and the yearly saving is that monthly effect over a year, so run the numbers again whenever either balance changes. Rounding happens once, on the final figures, to the decimals you choose. The result also repeats the balance, savings and rate you entered, so any figure you keep shows the assumptions behind it.
FAQ
Other languages?
EN-only delivery; Nitro hydrates the other seven locales.
How is monthly interest worked out with an offset account?
The money in the offset account is subtracted from the mortgage balance, and the annual rate divided by twelve is applied to what remains. The same is done with the full balance, and the difference is your saving.
How does the saving change if I keep more money in the offset account?
It grows in direct proportion, because the saving equals the offset amount times the annual rate, divided by twelve. At 4%, every 20,000 kept in the account cuts monthly interest by 66.67.
How should I enter the interest rate?
As an annual percentage: type 4 for 4%, without turning it into a decimal. The calculator divides it by twelve to get the interest for one month.
Can I choose how many decimals the result shows?
Yes. You can set the number of decimals, and rounding is applied only once, to the final figures, never halfway through. That way the yearly saving does not inherit an error from a rounded monthly figure.
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/finance/mortgage-offset \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"balance":200000,"offset":20000,"annual_rate_percent":4}'const res = await fetch("https://api.kit.forhosting.com/finance/mortgage-offset", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"balance": 200000,
"offset": 20000,
"annual_rate_percent": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/mortgage-offset",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"balance": 200000,
"offset": 20000,
"annual_rate_percent": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/mortgage-offset", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"balance":200000,"offset":20000,"annual_rate_percent":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"balance":200000,"offset":20000,"annual_rate_percent":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/mortgage-offset", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"balance": 200000,
"offset": 20000,
"annual_rate_percent": 4
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.mortgage_offset",
"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
The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
How it works
No network calls, random seeds, or server state are required. Failed jobs are not billed. Search intent is matched with precise English keywords. Optional fields document defaults. Estimate monthly interest saved when an offset balance reduces charged principal. monthly_interest = (balance−offset)×rate/12 versus full balance. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested.
Inputs, limits and rounding
Optional decimals use half-up once. Outputs echo key inputs for logging and automation. No network calls, random seeds, or server state are required. Failed jobs are not billed. Search intent is matched with precise English keywords. Optional fields document defaults. Half-up rounding is Provide required JSON fields as documented in params. Invalid types or ranges raise invalid_input. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input.
When to use it
Use when the search intent matches this calculator. Estimate monthly interest saved when an offset balance reduces charged principal. No network calls, random seeds, or server state are required. Failed jobs are not billed. Search intent is matched with precise English keywords. Optional fields document defaults. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with
Integration use cases
Quick check
Verify a formula in the free browser widget.
Automation
Call the API with the same JSON fields from scripts.
Teaching
Show pinned golden examples without proprietary tools.
Technical questions
Is the browser widget free?
Yes. Tier A runs client-side with the same core as the API.
Does it call the network?
No. Computation is local and deterministic.
What happens on bad input?
The handler throws invalid_input; failed jobs are not billed.
Can I use the API?
Yes. Send the same JSON documented in params.