ml-connector
QuickBooks DesktopAdyen

QuickBooks Desktop and Adyen integration

QuickBooks Desktop runs your accounting on a local Windows company file. Adyen processes your card and alternative payments. Connecting the two means every Adyen settlement lands in QuickBooks Desktop as a journal entry without re-keying from a downloaded report. ml-connector reads Adyen's reconciliation reports and payment events, then queues the gross sales, refunds, and processor fees for the QuickBooks Web Connector to post against the accounts you choose. Because Adyen has no invoice or vendor records of its own, the integration is built around what Adyen does expose: payments, refunds, payouts, disputes, and settlement reports.

How QuickBooks Desktop works

QuickBooks Desktop has no hosted API. Its data lives in a local company file and is reached through the QBXML SDK, which sends XML messages over SOAP. Integration requires the QuickBooks Web Connector, a free Windows agent that the customer points at your SOAP service with an imported .qwc file; the Web Connector then polls that service on a set interval while QuickBooks is open. Authentication is a SOAP handshake, not OAuth or an API key: the service validates a username and password in an authenticate call and issues a session ticket carried on every later call. There are no webhooks, so changes are found by sending QueryRq messages with a ModifiedDateRangeFilter; entities include Vendor, Bill, Invoice, JournalEntry, Account, and Customer.

How Adyen works

Adyen exposes payments, captures, refunds, payouts, disputes, and reconciliation reports through versioned REST APIs, each on its own base URL, with a merchant-specific live URL prefix that must be supplied for production calls. Authentication is an API key sent in the X-API-Key header, or Basic auth, scoped to a company or merchant account. Adyen has full webhook support with HMAC-SHA256 signatures and pushes a REPORT_AVAILABLE event when a new settlement or reconciliation report is ready to download from a signed URL. Adyen has no vendor, invoice, purchase order, or GL account objects, so reconciliation reports and the pspReference are the canonical source for accounting.

What moves between them

The flow runs from Adyen into QuickBooks Desktop. When Adyen fires a REPORT_AVAILABLE webhook, ml-connector downloads the settlement or reconciliation report from the signed URL, parses each line, and prepares balanced journal entries for the gross receipts, refunds, chargebacks, and processor fees against the GL accounts you map. CAPTURE and REFUND events flow the same direction so cash movements are recorded as they clear. The work is queued because QuickBooks cannot be written to directly; the next Web Connector cycle pulls the pending JournalEntryAdd messages and posts them, returning the new QuickBooks TxnID. Every entry carries the Adyen pspReference as its external reference. QuickBooks Desktop is the system of record for the ledger; ml-connector does not write invoices or vendors back to Adyen, because Adyen has no such objects.

How ml-connector handles it

ml-connector stores both credential sets encrypted and sends the Adyen X-API-Key with the merchant's live URL prefix on every REST call, while on the QuickBooks side it runs the SOAP service the Web Connector polls and validates the session ticket on each request. Incoming Adyen webhooks are verified by recomputing the HMAC-SHA256 signature before any work is queued, and because Adyen can deliver the same notification more than once, the pspReference is used to deduplicate so a transaction is never booked twice. Settlement report lines are mapped to QuickBooks GL accounts by merchant account and fee type, and amounts are converted from Adyen minor units into dollars. The hard constraint is that QuickBooks must be running with the company file open for the Web Connector to process anything, and the polling interval is minutes, not seconds, so posting is near-real-time at best. Because QBXML has no idempotency key, ml-connector queries by reference before adding to avoid duplicates and stores the returned TxnID, and an EditSequence is re-read before any modify. Each queued entry carries a full audit trail and can be replayed on the next cycle if a post fails.

A real-world example

A mid-sized online retailer running QuickBooks Desktop Enterprise on a Windows server takes card and wallet payments through Adyen across its web store and two physical locations. Before the integration, a bookkeeper logged into the Adyen Customer Area each morning, downloaded the prior day's settlement report, and hand-entered the gross sales, refunds, and processor fees into QuickBooks as a journal entry, then spent the end of each month trying to tie the bank deposit back to thousands of individual transactions. With QuickBooks Desktop and Adyen connected, each settlement report is queued and posted into the company file on the next Web Connector cycle, split into receipts, refunds, and fees against the right accounts, with the Adyen pspReference on every entry. Bank reconciliation becomes a match against entries that are already in the ledger, and the manual download-and-key step is gone.

What you can do

  • Post Adyen settlement and reconciliation report lines into QuickBooks Desktop as balanced journal entries, split into receipts, refunds, and processor fees.
  • Record Adyen capture and refund events into the QuickBooks company file as cash movements clear.
  • Tag every QuickBooks journal entry with the Adyen pspReference so each line traces back to the originating transaction.
  • Verify the Adyen webhook HMAC-SHA256 signature and deduplicate on pspReference before anything is queued for QuickBooks.
  • Bridge Adyen's API key and live URL prefix with the QuickBooks Web Connector session handshake, with retries and a full audit trail on every record.

Questions

Which direction does data move between QuickBooks Desktop and Adyen?
Data moves from Adyen into QuickBooks Desktop. Settlement reports and capture and refund events flow from Adyen and post into the QuickBooks general ledger as journal entries. ml-connector does not write invoices or vendors back to Adyen, because Adyen is a payments platform and has no such records.
How does the integration reach QuickBooks Desktop if it has no cloud API?
QuickBooks Desktop is local and has no hosted endpoint, so ml-connector runs a SOAP service that the QuickBooks Web Connector polls from the Windows machine where QuickBooks runs. The Web Connector authenticates with a username and password and a session ticket, then pulls queued QBXML JournalEntryAdd messages on each cycle. QuickBooks must be open with the company file loaded for posting to happen, and the interval is set in minutes, so it is near-real-time at best.
How does the integration get accounting data out of Adyen if it has no invoices or GL?
Adyen exposes settlement and reconciliation reports, which are the canonical source for accounting. When Adyen fires a REPORT_AVAILABLE webhook, ml-connector downloads the report from its signed URL, parses each line, and maps the receipts, refunds, and fees to the QuickBooks GL accounts you choose. The Adyen pspReference is carried onto each QuickBooks journal entry as the external transaction reference.

Related integrations

Connect QuickBooks Desktop and Adyen

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

Get started