ml-connector
SAP S/4HANASAP Concur

SAP S/4HANA and SAP Concur integration

SAP S/4HANA runs procurement and finance across your enterprise. SAP Concur manages travel, expense reports, and corporate invoices for employees and approved vendors. Connecting them ensures that expenses and invoices captured in Concur post automatically into S/4HANA's general ledger, vendors stay synchronized across both systems, and cost allocations land on the correct GL accounts and cost centers. Finance closes faster without manual re-keying of expense summaries.

How SAP S/4HANA works

SAP S/4HANA exposes procurement, finance, and master data through OData V2 and OData V4 REST APIs, with endpoints rooted at the tenant-specific base URL https://<tenant-id>-api.s4hana.ondemand.com/sap/opu/odata/sap/<SERVICE_NAME>/. Authentication uses OAuth 2.0 Client Credentials with scopes defined per Communication Arrangement. Key entities include suppliers, purchase orders, supplier invoices, general ledger accounts, cost centers, and journal entries. S/4HANA has no native webhooks; changes are tracked via LastChangeDateTime filters or delta tokens, so polling is required. GL accounts and cost centers are read-only in the API, maintained only within SAP. Tokens are short-lived (typically 12 hours) and must be cached and refreshed before expiry.

How SAP Concur works

SAP Concur provides travel, expense, and invoice management through multi-region REST APIs (https://us.api.concursolutions.com, https://emea.api.concursolutions.com, or https://cn.api.concursolutions.com). OAuth 2.0 uses password grant with credtype=authtoken; the geolocation from the token response determines the API endpoint for all subsequent calls and must not be hardcoded. Key entities are vendors, invoices (payment requests), purchase orders, expense reports, and financial integration documents that map expenses and invoices to GL entries. Concur supports webhooks through the Event Subscription Service for expense reports, invoices, and user changes with at-least-once delivery and built-in retry on transient errors. Access tokens live 1 hour; refresh tokens last 6 months.

What moves between them

The primary flow moves from SAP Concur into SAP S/4HANA. Expense reports and invoices approved in Concur are read via the Financial Integration endpoint and posted into S/4HANA's general ledger as journal entries, allocated to the cost center and GL account specified in the Concur payload. Vendor master data is synchronized in both directions: new or changed vendors in Concur are created as suppliers in S/4HANA, and S/4HANA suppliers are available for selection in Concur. Syncs can run on a schedule or be triggered by Concur webhooks when expense reports or invoices change. Cost centers must exist in S/4HANA before they can be referenced by Concur records.

How ml-connector handles it

ml-connector stores both OAuth credentials encrypted and refreshes them independently on each system. For S/4HANA, it caches the access token and refreshes before the 12-hour window expires to prevent token-expiry failures. For Concur, it reads the geolocation from the OAuth token response and routes all API calls to that region, never hardcoding a base URL, since customers may be distributed across US, EMEA, or China datacenters. It polls S/4HANA on a configurable schedule to check for new vendors and existing GL accounts, and either receives Concur webhook events for expense reports and invoices or polls those separately if webhooks are not enabled. Before posting a journal entry into S/4HANA, it validates that the cost center exists in the S/4HANA cost center master and maps the Concur GL account code to the exact S/4HANA GL Account field. Concur Financial Integration documents are read-only output, so ml-connector never writes expense or invoice details back into Concur. Retries with exponential backoff handle transient errors from both APIs.

A real-world example

A multinational professional services firm with 500 employees runs SAP S/4HANA for procurement and finance across three regions, and uses SAP Concur to manage employee travel and project expenses. Previously, finance staff received a daily export of approved expenses and invoices from Concur, manually validated cost center assignments, and entered the summaries into S/4HANA journals at month-end. With SAP S/4HANA and SAP Concur integrated, each approved expense report or invoice posts automatically to the correct cost center in S/4HANA the same day, vendors are kept in sync so procurement can order from approved Concur vendors, and month-end close starts with all expense journals already booked and reconciled to source documents.

What you can do

  • Post approved expense reports and invoices from SAP Concur into SAP S/4HANA's general ledger as journal entries, allocated to cost centers.
  • Synchronize vendor master data between SAP S/4HANA suppliers and SAP Concur vendors in both directions.
  • Cache and refresh OAuth tokens independently for each system so token expiry does not interrupt the sync.
  • Route Concur API calls to the correct region (US, EMEA, or China) based on the geolocation in the OAuth token response.
  • Validate cost centers exist in S/4HANA before posting journal entries, and track every record in a full audit trail.

Questions

Which direction does data move between SAP S/4HANA and SAP Concur?
The primary flow is from SAP Concur into SAP S/4HANA. Expense reports and invoices approved in Concur post into S/4HANA's general ledger as journal entries. Vendor master data flows in both directions: new vendors in Concur are created as suppliers in S/4HANA, and S/4HANA suppliers are shared with Concur so procurement sees approved vendors.
Why does geolocation from the Concur OAuth token matter?
SAP Concur operates across three regions (US, EMEA, China), each with a different API base URL. The geolocation is embedded in the OAuth token response and must be used for all subsequent API calls. ml-connector extracts and uses it dynamically so your data routes to the correct region automatically, no matter where your company is located.
How does ml-connector prevent token expiry from breaking the integration?
ml-connector caches both the S/4HANA and Concur access tokens and refreshes them before they expire. For S/4HANA, which issues 12-hour tokens, the refresh happens well before the window closes. For Concur, which issues 1-hour tokens, refresh happens mid-life. This ensures continuous sync without outages caused by expired credentials.

Related integrations

Connect SAP S/4HANA and SAP Concur

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

Get started