Odoo Payroll Setup: HR, Attendance and Localization in Odoo 19/20
Odoo payroll setup for Odoo 19 and 20: localizations by country, HR module, attendance, time off, pay runs, what changed in Odoo 20 and what it costs.
Most guides on Odoo payroll show a payslip screen and stop there. Real setups fail earlier, on the wrong localization, missing contracts or attendance that never reaches the payslip. Our Odoo implementation services build payroll in the order that avoids those failures.
Related service: Odoo implementation services — HR, payroll and attendance configured for your local rules.
This guide is for HR managers, finance leads and owners who plan to run payroll inside Odoo 19 or Odoo 20. If payroll is one part of a wider rollout, start with our Odoo ERP implementation guide for the full project plan.
What does Odoo payroll cover in Odoo 19 and 20?
Odoo payroll calculates pay from worked time and contract terms, then posts payslips to Accounting and prepares payments. It does not work alone: it reads data from four other HR apps.
The Odoo Payroll documentation describes the app as calculating worked time with Employees, Time Off, Attendances and Planning, then creating payslips. Employees are paid by wire transfer or check; Odoo says cash is possible but not recommended.
The chain looks like this:
- Employees: personal data, bank account, identification numbers and the payroll tab.
- Contracts: salary structure, wage, working schedule and benefits, managed on the employee record.
- Attendances: check-in and check-out records, extra hours and absences.
- Time Off: approved leave that reduces or replaces worked days.
- Payroll: salary rules, payslips, pay runs, reports and accounting entries.
Which countries have an Odoo payroll localization?
Odoo 20 documentation lists a payroll localization for 25 countries, and that list decides how much you configure versus build. A localization ships the salary structures, rules, taxes and reports for that country.
The Odoo payroll localization list includes India, the UAE, Saudi Arabia, Egypt, Jordan, Kenya, Mexico, the US, Belgium and Australia. Odoo 19 listed 23 countries; Oman and Uzbekistan are new in Odoo 20.
Many countries need a payroll module plus a "Payroll with Accounting" module. Each company in a multi-company database can use its own localization, so a group with Dubai and Riyadh entities runs both.
| Country | Main modules | What the localization handles |
|---|---|---|
| India | India - Payroll, Payroll with Accounting, India - Time Off | EPF, ESIC, professional tax, LWF, TDS, gratuity, sandwich leave |
| United Arab Emirates | UAE - Payroll, Payroll with Accounting | Nationality rules, WPS report, end of service |
| Saudi Arabia | Saudi Arabia - Payroll, Payroll with Accounting | GOSI rates by nationality, WPS export, end of service provision |
| Egypt | Egypt - Payroll, Payroll with Accounting | Local salary structure and accounting entries |
| Malaysia, NZ, Singapore, UK | Employment Hero Payroll | Payroll runs in Employment Hero; journal entries sync to Odoo |
For the Gulf specifics, see our Odoo payroll UAE WPS guide and our Odoo Muqeem, GOSI and KSA payroll guide. This post stays on the general setup.
Odoo 19 vs Odoo 20 payroll: what changed?

