ForHosting KIT · Finance & money

Semi-monthly pay calculator

An annual salary of 72,000 paid twice a month gives 24 gross checks of 3,000 each, or 6,000 a month. Use it to read an offer letter correctly, since biweekly pay splits the year into 26 checks instead. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Annual salary
72,000
You get
Pay periods per year
24
Paycheck
3,000
Monthly equivalent
6,000

Semi-monthly pay is a payroll calendar with twenty-four equal gross checks each year: two deposits in every calendar month, commonly on the first and the fifteenth or on the fifteenth and the last day. That is not biweekly pay, which issues a check every fourteen days and therefore twenty-six amounts in a typical year. This calculator accepts a positive finite annual salary, divides it by twenty-four, and returns the gross amount of each semi-monthly paycheck together with the implied monthly equivalent.

What semi-monthly pay is and how the paycheck is computed

Semi-monthly pay answers a payroll-calendar question: given a gross annual salary, what amount lands on each check when the employer pays twice every calendar month. The identity is paycheck equals annual salary divided by twenty-four, because two pay dates per month times twelve months is twenty-four equal gross amounts. Typical date pairs are the first and the fifteenth, or the fifteenth and the last calendar or business day; the dates change the deposit calendar, not the arithmetic.

That calendar is not biweekly. Biweekly payroll issues a check every fourteen days and therefore produces twenty-six checks in a typical year, and occasionally twenty-seven in a year with an extra Friday, so dividing an annual salary by twenty-six understates each semi-monthly amount. Monthly payroll issues twelve checks; weekly issues fifty-two.

Worked example: an annual salary of seventy-two thousand yields a gross semi-monthly paycheck of three thousand, because seventy-two thousand divided by twenty-four is three thousand exactly. Sixty thousand yields two thousand five hundred. One hundred thousand yields four thousand one hundred sixty-six and two-thirds before currency rounding, which this engine reports to two decimal places as four thousand one hundred sixty-six point six seven.

Monthly equivalent is the annual figure divided by twelve, returned so a listing or a rent quote that uses a monthly figure can be compared with the semi-monthly check without a second division in the client. The result is gross pay in the same currency unit as the salary you supplied: no tax withholding, no benefits, no retirement deferral, no overtime multiplier, and no foreign-exchange conversion. Those adjustments belong to other landings.

Zero and negative salaries are rejected because a non-positive annual figure does not define a paycheck on this calendar.

Where a semi-monthly pay calculator earns its keep

People who type semi-monthly pay into a search box already know they want the twice-a-month paycheck from an annual salary, not a general period converter and not a biweekly (every-two-weeks) split. A publisher ranking for that query is serving candidates who just received an offer letter quoted as an annual figure, employees whose handbook says paid on the first and the fifteenth, and payroll clerks who must fill a gross column before a pay run.

Budgeting apps and relocation worksheets call the contract to seed a twice-monthly cash-flow row from a stated salary without storing a handwritten division. Offer-comparison notebooks pin known-good pairs — seventy-two thousand for a clean three thousand per check, one hundred thousand for four thousand one hundred sixty-six point six seven — so a library cannot silently divide by twenty-six and call the result semi-monthly. Failed validation does not consume balance.

Keep requests small, pin the rounded paycheck field in tests, and you get stable semi-monthly arithmetic for widgets, HR scripts, and edge workers without standing up a full payroll suite of your own. Pair this capability with a separate withholding or hourly tool when you need net pay or an hourly wage; keep this surface focused on the gross twice-monthly amount that people mean when they search semi-monthly pay.

Turn an offer letter into a twice-monthly check

Enter the gross annual salary from an offer or a contract to see the semi-monthly paycheck and the monthly equivalent before you accept.

Budget cash flow on the 1st and the 15th

Seed a twice-monthly budget row from a stated annual figure so rent, bills, and savings line up with the two deposit dates your employer uses.

Fill a payroll gross column from annual salary

Call the contract from an HR or payroll script so each semi-monthly gross amount is annual salary divided by twenty-four, not a handwritten split.

How is semi-monthly pay calculated from annual salary?

Paycheck is annual salary divided by 24, the number of twice-monthly periods in a year. Example: 72,000 yields 3,000 per check.

Is semi-monthly the same as biweekly?

No. Semi-monthly is two dates every calendar month (24 checks a year). Biweekly is every fourteen days (26 checks, sometimes 27). Dividing by 26 understates a semi-monthly paycheck.

What happens if the salary is zero, negative, or not a number?

A paycheck on this calendar requires a positive finite annual salary, and the failure is not billed.

Is the result gross or net pay?

Gross. The calculator does not withhold tax, benefits, or retirement deferrals. Pair a separate withholding tool when you need take-home pay.

Do the pay dates change the amount of each check?

No. Whether you are paid on the first and the fifteenth or on the fifteenth and the last day of the month, each check is the annual salary divided by 24. The dates only change when the money arrives.

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.

POSThttps://api.kit.forhosting.com/fin/semi-monthly-pay

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.

curl -X POST https://api.kit.forhosting.com/fin/semi-monthly-pay \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"annual_salary":72000}'
{
  "annual_salary": 72000
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "fin.semi_monthly_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.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Zero, negative, and non-finite salaries fail with invalid_input instead of a signed or infinite check. Successful API calls are billed at $0.002; invalid input is not charged.

Input contract, response shape, and validation

Example: annual salary seventy-two thousand yields paycheck three thousand, monthly equivalent six thousand, and twenty-four periods. Example: one hundred thousand yields paycheck four thousand one hundred sixty-six point six seven and monthly equivalent eight thousand three hundred thirty-three point three three. Failed validation is not billed. POST a JSON body with one required finite number. annual_salary is gross annual pay in currency units and must be a positive finite number; a missing field, an empty string, zero, a negative value, NaN, or Infinity fails with invalid_input naming the field. Aliases salary, annual, gross, income, and yearly_salary are accepted so a payroll export or an offer letter parser does not need a rename step. The field may arrive as a JSON number or as a numeric decimal string. Absolute values must stay within one quadrillion so the quotient remains finite in IEEE double precision on the Worker and in the browser. Prefer JSON numbers over currency-formatted strings; dollar signs, thousands separators, and accounting parentheses are not parsed. On success the body echoes rounded annual_salary, returns pay_periods_per_year as the integer twenty-four, paycheck as annual salary divided by twenty-four rounded half-up to two decimal places (the primary gross amount of each semi-monthly check), monthly_equivalent as annual salary divided by twelve rounded the same way, and a formula string set to paycheck = annual_salary / 24. Pricing for a successful item is a flat $0.002.

Where a semi-monthly pay calculator earns its keep

Classroom consumer-math courses assign annual-to-paycheck worksheets and need an oracle that marks a zero or negative salary as invalid_input instead of emitting a signed check.

What does the semi-monthly pay calculator cost?

The browser tool is free. API requests use prepaid balance at $0.002 per successful call; invalid input is not billed.

Read the full KIT documentation →