ml-connector
QuickBooks DesktopSnowflake

QuickBooks Desktop and Snowflake integration

QuickBooks Desktop holds your accounting records on a Windows machine. Snowflake holds your data warehouse in the cloud. Connecting them moves your financial data from QuickBooks into a centralized, queryable platform without manual exports. Vendors, bills, invoices, payments, accounts, and journal entries flow into Snowflake tables on a schedule you control, and the audit trail captures every sync.

How QuickBooks Desktop works

QuickBooks Desktop exposes vendors, bills, invoices, purchase orders, payments, accounts, customers, items, employees, and journal entries through QBXML queries over a SOAP interface. A customer-hosted Web Connector agent (QBWC) on Windows polls your remote SOAP endpoint at a configurable interval and submits authentication credentials that your service trades for a session token. QuickBooks must be open and logged into the company file for QBWC to process requests. Queries are detected using ModifiedDateRangeFilter for changed records, and deleted transactions are found with TxnDeletedQueryRq. There are no webhooks; all data moves by polling.

How Snowflake works

Snowflake is a cloud data warehouse that stores and queries structured data via REST API and SQL. Each request authenticates with either a key-pair (RSA private key plus JWT, recommended for server integration) or a programmatic access token. Snowflake uses partition-based pagination and returns async queries as HTTP 202 with a statement handle for polling. All financial entities in Snowflake are user-defined tables; the warehouse itself provides no built-in accounting objects. Snowflake requires a warehouse with AUTO_RESUME enabled and uses uppercase-normalized identifiers for unquoted table and column names.

What moves between them

The main flow is QuickBooks Desktop into Snowflake. After each QBWC poll interval, ml-connector pushes vendor master records, bill headers and line items, invoice headers and lines, purchase orders, bill payments, general ledger accounts, and transaction history into corresponding Snowflake tables. Deleted transactions are captured and marked as inactive in the warehouse. The sync runs on the interval set in your QBWC configuration, typically 5 to 15 minutes. Reference data such as accounts and customers are refreshed with each cycle to keep dimensions current.

How ml-connector handles it

ml-connector acts as the SOAP endpoint that QBWC connects to and polls. It accepts the session token handshake, validates QBWC credentials, and executes QBXML queries you configure. For each query result, ml-connector transforms the XML into JSON, encrypts the connection credentials (QBWC password and Snowflake API key) at rest, and loads the records into Snowflake tables using the SQL API. Because QuickBooks Desktop enforces EditSequence version counters on all modifications, ml-connector re-queries current state before any update to detect concurrent changes. QBXML request timeout is approximately 60 seconds, so large queries are paginated using token-based iteration. Snowflake async queries are polled with exponential backoff until completion. Every record carries the change timestamp and sync cycle ID for auditing, and failed loads are logged in a dead-letter table for manual replay.

A real-world example

A mid-sized accounting firm manages QuickBooks Desktop for multiple small-business clients across different industries. Month-end close requires exporting transaction registers from each client, reconciling them in spreadsheets, and rebuilding KPI dashboards by hand. With QuickBooks Desktop connected to Snowflake, each client's transactions flow into the warehouse automatically every 15 minutes. The firm loads all clients into a single schema with a customer_id column, runs scheduled SQL queries to build consolidated P&L and balance sheet views, and pushes those dashboards to Tableau. Close time drops from days to hours, and the firm gains real-time visibility into client financial health without re-keying.

What you can do

  • Push QuickBooks Desktop vendors, bills, invoices, and purchase orders into Snowflake tables for consolidated financial analysis.
  • Sync general ledger accounts and transactions so your warehouse reflects the current state of QuickBooks without manual export.
  • Authenticate QBWC via the standard session token handshake and Snowflake via key-pair or token authentication, with credentials encrypted at rest.
  • Poll QuickBooks Desktop on a configurable interval and detect changes using ModifiedDateRangeFilter and deleted transactions via TxnDeletedQueryRq.
  • Track change history, audit sync cycles, and replay failed records from a dead-letter table when a downstream Snowflake load fails.

Questions

How does ml-connector connect to QuickBooks Desktop if it runs in the cloud?
ml-connector acts as the remote SOAP endpoint that your customer-hosted QBWC agent calls and polls on a regular interval. You configure QBWC to point to ml-connector's endpoint, and QBWC sends credentials and QBXML query requests. ml-connector validates the credentials, executes the query, transforms the result, and loads it into Snowflake.
Does EditSequence prevent ml-connector from updating QuickBooks Desktop records?
QuickBooks Desktop enforces EditSequence as an optimistic lock on all mutable records. ml-connector never writes back to QuickBooks Desktop; it reads only. All data flows from QuickBooks into Snowflake, so EditSequence conflicts do not apply.
What happens if a Snowflake load fails during a QBWC poll cycle?
ml-connector logs the failed batch to a dead-letter table in Snowflake with the error message and the full record payload. You can inspect the table, fix the underlying issue (schema mismatch, quota, network), and manually replay the batch without waiting for the next poll cycle.

Related integrations

Connect QuickBooks Desktop and Snowflake

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

Get started