QuickBooks Desktop and Looker integration
QuickBooks Desktop runs on premises and holds vendors, invoices, purchase orders, and general ledger accounts. Looker provides analytics and reporting on top of a data warehouse. Connecting them lets you pull accounting transactions from QuickBooks Desktop into Looker on a schedule, so your financial data appears alongside operational metrics in a single analytics layer. ml-connector handles the QBWC polling setup, the OAuth2 authentication to Looker, and the mapping of accounting records into dimensions and measures your analysts can query.
What moves between them
QuickBooks Desktop transactions flow into Looker. On a schedule you configure (hourly, daily, or tied to your month-end close), ml-connector polls QuickBooks Desktop for vendors, invoices, purchase orders, and GL accounts modified since the last sync, then extracts those records and loads them into Looker's underlying data warehouse. The records become queryable as Looker measures and dimensions. Direction is one-way; QuickBooks Desktop is the source of truth for accounting transactions, and Looker is read-only for analytics and reporting.
How ml-connector handles it
ml-connector handles the QuickBooks Desktop QBWC polling flow and the Looker REST authentication bridge. On the QuickBooks Desktop side, ml-connector provides a SOAP web service endpoint listening at a URL you register in QBWC; the agent calls that endpoint on your chosen interval. ml-connector validates the session-token handshake, extracts the username and password, returns a valid session ticket, and then processes the QBXML requests from QBWC to read vendors, invoices, purchase orders, and GL accounts. It tracks the ModifiedDateRangeFilter state across sessions to detect only new and changed records. For Looker, ml-connector calls /api/4.0/login with your client credentials, obtains a bearer token, and uses that token to query and push data. Because Looker tokens expire after 1 hour, ml-connector refreshes the token before each request if needed. QuickBooks Desktop records are transformed into a flat schema suitable for warehouse loading: invoice header and line items are denormalized so each line becomes one row with the invoice header data repeated, GL accounts are mapped to a chart-of-accounts dimension, and vendors are mapped to a vendor master. The sync respects QuickBooks Desktop's EditSequence concurrency model so no stale data overwrites a concurrent edit. Retries use exponential backoff on QBWC polling failures, and every loaded record carries an audit trail with the timestamp and source.
A real-world example
A mid-sized distributor runs QuickBooks Desktop on Windows for accounts payable and GL, and uses Looker dashboards for daily cash flow and expense trending. The accounting team exports vendor aging reports from QuickBooks Desktop each week and manually adds them to a spreadsheet for comparison with purchase order spend in the warehouse. With QuickBooks Desktop and Looker connected, new invoices and vendor master changes from QuickBooks Desktop appear in Looker within your chosen polling interval. The dashboard now shows live AP aging by vendor and cost center, eliminating the weekly manual export and reconciliation. The finance team can drill from an outlier vendor balance in the dashboard directly back to the invoice detail in the underlying data.
What you can do
- Poll QuickBooks Desktop on a configurable interval and extract vendors, invoices, purchase orders, and GL accounts.
- Authenticate to Looker with OAuth2 client credentials and load extracted accounting records into your data warehouse.
- Detect changed and new records in QuickBooks Desktop using ModifiedDateRangeFilter and avoid re-loading unchanged data.
- Map QuickBooks Desktop GL accounts to Looker dimensions and denormalize multi-line invoices for warehouse-friendly flattening.
- Respect QuickBooks Desktop EditSequence versioning to prevent stale updates and maintain data integrity across concurrent edits.
Questions
- Why does ml-connector need a SOAP endpoint to integrate with QuickBooks Desktop?
- QuickBooks Desktop has no pull-based API; instead, the QBWC agent (installed on the customer's Windows machine) is configured to call a remote SOAP service on a polling interval. ml-connector provides that SOAP endpoint. QBWC initiates the connection, exchanges a session token with ml-connector, and then sends QBXML requests to read vendors, invoices, and GL accounts.
- How does ml-connector handle Looker's 1-hour token expiration?
- ml-connector calls /api/4.0/login with your client credentials before each request batch and caches the bearer token. If more than 1 hour has elapsed since the last successful login, or if a request returns a 401 Unauthorized, ml-connector re-authenticates and obtains a fresh token before retrying.
- What happens if QuickBooks Desktop is not running when QBWC tries to call ml-connector?
- QBWC will not send the request if QuickBooks Desktop is not running on the customer's machine. ml-connector will not receive the call, so no sync will occur that interval. The next time QBWC detects that QuickBooks Desktop is running and available, it will retry and pick up any modified records since the last successful sync using the ModifiedDateRangeFilter.
Related integrations
More QuickBooks Desktop integrations
Other systems that connect to Looker
Connect QuickBooks Desktop and Looker
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started