Wage calculator
At 25 an hour, 40 hours a week for 52 weeks comes to 1,000 a week and 52,000 a year in gross pay. Enter your hourly wage, weekly hours and working weeks to compare an hourly offer with a salary. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Hourly wage
- 25
- Hours per week
- 40
- Weeks per year
- 52
- Weekly gross
- 1,000
- Annual salary
- 52,000
A wage calculator turns an hourly wage, the hours you work in a typical week, and the weeks you work in a year into gross annual earnings. Job seekers use it to compare an hourly offer with a salaried listing; household planners use it to see what a part-time rate means over a full year; payroll clerks and tutors use the same three-factor product as a transparent check that does not invent overtime, taxes, or benefits. Small checks you may already know include twenty-five per hour at forty hours for fifty-two weeks yielding fifty-two thousand annually, and eighteen point five at thirty hours for fifty weeks yielding twenty-seven thousand seven hundred fifty.
How wage, hours, and weeks are read and why negatives fail closed
Common schedule choices include forty hours and fifty-two weeks for a full-time year, or fewer weeks when unpaid leave or seasonal shutdowns reduce the working year. Optional leading plus signs and scientific notation on numeric strings are allowed when they parse as finite decimals; embedded spaces after trim, hex prefixes, and non-numeric tokens are rejected with a clear message so a bad cell does not become a wrong annual figure. Zero for any factor is valid and yields a zero annual salary when that factor is zero.
Hours per week are capped at one hundred sixty-eight because a calendar week has that many hours, and weeks per year are capped at fifty-three, the maximum ISO week count in a calendar year. Extremely large wages above the documented ceiling are rejected rather than overflowing into Infinity. Computation uses ordinary floating-point multiplication, then rounds money fields half-up to two decimal places and quantity fields to six, collapsing negative zero to plain zero for clean comparisons.
Where wage annualization fits in offers, budgets, and software
People meet a wage calculator when a job post lists twenty-eight an hour and another lists fifty-eight thousand a year, when a contractor needs to see what a project rate means if the engagement fills a full week for most of the year, or when a student budget worksheet asks for annual income from a part-time hourly role. Recruiters and candidates can pre-check whether an hourly package at forty hours and fifty-two weeks lands near a salaried peer listing without opaque spreadsheet macros.
Household planners can model optimistic and conservative week counts to bound yearly income from a fixed hourly wage. Developers call the same contract from scripts to seed deterministic test vectors for compensation tools, to normalize user-entered wage and schedule before offer-comparison demos, or to fail closed when a feed contains a wage below zero that should never become a silent negative salary. Contest and homework practice often needs a fast, offline source of products so solutions can be checked under time pressure.
Product and education tools use the conversion when a learner types a rate and a schedule and the UI must show clean weekly and annual figures side by side. Pair it with an overtime annualizer when premium hours are part of the week, and with a salary-to-hourly converter when you need the inverse direction. The product promise is gross annual salary from a wage, a weekly hour count, and a weeks-per-year count you already chose — not automatic legal classification of overtime, multi-rate shift differentials, or local statutory tables.
What you can do with it
Compare hourly offers to salaried listings
Annualize an hourly wage at your real weekly hours and weeks worked so you can compare it fairly with yearly salary posts.
Household and part-time year planning
Translate an hourly wage into weekly gross and annual salary under full-time, part-time, or seasonal week counts.
FAQ
What does the wage calculator cost?
It is free in your browser on this page.
How is annual salary defined?
Weekly gross is wage × hours per week.
What happens if an input is negative?
Hourly wage, hours per week, and weeks per year must all be non-negative in this calculator.
Does this include taxes, overtime, or benefits?
No. It only annualizes the stated hourly wage for the given schedule. Use dedicated payroll or tax tools for take-home pay and overtime stacks.
Why can weeks per year be less than fifty-two?
Unpaid leave and seasonal shutdowns reduce the working year. Send 50 if you take two unpaid weeks; send 52 for a full repeating-week year.
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/wage \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"hourly_wage":25,"hours_per_week":40,"weeks_per_year":52}'const res = await fetch("https://api.kit.forhosting.com/fin/wage", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"hourly_wage": 25,
"hours_per_week": 40,
"weeks_per_year": 52
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/wage",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"hourly_wage": 25,
"hours_per_week": 40,
"weeks_per_year": 52
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/wage", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"hourly_wage":25,"hours_per_week":40,"weeks_per_year":52}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"hourly_wage":25,"hours_per_week":40,"weeks_per_year":52}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/wage", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"hourly_wage": 25,
"hours_per_week": 40,
"weeks_per_year": 52
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.wage",
"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_hourly_wage | 1000000000 |
max_hours_per_week | 168 |
max_weeks_per_year | 53 |
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
This wage calculator multiplies hourly_wage by hours_per_week by weeks_per_year and returns that annual_salary together with weekly gross pay. Any negative wage, hours, or weeks is rejected with invalid_input because a signed ledger is not a wage. Use it free in the browser for everyday decisions, or call the API at $0.002 per successful request when you need reproducible annual-salary numbers in spreadsheets, offer letters, or teaching demos.
What a wage calculator returns and how annual salary is defined
Gross wage annualization answers a direct question: if you are paid a given amount for each hour worked, how much do you earn over a year under a stated weekly schedule and a stated count of working weeks. Zero values are allowed and simply yield zero or partial pay figures when one factor is zero. The product is annual_salary equals hourly_wage times hours_per_week times weeks_per_year. From the same three numbers this wage calculator also reports weekly_gross as the product of the hourly wage and hours per week, so you can compare a weekly paycheck figure with the yearly total without a second tool. That three-factor product is the transparent model used in offer letters, household budgets, and classroom worksheets: it does not invent overtime multipliers, paid-leave credits, tax withholdings, employer benefits, or local labor-law adjustments. The response echoes the normalized hourly_wage, hours_per_week, and weeks_per_year you submitted, then returns weekly_gross, annual_salary, and a formula string that documents the identities. There is no currency conversion, no inflation path, and no payroll calendar of biweekly or semi-monthly periods: the engine either multiplies three finite non-negative numbers inside the supported range or rejects the input with invalid_input. Rejected cases include missing fields, non-finite values, magnitudes above the documented ceiling, and any negative wage, hours, or weeks, because a negative pay rate or negative schedule does not define a meaningful annual salary in this model.
How wage, hours, and weeks are read and why negatives fail closed
The preferred fields are hourly_wage for the pay rate per hour, hours_per_week for hours worked in a typical week, and weeks_per_year for how many weeks you actually work in a year, but aliases wage, hourly, rate, pay_rate, and hourly_rate for the wage, hours, weekly_hours, week_hours, and hrs_week for weekly hours, and weeks, weeks_worked, annual_weeks, and year_weeks for the year count are accepted so spreadsheets, query strings, and typed forms can reuse the same contract. Negative hourly_wage, hours_per_week, or weeks_per_year is rejected with invalid_input so the model stays a non-negative wage calculator rather than a signed ledger. Pair the free browser run on this page with the priced API when you need the identical mathematical result inside an automated pipeline without re-implementing the annualization yourself.
Where wage annualization fits in offers, budgets, and software
On this page the work runs entirely in your browser; through the API each successful lookup costs $0.002, failed validation is not charged, and nothing is stored after the response returns. That split — free interactive exploration and a priced, identical API — matches the rest of the KIT tier-A catalog and lets you move from a classroom demo to an automated pipeline without changing the mathematical result.
Integration use cases
Worksheets and test fixtures
Generate reproducible annual_salary figures for classroom budgets, offer-letter tools, property tests, and CI assertions.