Every Thai company we onboard asks the same question during the accounting phase. Can Odoo run our payroll end to end, including social security and the PND filings? The honest answer is yes and no. Odoo's payroll app handles the structure well. The Thailand-specific pieces need configuration. Sometimes a dedicated local tool is the better call. This post lays out what Odoo payroll Thailand setups actually need, where Odoo gets you most of the way, and where we recommend stepping outside the core app.
We are not payroll software vendors first. We are Odoo consultants who end up owning payroll because it sits next to accounting, HR and the month-end close we already manage for clients. That proximity is exactly why we have opinions on when payroll should stay inside Odoo and when it should not.
What Odoo payroll Thailand setups actually require
Payroll in Thailand is not just gross pay minus deductions. A compliant run needs at least three things working together every month.
- Social Security Fund (SSF) contributions calculated on capped salary, split between employee and employer, and reported through the Social Security Office portal.
- Personal income tax withheld at source under the PND 1 process, following the progressive tax bands and any allowances the employee has declared.
- Payslips and year-end tax certificates (50 ทวิ) that match what gets filed. Mismatches between payroll records and PND filings are one of the first things a labour or revenue audit checks.
None of this is exotic. But each rule changes with government announcements. Salary caps get revised. Allowance rules shift with budget cycles. A payroll setup that is accurate the day you go live can drift out of compliance within a year if nobody owns the update.
Where Odoo's payroll app is genuinely strong
Odoo's Payroll app is solid for the structural half of the problem. It defines salary rules, contracts, and structures per employee category. It runs the computation engine against attendance and time-off data pulled from the same database as HR. For companies that already run Odoo for sales, inventory and accounting, keeping payroll in the same system means headcount costs, salary expense and departmental budgets reconcile automatically with the general ledger. You are not reconciling a payroll export against a separate chart of accounts every month.
Odoo also handles the accounting side cleanly. Salary journal entries post against the right expense and liability accounts without a manual journal. Because we set up the Thai chart of accounts before payroll goes live, those entries land where your accountant expects them.
What is missing out of the box
The localization gap sits specifically in the Thai statutory rules. SSF contribution tables, the PND 1 withholding computation, and the formats the Social Security Office and Revenue Department expect for electronic filing are not included by default. None of that ships as a ready-made Thai payroll localization in standard Odoo the way VAT and e-Tax invoice modules do for sales tax. We build custom salary rules to model SSF caps and PND bands. Those rules need to be checked against the current government tables at least once a year, sometimes more often when caps change.
Configuring SSF and PND withholding for Odoo payroll Thailand builds
When we do keep payroll inside Odoo, the build looks roughly like this.
- Define a salary structure per employee category (monthly staff, daily wage, contractors) with its own rule set, because SSF treatment differs.
- Add a salary rule that caps SSF contribution at the government ceiling and calculates the 5 percent employee share alongside the matching employer share, posted to separate payable accounts.
- Add a withholding tax rule that estimates annual income, applies the progressive PND 1 bands, and nets out standard allowances the employee has submitted (personal allowance, spouse, child, provident fund contributions).
- Generate monthly payslips and a withholding tax report that reconciles against what gets remitted via PND 1. This sits alongside the PND 3 and PND 53 reports we already configure for vendor-side withholding tax as part of our Odoo ERP support services.
- Produce the annual tax certificate per employee at year-end, matched to cumulative PND 1 filings.
This gets you a payroll run that lives in the same database as your accounting, with payslips and journal entries reconciling automatically. The trade-off is maintenance. Every rule change in SSF caps or tax bands is a configuration update someone has to make and test. It is not a vendor patch that arrives automatically.
When a local payroll tool is the better choice
We recommend connecting a dedicated Thai payroll provider instead of building everything in Odoo when any of these apply.
- Headcount is large enough, or turnover high enough, that payroll compliance risk outweighs the convenience of one system. Specialist Thai payroll platforms update SSF and PND rules the day they change, because that is their entire business.
- The company already has an outsourced payroll bureau for legal or audit reasons and simply needs the resulting journal entries posted into Odoo accounting.
- HR policies are complex, with shift differentials, multiple provident fund schemes, or union agreements, and better served by payroll software built specifically for that complexity.
In these cases our integration pattern is straightforward. The local payroll tool remains the system of record for salary calculation and statutory filing. We build an API integration or scheduled import that posts summarized journal entries into Odoo accounting each month, keyed by department or cost center. Employee master data can still live in Odoo HR for org charts, time-off and attendance, with payroll-specific fields synced one way.
A practical decision table
| Situation | Recommended setup |
|---|---|
| Small team, standard salary structure, no complex benefits | Payroll inside Odoo with custom SSF/PND rules |
| Large or fast-growing headcount, outsourced payroll already in place | Keep external payroll tool, integrate journal entries into Odoo |
| Multiple entities with different compliance needs | Case by case, often a hybrid: simple entities in Odoo, complex ones external |
| Heavy audit exposure or public-company reporting | Specialist payroll vendor, Odoo for accounting consolidation only |
What goes wrong when this is rushed
The most common mistake we see is treating payroll like a one-time configuration task, the same way teams sometimes treat VAT setup. SSF caps and PND bands are not static. We have had to correct client payroll rules more than once because a salary cap changed mid-year and nobody updated the rule before the next run. If payroll stays inside Odoo, somebody on your team or ours needs an annual compliance review on the calendar. A go-live checklist alone is not enough.
The second common mistake is skipping reconciliation between payroll withholding and the PND filings submitted through accounting. These are often run by different people on different schedules. Small timing differences compound into real discrepancies by year-end. We build the reconciliation report as part of the payroll setup specifically so this gets caught monthly, not during the annual audit.
Our recommendation for most Thai SMEs
For companies under roughly 50 employees with a fairly standard salary structure, we generally recommend building payroll inside Odoo with custom SSF and PND rules. The benefit of unified accounting and payroll data outweighs the maintenance overhead at that scale. Past that size, or with any meaningful complexity in benefits or multi-entity structure, we lean toward keeping a specialist payroll tool and integrating only the accounting summary.
Either way, the decision should get revisited whenever headcount or compliance exposure changes meaningfully. Do not set it once and forget it. If you are planning a payroll build or an integration with an existing provider, we scope Odoo consultancy services specifically for Thai statutory payroll before any configuration starts.



