Run a regular payroll

Last updated 2026-11-04For: Accountant, Small business

This guide covers: Start a new payroll, Set period & pay date, Enter hours / earnings, Review the preview, Approve, Cancel before approval.

Start a new payroll

What it does: Opens the new-payroll form, pre-populated with the next pay period (computed from the pay schedule and the last completed run) and the active W-2 employees on that schedule. If the client runs more than one pay schedule, a picker at the top of the Pay Period card lets you choose which one this run is for.

Where: Client sidebar → Run Payroll.

Steps:

  1. From the client sidebar, click Run Payroll.
  2. Click Run Payroll in the top right of the list page.
  3. The form opens with: Pay Period card · Employees table · Notes · a Save as Draft button plus a primary button that starts as Calculate and becomes Run Payroll after you preview.

Who: Accountant or SMB admin. The endpoint HARD-blocks with HTTP 412 ONBOARDING_PACKET_NOT_SIGNED if the client doesn't have a fully signed onboarding packet — a modal appears with a deep link to client settings to send/remind the packet.

Notes: A blue Current Pay Period banner at the top of /clients/{clientId}/payroll shows the next scheduled period before you click Run Payroll. If the client's onboarding packet is signed but ra_on_file is true on the client record, the gate is bypassed.

Set period & pay date

What it does: Sets the pay-period start, end, and the check date (= pay date).

Where: Pay Period card.

Steps:

  1. Pay Schedule picker — appears only when the client has more than one pay schedule (see Client settings). Pick which schedule this run is for; the employee list filters to that schedule's employees and the dates below recompute to its cadence. A run always covers one schedule. Clients with a single schedule don't see this.
  2. Period Start and Period End prefill from the API following the selected schedule's cadence — not a fixed 14-day window. Semimonthly runs cover the 1st–15th and 16th–end of month; monthly covers the full calendar month; weekly/biweekly follow the schedule's start day. For multi-schedule clients the dates recompute when you switch schedules. Adjust as needed.
  3. Pay Date (Check Date) also prefills — this is the date funds land in the employee's account.
  4. If any employee in the run is set to Direct Deposit, a Direct Deposit Timing card appears under the period inputs showing the day and time employees are paid (by ~9 AM ET, or by ~5 PM ET when the date is tight) and the latest time to submit and still hit the pay date (4:15 PM ET, about three banking days before it). It can also offer Pay one day earlier — same deadline, employees paid a day sooner (usually that afternoon). Past dates can't be picked for a direct-deposit run. See How ACH timing works.

Who: Accountant or SMB admin.

Notes: If a regular payroll already exists for the same period AND the same employees, the engine auto-detects the duplicate, excludes those employees from the table, and shows an amber banner: N employee(s) already have payroll for this period — these employees have been excluded. Use Off-Cycle or Bonus payroll for additional payments.

Enter hours / earnings

What it does: Fills in regular/overtime/holiday/PTO/sick hours, bonus, commission, and payment method per employee.

Where: Employees table on the new-payroll form.

