ml-connector
OdooSAP Concur

Odoo and SAP Concur integration

Odoo runs your accounting and purchasing. SAP Concur runs expense, travel, and invoice management. Connecting the two keeps your general ledger aligned with real spending. Expense reports and invoices created in SAP Concur flow into Odoo's accounts payable and general ledger, matched to the right vendors and GL accounts, without re-entry. ml-connector bridges the different APIs and moves the data on the cadence your finance team expects.

How Odoo works

Odoo is an open-source ERP suite available as Odoo Online (SaaS), Odoo.sh (PaaS), or self-hosted. It exposes general ledger accounts, vendors, purchase orders, invoices, and GL dimensions through XML-RPC and JSON-2 REST APIs. Odoo authenticates with an API key paired with username login; the API key is passed in every call to identify the integration user. Cloud instances use custom base URLs (https://<subdomain>.odoo.com or https://<subdomain>.odoo.sh), and self-hosted sites use custom domains. Odoo does not support webhooks at production grade, so finance records are read via polling with a high-water-mark timestamp to find new or changed records.

How SAP Concur works

SAP Concur is a cloud-based travel, expense, and invoice platform that exposes vendors, invoices, expense reports, and financial integration documents through REST APIs across multiple datacenters. Every API call requires OAuth 2.0 client credentials with an access token that lives 1 hour and a refresh token that lasts 6 months. The datacenter is determined dynamically from the token response and must be used for all subsequent calls. SAP Concur can push expense reports, invoices, and vendor events to a registered webhook endpoint via its Event Subscription Service, with at-least-once delivery and retry on errors.

What moves between them

Expense reports and invoices created in SAP Concur flow into Odoo. ml-connector reads SAP Concur's financial integration documents (expense, invoice, payroll, and cashadvance types) and posts them into Odoo's general ledger as account moves, mapped to the correct Odoo GL accounts and vendor records. Vendor records sync in both directions so expense and invoice lines reference valid Odoo vendors. The flow is triggered by SAP Concur webhook events when available, or by polling Odoo's write_date field on a regular schedule.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the SAP Concur side, it exchanges the client credentials and auth token for an OAuth 2.0 access token, and refreshes it when a call returns 401 or when the 1-hour lifetime is reached. The API datacenter is read from the token response on every auth refresh, so regional failover or account migration is handled automatically. On the Odoo side, ml-connector passes the API key and username in each XML-RPC or JSON-2 request. When SAP Concur webhooks are enabled, events trigger the sync immediately; otherwise polling reads new expense reports and invoices from Odoo's purchase and AP modules via high-water-mark filtering. GL account and vendor mappings are configured per customer, so expense lines land on the right accounts and link to the right vendors. ml-connector respects Odoo's access control and field-level encryption, and tracks SAP Concur rate limits (429 errors per datacenter) with exponential backoff.

A real-world example

A mid-sized professional services firm runs Odoo Accounting for AR, AP, GL, and vendor management, and uses SAP Concur for employee travel and expense reporting. Before the integration, the finance team exported monthly expense reports from SAP Concur and re-entered them into Odoo as manual invoices and GL entries, a process that took 3-4 days after month-end close and introduced re-entry errors. With Odoo and SAP Concur connected, each approved expense report and invoice syncs into Odoo's AP module automatically, mapped to the correct GL accounts and employee cost centers. The month-end close now starts with all expenses already posted, and the manual re-entry step is eliminated.

What you can do

  • Post SAP Concur expense reports and invoices into Odoo as GL entries and purchase invoices, mapped to the correct accounts and vendors.
  • Sync vendor records between SAP Concur and Odoo so expenses and invoices reference valid vendors in both systems.
  • Authenticate SAP Concur with OAuth 2.0 token refresh and Odoo with API key login, handling each system's credential lifecycle.
  • Receive expense and invoice notifications via SAP Concur webhooks or poll Odoo on a regular schedule, with automatic retry on errors.
  • Track and respect both systems' access control, rate limits, and data validation rules on every transaction.

Questions

Does the integration require me to enable SAP Concur webhooks?
No. ml-connector can poll Odoo's records on a regular schedule if webhooks are not available or enabled. Webhooks speed up the sync (events trigger immediately instead of waiting for the next poll cycle), but are optional. If you do enable SAP Concur's Event Subscription Service, ml-connector will use webhook notifications and fall back to polling for any records missed in the window between webhook delivery.
How does the integration handle SAP Concur's multiple datacenters?
SAP Concur determines the datacenter (US, EMEA, or China) at OAuth token generation time. ml-connector reads the datacenter from the token response on every refresh and uses it for all subsequent API calls. If your account is migrated between regions or you add a new datacenter, the integration automatically detects and routes to the correct endpoint without manual reconfiguration.
Which Odoo editions support this integration?
The integration requires Odoo's Custom pricing plan (not available on the free or Standard tiers) so the API can be accessed externally. Odoo Online, Odoo.sh, and self-hosted editions are all supported as long as the Custom plan is active. Ensure the API key and username are set for the integration user, and that the user has access rights to the GL accounts, vendors, and invoice records that ml-connector will read and write.

Related integrations

Connect Odoo and SAP Concur

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

Get started