Employment Hero HR
Keep employees and departments aligned between the Employment Hero people platform and Odoo HR, configured as data and tuned without code.
Store price is USD 157 all-in: installing this also pulls the 2 paid ERP Heritage modules it depends on.
Why this module
Employment Hero HR
Mappings ship as editable data
Endpoints, field mappings and sync jobs are records, not Python. Adjust a source path, add a field or change a transformer from the interface, and the change survives upgrades because the starter mappings ship with update protection.
Idempotent by external id
Every employee and department is keyed by its Employment Hero id through a cross reference, so re running a job updates in place and never duplicates. A record whose mapped payload has not changed is skipped, so a steady state run does almost no work.
No Enterprise dependency
Targets hr.employee and hr.department from the standard Community HR app. Bank details live on a dedicated lightweight model so payroll account data stays on the employee without entangling the partner banking used by Accounting.
Day in the life
A joiner, a mover and a leaver, handled once
A new starter is added in the Employment Hero platform overnight. The scheduled employee job pulls the record, composes the Odoo display name from the first and last name parts, maps work email, job title, mobile and birthday, and resolves the department from the team so the employee lands in the right place. Because departments sync first, the relation is already there to point at. A title change on an existing employee updates that one record in place; an unchanged record is recognised by its payload hash and skipped. If one record has a bad value, it is logged on its own line and the run continues to a partial state rather than failing the whole batch, so the rest of the workforce still syncs cleanly. When a deployment is ready to write back, it narrows the push scope to records carrying an external id and turns on the push leg, and a steady state run makes no vendor writes because unchanged payloads are not resent.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
A re run or a retried delivery is deduplicated by external id, so the same employee is never created twice and an unchanged payload is recognised by its hash and skipped.
Each record is written inside its own savepoint, so one bad row rolls back alone and is logged as an error line while the run continues to a partial state instead of aborting the whole sync.
Transient 5xx, network timeouts and 429 rate limits are retried with exponential backoff and jitter, honouring a server Retry-After header and clamping it so a hostile or buggy value cannot park a worker for hours.
List endpoints page through the whole result set using the platform page index and item per page parameters, stopping on a short or empty page, with a page cap that warns loudly rather than silently truncating.
Inbound and outbound conflicts are governed by a configurable policy. Newest wins compares source timestamps so a stale snapshot never overwrites a fresher record, and a webhook driven run is forced to newest wins and refuses to apply a snapshot it cannot prove is newer.
Outbound creates and updates carry a stable Idempotency-Key, constant per record for a create and per change for an update, so a retried write is deduplicated by the platform instead of creating a second record.
Departments run before employees so the employee to department relation resolves through the external id cross reference; a department added later is picked up on the next employee run.
The employee bank account number is encrypted in the database and decrypts only for HR users, with a shipped migration that encrypts any legacy plaintext column on upgrade and refuses to run if the encryption library is missing rather than touching a single row.
Each connection is bound to a company, and a sync job picks the default connection for its product and company, so a multi company database keeps its Employment Hero links separate.
The HR platform connection refreshes its OAuth access token lazily and under a single flight lock, so concurrent jobs do not race each other into a dead rotated token.
What is inside
Built to do the job, end to end.
- Departments and teams to hr.department. A shipped pull job reads teams and writes departments, keyed by external id. Department and create and update endpoints are also shipped so the same job can run two way once the push leg is enabled.
- Employees to hr.employee. Maps name from the first and last name parts, work email, private email, job title, work and mobile phone, birthday and the primary team to department. Each mapping line is an editable record you can extend or repoint to your own payload shape.
- Employee bank accounts. A dedicated eh.hr.bank.account model holds account name, bank, branch code, account number, allocation percentage and primary flag, driven per employee. The account number is restricted to HR users and encrypted at rest.
- Broad endpoint catalogue. Beyond the active jobs, the module registers read endpoints for emergency contacts, custom fields, employment histories, cost centres, employing entities and kiosk members, so extending coverage is a configuration step, not new transport code.
- Per record sync lines and run states. Every create, update, skip and error is recorded as a line under a run, and a run ends done or partial, so you can see exactly what each sync did and which records need attention.
- Dry run preview. A job can run without writing anything and still report what it would have created or updated, so a mapping change can be checked against live data before it touches the database.
Honest about the edges
What this does not do, so nothing surprises you.
- Out of the box the shipped jobs pull from the Employment Hero platform into Odoo. Two way sync is supported by the engine and the endpoints ship, but the push scope is intentionally left empty so a deployment narrows it and enables the push leg deliberately before any data is written back.
- Real time webhook delivery is not part of this module. The shipped jobs run on a schedule or on demand. The engine has a webhook aware path, but inbound webhook handling is provided by a separate companion module and is not a dependency here.
- The starter field mappings reflect a common Employment Hero HR payload shape. Some source paths, in particular the primary team used for the department relation, are a best effort default and may need adjusting to match your organisation's exact payload.
- The bank account job is shipped ready but is driven per employee because the list path is an employee sub resource, so a deployment supplies the employee id when running it.
- Pushing employees uses the platform employment details update endpoint, which covers fields such as company email, job title and team. The full personal details surface is a separate endpoint that ships but is not wired into the default push job.
- This is a configuration and integration layer. It depends on the ERP Heritage Employment Hero sync engine and a configured connection with valid credentials, and it does not include the Employment Hero subscription itself.
Employment Hero Odoo integration, Employment Hero HR sync, Odoo employee sync, Odoo HR department sync, hr.employee integration, Employment Hero connector Odoo 16, two way HR sync Odoo, idempotent employee import, employee bank account import Odoo, encrypted HR PII Odoo, Odoo Community HR integration, people platform sync Odoo
Need this fitted to the way you work?
ERP Heritage delivers end to end Odoo work: Odoo Implementation, Customization and Development, Integration, Migration, Consultation, Support and Training. We help teams put this module into production, shape it to their process, and keep it running.
We work with businesses across Australia (Melbourne, Sydney, Brisbane, Perth, Adelaide, Canberra) and the Middle East (Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City, Muscat). Start a conversation at erpheritage.com.au or email info@erpheritage.com.au.
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Sync Employment Hero leave categories, leave requests and leave balances into the standard Odoo Time Off app, wit...
Show the Hijri (Umm al-Qura) date alongside Gregorian dates across Odoo 16
Connect Odoo partner records to the Saudi SPL National Address service and the Wathq commercial registry
One click install of the full Employment Hero integration for Odoo Community, covering the connector, two way syn...
The Malaysia country pack for the ERP Heritage Employment Hero integration
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 3978 |
| Technical Name |
eh_hero_hr |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module