ml-connector
Sage 50SAP Concur

Sage 50 and SAP Concur integration

Sage 50 runs accounting on premise. SAP Concur manages travel, expense, and invoice processes in the cloud. Connecting the two keeps your expense reports and vendor invoices synchronized between the two systems. Invoices submitted through SAP Concur post into Sage 50's general ledger without manual re-keying, and purchase orders flow from SAP Concur into Sage 50 for budget control. ml-connector bridges the local SDK authentication that Sage 50 requires and the OAuth2 cloud API that SAP Concur uses, moving the data on a schedule you control.

How Sage 50 works

Sage 50 is a desktop-installed accounting application sold in US and UK regional editions. Both editions expose vendors, purchase orders, invoices, general journal entries, and accounts through a local Windows SDK that requires direct access to company data files on the same machine or LAN. The US edition uses the Sage 50 .NET SDK with ApplicationID, CompanyPath, username, and password. The UK edition uses Sage Data Objects COM libraries with DataPath, username, and password. Authentication is Windows-local; there are no API keys, bearer tokens, or token expiry. Sage 50 has no webhook system, so expense reports and invoices are read by polling the modified-date on expense transactions and vendor invoices.

How SAP Concur works

SAP Concur is a cloud REST API platform for expense reports, invoices, purchase requests, and vendors. The API uses OAuth2 with client credentials and a company-level auth token that is exchanged once for an access token. The geolocation in the token response determines the regional base URL for all subsequent calls (us.api.concursolutions.com, emea.api.concursolutions.com, or cn.api.concursolutions.com). Access tokens expire in one hour and are refreshed with a 6-month refresh token. SAP Concur also supports webhooks via the Event Subscription Service for expense reports, invoices, and purchase orders, with at-least-once delivery and retry on transient errors. Each application can have up to 5 active event subscriptions.

What moves between them

Invoices and purchase orders flow from SAP Concur into Sage 50. After expenses are approved in SAP Concur, ml-connector reads the invoice payload and creates a purchase invoice in Sage 50, mapped to the matching vendor and GL account. Purchase orders submitted through SAP Concur's workflow are pulled into Sage 50 and matched against the chart of accounts so the cost centers and project codes align. Vendor records are aligned in both directions so expenses land against valid vendors in Sage 50. The flow runs either on a fixed schedule or in response to webhook notifications from SAP Concur, whichever you prefer for your approval cadence.

How ml-connector handles it

ml-connector stores Sage 50 SDK credentials encrypted and connects to the local Windows SDK with the ApplicationID, CompanyPath, and username for US editions, or DataPath and username for UK editions. On the SAP Concur side, it exchanges the company-level auth token for an access token, reads the geolocation in the token response, and uses that to route all subsequent REST calls to the correct regional endpoint. The access token is refreshed when it expires, and the refresh token is stored securely. Because Sage 50 has no webhooks, ml-connector either polls on a fixed cadence (every 5 to 15 minutes) or subscribes to SAP Concur's Event Subscription Service for push notifications, and uses both streams to detect new or updated invoices and purchase orders. When reading from SAP Concur, ml-connector extracts the vendor, GL account mapping, and expense amounts, looks up the matching vendor in Sage 50, and creates a purchase invoice with the correct general ledger impact. All transactions carry a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized services company runs Sage 50 on premise for accounting and uses SAP Concur in the cloud for employee travel and expense management across three regional offices. Before the integration, the accounting team exported expense reports from SAP Concur each week and manually re-entered approved invoices into Sage 50's vendor ledger, a process that often took 2 to 3 days after approval and introduced keying errors. With Sage 50 and SAP Concur connected, approved invoices flow automatically from SAP Concur into Sage 50's general ledger at the end of each approval cycle, allocated to the correct cost center and vendor, and the manual re-keying step is eliminated. The company can now close its books faster and reduces the accounting labor spent on invoice entry.

What you can do

  • Move approved invoices from SAP Concur into Sage 50 as purchase invoices, mapped to the correct vendor and general ledger account.
  • Synchronize purchase orders submitted in SAP Concur with Sage 50 so cost centers and project codes align.
  • Authenticate Sage 50 with local SDK credentials (Windows username and password) and SAP Concur with OAuth2, handling token refresh automatically.
  • Receive push notifications from SAP Concur via Event Subscription Service, or poll on a fixed schedule, depending on your approval workflow.
  • Carry a full audit trail on every invoice and order, so transactions can be replayed if a downstream system call fails.

Questions

Which direction does data move between Sage 50 and SAP Concur?
Invoices and purchase orders flow from SAP Concur into Sage 50. Vendor records are aligned in both directions so expense entries land against valid vendors in Sage 50. Sage 50 general ledger accounts are read-only, so ml-connector never writes back to the chart of accounts.
How does ml-connector authenticate with Sage 50 if it is desktop-installed on premise?
ml-connector stores the Sage 50 SDK credentials encrypted and runs a Windows process that connects to the local SDK using the ApplicationID and CompanyPath (for US editions) or DataPath (for UK editions), along with the Windows username and password. The integration requires a Windows machine with Sage 50 installed and the SDK available on the same LAN.
Does ml-connector use polling or webhooks to detect new invoices in SAP Concur?
ml-connector can do both. It can subscribe to SAP Concur's Event Subscription Service to receive push notifications when invoices are approved, or it can poll on a fixed schedule (5 to 15 minutes) if you prefer. The choice depends on how quickly you need invoices to appear in Sage 50 after approval.

Related integrations

Connect Sage 50 and SAP Concur

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

Get started