ml-connector
QuickBooks DesktopSAP Ariba

QuickBooks Desktop and SAP Ariba integration

QuickBooks Desktop runs accounts payable and the books. SAP Ariba runs procurement and supplier invoicing. Connecting the two carries procurement activity from Ariba into the place where the money is actually owed and paid. Approved purchase orders and supplier invoice headers in Ariba become purchase orders and vendor bills in QuickBooks Desktop without re-keying, and the vendor master in QuickBooks stays aligned with Ariba suppliers. ml-connector handles the very different protocols on each side and moves the data on a schedule you control.

How QuickBooks Desktop works

QuickBooks Desktop is a locally installed Windows product with no cloud API. It exposes vendors, bills, purchase orders, bill payments, the chart of accounts, and journal entries through the QBXML SDK, an XML-over-SOAP message format. A free QuickBooks Web Connector agent installed on the same machine polls your SOAP service on a set interval, relays QBXML requests to QuickBooks, and returns the responses, so QuickBooks must be open on that machine. There is no OAuth and no webhook surface; changes are found by querying with a ModifiedDateRangeFilter and tracking the last sync time.

How SAP Ariba works

SAP Ariba is a cloud procurement platform reached through REST Open APIs on a tenant-specific gateway. It exposes purchase order headers and lines, invoice header data, and supplier records, with most bulk extraction running as asynchronous reporting jobs that you submit, poll, and download in pages. Every call needs an OAuth2 client-credentials bearer token plus a static apiKey header, with the realm passed as a query parameter. Ariba is read-oriented for procurement documents over REST; supplier status and approvals can be written, but PO and invoice creation goes through cXML/SOAP, not these REST APIs. There is no general outbound webhook.

What moves between them

The main flow runs from SAP Ariba into QuickBooks Desktop. ml-connector pulls approved purchase orders and supplier invoice headers from Ariba reporting jobs and creates matching purchase orders and vendor bills in QuickBooks Desktop, posted against the right accounts payable account and expense or item lines. Vendor and supplier master data is aligned so each Ariba supplier maps to a QuickBooks vendor by ANID, and that alignment can be kept current in both directions. Because both systems are pull-based, the cadence is a poll on the interval you set, typically tied to your procurement and close calendar. Ariba invoice and PO documents are treated as a read-only source over REST, so ml-connector does not write financial documents back into Ariba.

How ml-connector handles it

ml-connector stores both credential sets encrypted and bridges two very different auth models. On the Ariba side it fetches an OAuth2 client-credentials token, caches it for its one-hour life and refreshes before expiry, and attaches the static apiKey header and the realm query parameter to every request. On the QuickBooks side it answers the Web Connector authenticate handshake with a session ticket and validates that ticket on every SOAP call, accepting QBXML requests the connector relays to the open company file. Ariba bulk reads use the submit-poll-download job pattern, so the connector submits a reporting job filtered by an updated-date window, respects the one-year window limit and the per-job page size, and watches the X-RateLimit-Remaining header to back off before a 429. New Ariba documents are turned into QBXML BillAdd and PurchaseOrderAdd requests; because QuickBooks has no idempotency key, the connector first queries by reference number or the stored TxnID so a re-run does not create a duplicate bill, and any update re-reads the current EditSequence before sending a Mod. A high-water mark timestamp tracks the last successful pull on each side, and every record carries a full audit trail with automatic retries and error replay if a downstream call fails.

A real-world example

A mid-sized facilities services company with around 600 employees runs guided buying and supplier invoicing in SAP Ariba while its finance team keeps the books in QuickBooks Desktop Enterprise on a Windows server. Before the integration, an AP clerk opened approved requisitions and supplier invoices in Ariba and re-typed each purchase order and vendor bill into QuickBooks, which was slow and produced mismatched vendor names and missed invoices at month-end. With QuickBooks Desktop and SAP Ariba connected, approved Ariba purchase orders and invoice headers flow into QuickBooks as POs and bills on a regular poll, vendors stay aligned to Ariba suppliers, and the clerk reviews rather than re-keys. Close gets faster and the spend approved in Ariba matches what is recorded as payable in QuickBooks.

What you can do

  • Turn approved SAP Ariba purchase orders into QuickBooks Desktop purchase orders without re-keying.
  • Create QuickBooks Desktop vendor bills from SAP Ariba supplier invoice headers, posted to the right AP account and lines.
  • Keep QuickBooks Desktop vendors aligned with SAP Ariba supplier records by ANID.
  • Bridge the QuickBooks Web Connector session ticket and the Ariba OAuth2 token, apiKey, and realm on every call.
  • Poll both pull-only systems on a schedule with deduplication, retries, and a full audit trail on every record.

Questions

Which direction does data move between QuickBooks Desktop and SAP Ariba?
The main flow is SAP Ariba into QuickBooks Desktop. Approved purchase orders and supplier invoice headers move from Ariba into QuickBooks as purchase orders and vendor bills, and vendor and supplier master data is aligned in both directions. Ariba PO and invoice documents are read over REST and are not written back, since creating those documents in Ariba uses cXML, not the REST Open APIs.
Does QuickBooks Desktop need anything installed for this to work?
Yes. QuickBooks Desktop has no cloud API, so it needs the free QuickBooks Web Connector agent running on the same Windows machine, with QuickBooks open on the company file. The Web Connector polls ml-connector on a set interval and relays QBXML requests to QuickBooks, so there is no real-time push and the machine must be running for a sync to occur.
How does the integration avoid creating duplicate bills in QuickBooks Desktop?
QuickBooks Desktop has no idempotency key, so sending the same BillAdd twice would create two bills. ml-connector first queries QuickBooks by reference number or the stored TxnID before adding, and tracks a high-water mark of the last Ariba documents it processed. Updates re-read the current EditSequence before sending a change so concurrent edits are not overwritten.

Related integrations

Connect QuickBooks Desktop and SAP Ariba

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

Get started