Odoo
INTEGRATIONS · EXPERTINI ATS

Odoo

Connect your own Odoo server and push new hires to Odoo HR and draft placement invoices — live today, with your own API key.

2 min read · Updated July 2026 · Expertini Editorial

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.

Watch the 30-second overview — no sign-up needed

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.

Engineering notes

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

Connection typedirect — your instance URL + credential, verified live before save
Secrets at restencrypted; UI shows presence flags, never values
Action journalats_app_activity — one row per action, vendor errors verbatim
Auto-push rulesoff by default, per-provider, every run logged
Registry statuslive

Interface blueprint

Structural schematic of the surface — panels, hierarchy, and interaction affordances. A contract, not a screenshot.
Connection card
● connected — presence flag
scopes: minimum required disconnect
Actions
push — explicit clickimport — deduplicated
Activity journal
Fig. 1 — Odoo: structural interface schematic. Panels and states are the contract; data shown is placeholder.

Interaction flow — states, validations, feedback

Every state below is enforced server-side; the interface reports it, it doesn't decide it.
Enter URL + credentialyour own instance, your own key
Live verificationa real call must succeed before anything is stored
Encrypted storesecrets at rest; presence-flag display
Explicit actionspush / import / invoice on your click
Journalper-action row, vendor errors verbatim
Verification fails → the vendor's own response is shown; nothing savedCredential rotated → paste the new one; verified before overwriteDisconnect → credential removed immediately
Fig. 2 — interaction flow: navy = states, gold = server-enforced gates, green = confirmed outcomes; tags list the edge cases and their feedback.

Neighbouring connectors — Enterprise Resource Planning

Statuses come from the live registry — browse the full catalogue →

Frequently asked questions

Is the Odoo integration really live now?
Yes. Connect your own Odoo server from the in-app hub after signing in, using an API key generated in your Odoo instance.
Which Odoo hosting types are supported?
Self-hosted servers, Odoo.sh, and Odoo Online — the connection is made to your instance URL and database with your API key.
Does Expertini store my accounting data?
No. Expertini pushes hire and draft-invoice data into your Odoo; your books remain in your Odoo instance under your control.
Are invoices posted automatically?
No — they are created as drafts in Odoo Accounting so your finance team reviews and posts them under your normal workflow.

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
Expertini AI
Online now
Hi! I'm Expertini's AI Product Expert. Ask me anything about our solutions, get guidance on any of our Hiring Tools, or just tell me what you're trying to do — I'll point you in the right direction. For account-specific issues, email support@expertini.com.