ml-connector
QADSAP Concur

QAD and SAP Concur integration

QAD runs manufacturing, procurement, and finance. SAP Concur runs travel, expense, and invoice capture. Connecting the two means approved invoices and expense reports captured in SAP Concur post into QAD as supplier invoices and general ledger journals without re-keying. QAD supplier records flow the other way so coders in SAP Concur select valid vendors, and ml-connector sends posting results back to SAP Concur so each document is marked as recorded in the ERP. The integration manages the very different APIs on each side and moves data on a schedule you control.

How QAD works

QAD Adaptive ERP exposes suppliers, purchase orders, supplier invoices, GL accounts, cost centers, items, goods receipts, and AP payments through REST business document APIs, documented in Swagger inside each customer instance. The cloud product authenticates with a JWT session or OAuth2 bearer token against a tenant-specific URL, so there is no shared hostname or public sandbox. Supplier invoices run a three-way match against PO receipts, so goods receipts must post before an invoice. Older on-premise sites run QAD Enterprise Edition with the QXtend SOAP framework, and QAD cloud has no native webhook system, so finance records are read by polling.

How SAP Concur works

SAP Concur exposes expense reports, payment request invoices, purchase orders, purchase requests, and vendors through its Developer Center REST APIs, mostly JSON with some older v3.0 paths defaulting to XML. Authentication is OAuth2 using a company-level password grant bootstrapped from a one-time App Center auth token, with a one-hour access token and a six-month refresh token, and all calls use the geolocation base URL returned at login. The Financial Integration v4 service is the purpose-built endpoint for ERP sync, returning approved documents ready for posting and accepting acknowledgements and posting confirmations back. SAP Concur also offers the Event Subscription Service, a real webhook system that pushes status changes with a Concur-Signature header.

What moves between them

The main flow runs from SAP Concur into QAD. ml-connector reads approved invoices and expense reports from the SAP Concur Financial Integration v4 endpoint and creates matching supplier invoices and GL journals in QAD, then posts the posting result back to SAP Concur so the document is marked as recorded. QAD supplier master data flows the other direction into SAP Concur vendors so expense coders and invoice processors select existing suppliers. Vendor codes, cost centers, and GL accounts are aligned in both directions so each line lands on a valid QAD dimension. SAP Concur PO numbers, assigned by Concur on approval, travel with the document so QAD can match against the originating purchase order.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the SAP Concur side it exchanges the one-time App Center auth token for a refresh token on first connect, then rotates the one-hour access token autonomously and re-authorizes only if the six-month refresh token lapses. It reads the geolocation from the token response and uses that base URL for every call rather than a hardcoded host. On the QAD side it accepts the full tenant URL per customer, since QAD publishes no shared base address, and validates entity paths against that instance. Because QAD cloud is pull-only and SAP Concur exposes a polling endpoint built for ERP sync, the connector polls Financial Integration v4 for READY documents on a schedule, acknowledges them, and confirms posting once the QAD write succeeds, which protects against double-processing since Concur reports previously acknowledged documents. The QAD three-way match is respected so an invoice is created only after its receipt exists, and where flows need near-real-time triggers the Event Subscription Service can notify on approval. Concur write endpoints carry no idempotency key, so ml-connector tracks the returned document ID before re-submitting, and it backs off on HTTP 429 and 503 with exponential backoff and jitter. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized contract manufacturer runs QAD Adaptive ERP for production, procurement, and AP, and uses SAP Concur for employee expenses and supplier invoice capture across several sites. Before the integration, the AP team exported approved invoices and expense reports from SAP Concur and re-keyed them into QAD line by line, often coding to suppliers or accounts that did not match, then reconciled which Concur documents had actually posted by hand. With QAD and SAP Concur connected, each approved document flows into QAD as a supplier invoice or journal against the right vendor and cost center, QAD supplier records keep Concur coding accurate, and posting confirmations flow back so nothing is entered twice. The AP backlog shrinks and month-end close starts with the payables already reconciled.

What you can do

  • Post approved SAP Concur invoices and expense reports into QAD as supplier invoices and GL journals without re-keying.
  • Send posting confirmations back to SAP Concur through Financial Integration v4 so each document is marked as recorded in the ERP.
  • Push QAD supplier master data into SAP Concur vendors so coders select valid suppliers.
  • Bridge SAP Concur company-level OAuth and the QAD tenant-specific token, rotating the Concur access token automatically.
  • Respect the QAD three-way match and poll Financial Integration v4 on a schedule, with retries and a full audit trail on every record.

Questions

Which direction does data move between QAD and SAP Concur?
The main flow is SAP Concur into QAD. Approved invoices and expense reports move from SAP Concur into QAD as supplier invoices and journals, while QAD supplier master data flows into SAP Concur vendors. ml-connector also sends posting confirmations back to SAP Concur so each document is marked as recorded in the ERP.
How does the integration handle SAP Concur's company-level OAuth and token rotation?
SAP Concur uses a company-level password grant bootstrapped from a one-time App Center auth token that is valid for 24 hours. ml-connector exchanges it immediately for a six-month refresh token, then rotates the one-hour access token on its own. It also reads the geolocation from the token response and uses that base URL for every call, so EMEA and China customers are not broken by a hardcoded host.
Does QAD's three-way match affect how invoices sync?
Yes. QAD matches supplier invoices against the purchase order and the goods receipt, so a receipt must post before the invoice. ml-connector creates an invoice in QAD only after its receipt exists, and carries the SAP Concur purchase order number with the document so QAD can match against the originating order.

Related integrations

Connect QAD and SAP Concur

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

Get started