| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Recruitment (hr_recruitment)
• Discuss (mail) • Calendar (calendar) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 3632 |
| Technical Name |
eh_hero_ats |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
Employment Hero ATS
Pull Employment Hero recruitment job openings into Odoo Recruitment, mapped to hr.job and kept current by a scheduled, idempotent sync you tune as data.
Store price is USD 137 all-in: installing this also pulls the 2 paid ERP Heritage modules it depends on.
Why this module
Employment Hero ATS
Open roles match the source
Recruitment job openings flow from Employment Hero into Odoo Recruitment, so the roles your team sees in Odoo match what is advertised upstream without anyone re keying them.
What the API actually exposes
The published ATS API is read only and has no public candidate or application endpoint, so this module syncs job openings, departments and countries only. It does not pretend to move candidates.
Mapping you change as data
The job mapping ships ready to use and stays editable as configuration rows. Repoint a field or adjust the department match without a code deployment or an upgrade.
Day in the life
A morning sync, no re keying
Talent posts a new opening in Employment Hero and tags its department. Overnight the scheduled ATS job pages through every opening, keys each one to its Employment Hero id, and upserts into hr.job. The new role appears in Odoo Recruitment under the matching department, the advertised opening count sets the recruitment target, and the run log shows one created and the rest skipped as unchanged. Nobody opened a second system to copy a job title.
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.
Every opening is keyed to its Employment Hero id through a cross reference table, so running the job twice updates in place and never creates a duplicate hr.job.
Each opening is hashed from its mapped values plus a fingerprint of the mapping. An opening whose payload has not changed is skipped, and editing the mapping forces existing records to be rewritten on the next run.
Each record is processed inside its own savepoint. A single opening that fails to write is rolled back and logged as an error line while the rest of the run continues, ending in a partial state rather than aborting everything.
The job pages through the ATS jobs endpoint with page based pagination and stops on a short or empty page. A page cap guards against an unbounded loop and warns loudly if results were truncated.
Transient failures, timeouts and a server rate limit response are retried with exponential backoff and jitter, honouring a Retry-After header within a clamped ceiling, while a permanent error is raised at once.
Calls draw from a shared rate budget for the ATS product, with one token spent per logical call rather than per retry, so a multi worker deployment honours one cluster wide ceiling.
A department on an opening is matched to an Odoo department by name. The opening still imports when no department matches; only the department link is left unset.
A connection belongs to one company, and a job without an explicit connection uses the default connection for its product and company, so cross references stay scoped to the right company.
What is inside
Built to do the job, end to end.
- Three read only endpoints. Job openings, departments and countries from the Employment Hero ATS embedded API, defined as data with header token auth, page based pagination and the data.items envelope.
- One job mapping onto hr.job. Title to job name, description and requirements across, advertised openings to the recruitment target, and department resolved against Odoo departments by name. Ships ready and stays tunable as data.
- Scheduled pull job. A single pull job, ATS Jobs, runs the openings sync against your Employment Hero connection. Employment Hero is treated as authoritative on pull.
- Idempotent cross reference. An external id table links each Odoo record to its Employment Hero id per connection and stores a payload hash, so reruns upsert and unchanged records are skipped.
- Audited runs and API log. Each run records counts, state and duration with a per record line, and every API call is logged with its timing, ready to read into an audit.
- Runs on the shared engine. Transport, auth, retry, rate limiting and the sync orchestrator come from the suite base and sync engine, depended on through eh_hero_sync, so the ATS module stays thin and consistent with the rest of the suite.
Honest about the edges
What this does not do, so nothing surprises you.
- This is an optional add on and is not part of the Employment Hero Suite bundle. Install it only when you use Employment Hero recruitment.
- Sync is one direction only, from Employment Hero into Odoo. The module does not push Odoo changes back to the ATS.
- The published ATS API is read only and has no public candidate or application endpoint, so this module syncs job openings only, not candidates, applications or pipelines.
- The shipped job performs a full pull of openings on each run. It does not use a changed since delta cursor, because the ATS job object is not configured with a source updated timestamp here. Idempotent skipping still prevents duplicate work.
- Departments are matched to Odoo departments by name. A department whose name does not match is left unlinked rather than created.
- Requires the standard Odoo Community Recruitment app, hr_recruitment, and an Employment Hero ATS connection configured with product ATS and ATS token auth.
- There is no webhook handler in this module. Job openings are kept current by the scheduled pull, not by real time push from Employment Hero.
Employment Hero ATS integration, Employment Hero Odoo connector, Odoo recruitment sync, ATS job opening sync, hr.job import, recruitment integration Odoo, Employment Hero recruitment, job opening connector, talent acquisition Odoo, scheduled recruitment sync, Odoo 18 recruitment, ERP Heritage Employment Hero suite
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 18
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 New Zealand country pack for the ERP Heritage Employment Hero integration
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Recruitment (hr_recruitment)
• Discuss (mail) • Calendar (calendar) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 3632 |
| Technical Name |
eh_hero_ats |
| 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