Odoo 20 keeps the same payroll logic as Odoo 19 but makes pay runs guided and merges time off and payroll time into one Time Type. The table sums up the changes that affect setup.
| Area | Odoo 19 | Odoo 20 |
|---|---|---|
| Pay runs | Create, add payslips, process | Guided dialog with a Before You Start check |
| Payslip check | Validate, then review PDFs | Test Print creates draft PDFs on Ready pay runs |
| Dashboard | General payroll dashboard | Monthly warning cards with fix buttons |
| Time types | Work entry types and time off types apart | One Time Type with Time Off and Payroll tabs |
| Salary changes | Edit each contract | Salary Increase action creates new versions |
| Salary rules | One category, one structure | Several categories and pay structures per rule |
Our Odoo 20 payroll release notes also show that the separate work entry records and the Planning to Payroll bridge are gone in Odoo 20. Payslips read time off and working schedules directly.
How do you set up the Odoo HR module and employees first?
Set up companies, departments, working schedules and employee records before you touch salary rules. Payroll can only be as accurate as the HR module data behind it.
Start with the company record. In India, the state on the company address becomes the default work address used to calculate payroll taxes.
Then build the Odoo employees records:
- Identity: legal name, nationality and identification numbers. In the UAE, nationality changes payslip handling for UAE and GCC citizens.
- Bank account: needed for payments and for WPS exports in the UAE and Saudi Arabia.
- Statutory IDs: in India, the 12-digit UAN, the ESIC number, PAN and LWF account number.
- Working schedule: fixed, variable or undefined in Odoo 20; variable schedules suit rotations.
- Approvers: the manager who approves attendance and time off for each employee.
Every employee needs a running contract to be paid. Contracts sit on the employee's Payroll tab, and templates for full time, part time or seasonal staff speed up hiring.
Watch licensing here. Under Odoo's subscription terms, an active employee record not linked to an active user counts as a Light User, priced at US$8.90 a month in the US. Plan staff who never log in as Light Users, not full users.
How do you configure Odoo attendance for payroll?
Odoo attendance acts as the time clock, and its settings decide what counts as overtime, lateness and absence on the payslip. Agree these rules with HR before go-live.
The Odoo Attendances documentation lists three ways to check in: from the backend, from a kiosk device, or through the attendance icon in the top bar. Key settings sit under Attendances, Configuration, Settings.
- Automatic Check-Out: closes forgotten check-ins after a tolerance, or in Odoo 20 at a specific time such as 8:00 PM.
- Absence Management: logs days with no attendance and no time off request on the attendance report.
- Tolerance in favor of company: extra minutes below this value do not count as overtime.
- Tolerance in favor of employee: a short day within this grace period is not penalized.
- Extra Hours Validation: approve overtime automatically or by the manager.
For biometric devices, the Odoo BioTime integration pulls punches from a BioTime Cloud server into attendance records. Odoo says it connects to the BioTime software, not to ZKTeco terminals directly.
How does Odoo time off feed payroll?
Approved Odoo time off reduces or replaces worked time on the payslip, so leave types must match your payroll rules. Unapproved leave inside the pay period blocks clean processing.
In Odoo 20, each Time Type carries both a Time Off tab and a Payroll tab, so one record defines approval, allocation and pay effect. A type can count working days or calendar days, which matters for countries that count weekends inside long leave.
If time off is taken after payslips are validated, the Deferred Time Off setting moves it to the next pay period instead of reprocessing payslips.
India adds two policies through the India - Time Off module. Sandwich leave counts a weekend between two leave days, so Friday plus Monday becomes four days. Optional holidays limit some leave types to set regional or religious dates.
Odoo payroll setup: a step-by-step order
Follow this order and most payroll errors show up in testing rather than on payday. Each step depends on the one before it.
- Install the localization: in Payroll settings, click Choose a Payroll Localization and install your country, plus the accounting module if one exists.
- Configure payroll settings: payroll entries for Accounting, contract and work permit expiry notices, YTD reset date and payslip PDF rules.
- Set statutory registrations: for India, the EPF employer ID, professional tax number, ESIC code and LWF number.
- Map accounts: link salary rules to expense and liability accounts so payslips post correctly.
- Build contract templates: one per salary structure and employee type.
- Load employees and contracts: import in batches, then check bank accounts and statutory IDs.
- Configure attendance and time off: schedules, tolerances, overtime approval and leave types.
- Run a parallel month: compute payslips in Odoo next to your current payroll and compare net pay line by line.
- Go live: first real pay run, then payments, reports and filings.
The Odoo India payroll documentation shows how much a localization fills in. One example: you choose whether PF is calculated on basic capped at Rs 15,000 or on actual basic.
How do you run pay runs and payslips in Odoo?
A pay run groups payslips for one salary structure and pay period, so you compute, check and pay them together. Most companies create one pay run per structure each period.
Under Payroll, Payslips, Pay Runs, you pick the salary structure, pay schedule and period start; Odoo fills the end date. Each run shows employer cost, gross and net totals.
Before you validate, use these checks:
- Before You Start (Odoo 20): lists pending issues, such as missing contracts or attendance problems, before payslips are generated.
- Test Print (Odoo 20): creates draft PDF payslips on a Ready pay run so HR can check them.
- Chatter on pay runs (Odoo 20): post notes and keep the approval trail on the pay run itself.
After validation, payslips post to Accounting and you pay by bank transfer, SEPA where enabled, or check. The India localization adds a salary register, EPF and ESI reports and a yearly salary report for statutory filing.
What if your country has no Odoo payroll localization?
Without a localization you either build the salary structure yourself, buy a module, or keep payroll in a local provider and post journals to Odoo. Choose based on headcount and how often local rules change.
On the Odoo forum, one user found that Canadian payroll is not supported by default in Odoo 18 or 19. Another, setting up Oman payroll manually, was told Python code would be needed for social security and overtime.
Oman now has a localization in Odoo 20. For other countries, compare three routes:
| Route | Best for | Watch out for |
|---|---|---|
| Manual salary structures and rules | Simple pay, few staff, stable rules | You own every tax and law change |
| Third-party or custom module | Mid-size firms with local tax and reports | Upgrade cost at each Odoo version |
| External payroll, journals in Odoo | Complex tax or many states | Two systems for employee data |
Odoo already supports the third route in Australia, Malaysia, New Zealand, Singapore and the UK. The Employment Hero payroll module keeps payroll in Employment Hero and syncs journal entries to Odoo.
Our post on Odoo localization gaps explains how to score these gaps before you sign a project.
Odoo payroll by industry
Shift work, site crews and day-type rates change how you configure attendance and salary rules more than company size does. The table shows the common patterns.
| Industry | Pain or cost driver | Odoo approach | How iVentureTeam helps |
|---|---|---|---|
| Manufacturing | Shifts, overtime, night allowances | Kiosk attendance, extra hours rules, shift schedules | Map shift rules to salary rules |
| Retail and restaurants | Part-time staff, rotations | Variable schedules, hourly contracts | Set up rotas and hourly pay runs |
| Construction | Site crews, remote check-in | Attendance by device, BioTime Cloud | Connect devices, test punch sync |
| Healthcare and services | Weekday, weekend and holiday rates | Timesheets and day-type rules | Automate rate rules |
| GCC trading firms | Expat staff, WPS, end of service | UAE and Saudi localizations | Configure WPS and gratuity |
How much does Odoo payroll setup cost?
Odoo payroll cost has two parts: user licenses and the implementation work to configure and test your country rules. Licenses are predictable; setup depends on localization coverage.
Payroll sits under Human Resources on the Odoo pricing page. The US price billed yearly is US$31.10 per user a month for Standard and US$61.00 for Custom. In India it is Rs 725 and Rs 1,350. Staff who only have an employee record count as Light Users at US$8.90 or Rs 195.
Our published Odoo implementation cost ranges run from $3k to $9k for small projects, $9k to $27k for mid-size and $27k to $150k+ for large ones. Treat them as indicative ranges.
Costs rise with missing localizations, many salary structures, biometric devices and payroll history you want to migrate. For a quick number on your own scope, use the Odoo project estimate tool.
How iVentureTeam helps with Odoo payroll setup

