Hourly to salary with overtime
At 25 an hour with 40 regular hours and 5 overtime hours at time-and-a-half, you earn 1,187.5 a week and 61,750 a year. Regular and overtime hours are paid separately, then annualized over 52 weeks. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Hourly rate
- 25
- Weekly hours
- 40
- Overtime hours
- 5
- Overtime multiplier
- 1.5
- Weeks per year
- 52
- Regular weekly pay
- 1,000
- Overtime weekly pay
- 187.5
- Weekly pay
- 1,187.5
An hourly offer that includes a regular overtime pattern is not the same annual number as the wage times forty hours times fifty-two weeks. Candidates comparing that offer with a salaried listing, household planners who treat overtime as expected income rather than a windfall, and payroll clerks who need a transparent weekly and annual figure all look up hourly to salary with overtime conversion. This calculator takes a base hourly rate, the straight-time hours in a typical week, the overtime hours in that same week, and the overtime multiplier such as one point five for time-and-a-half. It pays regular hours at the base rate, pays overtime hours at the rate times the multiplier, adds those two weekly lines, and annualizes the total over a fifty-two-week year.
What your weekly and annual pay with overtime includes
When a role pays by the hour and overtime is a normal part of the week, the annual figure people quote is not the base rate times forty times fifty-two. Straight-time hours are paid at the hourly rate; overtime hours are paid at that rate times an overtime multiplier such as one point five for time-and-a-half or two for double time. Weekly pay is the sum of those two lines.
Annual pay is weekly pay times fifty-two, the conventional working-year length used to annualize a repeating weekly pattern. The engine does not decide which hours legally count as overtime under a local statute, does not apply California daily eight-hour and twelve-hour thresholds or Florida forty-hour federal-only tables, does not withhold tax, and does not convert currencies. Zero overtime hours is allowed and then the annual figure is simply the straight-time annualization of the weekly hours.
Zero weekly hours with positive overtime is also allowed: the week is treated as all premium hours. Money fields are rounded half-up to two decimal places so a payslip-style figure compares byte-for-byte in tests.
Where an hourly-to-salary-with-overtime calculator earns its keep
People meet hourly-to-salary conversion with overtime when a posting lists twenty-eight an hour plus typical Saturday hours and another listing quotes sixty-five thousand a year, when a household budget assumes five overtime hours every week rather than treating them as a bonus, or when a staffing coordinator writes an offer letter that must show both the weekly gross and the annualized figure under the same overtime pattern.
Recruiters and candidates can check whether an hourly package at forty straight-time hours and five overtime hours at time-and-a-half lands near a salaried peer listing without opaque spreadsheet macros that forget the multiplier. Shift workers and side-gig planners can model a conservative overtime-hour count and an optimistic one to bound yearly income from a fixed base rate. Pair it with a plain hourly-to-salary converter when overtime is zero, and with a one-period overtime gross tool when you only need this week's paycheck rather than an annual figure.
The product promise is weekly and annual pay from a base rate, a straight-time and overtime hour split you already chose, and an explicit multiplier — not automatic legal classification of overtime, multi-rate shift differentials, or local statutory tables.
What you can do with it
Compare hourly offers that include overtime to salaried listings
Annualize an hourly wage at your real straight-time hours, overtime hours, and multiplier so you can compare it fairly with yearly salary posts.
FAQ
How do I convert an hourly wage with overtime into weekly and annual pay?
Weekly pay is rate times weekly hours plus rate times multiplier times overtime hours; annual pay is weekly pay times 52.
What happens if the hourly rate is negative?
A wage below zero cannot define weekly or annual pay with overtime, and the failure is not billed.
What does the hourly to salary with overtime calculator cost?
It is free in your browser on this page.
Should I include overtime in the weekly hours?
No. Enter only your straight-time hours as weekly hours and the extra hours as overtime. Keeping them apart stops the premium from being hidden or counted twice, and together they cannot exceed 168 hours.
What multiplier do I use for time-and-a-half or double time?
Use 1.5 for time-and-a-half and 2 for double time. The multiplier is a multiple of your base hourly wage, not a percentage, so typing 50 would mean fifty times the rate.
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/hourly-to-salary-with-overtime \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"hourly_rate":25,"weekly_hours":40,"overtime_hours":5,"overtime_multiplier":1.5}'const res = await fetch("https://api.kit.forhosting.com/fin/hourly-to-salary-with-overtime", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"hourly_rate": 25,
"weekly_hours": 40,
"overtime_hours": 5,
"overtime_multiplier": 1.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/hourly-to-salary-with-overtime",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"hourly_rate": 25,
"weekly_hours": 40,
"overtime_hours": 5,
"overtime_multiplier": 1.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/hourly-to-salary-with-overtime", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"hourly_rate":25,"weekly_hours":40,"overtime_hours":5,"overtime_multiplier":1.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"hourly_rate":25,"weekly_hours":40,"overtime_hours":5,"overtime_multiplier":1.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/hourly-to-salary-with-overtime", 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_rate": 25,
"weekly_hours": 40,
"overtime_hours": 5,
"overtime_multiplier": 1.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.hourly_to_salary_with_overtime",
"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_rate | 1000000000 |
max_hours | 168 |
max_overtime_multiplier | 100 |
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
A negative hourly rate is rejected with invalid_input because a wage below zero cannot define a salary. The same pure arithmetic runs free in the browser and costs $0.002 per successful API request.
What hourly-to-salary conversion with overtime means and what the response contains
This hourly to salary with overtime calculator treats weekly_hours as the straight-time hours in a typical week and overtime_hours as additional premium hours in the same week, so the two quantities are not mixed into a single total that would double-count or hide the premium. Regular weekly pay is hourly_rate times weekly_hours. Overtime weekly pay is hourly_rate times overtime_multiplier times overtime_hours. The response echoes the four inputs, reports weeks_per_year as fifty-two, then returns regular_weekly_pay, overtime_weekly_pay, weekly_pay, and annual_pay together with a formula string that restates those identities. A negative hourly_rate is rejected with invalid_input because a wage below zero cannot define weekly or annual pay.
Input contract, response shape, and rejected rates
Zero rate is allowed and yields zero pay. Negative weekly hours, overtime hours, or multiplier are also rejected so a sign flip fails loudly instead of inventing a negative salary. Example: twenty-five per hour, forty straight-time hours, five overtime hours, and a multiplier of one point five yields one thousand in regular weekly pay, one hundred eighty-seven point five in overtime weekly pay, one thousand one hundred eighty-seven point five in weekly pay, and sixty-one thousand seven hundred fifty in annual pay. POST a JSON body with four required finite numbers. hourly_rate is the base wage per hour before the overtime premium, in one currency unit for the whole request; aliases rate, wage, hourly, pay_rate, and hourly_wage are accepted so a spreadsheet or form can keep its column names. weekly_hours is the straight-time hours paid at that base rate in a typical week, at most one hundred sixty-eight; aliases hours, hours_per_week, regular_hours, and week_hours map to the same field. overtime_hours is the additional premium hours in the same week, also at most one hundred sixty-eight; aliases ot_hours, overtime, and ot are honored. overtime_multiplier is the premium expressed as a multiple of the base rate — one point five means time-and-a-half, two means double time — not a percentage of the wage; aliases multiplier, ot_multiplier, ot_rate, and premium map to the same value. Each numeric field may arrive as a JSON number or a numeric string that parses as a finite decimal. Missing fields, empty strings, NaN, and Infinity fail with invalid_input naming the field. If hourly_rate is below zero the request is rejected with a message that weekly and annual pay with overtime are defined for a non-negative hourly rate; those failures are not billed. Extremely large rates, hour totals, or multipliers are capped, and weekly_hours plus overtime_hours must not exceed one hundred sixty-eight because a calendar week has that many hours. On success the body echoes the four inputs and weeks_per_year, then reports regular_weekly_pay, overtime_weekly_pay, weekly_pay, and annual_pay, plus the formula. Pair the JSON with your own note for which hours your jurisdiction treats as overtime; this endpoint multiplies the split you send.
Where an hourly-to-salary-with-overtime calculator earns its keep
On this page the work runs entirely in the 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 tier-A catalog and lets you move from a worksheet demo to an automated pipeline without changing the mathematical result.
Integration use cases
Household budgets that treat overtime as expected pay
Turn a repeating weekly overtime pattern into weekly_pay and annual_pay so a budget does not treat overtime as a one-off bonus.
Offer letters and compensation fixtures
Generate reproducible weekly and annual figures for staffing tools, offer-letter drafts, and CI assertions that must include overtime.
Technical questions
Does weekly_hours include overtime hours?
No. weekly_hours is straight-time hours paid at the base rate. overtime_hours is additional premium hours in the same week. Do not put the same hour in both fields.
Is overtime_multiplier a percentage or a multiple of the wage?
It is a multiple of the base hourly rate. Use 1.5 for time-and-a-half and 2 for double time, not 150 or 50 percent.