ml-connector
Sage 100SAP Concur

Sage 100 and SAP Concur integration

Sage 100 manages your accounting and purchasing on premises. SAP Concur handles travel and business expenses in the cloud. Connecting them ensures that approved expenses from SAP Concur flow into Sage 100's accounts payable and general ledger without manual re-entry. Employee reimbursements and vendor invoices processed in SAP Concur are allocated to the correct GL accounts and departments in Sage 100, and approval workflows in each system stay independent.

How Sage 100 works

Sage 100 is an on-premises ERP exposing accounts payable vendors, invoices, GL accounts, journal entries, and purchase orders through a local Windows agent. The agent wraps either COM-layer BOI (Business Object Interface) for full access to AP, GL, and PO data, or SOAP web services at the customer's server URL for a limited Sales Order and Customer surface. Authentication uses Windows service account credentials for the agent plus additional credentials passed per transaction. Sage 100 has no webhooks or event stream, so data is retrieved by polling with date-based filters on the local agent.

How SAP Concur works

SAP Concur exposes vendors, invoices, payment requests, expense reports, and financial integration documents through REST APIs served from geolocation-specific cloud URLs. Authentication uses OAuth2 with a 24-hour initial auth token and one-hour access tokens, refreshed via a six-month refresh token. SAP Concur supports event webhooks for expense reports and payment requests with mutual TLS certificate validation and at-least-once delivery. The Financial Integration API provides read-only access to settled expense and invoice records for GL posting.

What moves between them

After an expense report or payment request is approved in SAP Concur, ml-connector reads the financial integration document payload, extracts vendor, amount, and coding (cost center, department, GL account), and submits an AP invoice into Sage 100's local agent. The invoice is routed to the matching GL account and cost center using the expense coding from SAP Concur. Because Sage 100 tracks expense reports and invoices separately for audit, each SAP Concur record includes a unique identifier for deduplication. Data flows one-way from SAP Concur into Sage 100, with no write-back to SAP Concur.

How ml-connector handles it

ml-connector stores OAuth2 credentials for SAP Concur and the local Sage 100 agent address and credentials encrypted in the database. It subscribes to the SAP Concur Event Subscription Service for expense report and invoice topics, receives webhook notifications over mutual TLS, and fetches the full financial integration document from the SAP Concur API using the event payload reference. The geolocation base URL is extracted from the initial OAuth2 token response and cached per customer so all subsequent calls use the correct regional endpoint. For Sage 100, ml-connector connects to the customer's local agent address, sends AP invoice create commands over the agent transport layer, and maps SAP Concur GL codes and cost centers to the multi-segment Sage 100 GL account format (e.g. 4000-01-00) per the customer's chart of accounts. Duplicate detection uses the SAP Concur expense report or invoice ID to prevent re-posting if the webhook is delivered more than once. SAP Concur access tokens expire after one hour, so ml-connector refreshes before each request and retries on 401. The local agent has COM record-locking contention on high-volume writes, so ml-connector backs off and retries on lock-timeout responses.

A real-world example

A mid-sized professional services firm runs Sage 100 for accounting and procurement on premises and uses SAP Concur for employee travel and expense management across multiple offices. Before the integration, finance staff retrieved approved expense reports from SAP Concur weekly, coded them to cost centers and GL accounts, and manually entered each as an AP invoice into Sage 100, a process that took a day or more and was error-prone. With Sage 100 and SAP Concur connected, approved expenses flow into AP automatically and are posted to the correct GL accounts and departments without re-keying. Month-end close is faster because the expense accrual is already in Sage 100, and the reconciliation between SAP Concur and the GL is complete by the time the books close.

What you can do

  • Read approved expense reports and payment requests from SAP Concur and post them into Sage 100 accounts payable with automatic GL and cost center allocation.
  • Bridge SAP Concur OAuth2 authentication and the Sage 100 local agent transport layer so credentials are stored once and refreshed as needed.
  • Receive expense notifications via SAP Concur webhooks with mutual TLS certificate validation and fetch the full document from the Financial Integration API.
  • Map SAP Concur GL codes and cost centers to multi-segment Sage 100 GL account formats and vendor records to avoid duplicate or invalid postings.
  • Track each incoming expense by its SAP Concur ID to prevent duplicate AP invoices even if webhook notifications are delivered multiple times.

Questions

Which direction does data move between Sage 100 and SAP Concur?
Data flows from SAP Concur into Sage 100. Approved expense reports and payment requests are read from SAP Concur and posted into Sage 100's accounts payable and general ledger. Vendor and GL account setup is maintained in Sage 100; SAP Concur does not receive write-back from the ERP.
How does ml-connector handle Sage 100's local agent requirement?
Sage 100 is on-premises only and requires a local Windows agent to expose data via COM or SOAP. ml-connector stores the customer's agent address and credentials encrypted and routes all Sage 100 requests through that agent. The agent itself is managed and monitored by the customer as part of their Sage 100 deployment.
What happens if an expense report is approved again in SAP Concur or a webhook is delivered twice?
ml-connector uses the unique SAP Concur expense or invoice ID to detect duplicates and will not post the same record twice into Sage 100 accounts payable. If the webhook is retried, the second attempt is recognized as a duplicate and discarded, preserving the integrity of the AP ledger.

Related integrations

Connect Sage 100 and SAP Concur

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

Get started