Annual salary calculator
A gross salary of 4,000 a month is 48,000 a year, and with a flat 22% tax you keep 37,440 after paying 10,560. One step gives the yearly gross, net and tax for any monthly figure. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Gross monthly
- 4,000
- Tax rate percent
- 22
- Annual gross
- 48,000
- Annual net
- 37,440
- Annual tax
- 10,560
The annual salary calculator answers the two questions every payslip raises at once: how much do I actually earn in a year, and how much of it do I keep after tax? Give it your gross monthly salary and a flat tax rate as a percentage, and it returns your gross annual salary — twelve times the monthly figure — alongside your net annual salary after applying that single rate, plus the total tax withheld over the year.
From a monthly payslip to a yearly number
Salaries are quoted monthly, but life is budgeted yearly. Rent contracts, mortgage applications, savings goals and job comparisons all work on annual figures, which means the first thing anyone needs to do with a monthly salary is multiply it out — and the second thing is to work out how much of it survives tax.
This annual salary calculator does both in one deterministic step: it multiplies your gross monthly salary by twelve to get your gross annual salary, then applies your tax rate as a single flat percentage to produce your net annual salary and the total tax paid across the year. There is no estimation, no sampling and no randomness involved — the same two inputs always produce exactly the same three outputs, which is what makes the result safe to embed in offer-comparison spreadsheets, payroll sanity checks and automated budget pipelines.
Because the formula is fixed, you can also run it backwards mentally: if the net figure feels low, you can see instantly whether the cause is the gross number or the rate, instead of staring at a payslip full of line items you cannot influence.
Choosing the right tax rate
The tax rate input is a flat percentage between 0 and 100, and choosing it well is the only real judgment call this tool asks of you. The simplest approach is to use the effective rate from a recent payslip: divide the total tax withheld by your gross pay for the same month and multiply by one hundred. That single number folds brackets, allowances and credits into one rate, which is exactly what a back-of-the-envelope yearly figure needs.
If you do not have a payslip yet — say you are evaluating an offer in a new country — a national average effective rate for your income band is a reasonable stand-in, as long as you remember the output is an approximation. What you should not use is the top marginal bracket: it overstates the tax for almost everyone and makes offers look worse than they are. Everything else — zero salary, zero tax — is accepted, because both model legitimate edge cases like unpaid leave or tax-exempt income.
What the result tells you — and what it does not
The output gives you three yearly figures: gross annual salary, the total tax for the year, and net annual salary. Gross is the number negotiations revolve around; net is the number your budget should be built on; the tax figure is the difference you need to explain to yourself before signing anything. Together they let you compare a monthly offer in one currency or country with another on a like-for-like yearly scale, provided you convert currencies first.
What the calculator deliberately does not model is everything that makes real payroll complicated: progressive brackets that change the rate as income rises, social security contributions, pension deductions, bonuses, a thirteenth month, or mid-year raises. If your situation includes any of those, treat the output as a clean baseline and adjust from there — a flat-rate estimate that is off by two percent is still vastly more useful than no yearly figure at all.
What you can do with it
Compare a monthly offer with a yearly one
Convert the monthly gross to an annual figure so both offers sit on the same yearly scale before you negotiate or sign.
Build a realistic household budget
Use the net annual salary — not the gross headline number — as the income line your yearly budget is actually built on.
Sanity-check payroll withholding
Multiply your payslip's effective rate by twelve months and compare the computed annual tax against what payroll actually withheld.
FAQ
Which tax rate should I enter?
Your effective rate: total tax withheld divided by gross pay, times one hundred. Avoid the top marginal bracket — it overstates tax for almost everyone.
Does it handle progressive tax brackets?
No. It applies one flat rate to the whole year. Fold brackets into a single effective rate from your payslip for a good approximation.
Are bonuses or a thirteenth month included?
No. The gross figure is exactly twelve times the monthly input. Add bonuses to the monthly amount first if you want them reflected.
What tax rate should I use for a job offer in another country?
If you have no payslip from that country yet, use the national average effective rate for your income band. It is a reasonable stand-in, as long as you remember that the yearly result is an approximation.
Why is a tax rate above 100 rejected?
Because a flat rate below zero or above one hundred percent has no real-world meaning. The calculator refuses it rather than return a number that would quietly distort your budget; any rate from 0 to 100 is accepted.
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/annual-salary \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"gross_monthly":4000,"tax_rate_percent":22}'const res = await fetch("https://api.kit.forhosting.com/fin/annual-salary", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"gross_monthly": 4000,
"tax_rate_percent": 22
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/annual-salary",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"gross_monthly": 4000,
"tax_rate_percent": 22
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/annual-salary", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"gross_monthly":4000,"tax_rate_percent":22}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"gross_monthly":4000,"tax_rate_percent":22}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/annual-salary", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"gross_monthly": 4000,
"tax_rate_percent": 22
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.annual_salary",
"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 same deterministic arithmetic runs free in your browser on this page and through the API at $0.002 per request, so the number you see here is byte-for-byte the number your integration receives. It is the fastest way to turn a monthly offer into a yearly figure you can compare, budget against, and negotiate with.
Choosing the right tax rate
A rate below zero or above one hundred has no real-world meaning, so the calculator rejects it with an invalid_input error instead of returning a number that would silently poison a budget.
What the result tells you — and what it does not
The arithmetic is pure and runs entirely in your browser or in a Worker at the edge: your salary numbers are never sent to a third party, stored, or logged by this page, and the API charges $0.002 per request with the same zero-retention behavior.
Technical questions
What does it cost?
$0.002 per request via the API. It is also completely free to run in your browser on this page.
Why was my tax rate rejected?
Rates below 0 or above 100 percent have no real-world meaning, so the calculator returns an invalid_input error instead of a misleading number.