An HR management system in Saudi Arabia has to run payroll the Saudi way: GOSI contributions that depend on each employee’s nationality, an end-of-service provision, and a WPS salary file for the bank. Odoo HR covers the whole employee cycle, and Odoo Payroll (Enterprise) adds a Saudi localization that handles these items alongside attendance, leave and accounting.
Summary: Odoo is a modular HR management system. Employees, Recruitment, Time Off, Attendance and Expenses handle records, hiring, leave, time tracking and claims, while Appraisals and Payroll are part of Odoo Enterprise. The Saudi payroll localization installs a KSA salary structure with basic, housing and transport allowances, GOSI contribution rules for Saudi and non-Saudi employees, a monthly end-of-service provision, annual leave provisions and salary loans and advances. It generates the WPS payment report from a payslip or a pay run, based on MHRSD technical guidelines, and posts payroll journal entries to the Saudi chart of accounts. In the Odoo 20 documentation, the localization also connects to GOSI to retrieve contribution rates and includes a nationalization percentage report for tracking Nitaqat compliance. The interface is available in Arabic with a right-to-left layout. Payroll results should still be checked against current Labor Law and GOSI rules before each go-live.
What a Saudi HR system has to handle
HR in the Kingdom carries more statutory detail than in many other markets. A workable system needs to deal with all of the following, every month, without spreadsheets on the side:
- Mixed workforces. Saudi nationals and expatriates on the same payroll, with different GOSI treatment, Iqama and work permit costs, and medical insurance.
- Allowances. Housing and transportation allowances are standard parts of the package and affect other calculations, such as leave pay and end of service.
- End-of-service benefit. A liability that grows every month and depends on length of service and the reason the employment ends.
- Salary payment through WPS. Salaries go to each employee’s IBAN, and the company must be able to produce a wage protection file that matches what was paid.
- Saudization. Companies need to know their nationalization percentage under the Nitaqat program, by company and by department.
Odoo handles most of this through standard apps and the Saudi payroll localization. The rest of this guide explains what each piece does, based on Odoo’s own documentation.
The Odoo HR apps at a glance
Odoo HR is not a single product. It is a set of apps that share one employee record, so you install only what you need.
| App | What it does | Edition |
|---|---|---|
| Employees | Employee records, departments, org chart, documents, contracts and versions | Community and Enterprise |
| Recruitment | Job positions, applicant pipeline, interviews and offers | Community and Enterprise |
| Time Off | Leave types, allocations, accrual plans, approvals and public holidays | Community and Enterprise |
| Attendance | Check-in and check-out by kiosk or from the database, extra hours and reports | Community and Enterprise |
| Expenses | Expense claims with receipts, approvals, posting and reimbursement | Community and Enterprise |
| Appraisals | Review cycles, self-assessments, 360 feedback, goals and skills | Enterprise |
| Payroll | Salary structures, payslips, pay runs, localization rules and accounting entries | Enterprise |
Employees
The employee form holds personal details, work address, manager, department, bank account and the payroll fields described below. Contract history is kept on the record, so you can see how salary and allowances changed over time.
Recruitment
Each job position has its own applicant pipeline with stages you define, such as screening, interview and offer. Interviews are scheduled from the applicant card, emails and notes stay on the record, and a hired applicant becomes an employee without retyping. With the Website app, job ads are published on your careers page and applications land straight in the pipeline.
Time Off
Employees request leave from the app or the portal, managers approve with one click, and balances update automatically. Accrual plans can build annual leave month by month, and public holidays such as Eid can be loaded into the company calendar so they are not counted as leave days.
Attendance
Odoo Attendance works as a time clock. Staff check in and out on a shared device in kiosk mode or directly from the database. Settings control automatic check-out, tolerance times in favor of the company or the employee, and whether extra hours are approved automatically or by a manager. Approved attendance can feed payroll directly.
Appraisals
Appraisals can be scheduled automatically, for example six months after joining and then yearly. Each cycle includes an employee self-assessment, manager feedback, optional 360 feedback, goals and a skills review, with a final rating at the end.
Expenses
Employees photograph a receipt or forward it by email, and Odoo creates the expense. After approval, finance posts it to accounting and reimburses the employee individually, in bulk, or in the next payslip when Payroll is installed.
Saudi payroll localization in Odoo
Odoo Payroll is an Enterprise app. For Saudi companies, two modules matter: Saudi Arabia – Payroll (l10n_sa_hr_payroll), which provides the salary structures, and Saudi Arabia – Payroll with Accounting (l10n_sa_hr_payroll_account), which posts journal entries. The details below come from Odoo’s Saudi Arabia payroll documentation.
Company and employee setup
The company record needs its 15-digit VAT number and MoL number, with SAR as currency. Payroll settings hold the establishment bank account and the MoL Establishment ID. On each employee you set:
- Nationality, which determines the GOSI rate applied
- A trusted bank account (IBAN). Odoo will not process payroll for an employee without one
- The 10-digit Saudi National ID or Iqama number, used in the WPS report
- The pay category KSA Employee, wage type (fixed or hourly) and working schedule
Allowances and employer costs
Monthly housing, transportation and other allowances are entered in SAR on the employee’s payroll tab. Annual employer costs for Iqama, medical insurance and work permits are entered as yearly amounts and recognized monthly as employer expenses. They are computed on the payslip but do not reduce the employee’s net pay or appear on the payslip PDF. Odoo also calculates an employee net cost on every payslip, combining net pay with indirect costs such as insurance and the employer’s GOSI share.
GOSI contributions
The localization includes separate rule parameters for the Saudi employer contribution, the non-Saudi employer contribution and the Saudi employee contribution, plus an overtime rate. Odoo adds updated parameters for each calendar year. The Odoo 20 documentation also describes a GOSI integration: you enter API credentials from the GOSI portal, and Odoo retrieves contribution percentages for the Annuities, Occupational Hazards and Unemployment Insurance (SANED) branches. Only the employee’s share appears on the payslip they receive.
End-of-service benefit and provision
Each employee’s end-of-service provision is accrued on every payslip from the start of the contract. Odoo calculates the provision on the most expensive scenario (end of contract) and, when the employee leaves, computes the actual benefit from length of service and termination reason: end of contract or retirement, resignation, dismissal, or termination without a valid reason. If the actual amount is lower than the provision, an adjustment line is added automatically. Unused annual leave is paid out on top.
Leave, sick leave and late arrivals
An annual leave provision is accrued each month from wage plus allowances, and leave pay is drawn from it. The Odoo 20 documentation describes sick leave rules of 30 fully paid days, 60 days at 75%, then unpaid, within a one-year period. Employees can also request an advance leave payslip before a long holiday. With the Saudi Arabia Payroll – Attendance module, late arrivals beyond a grace period are flagged for HR approval and deducted on the next payslip.
Loans and salary advances
Salary loans are set up as a salary adjustment with a repayment amount per payslip, and Odoo stops the deductions once the total is repaid. Advances are paid through an off-cycle payslip and recovered automatically in the next monthly payslip, in full or in parts.
WPS salary files
The Wage Protection System report confirms how much each employee was paid and when. Odoo generates it from a single payslip or a whole pay run, using the Saudi WPS export format, and Odoo states the file is structured according to MHRSD technical guidelines. Before you can generate it:
- The establishment bank account needs its Bank Establishment ID and SARIE code, and must be marked trusted
- The MoL Establishment ID must be set in payroll settings
- Every employee in the file needs a National ID or Iqama number and a trusted bank account
- Payslips must be validated and journal entries posted
You then choose the payment date, WPS value date and, optionally, the debit date, and Odoo produces the file to upload through your bank’s channel.
Saudization and Nitaqat tracking
Nitaqat classifies companies by their share of Saudi employees, and the required share depends on your activity and size. Getting the calculation right affects visas, renewals and access to government services, so HR teams watch it closely.
The Odoo 20 documentation describes a Nationalization Report under Employees reporting. It calculates the nationalization percentage at company and department level for a chosen reference date, using a minimum wage you set on each department, and links to the employees counted. It is an internal tracking report. Odoo does not state that it submits anything to the Ministry, so official Nitaqat figures still come from the government platforms.
Arabic interface and payroll accounting
Odoo ships with an Arabic translation and right-to-left layout. Each user picks a language, so an HR officer can work in Arabic while finance works in English in the same database. Employees who log in to request leave or submit expenses see Odoo in their own chosen language too.
On the finance side, the payroll accounting module includes fifteen accounts from the Saudi chart of accounts, covering basic salary, housing and transportation allowances, GOSI payable, leave days provision, end-of-service provision and indemnity, medical insurance, visa expenses and salary deductions. Journal entries are created per payslip or per batch, then payments are registered. This links directly to Odoo accounting in Saudi Arabia, so payroll costs reach the books without a manual import.
What Odoo HR and payroll cost
Payroll and Appraisals need a paid Odoo Enterprise plan. At the time of writing (November 2026), Odoo’s pricing page lists the Standard plan at about SAR 63 per user per month and the Custom plan at about SAR 120 per user per month, both billed yearly. Users are the people who log in to Odoo; an employee who only checks in at an attendance kiosk does not need a login. Check the current pricing page for your headcount.
Implementation is a separate cost. As an indicative market range, not a quote, an HR and payroll rollout for a small or mid-size company typically falls between SAR 20,000 and 60,000, more with multiple entities, attendance device integration or custom salary rules. Our Odoo implementation cost guide for Saudi Arabia explains the drivers, and the Odoo implementation cost calculator gives a first estimate.
How to implement Odoo HR and payroll
- Collect master data. Employee list with nationality, National ID or Iqama, IBAN, contract dates, wage and allowances, leave balances and service start dates.
- Configure company and payroll settings. VAT and MoL numbers, establishment bank account with SARIE code, MoL Establishment ID and the annual leave type.
- Set up the HR apps. Departments, working schedules, leave types and accruals, public holidays and attendance rules.
- Review salary rules. Check GOSI parameters, overtime rate and any company-specific allowances against current rules. Changes beyond the standard rules are a customization project.
- Run parallel payroll. Process at least one month in Odoo alongside your current method and compare every payslip, including end-of-service provisions.
- Test the WPS file. Generate it for the parallel month and confirm your bank accepts the format.
- Train and go live. Train HR officers, managers and employees on their own tasks. See our Odoo training services.
OzonLayer is an official Odoo Silver Partner with three Odoo 18 certified consultants and 50+ clients served. Our Odoo implementation services in Saudi Arabia follow this sequence, and our Odoo support services help with yearly rule updates. You can see real Saudi projects in our case studies.
Want to see Saudi payroll, GOSI and WPS running on your own employee data? Book a free consultation with our team, or call +966 56 434 5818.
Frequently asked questions
What is the best HR management system for companies in Saudi Arabia?
Look for a system that runs Saudi payroll natively: GOSI by nationality, end-of-service provisions, allowances and a WPS file. Odoo is a common choice because HR, payroll, attendance, leave and accounting share one database, with an Arabic interface. Payroll and Appraisals require Odoo Enterprise, while Employees, Recruitment, Time Off, Attendance and Expenses are also in Community.
Does Odoo payroll calculate GOSI in Saudi Arabia?
Yes. The Saudi payroll localization applies GOSI rules based on each employee's nationality, with separate parameters for Saudi employer, non-Saudi employer and Saudi employee contributions. Odoo updates these parameters each calendar year. The Odoo 20 documentation also describes a GOSI integration that retrieves contribution percentages using API credentials from the GOSI portal.
Can Odoo generate a WPS file?
Yes. Odoo generates the Saudi WPS payment report from a single payslip or a whole pay run, structured according to MHRSD technical guidelines. The company needs an establishment bank account with Bank Establishment ID and SARIE code, a MoL Establishment ID, and every employee needs a National ID or Iqama number and a trusted bank account.
How does Odoo handle end-of-service benefits?
Odoo accrues an end-of-service provision on every payslip from the start of the contract, calculated on the end-of-contract scenario. When the employee leaves, it computes the actual benefit from length of service and termination reason, such as resignation or end of contract, and adds an adjustment line if the amount differs. Unused annual leave is paid on top.
Is Odoo payroll available in Odoo Community?
No. Payroll is an Odoo Enterprise app, as is Appraisals. Employees, Recruitment, Time Off, Attendance and Expenses are available in both editions. At the time of writing, November 2026, Odoo's pricing page lists the Standard plan at about SAR 63 and Custom at about SAR 120 per user per month, billed yearly.
Does Odoo report Saudization to the Ministry automatically?
No. The Odoo 20 documentation describes a Nationalization Report that calculates your nationalization percentage by company and department for a reference date, to help you track Nitaqat compliance internally. Odoo does not state that it submits data to the Ministry, so official Nitaqat figures still come from the government platforms.
How long does an Odoo HR and payroll implementation take?
It depends on headcount, number of entities and how clean your employee data is. A typical project includes setup, configuration of salary rules, at least one month of parallel payroll and a WPS file test with your bank before go-live. Attendance device integration or custom salary rules add time.
