ml-connector
QuickBooks DesktopWise

QuickBooks Desktop and Wise integration

Small and mid-sized businesses use QuickBooks Desktop to manage accounting locally and Wise to execute international payments and maintain multi-currency accounts. Connecting the two ensures bill data flows from QuickBooks Desktop into your Wise transfer workflow, recipients are created and updated across both systems, and payment execution is tracked with a full audit trail. ml-connector handles QuickBooks Desktop's QBWC polling requirement and Wise's REST webhook model so you do not have to.

How QuickBooks Desktop works

QuickBooks Desktop exposes vendors, bills, bill payments, purchase orders, invoices, accounts, customers, items, employees, and journal entries through SOAP QBXML over HTTPS. A customer-hosted Web Connector agent (QBWC) calls your remote SOAP endpoint on a configurable interval (minimum 1 minute, typical 5-15 minutes) and provides a session token obtained via an authenticate() handshake. There are no webhooks; all synchronization is polling-based. Queries use ModifiedDateRangeFilter to detect changes. The system is Windows-only, requires QuickBooks to be running and logged in on the customer's machine, and has no idempotency key mechanism, so duplicate submissions create duplicate records. Edit operations require an EditSequence version counter to prevent concurrent conflicts.

How Wise works

Wise exposes profiles, balances, balance statements, recipients, quotes, transfers, and activity through REST JSON APIs with rate limits of 100 requests per second. Authentication uses OAuth2 (12-hour token expiry with long-lived refresh tokens) or a Personal API Token. Transfers follow a 4-step sequence: quote, recipient, transfer order, fund payment. Recipients are immutable and require deletion and recreation to update. Wise supports webhooks for transfersstate-change, transferspayout-failure, balancesupdate, balancescredit, batch-payment-initiationsstate-change, and profilesverification-state-change, with signature verification via X-Signature-SHA256 header using RSA-SHA256 digest. Idempotency is handled via customerTransactionId for transfers or X-idempotence-uuid for conversions.

What moves between them

Bill records flow from QuickBooks Desktop into Wise. ml-connector polls QuickBooks Desktop via QBWC on a schedule you control (typically every 10 minutes), reads new and modified bills, and creates transfer recipients and payment orders in Wise for bills marked ready for payment. Vendor records map to Wise recipients so bill-to-payout mapping is consistent. Payment status flows back into QuickBooks Desktop as journal entries or bill payment records, updated on the next poll cycle. Balance and transfer state changes in Wise trigger webhooks that ml-connector receives and logs to the audit trail.

How ml-connector handles it

ml-connector acts as the SOAP endpoint that QuickBooks Desktop's QBWC agent calls on schedule. It stores the QuickBooks session token from the authenticate() handshake and uses it for subsequent QBXML requests within that session. On the Wise side, it authenticates via OAuth2 and manages token refresh. Bills are queried from QuickBooks Desktop with ModifiedDateRangeFilter to find only new and modified records since the last poll. Vendors are mapped to Wise recipients; a bill destined for international payout matches its vendor to a recipient in Wise and creates a quote for the amount and currency. Because QuickBooks Desktop has no idempotency keys, ml-connector uses a combination of bill ID and modification date to detect replayed requests and avoid duplicate transfers. Wise webhooks arrive at a registered endpoint, and ml-connector verifies the X-Signature-SHA256 header before accepting state-change events. Payment execution state is stored in the audit trail with full traceability.

A real-world example

A mid-sized consulting firm based in North America has clients and vendors across Europe and Asia. The finance team uses QuickBooks Desktop for invoicing and expense management but sends international payments via Wise to minimize currency conversion costs. Before integration, accountants exported bill data from QuickBooks Desktop, manually created transfers in Wise, and then logged payment status back into QuickBooks Desktop as journal entries, a process prone to reconciliation breaks. With QuickBooks Desktop and Wise connected, bills ready for payment are automatically created as transfer orders in Wise with the correct vendor-to-recipient mapping, currency, and amount. Payment completions flow back as transaction records, and month-end reconciliation is automated.

What you can do

  • Poll QuickBooks Desktop via QBWC at an interval you control, detecting new and modified bills and creating transfer orders in Wise.
  • Map vendors in QuickBooks Desktop to recipients in Wise, ensuring consistent payout routing across both systems.
  • Handle QuickBooks Desktop session-token authentication and Wise OAuth2 with automatic token refresh on 401 errors.
  • Track payment state changes in Wise via webhooks and log them to the audit trail for full reconciliation visibility.
  • Create Wise transfer quotes with the correct destination currency and recipient based on bill vendor and amount.

Questions

How does ml-connector handle QuickBooks Desktop's QBWC polling requirement?
ml-connector runs a SOAP endpoint that QuickBooks Desktop's QBWC agent calls on a schedule (minimum 1 minute, typical 5-15 minutes). It manages the session-token handshake via the authenticate() method, stores the token for the session, and processes QBXML requests within that session. Because QuickBooks Desktop has no webhooks, this polling architecture is the only way to detect changes.
Does ml-connector prevent duplicate bill-to-transfer submissions to Wise?
Yes. QuickBooks Desktop has no idempotency key mechanism, so ml-connector uses a composite key of bill ID and modification date to detect replayed requests and avoid submitting the same bill as multiple transfers. Wise transfers are further deduplicated using the customerTransactionId field in the transfer order.
How are vendor-to-recipient mappings maintained between QuickBooks Desktop and Wise?
Vendors from QuickBooks Desktop are stored as a reference in the audit trail and matched to corresponding Wise recipients by name or ID. When a bill is ready for payment, ml-connector looks up the bill's vendor, finds the matching recipient in Wise, and creates the transfer quote with the correct recipient and destination currency.

Related integrations

Connect QuickBooks Desktop and Wise

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

Get started