UK take-home pay calculator
On a 50,000 salary with tax code 1257L and a 5% pension, 2,500 goes to the pension, the personal allowance is 12,570 and income tax is 6,986 in 2025/26. Scottish S codes use their own bands. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Salary
- 50,000
- Tax code
- 1257L
- Pension percent
- 5
- Pension contribution
- 2,500
- Personal allowance
- 12,570
- Taxable income
- 34,930
- Income tax
- 6,986
UK take-home pay is the net amount left after income tax, employee National Insurance, and a workplace pension have been taken from a gross annual salary. This UK take-home pay calculator accepts a gross annual salary in pounds, an optional PAYE tax code that defaults to 1257L, and an optional pension contribution as a percent of salary, then applies the frozen 2025/26 England, Wales, and Northern Ireland income-tax bands and Class 1 employee National Insurance rates — or the Scottish income-tax schedule when the code starts with S. Personal allowance comes from the tax code and tapers above one hundred thousand pounds of pension-adjusted pay. Pension is modelled as salary sacrifice, so it reduces both taxable pay and National Insurance and is deducted from take-home. A negative salary is rejected as invalid input rather than inverted into a fabricated net.
What UK take-home pay is and how the 2025/26 bands apply
UK take-home pay answers a payroll question people type when an offer letter quotes a gross annual salary and they need the net that actually lands in the bank. Pension is treated as salary sacrifice: the contribution is salary times pension percent over one hundred, and both income tax and National Insurance then run on the reduced pay.
For England, Wales, and Northern Ireland in 2025/26 the personal allowance is twelve thousand five hundred seventy pounds under the default tax code 1257L, the next thirty-seven thousand seven hundred pounds of pay after that remaining allowance is taxed at twenty percent, pay up to one hundred twenty-five thousand one hundred forty pounds is taxed at forty percent, and anything above that additional-rate threshold is taxed at forty-five percent.
When pension-adjusted pay exceeds one hundred thousand pounds the allowance tapers by one pound for every two pounds of excess, reaching zero at one hundred twenty-five thousand one hundred forty.
Worked example: a fifty thousand pound salary, tax code 1257L, and a five percent pension produces a two thousand five hundred pound contribution, pension-adjusted pay of forty-seven thousand five hundred, a personal allowance of twelve thousand five hundred seventy, income tax of six thousand nine hundred eighty-six, National Insurance of two thousand seven hundred ninety-four pounds and forty pence, net annual of thirty-seven thousand seven hundred nineteen pounds and sixty pence, and net monthly of three thousand one hundred forty-three pounds and thirty pence.
A salary of thirty-five thousand with no pension and the default code stays entirely in the basic-rate band. Scottish S-prefix codes use the 2025/26 starter, basic, intermediate, higher, advanced, and top rates of nineteen, twenty, twenty-one, forty-two, forty-five, and forty-eight percent instead of the rUK table. Money is rounded half-up to pence so the lines add back to the headline net.
Where a UK take-home pay calculator earns its keep
They want net annual and net monthly from a known gross, a tax code they can read off a payslip, and a pension percent their employer quotes in the handbook, without rebuilding the 2025/26 band table in a spreadsheet cell that drifts when someone forgets the eight percent National Insurance main rate or the personal-allowance taper. Employees raising their workplace pension contribution need to see how a five or eight percent salary-sacrifice rate changes the monthly net, not only the contribution line.
Classroom and bookkeeping courses that teach PAYE need an oracle that rejects a negative salary instead of silently emitting a signed net a grader might treat as a refund. Failed validation does not consume balance. Pair this capability with a separate student-loan or benefits tool when you need those layers; keep this surface focused on the UK net from gross, tax code, and pension that people mean when they search that phrase.
What you can do with it
Turn a UK offer letter into monthly net
Enter the gross annual salary and the tax code from the offer to see net annual and net monthly take-home before you accept.
See how a pension percent changes take-home
Raise or lower the workplace pension contribution and compare net monthly under salary sacrifice, with income tax and National Insurance both reduced.
Budget from PAYE net rather than gross
Seed a monthly budget row from a stated UK salary, tax code, and pension so rent and bills line up with the amount that actually lands.
FAQ
How is UK take-home pay calculated from gross salary?
Income tax uses the 2025/26 rUK or Scottish bands on the reduced pay after the tax-code allowance.
What does the tax code 1257L mean?
S1257L uses the Scottish income-tax schedule; C1257L keeps England, Wales, and Northern Ireland rates.
How is the pension contribution applied?
The contribution is deducted as salary sacrifice, so it reduces pay for both income tax and employee National Insurance and is subtracted from take-home. Relief-at-source and net-pay-arrangement variants are not modelled here.
What happens if the salary is negative?
UK take-home pay is not defined for a negative gross salary, so a typo cannot emit a signed net, and the failed request is not billed.
Does it handle Scottish tax codes?
Yes. A code starting with S switches to the Scottish income-tax bands, from the starter to the top rate. A C code for Wales keeps the rest-of-UK bands, and National Insurance does not depend on the code.
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/fin/uk-take-home-pay \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"salary":50000}'const res = await fetch("https://api.kit.forhosting.com/fin/uk-take-home-pay", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"salary": 50000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/uk-take-home-pay",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"salary": 50000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/uk-take-home-pay", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"salary":50000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"salary":50000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/uk-take-home-pay", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"salary": 50000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.uk_take_home_pay",
"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.
Limits
max_salary | 1000000000000 |
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
What UK take-home pay is and how the 2025/26 bands apply
The identity this endpoint implements is net annual equals salary minus income tax minus Class 1 employee National Insurance minus the workplace pension contribution. Employee National Insurance is independent of the tax code: nothing below the primary threshold of twelve thousand five hundred seventy, eight percent up to the upper earnings limit of fifty thousand two hundred seventy, and two percent above that limit.
Input contract, tax codes, pension, and error behaviour
Numeric codes such as 1257L, 1257M, and 1257N set the allowance to the leading digits times ten. Prefix S selects the Scottish income-tax schedule; prefix C (Wales) keeps the rUK schedule. Special codes are recognised: BR taxes all pension-adjusted pay at twenty percent, D0 at forty percent (forty-two in Scotland), D1 at forty-five percent, D2 at forty-five percent in rUK and forty-eight percent in Scotland, 0T applies the progressive bands with no allowance, NT charges no income tax (National Insurance still applies), and a K-code adds the digits times ten to taxable pay. Example: salary fifty thousand, tax code 1257L, pension five percent is the contract example. Prefer bare numbers over formatted strings; pound signs, thousands separators, and trailing unit labels are not parsed. POST a JSON body with one required finite number and two optional fields. salary is the gross annual figure in pounds sterling before income tax, employee National Insurance, and pension, and must be greater than or equal to zero; aliases annual_salary, gross, income, yearly_salary, and gross_annual are accepted so an offer-letter parser does not need a rename step. A negative salary fails with invalid_input naming salary and is not billed — that is the product contract, not a signed repayment. tax_code is optional and defaults to 1257L, which is a personal allowance of twelve thousand five hundred seventy pounds; aliases taxcode and code are accepted. Week-1 and month-1 suffixes such as W1, M1, and X are ignored because this is an annual estimate, not an in-year non-cumulative emergency calculation. pension_percent is optional, defaults to zero, and must sit between zero and one hundred inclusive; aliases pension, pension_contribution, and pension_rate are accepted. Each money or percent field may arrive as a JSON number or as a numeric string that matches a strict finite decimal pattern. Missing salary, empty strings, non-finite values, an unrecognised tax code, a pension percent outside zero to one hundred, or a salary above one trillion fail with invalid_input naming the field. On success the body echoes rounded salary, the canonical tax_code, and pension_percent, returns pension_contribution, personal_allowance, taxable_income, income_tax, and national_insurance as the breakdown, and returns net_annual and net_monthly as the primary take-home figures, plus currency GBP, tax_year 2025-26, and a formula string. This endpoint does not deduct student-loan repayments, apply marriage allowance or Blind Person’s Allowance, or file a Self Assessment return. Pricing for a successful item is a flat $0.002.
Where a UK take-home pay calculator earns its keep
Candidates comparing two UK offers need the same identity a later HR script will call over the API. Keep requests small, pin net_annual and net_monthly in tests, and you get a reproducible sterling take-home for offer notes, budget rows, and lightweight payroll notebooks without standing up a full PAYE engine.
Technical questions
What does the UK take-home pay calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.