Xero and SAP Concur integration
Xero runs accounting and accounts payable for small and medium businesses. SAP Concur runs travel, expense, and invoice management. Connecting the two keeps your expense records and financial ledger in sync. Expense reports and invoices processed in SAP Concur flow into Xero automatically, matched to the correct vendor and GL account, without manual re-entry. ml-connector handles the different OAuth2 flows, geolocation routing, and webhook delivery on each side.
What moves between them
The main flow runs from SAP Concur into Xero. After expense reports and invoices are approved in SAP Concur, ml-connector reads the associated Financial Integration Documents (expense, invoice, and payroll types) and posts them into Xero as manual journal entries, mapped to the matching Xero GL accounts and tracked by Tracking Categories if configured. Vendor records and payment requests from SAP Concur align with Xero contacts and invoices so expense allocations land on existing vendors. The flow is primarily one-way, from SAP Concur into Xero's general ledger; Xero invoices do not flow back into SAP Concur.
How ml-connector handles it
ml-connector stores both credential sets encrypted and handles the separate OAuth2 flows for each system. For SAP Concur, it reads the geolocation from the token response and routes all subsequent API calls to the correct datacenter endpoint (us.api.concursolutions.com, emea.api.concursolutions.com, or cn.api.concursolutions.com). It refreshes the 1-hour SAP Concur access token before it expires. For Xero, it includes the Xero-tenant-id header on every call and respects the 5-concurrent-call and 60-per-minute rate limits. ml-connector subscribes to SAP Concur webhooks for expense reports and invoices; when a webhook is received, it fetches the full Financial Integration Document and posts it to Xero as a manual journal. Because SAP Concur webhooks contain metadata only, each event requires a follow-up API call to fetch the complete record. If webhook delivery is unavailable, ml-connector falls back to polling both systems on a schedule tied to your expense approval cycle. Every record carries a full audit trail, and if a downstream post to Xero fails, the job is retained for replay.
A real-world example
A mid-sized professional services firm runs Xero for general accounting and AP, and uses SAP Concur for travel and expense management across three offices. Before the integration, the accounting team exported approved expense reports from SAP Concur each week, coded them to the correct GL accounts and cost centers in a spreadsheet, and manually entered the journal entries into Xero. Reconciliation at month-end was error-prone because coded amounts did not always match Xero GL balances. With Xero and SAP Concur connected, each approved expense report and invoice flows into Xero as a journal entry automatically, routed to the correct cost center, and the GL is always current. Manual entry and reconciliation rework are eliminated.
What you can do
- Post approved expense reports and invoices from SAP Concur into Xero as manual journal entries, mapped to the correct GL accounts.
- Sync vendor records and payment requests between SAP Concur and Xero contacts so expenses allocate to valid vendors.
- Handle SAP Concur geolocation routing and 1-hour token refresh without manual intervention.
- Subscribe to SAP Concur webhooks for expense reports and invoices, with polling fallback if webhooks are unavailable.
- Maintain a full audit trail of every document, with replay capability if a downstream post to Xero fails.
Questions
- Which direction does data flow between Xero and SAP Concur?
- The main flow is from SAP Concur into Xero. Approved expense reports, invoices, and financial integration documents move from SAP Concur into Xero as manual journal entries, mapped to the correct GL accounts and vendors. Reference data such as vendors and employees are aligned in both directions. Xero invoices and payments do not flow back into SAP Concur.
- How does the integration handle SAP Concur's multi-datacenter architecture?
- ml-connector reads the geolocation from the SAP Concur token response and routes all subsequent API calls to the correct datacenter endpoint (us, emea, or cn). Hardcoding a base URL will cause requests to fail. ml-connector automatically detects geolocation on each token refresh, so datacenter migrations or new tenants are handled without reconfiguration.
- What happens if SAP Concur webhooks are unavailable or delayed?
- ml-connector subscribes to SAP Concur webhooks for real-time updates but also polls both systems on a schedule if webhooks are not received. Because SAP Concur webhooks contain metadata only, ml-connector fetches the full Financial Integration Document on each event. If a post to Xero fails, the job is retained in the queue for retry and can be manually replayed from the audit log.
Related integrations
More Xero integrations
Other systems that connect to SAP Concur
Connect Xero and SAP Concur
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started