Odoo HR & Payroll for Saudi Arabia: The Complete Setup Guide
How to configure Odoo HR for GOSI contributions, WPS/Mudad payroll, Qiwa sync, Nitaqat tracking, and Saudi EOSB — from day one to first payroll run.
Out-of-the-box Odoo HR works well for generic payroll. Saudi Odoo HR is a different configuration task — GOSI contributions with nationality-split rates, WPS-compliant Mudad bank files, Qiwa portal synchronisation, Nitaqat Saudisation tracking, and end-of-service gratuity accruals under Saudi Labor Law each require specific setup decisions that the standard installation does not make for you. Getting them wrong in month one compounds into reconciliation backlogs and regulator friction that persist long after go-live.
This guide is the configuration reference iWesabe applies on every Saudi Odoo HR rollout. It covers module scope, the Saudi payroll rules that differ from international defaults, the GOSI setup protocol, government-portal connections, EOSB accrual mechanics, and the go-live readiness checklist. For the regulatory background — what GOSI, WPS, Qiwa, and Nitaqat actually require — see the companion guide on Saudi HR compliance.
What does Odoo HR cover for Saudi businesses?
Odoo HR for Saudi Arabia is not a single module — it is a cluster of six inter-dependent apps that, when configured together as a Saudi-localised stack, covers the full employment lifecycle from hire to end-of-service. The table below maps each app to the Saudi-specific function it serves. You only need the apps that match your business model, but the payroll-GOSI-time chain is non-optional for any Saudi entity with salaried employees.
| Odoo App | Saudi-specific function |
|---|---|
| Employees | Employee master with Iqama/National ID, Qiwa profession code, GOSI number, SAMA-format IBAN, nationality category |
| Payroll | Saudi salary structures: basic + housing + transport allowances; GOSI contributable base calculation; WPS/Mudad bank file generation |
| Time Off | Saudi leave calendar: annual leave (21/30 days by tenure), Hajj leave (once per employment), sick leave with pay tapering under Saudi Labor Law |
| Recruitment | Saudi applicant data fields: Iqama status, Visa category, Muqeem verification flag; Nitaqat headcount impact before offer |
| Expenses | Saudi allowance policy enforcement: housing, transport, meals — classification as contributable vs non-contributable for GOSI base integrity |
| Payroll Accounting | Saudi payroll journal entries: GOSI employer liability, EOSB provision accrual, WPS bank clearing, advance recovery schedules |
Saudi payroll configuration — what goes beyond the standard Odoo setup?
Standard Odoo payroll assumes a single gross salary or a basic + simple-addition structure. Saudi payroll has five structural requirements that are either absent from the international default or present but misconfigured for the KSA context. Each one must be explicitly decided and locked at salary-structure level before the first payroll run — not adjusted retroactively month by month.
- Three-part allowance structure: basic + housing + transport. Saudi salary packages separate these three components because they have different GOSI treatment (basic and housing are contributable; transport is not) and different leave encashment bases (annual leave encashment uses basic salary only). Collapsing them into a single field corrupts downstream calculations silently.
- GOSI contributable-base formula at salary-structure level. The GOSI contributable base is basic salary + housing allowance — not total compensation. This formula must be baked into the salary structure so every new hire inherits it automatically. Any allowance type added later defaults to non-contributable unless explicitly classified; this is the right default and the one to preserve.
- Nationality-category contribution rates. GOSI contribution rates differ by nationality category: Saudi nationals (and GCC nationals under the reciprocal agreement) carry the full combined rate — currently 9% employee + 13% employer (pension + unemployment + occupational hazards). Non-GCC nationals carry employer-only occupational hazard contribution. These live as named payroll structures the employee record inherits by nationality field — never entered manually per employee.
- WPS-compliant Mudad bank file output. Saudi Labor Law requires payroll disbursement through the Wages Protection System (WPS), with Mudad as the Ministry of Human Resources platform that validates compliance. Odoo must be configured to generate the Mudad-formatted SIF (Salary Information File) at each payroll run. The file carries each employee's IBAN, net salary, and payment date — with the SAMA-format IBAN mandatory for validation acceptance.
- End-of-service benefit (EOSB) accrual as a running provision. Saudi Labor Law Articles 84–87 mandate a gratuity calculation based on tenure and exit reason. Odoo must accrue this as a monthly provision in the payroll journal entries — not as a lump-sum recognised only at termination. Accruing monthly produces accurate balance-sheet provisions and prevents surprises at the EOSB payment event.
See how iWesabe configures Odoo HR for Saudi Arabia
Our Saudi HR & Payroll module is pre-configured for GOSI, WPS/Mudad, Qiwa, and EOSB — with the localisation decisions already made so your team focuses on data, not setup.
GOSI contribution setup — getting the calculation exactly right
GOSI contribution errors are the most expensive payroll misconfiguration in KSA — SAR 80–200 per employee per month adds up quickly on a 100-employee payroll. The three-variable interaction (contributable base × nationality rate × monthly ceiling) must be correct simultaneously. The table below is the reference iWesabe uses when validating GOSI setup on any new Saudi rollout.
| Employee category | Employee share | Employer share | Total | Contributable base |
|---|---|---|---|---|
| Saudi national | 9% | 13% (9% pension + 2% unemployment + 2% occupational) | 22% | Basic + housing allowance (up to monthly ceiling) |
| GCC national (reciprocal agreement) | 9% | 13% | 22% | Basic + housing allowance (up to monthly ceiling) |
| Non-GCC expatriate | None | 2% (occupational hazards only) | 2% | Basic salary only |
Connecting Odoo HR to Saudi government portals — Qiwa, WPS/Mudad, and Muqeem
The Saudi government portal landscape is four platforms that HR must synchronise with, each on its own data set and timeline. Treating them as one integration problem causes configuration errors — they have different API endpoints, different data models, and different update cadences. The table below is the four-portal map iWesabe uses during Odoo HR architecture sessions with Saudi clients.
| Portal | Governed by | What Odoo sends/reads | Update cadence |
|---|---|---|---|
| Qiwa | HRSD | Employee identity, profession code, contract type/dates, terminations, Saudisation ratio | Event-driven on each employee-record save + daily reconciliation sweep |
| Mudad / WPS | HRSD | Monthly SIF bank file: employee IBAN, net salary, payment date; confirmation receipt back to Odoo | Monthly — must land in Mudad before payroll disbursement date |
| Muqeem | Jawazat | Iqama status and expiry, dependent registration status — read only into Odoo HR for permit-expiry alerts | Pull-on-demand for employee onboarding + periodic renewal sweep |
| GOSI portal | GOSI | Monthly contribution file upload; Article 19 contractor-status validation for service vendors; certificate of good standing pull | Monthly contribution + event-driven for Article 19 PO validation |
The architecture decision that matters most here is event-driven vs batch for Qiwa. iWesabe configures Qiwa sync as event-driven at the employee-record level — a Qiwa API call fires on every save where a Qiwa-relevant field changed. The daily reconciliation sweep catches any drift that slipped through. Batch-only Qiwa sync (monthly or weekly) is the most common cause of Qiwa lag that surfaces as work-permit delays.
End-of-service benefit (EOSB) — how Odoo handles the Saudi gratuity calculation
Saudi Labor Law Articles 84–87 create a mandatory gratuity obligation that accrues from day one of employment. The calculation formula is well-defined but depends on three variables that Odoo must track correctly: the employee's basic salary at termination (not historical average), exact tenure in completed years and fractional months, and the reason for exit — which determines the percentage the employee receives.
- Years 1–5: half a month's basic salary per year. An employee completing exactly three years is entitled to 1.5 months basic salary, regardless of exit reason. Odoo calculates this from the contract start date stored in the employee record — fraction-of-year rules apply if the employee leaves mid-year.
- Year 5 onwards: one full month's basic salary per year. After five completed years the rate doubles. An employee leaving after eight years is entitled to: (5 × 0.5) + (3 × 1) = 5.5 months basic salary. Odoo handles the tenure-band transition automatically when the salary structure is correctly configured.
- Exit reason adjusts the entitlement. Termination by employer: full entitlement for any tenure. Resignation: 0% for under 2 years; 33% for 2–5 years; 67% for 5–10 years; 100% for over 10 years. Exit reason must be a mandatory field on the termination form — not entered as a free-text note — for the correct entitlement to calculate.
- Monthly accrual provision in payroll accounting. Configure Odoo to post a monthly EOSB provision journal entry equal to the current month's accrual (1/12 of the annual entitlement at current basic salary). This keeps the balance sheet accurate and prevents EOSB from appearing as a one-period expense shock. The provision account clears against the EOSB payment at termination.
Is your Odoo EOSB provision in the right shape for year-end?
iWesabe reviews your EOSB accrual configuration, validates the tenure calculation against current headcount, and reconciles the provision balance against actuarial exposure — written output in two weeks.
What does a production-ready Saudi Odoo HR go-live look like?
A Saudi Odoo HR go-live is ready when four bands are in the green simultaneously. None of these is a "nice to have" — each one maps directly to a regulator, a payroll obligation, or an operational exposure. The stat-block below is what iWesabe signs off on before recommending a client proceed to first live payroll run.
Odoo HR for Saudi Arabia is not a generic HR deployment with a localisation patch layered on top. The five payroll configuration decisions, the GOSI three-variable setup, the four-portal connection map, and the EOSB accrual mechanics are each structural choices that must be made correctly at deployment. Made correctly, they compound — six months into go-live the HR team is running clean payroll, reporting to regulators without reconciliation marathons, and building the labour-data foundation that Finance and Operations depend on.
iWesabe has configured Odoo HR & Payroll for Saudi enterprises across manufacturing, construction, distribution, retail, healthcare, and professional services — from 25-employee single entities to multi-entity groups with operations across multiple cities. If you are planning an Odoo HR rollout in KSA or already live but seeing GOSI mismatches, WPS rejections, or Qiwa lag, a focused 90-minute call is enough to identify the configuration gaps and the order to close them.
Book a 90-minute Saudi Odoo HR setup review
We'll walk through your GOSI configuration, WPS/Mudad setup, Qiwa sync architecture, and EOSB accrual — and give you a written gap list and remediation sequence within 48 hours.
Frequently Asked Questions
How does Odoo calculate GOSI contributions for Saudi vs non-Saudi employees?
Can Odoo HR generate WPS/Mudad-compliant bank files automatically?
How does Odoo manage end-of-service benefit accruals under Saudi Labor Law?
What Saudi-specific fields does Odoo HR require at employee creation?
How long does a Saudi Odoo HR go-live take with iWesabe?
Can Odoo HR track Nitaqat Saudisation ratios and flag compliance risk?

