Ledgr/Documentation/Payroll

Payroll

Watch the lesson: Run payroll and issue payslips (2:11).

South African payroll with the statutory maths built in — PAYE on the current brackets, UIF at the cap, SDL at 1%, and the EMP201 totals waiting at the end.

Plan.

Payroll is included from Professional upwards, and on Starter and Business as an add-on. The first 10 employees are included; above that it is banded in blocks of fifteen — see pricing. Payroll never stops because of a band: if you grow past the one you paid for, payslips still run and the difference is settled at renewal.

Add an employee

  1. Payroll → Employees → + Add employee
  2. Identity and statutory fields

    Full name, RSA ID, Start date, Email, Business phone and Tax number (the employee's SARS income tax reference). The tax number is what appears on the IRP5, so get it right up front.

    Engaged as says what kind of payee they are. An independent contractor or a non-executive director is paid fees that are not remuneration, so no PAYE, UIF or SDL is withheld, and their IT3(a) gives the reason SARS asks for: an independent contractor or a non-executive director's fees.

    An independent contractor's fees are remuneration, with PAYE on the tax tables, in two cases. The first is a contractor who is not a South African resident: the Fourth Schedule's independent-contractor exclusion is only for a resident, so tick the box and the three questions are not asked. The second is a resident whose work is done mainly at your (or your client's) premises and who is under your control or supervision as to how or when they work, unless they employ three or more unconnected full-time employees.

    A personal service provider is a company or trust whose work is done personally by someone connected to it. Pick Personal service provider, give its trading name as the name, and its registration number (a company's looks like 2019/123456/07; tick the box for a trust). Its fees are taxed like a bonus with no rebates, certified under code 3601 as nature of person H with the registration number on the certificate, and no UIF is withheld because a company is not an employee.

    No UIF is withheld for anyone who is not an employee, whatever the Contributes to UIF tick says: the Unemployment Insurance Act's “employee” is a natural person and leaves out an independent contractor, so a contractor taxed as an employee, a labour broker and a non-executive director (resident or not) pay PAYE where the rules above say so, but no UIF on either side. If the person is in fact under a contract of service, engage them as an employee.

    A labour broker is taxed unless SARS has given them an exemption certificate (IRP30). Pick Labour broker (no IRP30) and PAYE is withheld on the tax tables (code 3617). Pick Labour broker (holds an IRP30), give the certificate's number (it begins with a 7) and the day it is valid to, and no PAYE, UIF or SDL is withheld; their IT3(a) is certified under code 3619 with reason 07. The certificate is valid only to the end of the tax year, so once the pay date passes that day the pay run stops and tells you to capture the new certificate or switch them to Labour broker (no IRP30).

    Learnership (section 12H). For a learner on a registered learnership agreement, give the agreement's registration number, its NQF level and dates, the day the learner completed it, and whether the learner has a disability. The company's ITR14 then deducts the section 12H allowance for the year — R40 000 at NQF 1 to 6 (R60 000 with a disability), R20 000 at NQF 7 to 10 (R50 000), apportioned for a part year, plus the completion allowance in the year they finish. Attach an IT180 for each learner to the return.

    Minimum wage for an EPWP worker or a learner. The National Minimum Wage Act gives a worker on an Expanded Public Works Programme their own rate (R16.62 an hour from 1 March 2026), and a learner on a learnership agreement the weekly allowance in Schedule 2 for their NQF level and the credits they have earned (for example R2 047.41 a week at NQF level 4 with 361 to 480 credits). Tick Works on an Expanded Public Works Programme, or give the learner's Credits earned so far, and Ledgr measures their pay against that rate instead of the general R30.23. Nobody has to record a section 15 exemption for a rate the Act itself sets.

    A prescribed officer. Someone who is not a director but runs the business, or a significant part of it, is a prescribed officer (Companies Regulation 38). Tick A prescribed officer, not a director on their record: a company that must be audited names each director's and prescribed officer's pay in its annual financial statements (Companies Act section 30(4)), and Ledgr reads it from the payroll.

    A learner who was not already employed when the agreement began, and whose agreement is in force for the pay period, is paid under a section 18(3) contract: their pay is left out of skills development levy (SDL), so their payslip carries none, and it is left out of the R500 000 payroll that decides whether the employer pays SDL at all. A learner who was already employed before the agreement stays levied.

    For somebody without a South African ID, tick No South African ID — employed on a passport and enter the Passport number and the Passport country: the three-letter code printed on the passport's data page, such as ZWE for Zimbabwe or MOZ for Mozambique. SARS needs the country with the number, so their tax certificate cannot be exported without it.

  3. Ledgr login links the employee to the person who signs in to Ledgr, so the hours they book on job cards and time entries can reach their payslip. One login is one employee in a company; somebody on the payroll of two of your companies is linked once in each.

  4. How is this person paid?

    Start from a pay template if they are paid like others on the same grade or role — its salary or rate, earnings and deductions then apply, and anything you type for them here is their own and wins over it. Then choose Salary, Hourly or Shifts: a salary needs the monthly gross; hourly and shift workers need their Hourly rate and, if it is not the template's, their Ordinary hours a week. A shift's length is set on the template, once for everybody who works them. When they are added, Ledgr opens their page so you can go straight on to their earnings and deductions.

  5. Pay

    Paid monthly, fortnightly or weekly, then Gross monthly (R) — the field names the period, so it reads Gross weekly (R) for somebody paid by the week — and any travel allowance, pension and medical aid as their own fields so each is treated correctly for PAYE. The pension and medical aid you enter here become the employee's deductions under Payroll → Deductions, so each fund is kept in one place and deducted once. Change them on either screen.

  6. Contributes to UIF

    Ticked for every new employee. Untick it only for somebody the Unemployment Insurance Contributions Act leaves out — for example, a person employed for fewer than 24 hours a month. Ledgr then deducts and pays no UIF for them on either side, reports nil UIF on their IRP5 and leaves them off the UI-19; SDL still applies. If you are not sure, check before the first run rather than correcting it on an EMP501.

The owner is not an employee. A sole proprietor cannot employ themself, and a partner is not an employee of the partnership (Income Tax Act Fourth Schedule paragraph 1; a partner's salary under the agreement is part of their share of the profit, section 24H(5)(a)). So Ledgr refuses to add, for a sole proprietor, someone with the business's own income tax number or registration number, and, for a partnership, someone with a partner's ID or tax number from Settings → Company → Partners. What the owner takes out is a drawing against their capital account: no payslip, no PAYE, UIF or SDL, and no IRP5. Ledgr recognises the owner only by those numbers, so keep them filled in.

How the tax is worked out

Ledgr uses the 2026/27 tables. You do not enter any of this — it is applied when the run is calculated:

ItemTreatment
PAYE7 brackets from 18% to 45%, applied to annual equivalent remuneration
Primary rebateR17 820 a year, deducted from the annual tax before it is spread over the months
Tax thresholdR99 000 under 65, R153 250 from 65, R171 300 from 75
UIF — employee1% of remuneration up to R17 712 a month, so at most R177.12 a month — nil for an employee who does not contribute
UIF — employerThe same again: 1% of remuneration up to R17 712, at most R177.12 a month
SDL1% of total remuneration, employer cost, where the payroll exceeds the threshold; contractors' and non-executive directors' fees and a section 18(3) learner's pay are not counted
Retirement (s11F)27.5% of the greater of remuneration or taxable income, capped at R430 000 a year

The Tax Tables tab inside the module shows every bracket, the rebates and the thresholds as Ledgr is applying them, so you can check a figure against SARS without leaving the screen.

A year Ledgr does not have is refused, not guessed.

Ledgr holds the tables for 2026/27 and the four years before it. Asking it to calculate for a year it does not carry produces a refusal rather than a figure worked out from the nearest year it does have — because too little withheld makes the employer personally liable under the Fourth Schedule, and a plausible wrong number is worse than no number.

Part-year employment

Someone who joins in September has not earned a year's salary, and taxing them as though they had over-withholds heavily. Ledgr annualises to find the rate, then pro-rates by the months actually worked — the Fourth Schedule treatment — so a new hire is withheld what they owe rather than being handed a large refund at assessment.

There is no cumulation across employers: each employer withholds on its own annual equivalent. If that produces the wrong answer for a particular employee, the remedies are a tax directive or a written request for a greater deduction. Never a smaller one.

Tax directives

When SARS issues a directive for an employee, enter it on the employee under Tax directives: the kind, the directive number SARS gave you, the percentage or amount, and the dates it covers. While it is in force, the payslip's PAYE follows it instead of the tax tables, and the PAYE line says PAYE per directive with the number.

  • IRP3(b), a fixed percentage, is applied to remuneration before retirement fund contributions are taken off. 18% of R20 000 is R3 600.00, even when R1 500 goes to a pension fund.
  • IRP3(c), a fixed amount, is withheld as it stands.
  • Voluntary additional PAYE is not a directive: it is extra tax the employee asked you in writing to withhold, added to what the tables give.

A directive applies only inside its dates and the tax year it names. When it runs out, Ledgr goes back to the tables, and the payroll run's summary names the employee whose directive expired. The IRP5 carries the directive number (code 3230) and answers the fixed-rate question (3220) from the payslips.

What the payroll does not work out

Five things SARS treats specially are not in Ledgr's payroll. Ledgr has no field that says an employee needs one of them, so it cannot warn you on the payslip: if one applies to somebody on your payroll, deal with it before you approve their run, or the tax on the payslip will be wrong.

  • Shares and options vesting (an IRP3(s) directive). The gain on equity instruments that vest under section 8A or 8C is taxed by a directive that SARS issues for that gain. Ledgr does not work out the gain or ask for the directive, and ordinary pay entered for it is taxed on the tables as if it were salary. Apply to SARS for the IRP3(s) and have your tax practitioner agree the amount to withhold before it is paid.
  • Foreign-service exemption (section 10(1)(o)(ii)). Ledgr withholds PAYE on all of an employee's remuneration, including pay for service outside South Africa that may qualify for the exemption. Do not lower the PAYE on the payslip by hand: ask SARS for a directive, or let the employee claim the exemption on their assessment.
  • Pay fixed in a foreign currency (section 25D). Payslips are in rand only. If an employee's pay is agreed in another currency, convert it to rand as section 25D requires (the spot rate on the day it is paid, or the average rate for the year of assessment) and enter the rand amount. Ledgr does not translate it for you.
  • A long service award in kind (code 3835). A watch, a voucher or the use of an asset given for long service is a fringe benefit that shares the cash award's limit. Ledgr pays only a cash award (see above). For an award in kind, have your tax practitioner value it and add it to the employee's IRP5 under 3835 in e@syFile before you submit the reconciliation.
  • Compensation for an employee who dies because of their work (section 10(1)(gB)(iii), code 3922). Compensation you pay for a death that arose out of the employee's work is tax-free up to R300 000 in tax years up to 2025/26, and up to R800 000 in 2026/27. SARS has applied the higher figure since 1 March 2026, although the Act that writes it into law had not been passed when this page was written. It is a lump sum that needs a tax directive, and Ledgr does not pay it through a payroll run. Apply to SARS for the directive, pay it outside the run, and add it to the employee's IRP5 under 3922 in e@syFile before you submit the reconciliation. Do not enter it as a bonus: the payslip would tax it in full.

Run a payroll period

  1. Payroll → Run Payroll

    The button at the top of the module. Choose whom it pays: staff paid monthly, fortnightly or weekly — each runs on its own, so weekly guards and monthly office staff are paid from the same business. It uses the period of that kind covering today, creating one if there is not one yet (the calendar month paid on the 25th, the week paid on the Friday, or the next fortnight), and asks for the pay date of a new one. It pulls in every employee on that frequency who is active in the period. SDL is still judged on the whole business. The confirmation names the period and the head count, and shows the gross, PAYE and net the run will produce. Those figures are worked out by the same calculation as the run itself, so they are what you will get; before a period exists, or without a connection, the confirmation says there are no figures yet rather than guessing.

  2. Add the variables

    Overtime, commission, bonuses, unpaid leave, once-off deductions — anything that is not the standard monthly package.

  3. Calculate and review

    Ledgr produces a payslip per employee, in the document language on the employee's record — English or Afrikaans. A heading you renamed in the payslip designer stays as you typed it. Check gross, PAYE, UIF, other deductions and net. At this point nothing is final. Adjust on a payslip changes this period's overtime and travel allowance, and adds commission, a bonus, other allowances or any of your own earnings to it as named earnings; a pension or medical aid figure comes from the employee's deductions, so change it there and run the period again. Running a draft period again keeps what you typed with Adjust and takes everything else — a new salary, a raised travel allowance — from the employee's record as it is now. Typing the employee's own travel allowance back into a payslip makes it follow the employee again.

    Adjust also lists the payslip's named earnings, and Add earning to this payslip puts a one-off on it — three extra shifts at a per-shift rate, or a fixed amount such as a boot allowance — even when that earning is not part of the employee's usual pay. It is paid this period only, kept if the period is run again, and reported under its SARS code on the IRP5.

  4. Approve

    On Pay History, Approve the run. Approving locks the payslips, puts them into the EMP201 and posts the payroll journal to the ledger. Do this only when you are satisfied.

  5. Distribute payslips

    Download as PDF, or send by email or WhatsApp from the period screen.

Entering hours and units

On Payslips, Enter hours and units opens one grid for the period: everybody down the side, each kind of hours, shifts or trips across the top. In a month, hours are entered week by week and the period's total is shown beside them. A figure that came from Logistics or Job Cards is shown with its source and added in; what you type is marked Manual. Save, then run the period again to pay them. Once the run is approved the grid shows the figures but no longer takes changes, and offline it keeps them readable but cannot save.

Pull from Logistics fills in the period's driving for you. Every run completed in the period counts its hours, from departure to return, for the driver and for the assistant, as long as each is linked to their employee (the driver's On payroll as). Hours on a Sunday or a public holiday go to those kinds of hours; the rest are normal hours. Pulling again replaces what the last pull wrote, so a corrected or cancelled run is put right. Anything it could not count — a run still on the road, a driver not on this payroll — is listed by name.

Pull from Time Tracking does the same for approved timesheets: every approved hour dated in the period is paid as normal hours to the employee whose Ledgr login recorded it. An hour you billed a client for is still paid — billing and pay are two facts about the same hour. If an entry is un-approved after a pull, the next pull takes it off and says so. Someone with no employee record linked to their login, or on the payroll of more than one company, is named and not counted.

Pull from Job Cards pays work counted in units — bays installed, points wired. Set up an earning type paid per unit (for example Bay installed) and give each installer their own rate for it; on the job, record Thabo, 3 bays as a labour line in units and choose that earning type. The pull counts every such line whose work date falls in the period, on a job that is completed or invoiced, and pays it at the installer's rate. Reopening and completing a job again does not count its bays twice. A line with no earning type, or by someone not on this payroll, is named.

Paying hours

Ledgr sets up six earnings for hours in every company: Normal hours, Overtime, Sunday hours, Public holiday worked, Public holiday worked (not a work day) and Public holiday not worked. Enter how many hours each person worked in the period and Ledgr pays them at that person's own rate:

  • Somebody paid by the hour is paid at their hourly rate. Somebody on a monthly salary has an hourly figure worked out for them — the salary × 3 ÷ (13 × their ordinary hours a week).
  • Overtime is paid at 1.5 times that rate, Sunday hours at twice it (1.5 times for somebody who ordinarily works Sundays) and a public holiday worked on a day that is not a work day at twice it. A public holiday worked on an ordinary work day pays a salaried person the hours once more, because the salary already pays the day.
  • Change a multiplier on the earning in Payroll settings, or give one person their own rate for a kind of hours on their record: their own rate is used instead. Normal hours always use the employee's hourly rate.

Each payslip line says where its rate came from — for example “10 hours at R60.00, 1.5 × normal” — and the payslip's overtime, Sunday and public holiday hours are filled in from what you entered.

The shift register

For staff on shifts, keep a shift register instead of counting hours: open a period's Hours and units, choose Shift register, and type each person's hours on each day they worked, a week at a time. Tick the allowances a shift earns — a night shift allowance or a firearm allowance, set up as earnings paid per unit — and each ticked shift pays one unit.

Nobody has to say which days are Sundays or public holidays: Ledgr reads it off the date, including a holiday that falls on a Sunday and moves to the Monday, and names it on the day once saved. Then choose Pull from the shift register: the period's days arrive as normal, Sunday and public holiday hours, and the run settles each week's overtime — five 12-hour shifts on a 48-hour week is 12 hours of overtime. Pulling again changes nothing; a day taken off the register is taken off the period on the next pull.

Ordinary hours and overtime

Enter the Normal hours a person worked and Ledgr works out which of them were overtime, from the working pattern on their pay template (or their own): ordinary hours a week — 45 under the Basic Conditions of Employment Act, 48 under the security council's agreement — and a day's ordinary hours.

  • Without an averaging agreement, overtime is settled by the week. A weekly run is its own week. For a longer period, enter the hours by week on the grid (or pull them from timesheets, which carry their dates). Ledgr refuses a bare monthly total for somebody paid by the hour, naming them: 50, 45, 45 and 48 hours is 8 hours of overtime, and a total of 188 cannot show that.
  • With an averaging agreement — a collective agreement under section 12 of the Act, or a written agreement under the security council's clause 7(2), at most four months — the period's ordinary hours are the agreed weekly average times the weeks in it: at 48 hours, 192 in February, 205.71 in a 30-day month and 212.57 in a 31-day month. Add it to the pay template under Averaging agreement. When it ends, hours go back to being settled by the week and the run says so.
  • Every hour worked is paid. Overtime past the weekly limit (10 hours; 12 under the council's written agreement) and a day past 12 hours are named on the run's summary, so you can deal with them.
  • For somebody on a monthly salary the salary already pays the ordinary hours, so only the overtime becomes a line on the payslip.

Reopening an approved run

Payrolls get corrected: a bonus was missed, a leaver's final pay was wrong. Reopen on Pay History takes an approved or paid run back to draft so its payslips can be edited and the run calculated again, then approved afresh. The payroll journals are not deleted — each is reversed by a posting of its own, so the original and its reversal both stay on the ledger and net to nothing. Reopening is refused if an accounting period those journals sit in has been closed; correct it in the next run instead. Approving and reopening both need the approve permission on Payroll.

A manual journal can't post to the payroll liabilities (2140–2147): their balances are the pay runs' own totals. Correct the run here, and code each payment to SARS, an employee or a fund on its bank line to the liability it pays.

Approve before you file.

EMP201 reads approved runs. If a run is still in draft, its PAYE, UIF and SDL are not in the declaration — which is how a return ends up showing zero when you know you paid people. Check the run's status first if the numbers look wrong in the SARS centre.

Leave

Leave balances follow the BCEA:

  • Annual — 15 working days per year, accrued monthly
  • Sick — 30 days per three-year cycle
  • Family responsibility — 3 days per year

Those are the minimums. To grant more, change them under Payroll → Settings → Leave you grant. A change reaches every current employee from their next payroll run, and the card tells you how many people that is before you save. Balances show what has been earned so far, with fractions of a day: one month on 15 days a year is 1.25 days.

Employees request, a manager approves, and approved leave feeds the payroll run. Unpaid leave reduces the gross for that month, which changes the PAYE with it.

Nobody types the days into the run: an approved Unpaid request is read straight from the leave record. A day is worth the monthly salary × 12 ÷ 52 ÷ the days the employee ordinarily works in a week — R10 000 over five days is R461.54 a day; a guard on R7 003.00 working four 12-hour shifts loses R404.02 a shift. The payslip shows the basic salary and, under it, Unpaid leave (3 days) with what it took off. A request that runs over the month end is split between the two months by its working days.

Cancelling an approved request before the month is approved takes it off the next run. Once the month is approved its payslip is never changed: the next month gives the money back, as Unpaid leave given back. A pay template's deduction can be marked so the employee pays nothing towards it for the unpaid days while the employer pays in full — the arrangement a provident fund for security officers uses.

A 13th cheque or bonus the contract promises

A bonus the contract promises is owed as the staff earn it, not on the day it is paid. To have Ledgr carry it, put it on the employee as an Annual payment (3605) earning for a fixed amount, or a percentage of their basic, and give it the one month it is paid in: From the first and To the last day of December for a December 13th cheque. A 13th cheque of R20 000 is earned over the twelve months that end with that December; when you approve each run, Ledgr adds a twelfth to Bonus and 13th Cheque Accrual (2162) against Salaries & Wages, so a 30 June year end carries R10 000 of it. The December run pays the cheque on the payslip and takes the accrual back out, so the year's staff cost is the cheque once. A bonus with no dates is paid every month and is expensed as it is paid, as is one-off pay typed into a single payslip; an allowance, commission or overtime is not a bonus. Section 7B makes a bonus deductible only when it is paid, so the tax return adds the accrual back and the deferred tax card carries it.

A long service award

A cash award for long service is not taxed up to a limit for the tax year: R16 000 in 2026/27, and R5 000 in tax years up to 2025/26. It qualifies after an initial 15 years of unbroken service with you, and again after each further 10 years. Set up an earning with SARS code Long service award (3622) and add it to the employee's payslip, usually as a one-off.

  • The part within the limit is paid with no PAYE, UIF or SDL. Anything above the limit is taxed like a bonus. The limit is for the whole tax year, so a second award in the same year uses what is left of it.
  • The IRP5 shows the whole award under code 3622. While the year's awards are within the limit it counts as non-taxable income (3696); above the limit SARS's rules put all of it in gross remuneration (3699), and SARS applies the exclusion when it assesses the employee.
  • Ledgr checks the service from the employee's start date and refuses the award on the payslip if they have not served 15 years, or if they had an award less than 10 years ago. If an award does not qualify, pay it as an Annual payment (3605), which is taxed in full.

The higher limit was announced in the February 2026 Budget, and SARS has applied it since 1 March 2026. The Act that writes it into law had not been passed when this page was written.

When someone leaves

Open the employee and choose Terminate, with their last day and the reason. That ends the employment; it does not delete the employee. They are paid for the month they leave in, up to and including their last day — R10 000 a month to the 15th of a 31-day month is R4 838.71 — and the annual leave they are still owed is paid out on the same payslip as Leave pay on leaving, at their monthly salary × 12 ÷ 52 ÷ the days they work in a week, plus any fixed monthly allowance they are paid (a travel or cellphone allowance counts; overtime, commission, a bonus and a reimbursement do not) and what the business pays each month into their medical aid, pension or provident fund and funeral cover (the employer's share on their deductions): five days on R10 000 is R2 307.69, and R2 769.23 with a R2 000 travel allowance. The leave provision on the balance sheet is priced at the same pay — for somebody paid the salary on their pay template, the template's salary — and the leave liability can be read as at a past reporting date (the days owed that day beside the provision account to that day) to tie the year-end schedule to the balance sheet. Their leave balance goes to nil. Deleting the run gives the leave back; running it again pays it once.

Choose Notice paid in lieu when they will not work their notice. The final payslip then pays the notice period the Basic Conditions of Employment Act sets for their length of service — one week up to six months, two weeks up to a year, four weeks after that — at the monthly salary plus the same fixed monthly allowances and employer contributions leave pay counts, × 12 ÷ 52 a week: four weeks on R10 000 is R9 230.77, and R11 630.77 with a R2 600 housing allowance, or with R2 600 a month of employer medical aid, pension and funeral contributions. It is taxed like the salary it replaces.

When the reason is a retrenchment or the business closing, the final payslip also pays severance: a week's pay, worked out the same way as the notice, for each completed year of service, so four years and eleven months is four weeks. Severance is not taxed by the tables — SARS issues a tax directive for it. Apply for it, then add it to the employee as a lump-sum directive under their tax directives; the run will not go ahead without it, and says whose is missing. The payslip shows the severance and the tax the directive set, and their IRP5 carries both.

If the employee has died, terminate them with the reason Deceased and the date of death as the last day. SARS requires the employer to give the tax certificate to the executor of the estate, who acts as the deceased's representative taxpayer, within 14 days of the death. The tax calendar then shows IRP5 to the executor with the date it is due, and the certificate is headed Issued to the executor of the estate of the late and the employee's name.

From the day after their last day, the employee list leaves them out, and nobody can give them a new pay template or deduction, or link them to a driver. Show past employees brings them back into the list. They stay on the EMP501 and their IRP5 for the months they worked. When the month is approved, their final payslip is sent to them the same way every payslip is.

EMP201, EMP501 and IRP5

DocumentWhenWhat it contains
EMP201Monthly, by the 7thPAYE, UIF and SDL for the month, with the per-employee breakdown behind it
EMP501Twice a yearReconciliation of what was declared against what was paid
IRP5AnnuallyA tax certificate per employee for the year of assessment

All three are produced from approved runs. On Professional and above they appear in the SARS returns centre alongside your other returns. The Payroll add-on does not include the returns centre, so on Starter or Business with the add-on use Payroll → SARS: it shows the month's EMP201 figures from your approved payslips and prepares the e@syFile certificate file behind the IRP5s and the EMP501. Recording the EMP201 as filed from there takes the payment reference number SARS issued for it, exactly as the returns centre does, so a payment carrying it is placed on that month.

Sending the year’s IRP5s to your employees. Once a tax year’s certificates are issuable you can send them all in one go (POST /api/employees/irp5/bulk-send, with the tax year and a channel of email or whatsapp). Email attaches each employee’s IRP5 as a PDF; WhatsApp tells them it is ready (it is not offered on a plan that does not include WhatsApp). Only certificates you may deliver are sent: a leaver’s, which is due on leaving, and every employee’s once the year has ended and its annual EMP501 is noted as filed. Everyone else is listed with the reason — a running year, or an EMP501 not yet filed — so nobody is left out without your being told. The reply gives each employee’s outcome, including the ones with no email address or phone number.

Employee self-service

At five employees the owner emails payslips. At fifty it is a job, and at two hundred it is somebody's week. Each employee can have their own link to a page showing their payslips, their leave balances and their own details — without occupying a Ledgr user seat, because charging per user for people who only ever read their own payslip would be exactly the metering the price list promises not to do.

  1. Payroll → Employees → a person → Self-service link

    Generates a link valid for 180 days. Send it however you already reach them — email or WhatsApp. It opens in the browser on any phone, with no app to install and no password. When it lapses, generate a new one from the same place.

  2. They see only what is theirs

    Approved payslips (a draft is a working figure you have not signed off, so it stays hidden), leave balances, leave history, and their own details with the bank account masked to its last four digits.

  3. They can request leave

    It arrives in the same approval queue you already use. Nothing is granted by asking.

Banking details are a request, never an edit.

Payroll diversion — getting a salary redirected to a different account — is the most common payroll fraud there is, and it works precisely because the change looks routine. So an employee submits a change and a payroll administrator with approve permission reviews it, seeing the old and the new account side by side. The approval is written to the audit log at warning severity with both values, which is what an enquiry afterwards comes looking for. The employee saves you some typing; they do not get to move the money.

Salary, tax number and start date cannot be requested at all — those are terms of employment, not corrections.

Once an employee's employment ends, their link still opens for 180 days, to read only: their payslips, the final one included, and their tax certificates. Every request — leave, details, documents — is refused from their last day, and from day 181 the link stops working. That is checked against their end date on every request rather than kept in a list somebody has to remember to update. Anyone holding the link can open the page, though, so it should be treated like a password — if one is shared by mistake, generating a new one is the fix.

Statutory returns beyond SARS

Three things every South African employer owes somebody, and none of them is a SARS return. They are on the Statutory tab.

  • The salary payment file. A CSV of who gets paid what, or your bank's own file where Ledgr writes it (FNB, Standard Bank, Investec, and the Bankserv ACB file that Absa, Nedbank and Capitec import), produced from an approved run — which is the point: the file cannot disagree with the payslips, because it is made from them. Until a run is approved there is nothing here to download. For the Bankserv ACB file, save your ACB user code and the branch code of the account you pay from under Settings → Bankserv ACB payment file (and choose the paying account above it); the download refuses, naming what is missing, until both are there. Load the file in your bank's import preview, and check the number of payments and the total against the run, before you authorise it.
  • Cash wages and split pay. On the employee, Paid by says how their net pay leaves: by bank transfer, in cash, or split between two accounts by a fixed amount or a percentage. Someone paid in cash needs no bank account and is never on the payment file; they are on the run's cash pay register, a PDF with a column for each person to sign when they are paid. A split puts two lines on the file, one per account. When you mark the run paid, the transfers and the cash each settle their share of the net salaries owed, so nothing is left owing once both are paid, and a bank statement's salaries line is matched against the transfers alone.
  • UI-19. The monthly employee declaration the Department of Employment and Labour asks for. If it will not validate, Ledgr says which employee is short of which field rather than producing a file the UIF portal rejects. An employee marked as not contributing to UIF is not declared, and the return names them so a deliberate exclusion cannot be mistaken for somebody missing. Ledgr does not file it for you: once it is on uFiling, press Mark the UI-19 as filed under the month, and it leaves the deadline calendar (the dashboard card's Mark filed does the same).
  • The COIDA Return of Earnings. The annual return to the Compensation Fund, with the maximum assessable earnings for the year applied per employee — that ceiling is a field you set, because it is announced each year and applying last year's would misstate the assessment. Earnings follow the Fund's own definition, not PAYE's: travel allowances and reimbursements are left out, and the value of housing and of meals supplied is added. Ledgr cannot tell intermittent overtime, an ex gratia payment or a payment for occasional services from ordinary pay, so mark the earning type in Payroll settings (How the Compensation Fund counts it) and the return leaves it out; capture free meals as a Meals fringe benefit. The mark never changes PAYE, UIF or the tax certificate, and a payslip keeps the mark it was raised under. After you have submitted it to the Fund, Mark the Return of Earnings as filed under the year takes it off the deadline calendar.

Change requests from employees

Anything an employee submits from their self-service link — a new address, new contact details, new banking details — waits on the Requests tab. Nothing takes effect until somebody approves it, and the employee is not told which way it went until you decide.

Confirm a banking change on a different channel before approving it.

A change of bank account moves where a salary is paid, which makes it the single request an attacker sends. Ring the employee on a number you already had — not one that arrived with the request — before you approve it. Ledgr shows you the change; it cannot tell you who typed it.

Medical aid, provident fund and garnishees

Most of what comes off a South African payslip does not go to SARS. It goes to a medical aid, a provident fund, a union, or — when a court has ordered it — a creditor. Ledgr records who each of those is, what comes off whose pay, and what to pay across at the end of the month.

  1. Add the beneficiary

    Payroll → Deductions → Add beneficiary: the scheme or fund, its banking details, your account number with them, and where to send the monthly schedule. The kind you pick is not just a label — a retirement contribution reduces taxable income and a medical aid earns the SARS tax credit, so it changes the PAYE on every payslip that uses it.

  2. Add the deduction

    Per employee: a fixed amount, or a percentage of basic or gross. Basic includes any earning you have coded as salary (3601), such as ordinary shift pay, so a fund at 7.5% of basic is taken from it even when the employee has no monthly salary. Enter the employee's share and the employer's separately. The employer's half is a company cost — it is remitted with the employee's contribution and never deducted from their salary. Putting the combined figure in the employee field is the classic mistake, and it leaves the payslip short by exactly the employer's half.

  3. Capture each employee's membership number

    Without it the scheme cannot allocate the money, and a member's cover can lapse even though the payment arrived. It appears on the remittance schedule beside their name.

  4. Run the payroll as usual

    Deductions apply automatically and appear on the payslip by name, so an employee can see what came off and where it went.

  5. Pay the schedules

    Payroll → Deductions lists what to pay each beneficiary for the period, with the banking details, the total, and every member it covers. It is built from what the payslips actually deducted, not from the standing instructions.

Garnishee and maintenance orders

An emoluments attachment order is for a fixed total, so Ledgr asks for it and then stops when it is reached — trimming the last instalment to whatever is left. A R3 200 debt at R1 500 a month deducts R1 500, R1 500, then R200, and nothing after that. Continuing past the debt would be withholding a wage the employer had no right to, so it is prevented rather than left to whoever is watching the spreadsheet.

Every garnishee order together takes no more than a quarter of the employee's basic salary for the period, without overtime or allowances (Magistrates' Courts Act section 65J(1A)). Two R4 000 orders on a R25 000 salary take R6 250: the first order in full and R2 250 of the second, whose balance stays owing and is taken in the months after. If orders served on you ask for more than the quarter, tell the court or the creditors' attorneys; the court divides the quarter between them. A maintenance order is made under the Maintenance Act and is not part of the quarter.

The order reference is kept on the deduction and the payment history on each payslip, which together are what prove the order was served.

Where several deductions compete for a short month, court orders take precedence, then medical and retirement, then voluntary things like savings. Nothing is ever deducted past zero net pay — an employer may not pay someone less than nothing, and Ledgr reports the shortfall instead of quietly creating one.

Pay templates: one per grade or role

Where many people are paid the same way — a security grade, drivers, office staff — set it up once as a pay template under Payroll → Settings, then put the employees on it. A template holds the basic (a monthly salary or an hourly rate), the named earnings and the deductions, each from a date, plus the working pattern: ordinary hours a week and, where a scheme uses one, a fund salary (for example the hourly rate × 48 hours × 4.333 weeks).

A yearly increase is one new line from its date. Runs for periods before that date keep the old figure, and runs from that date pay the new one for everybody on the template — no employee is edited, and a payslip already issued is never changed. Each change tells you how many people it reaches and names anyone it does not.

Anyone can still differ: a figure of the employee's own — their own salary, their own line for an earning, their own deduction to the same fund — always wins over the template's.

Section 34(1) of the Basic Conditions of Employment Act lets an employer deduct from pay only what the employee has agreed to in writing for a specific debt, or what a law, a collective agreement, a court order or an arbitration award requires. So a staff loan, savings, a retirement annuity, a union subscription or an other deduction asks for the date the employee signed their agreement and where the signed copy is kept, and the agreement may not be dated after the deduction starts. A garnishee or maintenance order needs none (the order is the authority), nor does a medical aid, pension or provident fund contribution that the contract of employment makes a condition of membership. The deductions import has Consent Date and Consent Reference columns for the same reason. A deduction captured before Ledgr asked for this keeps deducting; open it and record the agreement when you next edit it.

A pay template takes its deduction lines from everybody on it, so no one employee's agreement can stand behind a template line of these kinds. Such a line must name the collective agreement that binds everybody on the template (section 34(1)(b)) — a bargaining council's levy, or a union subscription under an agency-shop or closed-shop agreement. Without one, Ledgr refuses the line: add the deduction to each employee with their own written agreement instead, which also wins over any template line for the same beneficiary. A template line saved before Ledgr asked for this keeps deducting; name its agreement when you next edit it.

Recovering damage or loss from an employee

Section 34 of the Basic Conditions of Employment Act allows a deduction for damage or loss only on terms, and Ledgr asks for each before it will save one. Add a beneficiary of the kind Damage or loss (BCEA s34), then on the employee's deduction record:

  • the employee's written agreement to this specific debt — upload it under their documents first, then choose it;
  • that the loss happened at work through their fault;
  • the date of the fair procedure at which they could say why the deduction should not be made;
  • the actual loss — the debt to recover can be no more than this.

However large the debt, all such deductions together take no more than a quarter of the employee's pay in money for the month, and never more than is left after tax and their contributions. The rest carries to the next month: a R3 000 debt against R8 715.08 in pay takes R2 178.77, then R821.23. A fine or penalty is not a deduction for loss and is refused.

Cost to company

Packages are usually negotiated as a total cost to the employer, not as a basic salary. Payroll → Deductions → Cost to company works the basic back out for you.

It is not a subtraction: UIF and SDL are percentages of the very salary being solved for, and UIF is charged only on the first R17 712 of a month's remuneration, so the answer settles rather than divides out. Applying it records that the package is a cost to company, and from then on the basic follows the package: add, change or end an employer contribution for that person and their basic is worked out again from the same total, with the same SDL choice. Saving the deduction says how far the basic moved, and the change is on the audit trail.

Employment Tax Incentive

ETI reduces the PAYE you pay over for qualifying young employees — it is a genuine discount on your monthly EMP201, and a great many small employers who qualify never claim it because working it out by hand is fiddly.

Mark the employees who qualify and Ledgr computes the claim each month, reduces the EMP201 accordingly, and keeps the schedule behind it. The claim runs for a limited number of months per employee and Ledgr stops when that is used up, rather than carrying on and creating an over-claim you have to repay.

ETI is worked out by the month, so a weekly or fortnightly run does not claim it. When you run one, the summary says so and why, and so does each payslip.

An employee qualifies only when they are paid at least the minimum wage that binds them: the higher of the National Minimum Wage and the wage a bargaining council sets. For a worker on an Expanded Public Works Programme the National Minimum Wage is their own EPWP rate, and for a learner the Schedule 2 weekly allowance for their hours, exactly as the payroll's own minimum-wage check reads them. Ledgr reads the council's figure from the grade that the employee's pay template follows, so you do not have to type it on the employee; a figure you do type is used if it is higher. Someone paid below it claims nothing, and their payslip says which figure they fell short of.

A year that claims ETI needs the business's SIC7 industry code, under Settings → Company: SARS decides from it whether the business may claim ETI at all. Search SARS's list by what the business does and pick the code. Until it is set, the EMP501 for that year is refused with the reason.

Fringe benefits

A company car, a housing subsidy, an employer's medical contribution or a low-interest loan are not cash, but SARS taxes them. Capture the benefit against the employee and Ledgr adds it to taxable income for the PAYE calculation and shows it separately on both the payslip and the IRP5 — which is where it has to appear separately, not folded into salary.

Free meals and refreshments the employer supplies are their own kind, Meals and refreshments supplied: taxed and reported like any other general benefit, and counted as earnings by the Compensation Fund (which counts the value of food and quarters supplied).

Four more kinds are valued by their own rule from what you enter, rather than typed as a cash equivalent, and all four are reported under 3801. Asset acquired below its value (paragraph 5): its value when the employee acquired it, less what they paid. Use of an asset (paragraph 6), such as a laptop or equipment taken home: 15% a year of the lower of its cost to you and its market value when the use began, or the rental you pay if you rent it, less what the employee pays for the use. Free or cheap services (paragraph 10): what the service costs you, less what the employee pays. Debt paid or released (paragraph 13): the amount. An asset acquired and a debt paid are taxed once, so let the benefit start and end in that month.

"Why is this employee's PAYE so high?"

This is the most common question about a Ledgr payslip, the answer is almost always the same, and it is worth reading before you change anything — because the figure is usually correct and the obvious fix is the one that causes real damage.

Ledgr withholds cumulatively, the way the Fourth Schedule intends. It works out the employee's liability for the whole tax year, subtracts what has already been withheld from them this year, and recovers the rest over the periods that remain. So where earlier months of the tax year have no tax recorded against them in Ledgr — because you started using Ledgr in, say, July — the whole year's tax comes out of the months left, and each payslip looks a third too high.

A worked example on the 2026/27 tables: a director on R210 000 a month has an annual PAYE liability of about R937 149. Divided by twelve that is R78 096 a month. Start in June with nine months left and each of those payslips carries about R104 128 — which multiplies back to the same year's tax. Nothing is wrong.

Ledgr says so on the payslip rather than leaving you to work it out. The notice names the catch-up amount, the period's own share, and the fact that the total is right and the employee will not owe tax on assessment. The same line appears on the run summary and on the payslip the employee receives, so you and they are reading the same explanation.

Do not override the PAYE to make it look right.

Under paragraph 5 of the Fourth Schedule an employer that under-withholds is personally liable for the shortfall — SARS collects it from the business, not from the employee. Overriding a correct catch-up figure is how a business ends up paying an employee's tax. If the figure genuinely is wrong, the cause is missing year-to-date figures, and the fix is below.

If tax WAS withheld before you moved to Ledgr, the catch-up should not be there.

That is exactly what Payroll → Take-on is for. Enter each employee's year-to-date earnings and the PAYE, UIF and SDL already paid, and the catch-up disappears on the next run — because Ledgr then knows those earlier months were taxed. Do this before the first live run if you can; it is the single most valuable ten minutes in a mid-year cutover.

Two smaller causes of the same symptom, for completeness:

  • A bonus, commission or backpay in the month. Cumulative withholding puts the tax on the month the money is paid, so one large month is taxed at the rate the year's total earns. Correct, and it evens out.
  • A few cents of catch-up. Ordinary, and Ledgr says nothing about it — a notice below a rand would appear nearly every month and teach people to ignore the one that matters.

Bringing payroll across mid-year

If you switch to Ledgr partway through a tax year, the year-to-date figures from your old system have to come with you. Without them Ledgr calculates as though everyone started in March, the annualisation is wrong, and February's IRP5s do not reconcile.

  1. Payroll → Take-on

    Per employee: earnings, deductions and PAYE, UIF and SDL already paid this tax year. Download the template first rather than building your own — the column headings are what Ledgr matches against.

  2. Ledgr checks it is plausible

    Tax that could not have arisen from those earnings is queried rather than accepted, since an error here is invisible until the IRP5 is rejected eleven months later.

  3. Pay by IRP5 code

    The gross remuneration is one figure, and without more the IRP5 reports all of it under 3601. If part of it was overtime, commission, a travel allowance or other allowances, enter that part under Of the gross remuneration, by IRP5 code on the employee's opening figures: each is taken out of the gross, not added to it, and the certificate reports it under its own code (3607, 3606, 3701, 3713) beside what Ledgr paid. A travel allowance also carries its taxable share (code 4582) at the inclusion rate on the employee's record. An accommodation or medical costs benefit is likewise a part of the fringe benefits, reported under 3805 or 3813; any other benefit stays under 3801. A motor vehicle benefit is not split out: it needs its own taxable share, so capture it as a fringe benefit on the employee instead. What you leave blank is reported as it always was.

  4. ETI claimed before Ledgr

    For a young employee your old payroll claimed the Employment Tax Incentive for, open the employee's take-on and choose ETI claimed before Ledgr. Enter, for each month before the first Ledgr payslip, the amount from that month's EMP201 and the remuneration it was worked out on; a month that claimed nothing stays at 0. The IRP5 and the e@syFile file carry ETI month by month (4118 is the sum of the months), so without these months the certificate would say the employee did not qualify in March to May while the EMP201s SARS holds say otherwise. Ledgr will not make the file for an employee with an ETI history until the months are captured.

  5. Payroll → Deductions → Import

    Take-on carries only totals, so a standing garnishee order (Emoluments Attachment Order), union fee, staff loan repayment, medical aid or provident/pension fund contribution has nowhere to live in those figures — it is an ongoing instruction, not a number. Its own template takes one row per employee per deduction: the beneficiary (the fund, the union or the lender), what kind it is, the calculation, and — for a garnishee order or a loan — the balance still owing, so it stops on its own once that debt is settled, and for a loan, savings, retirement annuity, union or other deduction the date the employee signed their written agreement and where it is kept. A beneficiary Ledgr has not seen before is created as it goes, and you see the per-row match before anything is written. Capture your employees first — both this and the take-on above attach to an employee record rather than creating one.

  6. It shows on the dashboard checklist

    The setup checklist only marks payroll complete once every live employee has opening figures — so a person missed in the take-on is visible now rather than at year end.

See switching to Ledgr for the rest of the cutover. Mid-February is the easy month to move; mid-October is the one where this screen earns its place.

Common problems

What you seeWhat to do
An employee's PAYE looks far too high See "Why is this employee's PAYE so high?" above. The short answer is that it is almost certainly correct, and overriding it is what causes the problem.
A new hire's PAYE looks too high Check the periods-worked figure on the run. A part-year employee's tax is worked out by annualising to find the rate and then pro-rating by the periods actually worked — never by dividing by the periods remaining, which over-withholds heavily.
An unsupported tax year is refused Deliberate: a year Ledgr has no tables for is refused rather than served from the nearest one. Guessing a bracket is how an employer becomes personally liable for under-withholding.
The EMP201 is lower than the payslips Draft payslips are excluded, and the return says so as a warning. Approve the run on Pay History.
e@syFile rejects the whole import One bad record fails the lot, by line number. Ledgr checks the set before it emits a file, and the commonest cause is two employee records sharing one identity number — which is refused when you capture it. See why a return will not download.
An employee has no identity number Legitimate for somebody on a passport, and a blank is never treated as a clash with another blank. Their passport number needs the country that issued it; an employee captured before Ledgr asked for it is named on the e@syFile review until the country is added on their record.
Leave balances look wrong They follow the BCEA: annual leave accrues, sick leave is a 30-day entitlement over a three-year cycle rather than per year, and family responsibility leave is three days a year. A sick-leave balance therefore does not reset every February.
A part-timer's leave counts the wrong days Leave is counted on the days the employee works. Someone who works Monday, Wednesday and Friday takes two days for Monday to Wednesday and none for a Tuesday, and is entitled to three weeks of their own three days. Name the days on their record (ordinaryWeekdays in the API, 1 for Monday to 7 for Sunday); until you do, Ledgr only knows how many days a week they work and charges any date asked for, up to that number in a week.
Payroll cost does not split by branch The six employer-cost debits split by the employee's cost centre; the statutory and third-party credits stay pooled. Splitting PAYE and net pay by branch would read as more detail while meaning nothing, and the EMP201 is filed on one number regardless. Set the cost centre on the employee record, not the free-text department.
A payslip will not send Either email sending or the WhatsApp integration is not available, and the failure names which. Contact support if it persists.
An employee's garnishee order, union fee or loan did not come across with take-on Take-on carries year-to-date totals only — a recurring deduction is a standing instruction, not a total, so it has its own import. See bringing payroll across mid-year above.
The travel or mileage rate looks out of date It is keyed by year of assessment and resolved from the trip's date, so a prior-year trip logged late is paid at that year's rate. That is correct rather than stale.
A figure changed without an app update Statutory figures — brackets, rebates, UIF, SDL, the VAT rate, ETI bands — can be updated between app releases, and your app picks them up. That is why a rate can move the day SARS changes it.