Odoo
Connect your own Odoo server and push new hires to Odoo HR and draft placement invoices — live today, with your own API key.
The Odoo ATS integration is live in Expertini ATS today. If your organisation runs Odoo — self-hosted, on Odoo.sh, or Odoo Online — you connect your own server with your own API key and close two gaps at once: accepted hires push into Odoo HR as employee records, and client placements become draft invoices in Odoo Accounting. No re-keying at either end of the hire.
Because it is your server and your key, the connection works the way self-hosted teams expect: no third-party middleware, no data passing through a vendor you did not choose, and no usage fees — the connector is included on the Business plan, alongside the native Client CRM commission tracking that feeds the invoice figures. Sign up and connect from the in-app hub.
On this page
- Two gaps closed: hired-to-onboarded and placement-to-invoice
- Your server, your key, your control
- Two-way: your Odoo data eases the ATS, and back
- Part of the Business plan
- Connection architecture
- Write semantics and data flow
- Operational considerations
- Placement in the integration topology
- Interface blueprint & interaction flow
- Frequently asked questions
01Two gaps closed: hired-to-onboarded and placement-to-invoice
In-house teams use the HR push: the moment an offer is accepted, the new starter appears in Odoo HR ready for onboarding, with the details recruitment already captured. Agencies use the invoicing push: a client hire generates a draft invoice in Odoo Accounting carrying the commission figure tracked in the Client CRM. Many Odoo shops use both.
02Your server, your key, your control
Setup is deliberately simple and honest: point Expertini at your Odoo URL and database, supply an API key from your own Odoo user, and the connection is yours. It works with self-hosted installations, Odoo.sh, and Odoo Online alike. Invoices arrive as drafts, so your accounting workflow — taxes, journals, approval — stays exactly as Odoo users configured it.
03Two-way: your Odoo data eases the ATS, and back
The connection also reads your instance, which is where an ERP shop saves real hours. Import pulls your Odoo companies (res.partner) into Expertini's Client CRM as prospect clients — name-matched, nothing overwritten, safe to re-run — and export creates ATS clients as Odoo contacts, deduplicated against what's already there, so sales and recruiting stop maintaining two diverging company lists by hand. The people side goes further: "Import your people" reads Odoo HR's employee directory into the ATS candidate database — not as a dead list, but as records with parsing, search, and resume scoring attached, ready for internal-mobility searches against live roles. Every direction is an explicit button with a created-versus-skipped report, logged on the app's activity page, and governed by the permissions of the Odoo user whose key you supplied.
04Part of the Business plan
ERP connectors — Odoo included — sit in the Business plan, with no per-connection or per-push charges on top of it. The workflow producing the data (offer letters, audit-report PDFs, the hiring pipeline) ships across all plans; the Odoo connection itself is the enterprise-tier piece.
Platform architecture & operations
A1Connection architecture
This is a direct connection to a system you host or key yourself: the form takes your instance URL and credential, verifies them with a live call before anything is saved, and stores secrets encrypted at rest. Connection pages show presence ("connected", "saved ✓"), never the values themselves.
Because the credential is yours, rotation is in your hands: replace the key in your own system, paste the new one here, and the live verification confirms it before the old one is overwritten. Disconnecting removes the stored credential immediately.
A2Write semantics and data flow
Every data movement is an explicit action with a logged result. Writes happen on your click — or automatically only where you enabled a rule (auto-push on hire is off by default, per-provider). Reads — imports of people, accounts, or files — run when you press Import, deduplicate against what you already have (clients by name, people by email), skip rather than overwrite, and report created-versus-skipped honestly, which is why re-running any import is safe by design.
Each action writes a row to the app-activity journal (ats_app_activity): what ran, when, for which record, and the outcome — including the vendor's own error text verbatim when something fails. Usage reporting inside the ATS aggregates that same journal, so integration reporting and integration reality cannot diverge.
Anything that leaves the request path — notification fan-out, webhook delivery, activity journalling, mail — runs in fire-and-forget background threads. A slow external endpoint can never make the interface hang, and a failed side effect is logged rather than silently retried into inconsistency.
A3Operational considerations
Connections are organisation-level and gated to owner and admin roles; recruiters use the features a connection powers but cannot connect, disconnect, or reconfigure. Disconnecting removes stored credentials immediately and stops the dependent features visibly, not silently. Data already imported stays yours and editable.
Imported people arrive marked as imported with conservative privacy defaults — no consent is assumed for anyone who never filled in your application form, and retention defaults apply. Everything written is yours to take: CSV exports and the Data Export app cover the same stores the product itself reads. The exit is as open as the entrance — by design, not concession.
A4Placement in the integration topology
This integration is live in the registry today. One connection per provider unlocks every feature it powers, and the topology grid below shows the neighbouring connectors in the same capability area — statuses come from the same registry that drives the in-app hub, so this page can never claim more than the product does. For anything the catalogue does not cover, Webhooks and Zapier are the generic, documented escape hatch.
Dependency map
Interface blueprint
Interaction flow — states, validations, feedback
Neighbouring connectors — Enterprise Resource Planning
Frequently asked questions
Is the Odoo integration really live now?⌄
Which Odoo hosting types are supported?⌄
Does Expertini store my accounting data?⌄
Are invoices posted automatically?⌄
At a glance
- Live today — connect with your own API key
- Push accepted hires into Odoo HR
- Import Odoo companies as clients · export clients back
- Import Odoo HR people into the scoreable candidate database
- Draft placement invoices in Odoo Accounting
- Works with self-hosted, Odoo.sh, and Odoo Online
- Commission figures from the native Client CRM
- Included in the subscription — no connection fees
See odoo on your own hiring.
Bring a real job description to a 30-minute demo — free trial included.
Book a demo