Wave Accounting and SAP Concur integration
Wave Accounting manages invoicing and transactions for small businesses; SAP Concur handles expense reports, purchase orders, and vendor payments at enterprise scale. Connecting them keeps your financial records aligned without manual re-entry. Expense reports from Concur flow into Wave as transactions against the correct vendor accounts. New vendors added to Concur automatically sync to Wave so invoice matching works. Concur's financial integration documents are linked to Wave transactions for end-to-end audit traceability.
What moves between them
Expense reports and purchase orders from SAP Concur sync into Wave Accounting as transactions and vendor records on a schedule tied to your monthly close cycle. New invoices created in Wave trigger webhook events that feed into Concur's Payment Request documents for vendor matching and payment approval workflows. Vendor master records flow bidirectionally: new vendors created in Concur sync to Wave so invoice matching is accurate, and Wave transaction customer records update Concur user and vendor data when synchronization detects changes. Payment status updates and invoice approvals are tracked as audit trail entries and can be replayed if a downstream sync fails.
How ml-connector handles it
ml-connector handles Wave's GraphQL interface by querying the full customer, vendor, and transaction payload and filtering by modification timestamp to detect changes. On the Concur side it performs geolocation routing by parsing the OAuth token response and then routes all subsequent API calls to the matched datacenter (US, EMEA, or China). Concur's OAuth tokens expire hourly, so ml-connector refreshes them before each request and caches the result. Wave webhook events are verified using HMAC-SHA256 against the x-wave-signature header with a 5-minute replay window to prevent duplicate processing. Concur's Event Subscription Service is limited to 5 active subscriptions per app, so ml-connector pools multiple event topics under a single webhook and routes internally by event type. Vendor master matching uses the vendor name and tax ID to prevent duplicates. If Concur's API returns HTTP 429 (rate limit), ml-connector backs off with exponential jitter and retries. Every transaction carries the source system, transaction ID, and timestamp, so any record can be traced back to its origin and replayed if needed.
A real-world example
A mid-sized management consulting firm uses Wave Accounting for invoicing and cash tracking, and SAP Concur for employee travel expenses and reimbursements. Before the integration, the finance team received Concur expense reports monthly, manually exported them as CSV, and re-entered approved expenses into Wave as transactions against consultant vendor accounts. Month-end reconciliation involved searching both systems for matching amounts and approvals. With the integration, each approved Concur expense report syncs to Wave as a vendor transaction within hours, already assigned to the correct consultant account code. Vendors onboarded in Concur automatically appear in Wave, eliminating duplicate vendor master records. The finance team now reconciles simply by matching Wave transaction entries against Concur export snapshots, cutting month-end close by one full day.
What you can do
- Sync SAP Concur expense reports into Wave Accounting as vendor transactions with automatic account assignment.
- Sync new vendors from SAP Concur to Wave so expense invoices match against existing vendor accounts.
- Route SAP Concur API calls to the correct datacenter (US, EMEA, or China) based on OAuth token geolocation.
- Verify Wave webhook signatures using HMAC-SHA256 and prevent duplicate processing within a 5-minute replay window.
- Track all synced records with full source system traceability and replay capability for audit compliance.
Questions
- How does ml-connector handle SAP Concur's multi-datacenter requirement?
- ml-connector parses the OAuth token response to determine the customer's geolocation (US, EMEA, or China) and routes all subsequent API calls to the matched datacenter. Every customer's routing is cached, so geolocation is evaluated only once per token refresh. This prevents 401 and 403 errors that occur when API calls are sent to the wrong region.
- What records flow from SAP Concur into Wave Accounting?
- Approved expense reports sync into Wave as transactions against vendor accounts. Purchase orders and purchase requests create additional transaction records tied to the vendor master. New vendors added to Concur sync to Wave as customer records so invoice matching and reporting work across both systems.
- Why does Wave require a Pro subscription, and what happens if it expires?
- Wave's GraphQL API and webhook system are only available on Wave Pro subscriptions. If a subscription lapses, webhooks stop firing and the GraphQL endpoint becomes unavailable. ml-connector will detect 401 responses and alert the customer to renew their Wave Pro plan before the sync can resume.
Related integrations
More Wave Accounting integrations
Other systems that connect to SAP Concur
Connect Wave Accounting and SAP Concur
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started