ml-connector
QuickBooks DesktopTipalti

QuickBooks Desktop and Tipalti integration

QuickBooks Desktop handles accounts payable and check writing on Windows. Tipalti automates invoice collection, vendor compliance, and mass payments globally. Connecting the two keeps your vendor master aligned, eliminates manual bill entry, and gives Tipalti real-time visibility into payment status in QuickBooks. Invoices Tipalti collects post into QuickBooks as bills, vendor onboarding flows back to Tipalti, and bill payments sync back so Tipalti knows when a check clears.

How QuickBooks Desktop works

QuickBooks Desktop is a locally-installed Windows accounting system that exposes vendors, bills, bill payments, purchase orders, invoices, accounts, customers, items, and employees through a SOAP and QBXML interface. A customer-hosted QBWC agent on the Windows machine with QuickBooks running polls your remote SOAP endpoint at a configurable interval (typically 5-15 minutes). Authentication uses a session-token handshake: the QBWC agent provides credentials to your service, which returns a GUID ticket for all subsequent QBXML requests in that session. QuickBooks has no webhook capability, so all data detection runs through polling with ModifiedDateRangeFilter queries to find recently changed records.

How Tipalti works

Tipalti is an end-to-end AP automation and payments platform that exposes vendors (payees), invoices, purchase orders, payment batches, GL accounts, and tax codes through both SOAP (base URLs at api.tipalti.com/v14) and REST (base URL at triggers.approve.com). SOAP calls authenticate via HMAC-SHA256 signature with a payer name and API key. REST calls use OAuth2 client credentials or an x-api-key header. Tipalti sends event notifications via IPN webhooks to a single account-wide endpoint configured in Tipalti Hub. Event types include payee_details_changed, invoice_updated, payment_submitted, payment_completed, and payment_cancelled. Webhook payloads are verified with HMAC-SHA256.

What moves between them

Invoices flow from Tipalti into QuickBooks Desktop as bills on every invoice_updated webhook, mapped to the correct vendor and GL account. Tipalti vendor (payee) records sync into QuickBooks vendors on payee_details_changed events so the vendor master stays aligned. Bill payment records flow from QuickBooks back into Tipalti after ml-connector detects a new bill payment via polling, updating the payment status so Tipalti shows when a check has cleared. The cycle repeats on a polling interval you configure, typically 5-15 minutes.

How ml-connector handles it

ml-connector stores both the QuickBooks QBWC credentials and the Tipalti SOAP and REST API credentials encrypted. On the QuickBooks side, it holds a persistent SOAP session, refreshing the session token when the handshake expires, and polls QuickBooks for new bill payments on a schedule that matches your AP review cycle. When a Tipalti webhook arrives (invoice_updated or payee_details_changed), ml-connector translates the event into a QBXML bill or vendor request, passing the current session token to QuickBooks. Before writing a bill, it re-queries the vendor to get the latest EditSequence version counter (required by QuickBooks to prevent concurrent edit conflicts), then constructs and sends the QBXML BillAdd or ModifyBill request. After posting a bill payment in QuickBooks, ml-connector reads the bill payment record to extract the check number and posting date, then calls Tipalti's REST payment endpoint to mark the payment as submitted. Webhook signatures are verified with HMAC-SHA256 before processing. All records carry a full audit trail, so if a Tipalti webhook is missed or a QuickBooks request times out (the QBWC timeout is approximately 60 seconds), the transaction can be replayed.

A real-world example

A mid-sized distributor runs QuickBooks Desktop for AP and check writing, and uses Tipalti to collect invoices from 200+ suppliers globally and manage vendor tax compliance. Before the integration, the AP team downloaded invoices from Tipalti twice daily, manually entered each as a bill in QuickBooks, then later matched the check against the original invoice in both systems. Tipalti had no visibility into when a check actually posted, so vendor inquiries had to be manually tracked. With QuickBooks Desktop and Tipalti connected, each invoice Tipalti collects creates a bill in QuickBooks automatically on the correct vendor account. When the AP team writes and prints a check in QuickBooks, the bill payment syncs back to Tipalti, showing the vendor when payment was issued. The manual entry step is eliminated, and both systems stay in sync.

What you can do

  • Sync Tipalti invoices into QuickBooks Desktop as bills, mapped to vendors and GL accounts, on every invoice event.
  • Keep vendor records aligned between Tipalti and QuickBooks by syncing payee details into vendor accounts.
  • Post bill payments from QuickBooks back to Tipalti so the platform knows when a check has cleared.
  • Manage QBWC session tokens, version counters, and EditSequence handling to prevent concurrent edit conflicts in QuickBooks.
  • Verify Tipalti webhook signatures and retry failed bill entries with a full audit trail for every transaction.

Questions

How does ml-connector handle the QuickBooks QBWC session token?
ml-connector maintains a persistent SOAP session with your QBWC service and stores the session token encrypted. When the token expires or a request returns an authentication error, it re-runs the SOAP authenticate() handshake to request a new token. Because QBWC operates sequentially and requires a fresh EditSequence before every write, ml-connector queries the current vendor record just before updating a bill to get the latest version counter and prevent edit conflicts.
What happens when a Tipalti invoice arrives but the vendor does not exist in QuickBooks yet?
ml-connector checks the vendor (payee) name against QuickBooks before creating a bill. If the vendor does not exist, it either waits for the vendor to sync from a separate payee_details_changed webhook, or it can be configured to create a basic vendor record with the payee name and default GL account. The bill entry is then retried once the vendor is in place.
Can ml-connector sync purchase orders from Tipalti to QuickBooks?
Yes. If a purchase order exists in Tipalti and is linked to an invoice, ml-connector can detect it via Tipalti webhook and create or update a matching purchase order in QuickBooks. The PO header and line items are mapped to QuickBooks item and account dimensions, and the line totals are compared against the invoice total to flag any discrepancies in the audit trail.

Related integrations

Connect QuickBooks Desktop and Tipalti

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

Get started