We set up Odoo payroll in the right order for your country and prove it with a parallel run before you pay anyone from it. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.
- Localization check: confirm what Odoo covers for each of your countries and what must be built.
- HR module setup: employees, contracts, templates, schedules, attendance and time off.
- Salary rules: structures, allowances, deductions and accounting mappings, tested on real payslips.
- Device and provider links: BioTime Cloud, banks and external payroll tools through our Odoo integration services.
- Parallel runs and training: side-by-side comparison with your current payroll and hands-on HR training.
Odoo payroll case study: Enabl Health
An Australian health-tech company needed timesheets to follow weekday, weekend and holiday rates without manual rate lookups. We extended Odoo's Timesheet, Payroll and Portal layers to make that native.
Enabl Health tracked work hours with manual start and stop times, which invited errors. Rates differed for weekdays, weekends and holidays, and portal users could not edit timesheets or upload attachments.
We started with a data cleanup across five areas: sales, timesheets, invoices, payslips and users. We then automated timesheet classification by day type, added start and stop timers with automatic time calculation, and rebuilt the portals for mobile.
The project ran on Odoo.sh with separate staging and production branches, over 10 weeks plus ongoing support. Read the Enabl Health timesheet and billing case study.
The bottom line on Odoo payroll
Odoo payroll is a strong choice when your country has a localization and you set up HR, attendance and time off before the first pay run. Without a localization, plan the build or a hybrid route from day one.
Check the localization list, clean your employee data, agree attendance rules with HR, and run at least one parallel month. On Odoo 20, use the new Before You Start check and Test Print on every pay run until the numbers match.
Ready to run payroll inside Odoo?