iWesabe Editorial Team
Practitioner insights on Odoo ERP, ZATCA compliance, and Saudi enterprise digital operations — written by iWesabe's consulting, finance, and engineering teams.
Related Articles
HRSD & GOSI Compliance on Odoo ERP: A 2026 Saudi HR Playbook
How Saudi enterprises wire Odoo HR to report cleanly to HRSD's Qiwa platform and GOSI's contribution cycles — without the month-end reconciliation marathon that kills HR-team productivity.
Nitaqat & Saudisation Compliance with Odoo HR (KSA)
How KSA employers stay in the green Nitaqat band — automating headcount ratios, Qiwa filings, and Mudad payroll inside one Odoo HR setup.
WPS & Mudad Payroll Integration with Odoo (Saudi Arabia)
How KSA employers run a clean WPS cycle every month — generating Mudad-ready SIF files from Odoo HR, reconciling against GOSI, and clearing bank rejections same-day.
Explore Related Solutions
Saudi HR & Payroll Management
Automate GOSI contributions, generate WPS SIF files, track IQAMA expiry, and calculate end-of-service gratuity — all inside one Saudi-compliant Odoo platform.
ExploreZKTeco Biometric Attendance Integration with Odoo
Connect your ZKTeco fingerprint and facial-recognition devices to Odoo HR, Attendance, and Payroll. Punches sync in real time over ZKTeco's push protocol, overtime is calculated against Saudi Labour Law, and your employee roster pushes back to the device — so GOSI, WPS, and payroll all run on one verified attendance record. Other brands such as Suprema, Hikvision, and eSSL connect the same way.
ExploreJisr HR Integration with Odoo
Bidirectional sync between Jisr — Saudi Arabia's Labour Law HR platform — and Odoo ERP. Employee records, leave approvals, attendance data, and payroll inputs move between both systems automatically, so your HR team works in Jisr and your finance team works in Odoo without duplicate data entry.
ExploreFinancial Management
Automate your Saudi Arabia accounting — ZATCA Phase 2 e-invoicing, VAT returns, Zakat provisioning, multi-currency bank reconciliation, and real-time financial reporting — all inside one connected Odoo platform. Fully localised for KSA and the GCC by iWesabe.
Explore