Sage Intacct and SAP Concur integration
Sage Intacct runs your accounting and finance operations. SAP Concur manages employee travel, expenses, and procurement. Connecting the two keeps your GL in sync with your company's real spending. When an employee submits an expense report or invoice through Concur, ml-connector automatically posts the corresponding GL entry into Intacct, allocated to the correct cost center and GL account. Vendor data and employee master records stay aligned across both systems so every transaction lands on valid dimensions.
What moves between them
The primary flow is SAP Concur into Sage Intacct. When an employee submits an expense report or invoice in Concur, ml-connector receives the event via webhook or polling and extracts the expense or invoice details. The expense or invoice amount is allocated to the GL account and cost center specified in the mapping, and ml-connector posts a journal entry into Intacct's GL via the XML gateway. Employee and vendor master data flow in both directions to ensure that every Concur transaction references valid Intacct dimensions. Concur payment requests and expense reports trigger GL entries immediately; reference data is synchronized on a daily or on-demand schedule.
How ml-connector handles it
ml-connector manages the authentication bridge between the two systems. For SAP Concur it exchanges OAuth2 client credentials and caches the access token; when the token expires, it refreshes using the 6-month refresh token and automatically detects the correct datacenter from the token response. For Sage Intacct it caches the 50-minute session token and automatically re-authenticates by submitting a fresh getAPISession call with the partner and user credentials before the session expires. When an expense report or invoice arrives via Concur webhook, ml-connector immediately parses the event, looks up the GL account and cost center mapping for that employee or cost center, serializes the journal entry as XML, and POSTs it to Intacct's single gateway endpoint with the cached sessionid. If a session expires mid-request, the retry uses a fresh session token. Because Sage Intacct requires uniqueid flags for idempotency on retry, ml-connector generates and stores a deterministic key so retried journal entries do not duplicate on the server. Vendor and employee lookup tables are synchronized daily so the GL mappings always reference valid dimensions.
A real-world example
A mid-sized professional services firm uses SAP Concur to manage employee travel and expense claims and Sage Intacct for accounting and cost allocation. Before the integration, finance staff exported weekly expense reports from Concur and manually created GL entries in Intacct, allocating each expense to the correct client project and cost center. This was error-prone, slow, and delayed month-end close. With SAP Concur and Sage Intacct connected, each approved expense report automatically posts to GL in real-time, allocated to the correct client code and cost center. Reconciliation takes minutes instead of days, and the risk of misallocated expenses vanishes.
What you can do
- Post SAP Concur expense reports and invoices to Sage Intacct GL accounts automatically, allocated to the correct cost centers.
- Sync employee and vendor master data between Concur and Intacct so all transactions reference valid GL dimensions.
- Bridge OAuth2 token refresh and Sage Intacct session management so authentication is transparent and uninterrupted.
- Receive Concur expense events via webhook and post to Intacct with deterministic uniqueid keys to prevent duplicate GL entries on retry.
- Handle Intacct XML constraints and Concur multi-datacenter geolocation, with a full audit trail on every posted entry.
Questions
- Which direction does data move between SAP Concur and Sage Intacct?
- The primary flow is Concur into Intacct. Expense reports, invoices, and payment requests move from Concur into Intacct's GL, mapped to the correct GL accounts and cost centers. Employee and vendor master records are synchronized in both directions so every Concur transaction references a valid Intacct dimension. Concur is the source of truth for expense and invoice data.
- How does ml-connector handle Sage Intacct's XML gateway and session management?
- ml-connector exchanges Intacct credentials for a session token valid for 50 minutes and caches it in-process. The token is automatically refreshed before expiry on the next API call. Journal entries are serialized as XML with deterministic uniqueid fields for server-side deduplication on retry. If a session expires mid-request, the retry uses a fresh session token.
- How does ml-connector handle SAP Concur's multi-datacenter architecture and OAuth2 refresh?
- When ml-connector exchanges SAP Concur OAuth2 credentials, it extracts the datacenter geolocation from the token response and uses that base URL for all subsequent API calls. Access tokens are cached and automatically refreshed using the 6-month refresh token when they expire, so credential rotation happens transparently without manual intervention.
Related integrations
More Sage Intacct integrations
Other systems that connect to SAP Concur
Connect Sage Intacct and SAP Concur
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started