How to run payroll in Cambodia
A practical walkthrough of running monthly payroll in Cambodia: tax, contributions, payslips, approvals, and common mistakes to avoid.
Why payroll in Cambodia is different
Three things make Cambodian payroll harder than it looks. Salaries are often agreed in USD but taxed in riel, so an exchange rate sits inside every calculation. NSSF splits across an employee deduction and three separate employer costs. And Tax on Salary runs on progressive brackets applied after dependant relief, not on a flat percentage. Getting these right in the first month saves months of cleanup later.
How Tax on Salary is calculated
Tax on Salary is calculated in riel on monthly taxable salary, after dependant relief, using progressive brackets. A salary paid in USD is converted to riel first, and the rate that applies is the one the tax rules specify for the period — not the rate on the day you happen to pay. Non-residents are taxed at a flat 20% with no relief.
- 0% on taxable salary up to 1,500,000៛
- 5% on the band from 1,500,001៛ to 2,000,000៛
- 10% on the band from 2,000,001៛ to 8,500,000៛
- 15% on the band from 8,500,001៛ to 12,500,000៛
- 20% on taxable salary above 12,500,000៛
- Dependant relief of 150,000៛ per spouse and 150,000៛ per child is deducted before the brackets apply
How NSSF contributions are calculated
NSSF is calculated on the contributory wage, capped at 1,200,000៛ per month. Only the pension contribution is deducted from the employee. Health care and occupational risk are employer costs and must never appear as employee deductions on a payslip — that single presentation error is one of the most common findings in a labour inspection. These rates are the mandatory private-sector profile in force since October 2022; confirm them against the latest Prakas before you file.
- Pension — 2% employee, capped at 24,000៛ per month
- Pension — 2% employer, capped at 24,000៛ per month
- Health care — 2.6% employer, capped at 31,200៛ per month
- Occupational risk — 0.8% employer, capped at 9,600៛ per month
- Every employee needs an NSSF member number before their first contribution is filed
Why the ceiling matters more than the rate
The rates are easy to get right and the ceiling is easy to forget. Above 1,200,000៛ of monthly wage, every contribution stops growing. A spreadsheet that applies 2% to the full salary over-deducts every senior employee, every month, and the error compounds quietly until someone reconciles a leaver's final payment.
The presentation error inspectors look for
Health care and occupational risk are employer costs. If your payslip lists them under the employee's deductions, the net pay may still be correct while the document misstates what the employee actually paid. Show employer contributions in their own block, or leave them off the payslip entirely.
Monthly payroll checklist
- Approve the period's overtime and leave before you open the run
- Apply leave without pay and overtime adjustments
- Run the payroll draft and review salary variance vs last period
- Submit for approval with full audit trail
- Distribute payslips and export reports for finance
How a payroll run actually works
A run moves through five states and cannot skip one. Every transition records who made it and when, which is what makes a month explainable months later.
- 1HR / PayrollDraft
Open the run for the period
Choose the pay period, the payment date, and who is included — the whole company, one department, or a named list of employees. Nothing is calculated yet.
- 2Humaneti
Pre-validate the selection before calculating
Every selected employee is checked for an active salary structure covering the pay period. Employees without one come back as a list to fix, rather than as a run that fails halfway through.
- 3HumanetiRate locked
Fix the USD→KHR rate to the run
A run cannot process without a rate for its payment date. Once a rate has been consumed by payroll it is locked, so editing the rate table later cannot silently change a month that has already been paid.
- 4HumanetiProcessing → Processed
Build every payslip
The run takes a lock so the same period cannot be processed twice at once. For each payable employee it assembles the payslip: salary structure, allowances, deductions, approved overtime, approved salary adjustments, loan installments due this period, Tax on Salary against the current brackets, and employer contributions.
- 5Manager
Review while it is still cheap to fix
A processed run is still reversible: correct the input and re-process, and the payslips are rebuilt. This is the last point where a mistake costs nothing.
- 6ApproverApproved
Approve — a separate person, a separate act
Only a processed run can be approved, and the approver, the time, and any note are written onto the run. Preparing and approving are deliberately two different actions.
- 7FinancePaid
Mark it paid
Payment date, method, and reference are recorded, and every payslip in the run is stamped paid with the currency it was paid in and the rate it was converted at. From here the run is finalised and can no longer be cancelled.
- 8Humaneti
Produce what leaves the building
Payslip PDFs that render Khmer correctly, the bank payment file for the chosen bank, and the GDT and NSSF filing exports — all generated from the same run, so the three can never disagree with each other.
A paid run is closed. Corrections are made as adjustments in the next period rather than by rewriting a month staff have already been paid for — which is what keeps the payslip an employee holds and the figure you filed with GDT the same number.
Spreadsheet vs. automated payroll
Most Cambodian SMEs start payroll in Excel, and for a handful of staff on a single currency it works. The failure modes below are the ones that appear once headcount grows, a second currency arrives, or an inspector asks who approved a change.
| Task | Manual Excel | Automated system |
|---|---|---|
| Applying the tax brackets | Nested IF formulas, re-keyed whenever a Prakas changes | Brackets stored per company and edited once |
| USD to riel conversion | Rate typed by hand; a wrong-date rate fails silently | Rate resolved for the period the rules specify |
| NSSF wage ceiling | Cap often omitted, over-deducting higher earners | 1,200,000៛ ceiling applied to every run |
| Employee vs employer split | Frequently merged into one deduction column | Separated on the payslip by construction |
| Form TOS 01 and the NSSF list | Retyped into the government template each month | Exported from the same run, ready to upload |
| Audit trail | File versions; no record of who changed what | Append-only log with actor and timestamp |
| Khmer payslips | Khmer shaping breaks in most PDF exports | Rendered with a bundled Khmer Unicode font |
What you file each month
A payroll run should produce the filing schedules directly, so nobody re-keys figures into a government template. Humaneti exports Form TOS 01 for resident and non-resident employees, the monthly NSSF member contribution list, and the fringe-benefit tax schedule as spreadsheets ready for the GDT E-Filing portal and NSSF Online.
- Form TOS 01 §I — resident employees, progressive brackets
- Form TOS 01 §II — non-resident employees, flat 20%
- NSSF monthly member contribution list — employee and employer amounts, in riel
- Fringe benefit tax schedule — 20% on taxable benefits
- Confirm the current filing deadlines on the GDT and NSSF calendars each period — do not carry last year's dates forward
Common mistakes
- Converting USD salaries at the payment-day rate instead of the rate the tax rules specify for the period
- Skipping the 1,200,000៛ NSSF ceiling, which over-deducts every higher earner
- Showing employer NSSF contributions as employee deductions on the payslip
- Missing dependant relief because marital status and children were never captured
- Using Excel with no approval record for salary changes
- Forgetting seniority indemnity accruals
- Not reconciling cash advances before month close
Frequently asked questions
What is the NSSF wage ceiling in Cambodia?
NSSF contributions are calculated on wages capped at 1,200,000៛ per month. Above that figure the contribution stops increasing, so the employee pension contribution is capped at 24,000៛ per month.
Do employers pay NSSF as well as employees?
Yes, and the employer pays more. The employee contributes 2% for pension. The employer contributes 2% pension, 2.6% health care, and 0.8% occupational risk. Only the employee 2% may appear as a payslip deduction.
How much salary is tax free in Cambodia?
Monthly taxable salary up to 1,500,000៛ is taxed at 0%. Dependant relief of 150,000៛ per spouse and per child is deducted before the brackets apply, so the effective tax-free amount is higher for employees with dependants.
What is Form TOS 01?
Form TOS 01 is the monthly Tax on Salary return filed with the General Department of Taxation. Section I covers resident employees on the progressive brackets; Section II covers non-residents at a flat 20%.
Can payslips be issued in Khmer?
Yes. Humaneti renders payslip PDFs with a bundled Khmer Unicode font, so Khmer shapes correctly on any server. Employees download their own payslips from self-service.
Sources
Every rate on this page comes from the instrument below. Check them against your own filing before you rely on a figure.
- Prakas on Tax on SalaryGeneral Department of Taxation (GDT) · Tax on Salary bands, monthly filing and Form TOS
Prakas number not yet cited — confirm the current instrument with the issuing body.
- Prakas on pension scheme contributionsNational Social Security Fund (NSSF) · Pension, health care and occupational risk contributions
Prakas number not yet cited — confirm the current instrument with the issuing body.
- Prakas on health care scheme contributionsNational Social Security Fund (NSSF) · Pension, health care and occupational risk contributions
Prakas number not yet cited — confirm the current instrument with the issuing body.
- Prakas on occupational risk contributionsNational Social Security Fund (NSSF) · Pension, health care and occupational risk contributions
Prakas number not yet cited — confirm the current instrument with the issuing body.
- Prakas on seniority paymentMinistry of Labour and Vocational Training (MLVT) · Labour Law, contracts, leave and seniority indemnity
Prakas number not yet cited — confirm the current instrument with the issuing body.
Rates on this page have not been verified against the current instruments.Reviewed every quarter and whenever a new Prakas is issued.