FinAccounting Get started

Payroll Module

Running Payroll

How to set up employees, run a pay cycle, post it to your books, and actually pay people — including from more than one bank account, and how to enter a payment you already made.

Depends on HR Posts to Accounting Pays out via Banking

Start here

Before you start

Payroll doesn’t keep its own employee list. Every pay run is built by pulling your current roster straight from HR — so before you can run payroll, HR needs to be enabled and have at least one employee in it.

Hard dependency

If HR isn’t enabled, “Create Payroll Run” will still work, but it brings in zero employees — there’s nothing else for it to pull from. Enable HR first (Settings → Modules, or ask whoever manages that).

Once HR is on, the rest of this guide follows the order you’d actually do it in: add people, tell the system what they’re paid, then run a pay cycle.

Set up people

Add an employee

In HR → Employees, click Add Employee. The form is one page — no separate wizard steps. Most fields are optional; fill in what you have and come back later for the rest.

FieldWhat it’s for
Employee CodeYour own reference ID, e.g. EMP-0002. Optional.
Linked UserTies this record to a user login, if the employee has app access.
First / Last / Display NameDisplay Name is what shows up everywhere else in the app.
Email, PhoneContact details.
Department, Job TitleUsed for filtering and the org chart.
Employment TypeFull Time, Part Time, Contract, or Intern — informational.
StatusActive, On Leave, Inactive, or Terminated — this one drives payroll inclusion.
Role Profile / Module AccessControls what this person can see if they log in — not related to pay.
Reports ToFeeds the org chart. Leave as “No manager” for top-level people.
Start Date, NotesReference only.

Click Save Employee. Nothing here is validated as required by the form itself, but a person needs at least a name to be worth adding.

Faster for a big team

Adding people one at a time slow going? Use Import in the Employee Directory toolbar — it opens the same bulk-import wizard used across the app (upload a file, map columns, review, commit). Duplicate on any employee card is the quick option for cloning someone with a similar setup (department, role, pay) minus their personal details.

Set what they’re paid

There’s no separate “salary” screen — compensation is four fields built into the same employee form, right below Status.

FieldNotes
Compensation AmountThe figure for one pay period at the frequency you choose next.
FrequencyHourly, Weekly, Biweekly, Semimonthly, Monthly, or Annual.
Effective DateWhen this amount starts applying. Defaults to today.
Compensation NoteOptional — e.g. “Annual review raise.”

Save, and this becomes the employee’s on-file pay rate — Payroll reads it automatically as the Base Salary line the next time you create a run.

Giving someone a raise

Open the employee, change Compensation Amount to the new figure, set Effective Date to when it starts, and save. This doesn’t overwrite the old rate — it appends a new entry to their Compensation History, which appears as a read-only table right below the fields once there’s more than one entry.

Because payroll always resolves pay as of the run’s own scheduled date, re-running a past pay period still uses whatever rate was actually in effect back then — not today’s rate.

Overtime isn’t automatic

Compensation here only sets Base Salary. There’s still no automatic overtime-from-hours calculation — for that, add an Overtime earning line by hand on the payslip (see Enter pay figures). Tax, on the other hand, is automatic once you set it up — see the next section.

Set up tax

Payroll → Tax Setup is where you define the statutory taxes and contributions that apply — income tax/PAYE, social security, or anything else your jurisdiction requires. Once set up, new payroll runs compute these automatically from gross pay; nothing is pre-filled for you, since real tax figures vary by country and change over time.

Click + Add Tax Component for each tax or contribution:

FieldNotes
LabelWhatever you call it — e.g. “PAYE”, “SSNIT Tier 1”.
Employee-funded / Employer-fundedEmployee-funded reduces net pay, same as a deduction. Employer-funded is a separate company cost — it never touches the employee’s pay, but still posts as a real expense when you post the run.
Flat % / Progressive (bands)Flat % applies one rate to the whole amount. Progressive taxes each slice of pay at its own band’s rate (standard graduated/marginal tax) — add bands with an upper limit and a rate each; leave the last band’s limit blank for “and above.”
ActiveUntick to keep a component defined but stop applying it to new runs, without deleting your setup.

Click Save Tax Setup. From then on, any run you create computes every active component fresh from that run’s own gross pay — a graduated band reacts correctly to whatever the actual period’s earnings are, not a number carried forward from last time.

Computed on gross earnings

Tax is currently computed against gross pay directly — it doesn’t yet account for pre-tax-exempt deductions (e.g. a pension contribution that should reduce taxable income before PAYE applies). If your jurisdiction requires that, factor it into the rate/bands you enter, or adjust the itemized amount by hand on the payslip.

