Convert salary to hourly rate
This salary and hourly rate converter turns annual pay into an equivalent hourly rate, or performs the calculation in reverse.
Run — free
Enter exactly one pay figure and your standard hours per week. The calculator uses 52 weeks in a year, applies the same formula in either direction, and clearly returns the schedule assumed in the result. It is useful for comparing job offers, checking a payroll estimate, setting a freelance baseline, or translating a quoted hourly amount into an annual figure without hiding the working-hours assumption.
Convert annual salary into an hourly rate
To convert a salary to hourly pay, provide the annual_salary and the standard hours_per_week. The calculator multiplies weekly hours by 52 to obtain the assumed paid hours in a full year, then divides the annual salary by that total. For example, a person working 40 hours each week has 2,080 assumed hours per year. The calculation treats the salary and resulting rate as amounts in the same currency, so you can use dollars, pounds, euros, or another currency without selecting a unit. The result represents a straight pay equivalence before taxes, deductions, bonuses, overtime, or benefits. It does not claim that every hour is literally worked or billed. Paid vacation and holidays may remain part of a salaried employee’s compensation even when fewer hours are spent at work. That distinction matters when comparing a salary with contract work, where unpaid leave, administration, equipment, insurance, and gaps between projects may need to be covered by a higher hourly charge.
Convert an hourly rate into annual salary
For the reverse calculation, provide hourly_rate and hours_per_week while leaving annual_salary out. The calculator multiplies the hourly rate by weekly hours and then by 52. This produces the annual pay equivalent for a consistent schedule across a full year. A changing schedule cannot be represented perfectly by one weekly number, so use an honest average if weekly hours vary. Include only paid hours when estimating payroll earnings; for a freelance revenue target, you may instead use expected billable hours and interpret the result as gross revenue rather than salary. The output repeats the hourly rate, weekly hours, annual result, and the 52-week assumption so the calculation can be checked or recorded without relying on hidden defaults. The tool rejects requests that contain both pay inputs because there would be no unambiguous direction to solve. It also rejects requests containing neither one. Keeping that rule explicit prevents an old or accidentally retained form value from silently overriding the figure you intended to convert.
Compare pay figures with the right assumptions
An equivalent hourly rate is a useful common denominator, but it is only one part of compensation. When comparing two roles, first use the same hours_per_week assumption for both, then consider paid leave, employer retirement contributions, health coverage, bonuses, overtime rules, commuting costs, and job-related expenses separately. If one role expects 35 hours and another expects 45, using each role’s real standard schedule gives a more meaningful comparison than assuming 40 for both. The calculator requires weekly hours to be greater than zero because division by zero has no valid pay interpretation, and negative working time is not meaningful. Salary and hourly inputs must be finite, nonnegative numbers. Results are rounded to six decimal places for stable, reusable output while preserving enough precision for ordinary pay comparisons. For invoices, payroll, or legal documents, apply the rounding and currency rules required in your jurisdiction after conversion. The API price is $0.002 per request, while the browser calculation can use the same deterministic logic without sending the arithmetic to an outside data source.
What you can do with it
Compare employment offers
Translate salaries with different expected weekly schedules into hourly equivalents before considering benefits and bonuses.
Set a contracting baseline
Convert a desired annual income into a starting hourly figure, then add costs for unpaid time and business overhead.
Estimate annual pay
Turn a known hourly wage and regular weekly schedule into a consistent 52-week annual equivalent.
FAQ
How many weeks per year does the calculator use?
It uses 52 weeks per year and includes that assumption in every successful result.
Does the result include taxes or deductions?
No. It is a gross mathematical conversion and does not estimate taxes, payroll deductions, or take-home pay.
Can I enter both annual salary and hourly rate?
No. Enter exactly one pay figure so the calculator knows which value it must compute.
Why must hours per week be positive?
Zero would require division by zero when converting salary, and zero or negative hours do not describe a valid work schedule.
Does the hourly equivalent account for paid vacation?
It spreads annual salary across 52 weeks at the supplied weekly hours. Evaluate paid leave and actual hours separately when comparing compensation packages.
What does an API conversion cost?
Each API request costs $0.002. The calculation uses deterministic arithmetic with no external data source.
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/calc2/salary-hourly-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"hours_per_week":40,"annual_salary":62400}'const res = await fetch("https://api.kit.forhosting.com/calc2/salary-hourly-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"hours_per_week": 40,
"annual_salary": 62400
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/calc2/salary-hourly-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"hours_per_week": 40,
"annual_salary": 62400
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/calc2/salary-hourly-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"hours_per_week":40,"annual_salary":62400}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"hours_per_week":40,"annual_salary":62400}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/calc2/salary-hourly-convert", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"hours_per_week": 40,
"annual_salary": 62400
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "calc2.salary_hourly_convert",
"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. |