QuickBooks Desktop and AvidXchange integration
QuickBooks Desktop runs accounting and accounts payable inside a local company file. AvidXchange automates invoice receipt, coding, approval routing, and payment. Connecting the two lets AvidXchange code invoices against your real vendors and accounts, then records every payment it executes back in your books. Vendor master records and the chart of accounts flow from QuickBooks Desktop into AvidXchange, and settled payment details flow back the other way. ml-connector handles the very different access models on each side and moves the data on the schedule you set.
What moves between them
Vendors and the chart of accounts move from QuickBooks Desktop into AvidXchange so invoices can be coded to valid payees and accounts. Invoices are received and approved inside AvidXchange, and once AvidPay executes a payment by check, ACH, or virtual card, the settled payment record flows back into QuickBooks Desktop as a bill payment against the matching vendor and AP account. Vendor sync runs first because a payment fails if the payee does not exist in AvidXchange. Both sides are pull-only, so ml-connector runs each direction on a schedule, typically the Web Connector cycle inbound and a regular poll of payment status outbound.
How ml-connector handles it
ml-connector stores both credential sets encrypted. It implements the SOAP methods the Web Connector calls, validates the session ticket on every request, and returns QBXML query and add blobs that the agent relays to the local company file. On the AvidXchange side it sends the Company Token and User Token as headers on each AvidConnect call. Vendors and GL accounts are mapped first so AvidXchange codes invoices against accounts that exist in QuickBooks. Because QuickBooks has no webhooks, change detection uses a ModifiedDateRangeFilter against the last successful sync, and AvidXchange is polled for new payment status on a fixed interval. Writing a payment back uses BillPaymentCheckAddRq, and any update first re-queries the current EditSequence to avoid a stale-edit error. QuickBooks must be running for the agent to process a cycle, so the inbound schedule follows when the company file is open.
A real-world example
A 90-person commercial property management firm runs QuickBooks Desktop Enterprise on a Windows server and pays roughly 400 vendor invoices a month across several buildings. Before the integration, staff keyed paper and emailed invoices into a spreadsheet, walked them around for approval, cut checks by hand, and re-entered each payment into QuickBooks, where coding errors and missed approvals were common. With QuickBooks Desktop and AvidXchange connected, vendors and GL accounts feed AvidXchange so invoices are captured and routed for approval automatically, and every payment AvidXchange settles is written back to QuickBooks as a bill payment on the correct account. The approval trail lives in AvidXchange and the books stay current without manual entry.
What you can do
- Push vendor master records from QuickBooks Desktop into AvidXchange so invoices route to the correct payees.
- Sync the chart of accounts and accounting dimensions so AvidXchange codes invoices to valid GL accounts.
- Write settled check, ACH, and virtual card payments back into QuickBooks Desktop as bill payments.
- Bridge the QuickBooks Web Connector session ticket and the AvidXchange Company and User tokens on every call.
- Detect changes by polling with a modified-date filter and run each direction on the schedule you set.
Questions
- Why does QuickBooks Desktop need the Web Connector and a local agent?
- QuickBooks Desktop is not a cloud product and has no hosted API. Its QBXML SDK only works against a local company file, reached through the QuickBooks Web Connector, a Windows agent that polls your SOAP service while QuickBooks is open. ml-connector implements that SOAP service and validates the session ticket the agent passes on every call.
- Which direction does data move between QuickBooks Desktop and AvidXchange?
- Vendors and the chart of accounts move from QuickBooks Desktop into AvidXchange so invoices can be coded and approved. Settled payment records move the other way, back into QuickBooks Desktop as bill payments after AvidXchange executes them. Vendors are synced first because AvidXchange cannot pay a payee that does not exist on its side.
- How are changes detected without webhooks on either system?
- Neither system offers webhooks, so ml-connector polls. QuickBooks changes are found with a QueryRq using a ModifiedDateRangeFilter against the timestamp of the last successful sync, and AvidXchange payment status is pulled on a fixed interval. Each direction runs on a schedule you control rather than waiting for a push.
Related integrations
More QuickBooks Desktop integrations
Other systems that connect to AvidXchange
Connect QuickBooks Desktop and AvidXchange
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started