On an individual payslip, the Tax section shows the itemized breakdown and a Recalculate Tax button to (re)compute it against that payslip’s current gross. Tax Withheld (Total) stays a plain editable number underneath — recalculating fills it in, but you can still type over it by hand for a one-off correction.

Status & who gets paid

An employee’s Status field decides whether a new pay run includes them by default:

HR StatusNew run includes them as
ActiveIncluded
On LeaveOn Hold
Inactive / TerminatedExcluded

This is just the starting point — you can override any individual employee’s inclusion directly on their payslip once a run exists. Note this status is set by hand on the employee record; it isn’t touched automatically by the Attendance & Leave module, even if someone has an approved leave request in there.

Run payroll

Create a pay run

In Payroll → Runs, click + New Payroll Run.

  • Period — the month this run covers.
  • Run Name — optional; defaults to “Payroll Run — [period]”.
  • Scheduled Date — the pay date. This is also the date used to resolve each employee’s compensation, so set it to the real pay date, not just “today.”

Click Create Run. Every active/on-leave employee in HR is pulled in immediately, with Base Salary pre-filled from their compensation on file, and any recurring deductions/tax copied forward from their last payslip.

Enter pay figures

Open the run and go to its Employees tab, or the Payslips tab for every run at once. Click into a person’s payslip to edit:

  • Earnings — Base Salary plus any others (Overtime, Allowances) as plain label + amount lines.
  • Deductions — Health Insurance, Pension, or anything custom, same label + amount shape.
  • Tax — computed automatically from whatever you’ve defined in Tax Setup, or click Recalculate Tax to refresh it against this payslip’s current gross. Tax Withheld (Total) stays a plain number you can still override by hand.
  • Inclusion Status — Included / On Hold / Excluded, overriding the run’s default for this one person.

Net pay recalculates as Gross − Deductions − Tax, floored at zero. The Components and Deductions tabs manage the reusable label list the Earnings/Deductions dropdowns pull from.

Approve & post

Once figures look right, click Simulate — this locks in the run as ready for review (status → Calculated) without touching your books yet.

Then click Approve & Post. If your company uses double-entry accounting, this writes a real GL journal:

Example — a run with $4,000 gross, $150 health insurance, $200 PAYE

5020 Salaries & WagesDr $4,000.00
2021 Health Insurance PayableCr $150.00
2022 PAYE PayableCr $200.00
2020 Payroll Liabilities (net pay)Cr $3,650.00
Balanced$4,000.00 = $4,000.00

Every active deduction and tax component gets its own labeled liability line — a real “PAYE Payable” or “SSNIT Employee Payable” account, not one lump “tax” bucket — so each one can be tracked and settled separately in Payroll Liabilities. An employer-funded contribution (e.g. an employer-side SSNIT match) posts as an extra, balanced expense-and-liability pair on top of this — a real added company cost, separate from what’s withheld from the employee.

Nothing has left your bank account yet — this step only records that you owe your employees and whichever tax/insurance authority the deductions go to. Simple-mode companies skip the journal and the run just moves straight to Posted.

If posting fails

The run stays at Approved rather than reverting — fix whatever’s wrong (like a disabled Accounts module) and click Retry Post. It’s safe to retry; nothing gets posted twice.

Disburse net pay

This is the step that actually moves money — a real bank transaction, not just a bookkeeping entry.

From the posted run, click Disburse. You’ll set:

  • Pay Date — defaults to today. Change this if you’re recording a payment that already happened (see below).
  • Bank account per employee — everyone defaults to whatever you pick in “Pay everyone from,” but each person can be assigned their own account.

Click Disburse. Everyone sharing the same account is grouped into one outflow transaction for that account — matching what a real batch transfer looks like on your bank statement — each with its own GL entry (debits Payroll Liabilities, credits Cash).

Net pay only

This pays out take-home pay — not the withheld tax and deductions sitting in Payroll Liabilities. Those get remitted separately, whenever you actually send them.

Settle withheld amounts

Go to Payroll → Posting → Payroll Liabilities. Every account you’re holding money in from withholding — net pay not yet disbursed, each deduction, payroll tax — is listed with its current balance. Click Pay on any of them, pick the bank account and amount, and confirm. This is how the health insurance premium, pension contribution, or tax withholding actually leaves your account and gets marked settled.

Common tasks

Entering a payment you already made

