ml-connector
OdooWorkday HCM

Odoo and Workday HCM integration

Odoo runs accounting and HR. Workday HCM runs enterprise workforce management and payroll. Connecting the two keeps your employee roster and GL accounts aligned across both systems. New hires and terminations in Workday sync into Odoo's HR module and maintain cost center mappings so payroll data lands on the correct GL accounts. ml-connector handles the very different authentication methods on each side and moves data on a schedule you control.

How Odoo works

Odoo is available as Odoo Online (SaaS), Odoo.sh (PaaS), or self-hosted. It exposes employees, GL accounts, cost centers, purchase orders, accounting moves, and payments through XML-RPC over HTTP POST to instance-specific URLs like https://<subdomain>.odoo.com/xmlrpc/2/, or through JSON-2 REST on Odoo 19+. Odoo authenticates with an API key paired with a username, called once to obtain a user ID in XML-RPC, then included in every subsequent call. Outgoing webhooks exist via Automated Actions on Enterprise with Studio, but polling with high-water-mark timestamps is the production standard.

How Workday HCM works

Workday HCM exposes workers, positions, organizations, GL accounts, cost centers, compensation, and accounting journals through both REST and SOAP APIs, each with different authentication. REST API uses OAuth2 with a 60-minute access token and a long-lived refresh token. SOAP API uses WS-Security UsernameToken with an Integration System User (ISU) account. Financial and payroll data requires SOAP; REST covers only HCM and staffing. Workday does not support native webhooks, so integrations must poll on a schedule; minimum 5 minutes is recommended. HTTP 429 with Retry-After headers enforces rate limits.

What moves between them

The main flow runs from Workday into Odoo. Worker records from Workday are mapped to Odoo HR employees, with position and organization data flowing into Odoo cost centers and departments. GL accounts and cost centers are aligned in both directions so payroll allocations and accounting journals land on valid Odoo GL accounts. Compensation and payroll journal data flow from Workday into Odoo's accounting module on a schedule tied to your payroll calendar. Purchase orders and supplier invoices remain read-only in Workday, so ml-connector does not write financial entries back into payroll.

How ml-connector handles it

ml-connector stores both credential sets encrypted and uses Workday's OAuth2 refresh token to obtain fresh access tokens when the 60-minute expiry approaches. For SOAP calls on Odoo's side, it presents WS-Security credentials and handles Workday's ISU authentication transparently. On the Odoo side it accepts the full instance URL (https://<subdomain>.odoo.com or self-hosted) and uses the API key with bearer token or XML-RPC authentication depending on the Odoo version. Because Workday is poll-only and Odoo webhooks are not production-grade, ml-connector polls both systems on a schedule tied to your payroll calendar rather than relying on a push. Cost centers and GL accounts are mapped first, so every payroll journal line references a GL account and cost center that already exists in Odoo. When Workday rate limits return HTTP 429, ml-connector backs off according to the Retry-After header and retries. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A multinational services company runs Odoo for accounting and procurement across four countries and uses Workday HCM for global payroll and workforce management. Before the integration, the finance team pulled headcount from Workday, reconciled it monthly with Odoo HR, and manually mapped each country's payroll costs to the correct GL accounts and cost centers in Odoo. With Odoo and Workday connected, each payroll run's worker data and GL journals flow into Odoo automatically, cost centers are pre-mapped, and the headcount and GL accounts stay in agreement. Month-end close no longer requires manual reconciliation, and the team spots headcount changes in Odoo as soon as they happen in Workday.

What you can do

  • Sync Workday workers into Odoo HR employees with position and organization data mapped to cost centers and departments.
  • Pull GL accounts and cost centers from Workday and align them in Odoo so payroll allocations land on valid accounts.
  • Post Workday accounting journals into Odoo's GL after each payroll run, allocated to the correct cost centers.
  • Authenticate Workday with OAuth2 REST API or SOAP WS-Security, and Odoo with API key bearer token or XML-RPC.
  • Poll on a schedule tied to your payroll calendar, with retries and a full audit trail on every record.

Questions

Which direction does data move between Odoo and Workday HCM?
The main flow is Workday into Odoo. Workers, GL accounts, cost centers, and payroll GL journals move from Workday into Odoo. Odoo reference data such as departments and GL accounts can be synchronized in both directions so payroll allocations land on valid GL accounts. Workday financial and payroll data are read-only, so ml-connector does not write financial entries back into Workday.
Does ml-connector support both Workday REST and SOAP APIs?
Yes. ml-connector uses Workday's SOAP API for financial and payroll data since REST covers only HCM and staffing. For workers and organizational data, it can use either REST with OAuth2 or SOAP with WS-Security credentials, depending on your Workday ISU setup. OAuth2 access tokens expire in 60 minutes, so ml-connector refreshes them automatically when needed.
How does the integration handle Odoo's multiple deployment options and API versions?
ml-connector accepts the full Odoo instance URL for Online (https://<subdomain>.odoo.com), Odoo.sh, or self-hosted deployments. It supports both XML-RPC (all Odoo versions) and JSON-2 REST (Odoo 19+). Because Workday has no webhooks and Odoo webhooks require Enterprise with Studio, ml-connector polls both systems on a schedule you control tied to your payroll calendar.

Related integrations

Connect Odoo and Workday HCM

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started