Steps:

  1. The table shows: checkbox · Employee · Type · Rate/Period · Reg · OT · Hol · PTO · Sick · Bonus · Comm · Method.
  2. For hourly employees, Reg and OT are editable; for salary employees, they're shown as - and pay is computed from the per-period salary derived from the client's pay frequency.
  3. Bonus and Commission are editable for everyone. Holiday, PTO, and Sick are hourly only — for a salaried row the Holiday input is disabled and PTO/Sick carry no extra pay, because the salary already covers those days (they're absorbed, not added on top). Record them for hourly employees, where they pay as separate hours.
  4. Method dropdown: Direct Deposit (disabled if no routable bank) or Paper Check. The default is Direct Deposit when the employee has a Moov-verified bank, paper check otherwise.
  5. Uncheck the row checkbox to exclude an employee from this run.

Enter hours by job (optional). When the client has active Jobs & Positions (see Client settings), each hourly row shows a Jobs button in the Adjust column, and the Employees header has a Show job hours toggle that expands job entry for every hourly employee at once. Expanding a row lists each active job with its own Reg and OT inputs (the rate is the employee's per-job override or the job default). The per-job hours roll up into the row's Reg/OT totals, and overtime is paid at the FLSA weighted average of the rates worked. PTO, Sick, Holiday, and Bonus stay single-rate. Leave the job rows blank to just use the plain Reg/OT columns.

Who: Accountant or SMB admin.

Notes: Run Payroll auto-fills hours for whatever period is selected — including a prior period if you back-date the run — by summing the approved weekly timesheets that overlap that period, so the figures match the hours actually clocked in that window. Rows where hours came from an approved timesheet are green-tinted with a ✓ next to the name (from_timesheet). Rows where the employee already has a payroll for this period are red-tinted with a Already paid chip and disabled (regular payroll only). The salary "Rate/Period" cell hovers to show the annual salary as a tooltip. Deductions — 401(k), health, union dues, advance/loan repayments — and garnishments aren't entered in this table; they apply automatically from the employee's assigned setup and show up in the preview's per-employee breakdown. Set them up in Deductions & custom earnings (note: an advance repayment must be post-tax).

Review the preview

What it does: Runs the tax engine on the current inputs without saving anything, and shows employer/employee totals + a per-employee breakdown.

Where: Calculate button (bottom right, primary action).

Steps:

  1. Click Calculate.
  2. A green preview panel appears showing Total Gross Pay, Total Net Pay, Employee Taxes, Employer Taxes, and an Employee Breakdown table: Employee · Gross · Fed Tax · State Tax · Local Tax · State Ins. (SDI/PFML) · SS · Medicare · Net.
  3. Hover the State Tax cell to see the work state in parentheses; hover State Ins. to see the component breakdown.

Who: Accountant or SMB admin.

Notes: Editing any field after preview clears the preview — you must recalculate to refresh totals. The preview reads YTD balances from the per-period YTD ledger so Social Security wage caps, additional Medicare, and SUI taxable wage caps are applied accurately. SUI rates resolve from the per-client client_sui_rates history (state-specific, effective-dated). Preview is read-only — no DB writes, no tax filings, no payments.

Save & approve

What it does: Persists the run, then locks it for processing.

Where: Save as Draft and Run Payroll buttons (bottom right), then Approve Payroll on the detail page.

Steps:

  1. Click Save as Draft to persist without finalizing — the run lands in draft status and is editable.
  2. Or click Run Payroll to save with the calculated taxes (requires Preview first).
  3. On success you land on the payroll detail page at /clients/{clientId}/payroll/{payrollId}.
  4. Click Approve Payroll to lock the run. Approval writes garnishment ledger entries and time-off accrual deltas — it's hard to reverse.
  5. On the approved run, set the Pay timing before you process:
    • Arrive on pay date (default) — funds land exactly on the pay date, and the business account is debited the prior banking day(s) even if you process early. The action button reads Schedule Payroll.
    • Pay as soon as possible — fire the money immediately. Use this for off-cycle or termination final pay. The button reads Process Payroll.
  6. Click that button to fire the Moov debit, initiate direct deposits, and schedule tax payments. A pre-checked Same-Day ACH toggle appears if the client's same_day_ach_enabled flag is on — uncheck to use standard ACH.

Who: Accountant or SMB admin.

Notes: Auto-run can do create/approve/process automatically — see Auto-pilot payroll. On the global accountant payroll listing (/payroll?client=...), each row's actions include inline Approve / Process with confirm dialogs spelling out what the action does.

Cancel before approval

What it does: Deletes a draft payroll. After approval, deleting becomes voiding — different workflow.

Where: /clients/{clientId}/payroll list page, draft rows show a Delete button.

Steps:

  1. From the payroll list, find the draft row.
  2. Click Delete (red, trash icon).
  3. Confirm in the modal — Delete in red, irreversible.

Who: Accountant or SMB admin.

Notes: Only draft payrolls have the Delete button. For approved or processing runs, use Void Payroll on the detail page — that cancels pending Moov debits, voids each item, and cancels scheduled tax payments. Voided runs are kept for audit. See Off-cycle, bonus & correction payrolls for the correction-run pattern when you can't void.


Related: Off-cycle, bonus & correction payrolls · Auto-pilot payroll · Payroll history & edits · Deductions & custom earnings · How ACH timing works.

Still need help?