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.
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
More Odoo integrations
Other systems that connect to SAP Concur
Connect Odoo and SAP Concur
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started