QuickBooks Desktop and SAP Concur integration
QuickBooks Desktop runs accounting locally on Windows; SAP Concur runs travel and expense management in the cloud. When expenses and invoices live in Concur, they often need to flow into QuickBooks Desktop as vendor bills and GL journal entries. ml-connector automates that flow, reading Concur expense reports and invoice payment requests and posting them into QuickBooks Desktop without manual re-entry. It handles the complexity of QBWC session management, Concur OAuth token refresh, and EditSequence versioning to keep both systems in sync.
What moves between them
Expense reports and invoice payment requests from SAP Concur flow into QuickBooks Desktop as bills and GL journal entries. ml-connector subscribes to Concur's webhook topics for expense reports and invoices, receives events in real-time, and polls Concur's REST API to fetch the full record detail. It then reads vendor names from Concur, creates or matches vendors in QuickBooks Desktop, and writes bills (for invoices) or journal entries (for expense allocations) into the GL. The direction is one-way inbound: QuickBooks Desktop accounts and vendors do not sync back to Concur. Reference vendor data is maintained in Concur as the source of truth.
How ml-connector handles it
ml-connector uses Concur OAuth 2.0 with the password grant (authtoken) flow to authenticate and obtain an access token, routing all calls to the correct regional API endpoint extracted from the token response. It subscribes to Concur's public.concur.expense.report and public.concur.invoice.paymentrequest webhook topics and waits for events; when an event arrives, ml-connector calls the Concur REST API to fetch the full report or invoice detail. On the QuickBooks Desktop side, it manages a persistent QBWC session by calling the SOAP authenticate() method with customer credentials to obtain a session ticket, then uses that ticket to build QBXML requests for vendor lookups and bill creation. Because QuickBooks requires an EditSequence (version counter) on every modify operation, ml-connector reads the current EditSequence before updating any record and re-tries if a conflict occurs. It also paginates large queries to stay within the 60-second QBWC timeout. When creating bills, it maps Concur cost center and project fields to QuickBooks account dimensions where applicable, and tracks which Concur expense report IDs have been posted to avoid duplication.
A real-world example
A mid-sized consulting firm runs QuickBooks Desktop for accounting and SAP Concur for employee travel and project expenses. Previously, the accounting team exported expense reports and invoice lists from Concur weekly and manually re-entered them as bills and journal entries in QuickBooks, a tedious process prone to typos and mismatches in cost allocation. With the integration, Concur expense reports flow automatically into QuickBooks Desktop as bills and GL entries, each posted to the correct project account code that Concur tracks. Month-end close now starts with expense postings already complete, cost center totals reconcile automatically, and the manual re-entry step is eliminated.
What you can do
- Read expense reports from SAP Concur and create corresponding bills in QuickBooks Desktop, with amounts and cost allocations mapped to GL accounts.
- Subscribe to Concur webhook events for real-time notification of new and updated expense reports and invoice payment requests.
- Authenticate SAP Concur with OAuth 2.0, refresh tokens on expiry, and route API calls to the correct regional endpoint.
- Manage QuickBooks Desktop QBWC session tokens and handle EditSequence versioning to prevent conflicts when updating vendor and bill records.
- Detect and skip duplicate expense reports and invoices, maintaining a full audit trail of all postings and mapping decisions.
Questions
- Does this integration work with QuickBooks Online or only QuickBooks Desktop?
- This integration requires QuickBooks Desktop because it uses the QBWC Web Connector, which is tied to the locally-installed product. QuickBooks Online uses a different API (IIF or REST) and would require a separate integration approach.
- What happens if the QuickBooks Desktop machine goes offline or QuickBooks is closed?
- QBWC will fail to connect if the machine is offline or QuickBooks is not open and logged in. ml-connector queues the pending Concur events and retries them once the machine and QuickBooks come back online. The audit log tracks which records were held pending and when they eventually posted.
- Can expense allocations from Concur be split across multiple GL accounts in QuickBooks?
- Yes. When a Concur expense report allocates cost across multiple projects or departments, ml-connector reads those allocations and creates separate GL journal entry lines for each account. The matching is based on mapping rules configured during setup that tie Concur cost center codes to QuickBooks account numbers.
Related integrations
More QuickBooks Desktop integrations
Other systems that connect to SAP Concur
Connect QuickBooks Desktop and SAP Concur
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started