Already paid someone outside the system and need your books to reflect it accurately? Run the same flow — the difference is just in the dates and figures you enter.

  1. Create the run with the real pay date

    Set Scheduled Date to the day you actually paid, not today.

  2. Enter what actually went out

    On each payslip, enter the real earnings, deductions, and tax so Net Pay matches the real amount. Exclude anyone you didn’t pay this round.

  3. Approve & Post

    Same as any run — this records the obligation.

  4. Disburse with the real date

    Set Pay Date on the Disburse form to when the money actually left your account. The bank transaction and its GL entry are both dated to this, not to today.

Paying from different accounts

If different people get paid from different accounts, assign each one individually on the Disburse form instead of relying on the “Pay everyone from” default. Everyone sharing an account is still batched into one transaction for that account — so three people paid from the same account produce one transaction, and a fourth paid from a different account produces a second, separate one, each with its own correctly balanced GL entry.

Common tasks

Salary paid out weekly

Some people have a monthly salary on paper that’s actually handed over in smaller weekly instalments — say, a $1,600/month salary paid as $400 each week. There are two ways to set this up, and which one you want depends on whether tax is involved.

Option A — four weekly runs

Set the employee’s Compensation Amount to $400 with Frequency set to Weekly (not $1,600/Monthly) — Payroll pulls whatever figure is on file verbatim as Base Salary into a run, so the on-file amount has to already be the per-run figure. Then create a separate run for each week.

  1. Create one run per week

    Give each its own Scheduled Date and a name that tells them apart — “Week 1,” “Week 2,” and so on. The Period field can be shared across all of them (e.g. all set to the same month); there’s nothing stopping multiple runs from sharing one period.

  2. Confirm the $400 pulled in automatically

    Each run’s Base Salary line comes in at $400 on its own, since that’s what’s on file. Add anything else that applies to that week and Approve & Post as normal.

  3. Disburse each run separately

    Each run produces its own net pay transaction, dated to that week — see Disburse net pay.

Tax is computed per run, on that run’s own gross

If this employee has any active tax component (see Set up tax), it gets calculated fresh on whatever that single run’s gross pay is — $400, not the real $1,600 monthly total. With a flat percentage rate this comes out the same either way, but with a progressive/bracketed rate, taxing four separate $400 runs can land in a different bracket than taxing one $1,600 run — usually under-withholding versus what the true monthly figure owes. If tax is active for this employee, Option B keeps the withholding accurate.

Option B — one monthly run, paid out in instalments

Keep the employee’s compensation as the real figure — $1,600, Monthly — and run payroll normally, once a month. Instead of disbursing the full net pay in one shot, settle it in $400 pieces as the money actually goes out.

  1. Run the month as usual

    Create, enter figures for, and Approve & Post one run for the full month. Tax and deductions are calculated correctly on the real $1,600 gross.

  2. Skip the one-shot Disburse button

    Go to Payroll → Posting → Payroll Liabilities instead — the same place you’d settle withheld tax or deductions (see Settle withheld amounts). The employee’s net pay balance sits there too, waiting to be paid down.

  3. Pay it down $400 at a time

    Click Pay, enter $400, the date, and the bank account, and confirm — once a week. Each payment posts its own dated bank transaction and GL entry, and the remaining balance drops by exactly what you paid. After four payments, the full $1,600 is settled.

Option B is the better default whenever tax or deductions apply — it computes them once, correctly, against the real monthly figure, and only the disbursement is spread out.

Reference

Run statuses

Draft
Just created, figures editable
Calculated
Simulated, ready for review
Approved
Confirmed, posting in progress
Posted
GL entry written, ready to pay
Disbursed
Money actually sent

A run can only move forward. Draft and Calculated runs can be deleted; once Approved or later, a run is a permanent record — reverse individual mistakes rather than deleting.

What this module doesn’t do

Deductions and overtime are still manual

Tax is automatic once Tax Setup is configured — but deductions (health insurance, pension) and overtime still don’t calculate themselves. Deductions are typed in once and copy forward automatically; overtime needs a new Earnings line added by hand each time it applies.

Not connected to Attendance & Leave

Clocking in/out and leave requests live entirely separately. An approved leave request doesn’t automatically deduct pay or mark someone On Hold — you do that by hand on the employee’s Status field.

“Payment Status” is bookkeeping only

The Pending / Paid / Failed field on a payslip is a record-keeping label. Only Disburse actually moves money — editing this field directly does nothing to your bank balance.

FinAccounting — Payroll Reference Guide Back to top ↑