Get a payroll setup plan for your countries, headcount and attendance rules. Plan your Odoo payroll setup with our team, call +91-90235-15208, or email business@iventureteam.com.
Frequently Asked Questions
Does Odoo have a payroll module?
+
Yes. Odoo Payroll calculates payslips from contracts, attendance and time off, posts them to Accounting and prepares payments. It is listed under Human Resources on the Odoo pricing page.
Which countries does Odoo payroll support?
+
Odoo 20 documentation lists payroll localizations for 25 countries, including India, the UAE, Saudi Arabia, Egypt, Kenya, Mexico, the United States, Belgium and Australia. Oman and Uzbekistan are new in Odoo 20.
Is Odoo payroll available in Canada, the UK or Germany?
+
None of them has a standard localization in the Odoo 20 list. UK firms can run payroll in Employment Hero and sync journals to Odoo; otherwise build salary rules, add a module or post journals from a local provider.
How do I set up payroll in Odoo?
+
Install your country's payroll localization, configure payroll settings and accounts, create employees and contracts, set up attendance and time off, then compute a test pay run and compare it with your current payroll.
Can Odoo attendance connect to biometric devices?
+
Yes, through the BioTime integration, which pulls punches from a BioTime Cloud server into Odoo attendance. Odoo says it connects to the BioTime software, not directly to ZKTeco terminals.
What changed in Odoo 20 payroll?
+
Odoo 20 adds guided pay runs with a Before You Start check, Test Print for draft payslips, a warning dashboard, a Salary Increase action and one Time Type that covers both time off and payroll.
Do employees without an Odoo login need a license?
+
Under Odoo's subscription terms, an active employee record not linked to an active user counts as a Light User. In the US that costs US$8.90 a month, much less than a full user.
How long does Odoo payroll implementation take?
+
It depends on countries, headcount and salary structures. Payroll usually runs as one workstream inside the wider Odoo project, and you should plan at least one full parallel pay period before go-live.
Free payroll setup review
Setting up payroll in Odoo?
Tell us your headcount and pay rules. We set up salary rules, statutory files and leave in Odoo, and show what needs a custom module.
Free, with no obligation. A senior consultant replies within 12 business hours.
Free Odoo tools
All tools- Odoo Health CheckVersion, modules, findings and upgrade cost
- Odoo App SelectorWhich apps you need, by industry
- Odoo Project EstimateIndicative cost and timeline in minutes
- Odoo Implementation Cost CalculatorImplementation cost and timeline, in minutes
- Odoo Migration Cost CalculatorVersion jump or legacy ERP, priced in minutes
Continue reading
Odoo Employee Self Service Mobile App: Options, Build Paths, Cost
Odoo employee self service mobile app guide: leave, attendance, expenses and payslips on a phone, Light User cost, and build options on Odoo 19/20.
Odoo Payroll UAE WPS Guide: SIF File, Gratuity, Leave and Visa Expiry
Odoo payroll UAE WPS guide for Odoo 19 and 20: SIF file export, gratuity calculation, leave rules, visa expiry alerts and the 2026 salary deadline.
Odoo Muqeem Integration: Iqama, Visas, GOSI and KSA Payroll Guide
Odoo Muqeem integration for Saudi HR: iqama renewal, exit re-entry visas, Odoo 20 GOSI API, WPS files for Mudad and KSA payroll setup, step by step.
