Odoo and Deel integration
Odoo runs your finance and HR. Deel runs your global payroll and compliance across 150+ countries. Connecting the two ensures your general ledger reflects the true cost of labor and your employee records in Odoo stay aligned with Deel contracts, onboarding, and terminations. New contractors and employees in Deel flow to Odoo, and the invoice totals from each payroll cycle post into Odoo's general ledger without manual re-entry.
What moves between them
The main flow is Deel into Odoo. Each payroll cycle, ml-connector reads Deel invoices (which aggregate costs by contract and country), maps those costs to Odoo's analytical accounts (cost centers) and expense accounts, and posts the totals as journals into Odoo's general ledger. Employee and contractor records flow from Deel into Odoo; new contracts trigger new hr.employee records or update existing ones with current status and cost allocations. Reference data such as cost center mapping and expense account assignment is configured per customer.
How ml-connector handles it
ml-connector stores the Deel Organization Token encrypted and presents it as a Bearer token on each REST call, refreshing when an endpoint returns 401. On the Odoo side it accepts the full instance URL (Odoo Online, Odoo.sh, or self-hosted) and validates that the API key is active before writing. Because Odoo webhooks are not production-grade, ml-connector polls Deel on a schedule tied to your payroll calendar rather than relying on Deel webhooks; if webhooks are enabled, ml-connector can also listen to contract and termination events. Before posting a journal into Odoo, ml-connector maps each Deel cost to the correct analytical account (cost center) so the journal lines reference accounts that already exist. Deel rate limits are handled with exponential backoff and Retry-After headers. Every record carries an audit trail and can be replayed if a downstream call fails. Odoo's XML-RPC API includes the authenticated user's access rights and record rules, so ml-connector respects the integration user's Odoo permissions.
A real-world example
A mid-sized professional services firm uses Odoo to manage projects, purchasing, and finance, and uses Deel to handle payroll, contractor invoicing, and benefits across three countries. Before the integration, the finance team received Deel invoices and contractor cost reports each month, then manually distributed the labor costs across Odoo's project cost centers and posted them to the expense accounts in the general ledger. This took 2 to 3 days and often contained re-keying errors. With Odoo and Deel connected, invoices flow automatically into Odoo at the end of each payroll cycle, allocated to the correct project cost centers, and the ledger is ready for close with no manual distribution step.
What you can do
- Post Deel invoice totals and contractor payroll costs into Odoo's general ledger each cycle, mapped to the correct cost centers.
- Keep Odoo employee and contractor records in sync with Deel contracts, onboarding, and terminations.
- Map Deel costs to Odoo analytical accounts (cost centers) and expense accounts so labor costs land on the right GL dimensions.
- Authenticate Deel with Bearer tokens and Odoo with XML-RPC or JSON-2 login and API key.
- Poll Deel on a payroll cadence, handle rate limits with exponential backoff, and maintain a full audit trail on every record.
Questions
- Which direction does data move between Odoo and Deel?
- The main flow is Deel into Odoo. Payroll invoices and employee records move from Deel into Odoo's general ledger and HR module. Cost allocation and expense account mapping are configured per customer so invoices land on the correct dimensions. Odoo employee records are read and updated to reflect Deel contracts and terminations.
- How does ml-connector handle the differences between Deel's global payroll model and Odoo's general ledger?
- ml-connector maps Deel invoices (which aggregate costs by contract, country, and currency) to Odoo analytical accounts (cost centers) and expense accounts defined during setup. Each invoice line is split across cost centers based on the contract's allocation, and the journal is posted in the currency and period that matches the Odoo accounting calendar.
- Why does ml-connector poll Deel instead of relying on Deel webhooks?
- Odoo's webhook system (Automated Actions and Studio) is not production-grade and lacks HMAC signature headers. Deel webhooks are reliable but Odoo cannot consume them safely. ml-connector polls Deel on a schedule tied to your payroll calendar instead, and can also listen to Deel webhook events if they are enabled in Deel's settings.
Related integrations
More Odoo integrations
Other systems that connect to Deel
Connect Odoo and Deel
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started