Sage 300 and SAP Concur integration
Sage 300 runs your accounts payable, accounts receivable, and general ledger. SAP Concur runs travel and expense reporting. Keeping them connected ensures that vendors and cost centers in Sage 300 match the accounts and dimensions in SAP Concur, and that approved expense and invoice transactions flow from SAP Concur back into your GL without re-entry. ml-connector handles the different authentication schemes and synchronizes the data on a schedule you control.
What moves between them
The main flow is bidirectional. Sage 300 AP vendors and GL accounts are polled on a daily schedule and synced to SAP Concur as vendor and GL mapping data. When expense reports and invoices are marked paid in SAP Concur, ml-connector reads the Financial Integration documents (which capture the GL impact of each approved transaction) and posts them into Sage 300 as GL journal batches, allocated to the correct GL accounts and segments. Sage 300 is pull-only, so ml-connector initiates all reads from Sage 300; SAP Concur can push events via webhooks, or ml-connector can poll if webhooks are unavailable.
How ml-connector handles it
ml-connector stores Sage 300 Basic Auth credentials encrypted and includes them with every request, using uppercase formatting for both username and password as Sage 300 requires. It handles SAP Concur's OAuth 2.0 token refresh cycle, refreshing the access token when calls return 401, and uses the geolocation hint from the OAuth response to route all subsequent API calls to the correct SAP Concur datacenter. Because Sage 300 is self-hosted with no webhooks, ml-connector polls on a schedule you configure, using OData date filters to retrieve only changed records. SAP Concur webhooks push changes as they occur, but ml-connector can fall back to polling if webhook delivery is unavailable. When syncing expense and invoice journals back into Sage 300, ml-connector maps SAP Concur GL accounts and cost centers to the matching Sage 300 GL accounts and segments, and submits them as GL journal batches that Sage 300 batch APIs accept. Both directions include automatic retries for transient failures and 429 rate-limit responses, and every record carries a full audit trail.
A real-world example
A mid-sized distributor runs Sage 300 on-premise for AP, AR, and GL operations, and uses SAP Concur for employee travel and expenses across three regional offices. Before integration, the finance team received approved expense reports from SAP Concur and manually entered each journal entry into Sage 300's GL at month-end, a process that took 2 to 3 days and introduced frequent data-entry errors. With Sage 300 and SAP Concur connected, vendor master data stays synchronized between systems, and each approved expense report's GL impact flows automatically into Sage 300 as a GL journal batch at the moment of approval, eliminating the manual month-end re-entry step and ensuring GL accounts are always accurate.
What you can do
- Poll Sage 300 AP vendors and GL accounts on a schedule and sync them to SAP Concur for vendor validation and GL mapping.
- Read approved expense reports and invoices from SAP Concur and post the associated GL journals into Sage 300 GL, mapped to the correct GL accounts and segments.
- Authenticate Sage 300 with HTTP Basic Auth (credentials encrypted) and SAP Concur with OAuth 2.0, handling token refresh and datacenter routing.
- Receive webhook notifications from SAP Concur when expenses and invoices change, or fall back to scheduled polling when webhooks are unavailable.
- Track every vendor sync, expense journal post, and error in a full audit trail, with automatic retries on transient failures and rate limits.
Questions
- Which direction does data move between Sage 300 and SAP Concur?
- Sage 300 vendors and GL accounts are read from Sage 300 and synced to SAP Concur so that approved expenses post to valid GL accounts and cost centers. Approved expense reports and invoices flow from SAP Concur to Sage 300, where ml-connector posts them as GL journal batches. This bidirectional flow keeps both systems aligned and eliminates manual GL entry.
- How does ml-connector handle Sage 300's self-hosted architecture and lack of webhooks?
- Because Sage 300 is on-premise with no webhook system, ml-connector polls the Sage 300 API on a schedule you configure, using OData date filters to retrieve only changed records since the last poll. The customer must expose their Sage 300 IIS server over HTTPS. SAP Concur sends push notifications via webhooks where available, but ml-connector can also poll SAP Concur if webhook delivery is unavailable.
- Does the Sage 300 Basic Auth credential require special handling?
- Yes. Sage 300 requires HTTP Basic Authentication with both username and password in uppercase. ml-connector stores these credentials encrypted and formats them correctly on every request. The API user must be created in Sage 300 Administrative Services with Web API security group permissions before integration begins.
Related integrations
More Sage 300 integrations
Other systems that connect to SAP Concur
Connect Sage 300 and SAP Concur
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started