Biweekly pay calculator
An annual salary of 75,000 is a gross paycheck of 2,884.62 every two weeks, or 1,442.31 a week, on the 26-period payroll year. Hourly workers can enter their wage and weekly hours instead. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Annual salary
- 75,000
- Calculation mode
- annual
- Pay periods per year
- 26
- Weekly pay
- 1,442.31
- Biweekly pay
- 2,884.62
A biweekly paycheck is the gross amount a United States employer deposits every other week when payroll is scheduled over twenty-six periods in a year. Candidates who just signed an annual salary, and hourly workers who only know a wage plus a weekly schedule, both search for a biweekly pay calculator before they compare offers or plan rent. This calculator accepts either a non-negative annual salary or a non-negative hourly rate together with hours per week, applies the standard twenty-six-period year, and returns the gross paycheck amount together with the matching weekly and annual figures.
What biweekly gross pay means and how the two conversion paths work
Biweekly payroll in the United States is a twenty-six-period year: fifty-two weeks divided by two, so a check is issued every other week rather than twice a calendar month. That distinction matters because semi-monthly payroll — typically the first and the fifteenth, or the fifteenth and the last day — produces twenty-four periods, not twenty-six, and a paycheck computed as annual salary divided by twenty-four is larger than a true biweekly check.
Zero salary or zero hours are allowed and yield a zero paycheck, matching unpaid leave or a paused contract. Negative salary or hours cannot describe a schedule, so they are rejected rather than printed as a negative deposit. Money fields round to two decimal places so they match currency statements on a pay stub.
The calculator reports gross pay only: it does not withhold tax, retirement, or insurance, and it does not invent overtime premiums on hours above forty.
Where a biweekly pay calculator earns its keep
Careers pages and offer-letter tools rank for biweekly pay calculator because candidates think in rent and groceries, not in the annual number printed on a contract. Staffing firms and shift marketplaces live on hourly rates; multiplying wage by weekly hours times two gives the same biweekly check without forcing a recruiter to remember the fifty-two-week conversion or to confuse it with a semi-monthly twenty-four.
Educators teaching the difference between biweekly and semi-monthly can seed classroom examples that fail loudly on a negative salary instead of silently printing a minus sign a student might treat as a refund. Failed validation does not consume balance. Keep salary and hours non-negative, pin the rounded money fields in tests, and you get a reproducible gross paycheck for widgets, course modules, and edge workers without standing up a payroll engine of your own.
What you can do with it
Offer letter to paycheck
Turn a written annual salary into the gross biweekly deposit a candidate should expect on a twenty-six-period calendar before they accept.
Hourly job to biweekly budget
Convert an hourly wage and a typical weekly schedule into the same biweekly paycheck used for rent and bill planning.
Compare two offers on one cadence
Put a salaried offer and an hourly offer on the same biweekly gross so the larger check is obvious without mixing monthly and weekly figures.
FAQ
How is biweekly pay calculated from an annual salary?
Divide the non-negative annual salary by twenty-six, the number of biweekly periods in a fifty-two-week year.
How do I convert an hourly wage into a biweekly paycheck?
Gross biweekly pay is hourly rate times hours per week times two (two weeks in the period).
Is biweekly the same as semi-monthly?
No. Biweekly is every other week (twenty-six checks a year). Semi-monthly is twice a calendar month (twenty-four checks). This calculator always uses twenty-six periods and will not treat a salary as twenty-four paydays.
Why does the calculator reject a negative salary or hours?
A negative salary or a negative weekly schedule cannot describe a paycheck.
Does the biweekly pay result include taxes or deductions?
No. It shows gross pay only: nothing is withheld for tax, retirement or insurance, and no overtime premium is added for long weeks. Your take-home deposit will be lower once your employer applies those deductions.
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/biweekly-pay \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"annual_salary":52000}'const res = await fetch("https://api.kit.forhosting.com/fin/biweekly-pay", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"annual_salary": 52000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/biweekly-pay",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"annual_salary": 52000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/biweekly-pay", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"annual_salary":52000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"annual_salary":52000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/biweekly-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
{
"annual_salary": 52000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.biweekly_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_abs_value | 1000000000000000 |
max_hours_per_week | 168 |
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
Negative salary or hours fail with invalid_input so a form never displays a nonsense negative deposit.
What biweekly gross pay means and how the two conversion paths work
From an annual salary the identity is simple: biweekly_pay equals annual_salary divided by twenty-six, and weekly_pay is that amount halved, which is the same as annual_salary divided by fifty-two. From an hourly rate the identity is equally direct: weekly_pay equals hourly_rate times hours_per_week, and biweekly_pay equals weekly_pay times two, which is the same as hourly_rate times hours_per_week times fifty-two divided by twenty-six.
Input contract, response shape, and error behaviour
POST a JSON body that supplies at least one of annual_salary or hourly_rate. annual_salary is the gross yearly figure in a single currency unit, finite and not negative, with aliases salary, annual, yearly, yearly_salary, and annual_pay. hourly_rate is the wage per hour in the same currency, finite and not negative, with aliases hourly, rate, wage, hourly_wage, and pay_rate. When the hourly path is used, hours_per_week is required: a finite number of hours worked in a typical week, not negative and not greater than one hundred sixty-eight, the hours in seven twenty-four-hour days, with aliases hours, weekly_hours, hrs, and hours_week. Each numeric field may arrive as a JSON number or as a numeric string. If both annual_salary and hourly_rate are present, annual_salary wins so a filled form does not have to be emptied before submit. Missing both sources, empty strings, non-finite values, a negative salary, a negative hourly rate, negative hours, hours above one hundred sixty-eight, or an hourly path without hours_per_week fail with invalid_input naming the field and are not billed. On success the body includes mode (annual or hourly), the echoed inputs that applied, pay_periods_per_year always twenty-six, weekly_pay, biweekly_pay as the paycheck amount, annual_salary (given or implied from the hourly path), and a formula string restating the identity. Example: annual_salary of seventy-five thousand yields biweekly_pay of two thousand eight hundred eighty-four dollars and sixty-two cents because seventy-five thousand divided by twenty-six rounds to two decimals. Example: hourly_rate of eighteen point seventy-five with thirty-seven point five hours per week yields one thousand four hundred six dollars and twenty-five cents. Pair the gross figure with your own withholding table if you need net take-home; this endpoint computes paycheck gross only.
Where a biweekly pay calculator earns its keep
Household budget apps can store the returned biweekly_pay as a recurring inflow, then let the user layer rent, transit, and savings on a two-week cadence that matches payday rather than an artificial monthly twelfth that never lands on a real check. Human-resources microsites and applicant-tracking add-ons can call the same pure module from the browser for a free preview and from the API when they persist a scenario, guaranteeing that the number a visitor saw on a landing page is the number stored after they save.
Technical questions
What does the biweekly pay calculator cost?
The browser tool is free. API requests use prepaid balance at $0.002 per successful call; invalid input is not billed.