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:
- From the client sidebar, click Run Payroll.
- Click Run Payroll in the top right of the list page.
- 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:
- 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.
- 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.
- Pay Date (Check Date) also prefills — this is the date funds land in the employee's account.
- 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:
- The table shows: checkbox · Employee · Type · Rate/Period · Reg · OT · Hol · PTO · Sick · Bonus · Comm · Method.
- 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. - 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.
- 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.
- 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:
- Click Calculate.
- 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.
- 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:
- Click Save as Draft to persist without finalizing — the run lands in
draftstatus and is editable. - Or click Run Payroll to save with the calculated taxes (requires Preview first).
- On success you land on the payroll detail page at
/clients/{clientId}/payroll/{payrollId}. - Click Approve Payroll to lock the run. Approval writes garnishment ledger entries and time-off accrual deltas — it's hard to reverse.
- 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.
- 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_enabledflag 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:
- From the payroll list, find the draft row.
- Click Delete (red, trash icon).
- 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.