ml-connector
QuickBooks OnlineLooker

QuickBooks Online and Looker integration

QuickBooks Online holds your invoices, bills, expenses, and general ledger. Looker turns data into dashboards and reports. Connecting them brings live accounting metrics and trends into your business intelligence platform so finance teams, operations, and leadership can see the state of payables, receivables, and profitability without re-exporting data each month. ml-connector polls QuickBooks Online on a schedule you set and lands the records into Looker's query engine, ready for modeling and visualization.

How QuickBooks Online works

QuickBooks Online exposes vendors, customers, invoices, bills, journal entries, accounts, employees, and items through the QuickBooks Online Accounting API (REST, JSON over HTTPS). The API uses OAuth 2.0 Authorization Code flow; access tokens expire in 1 hour and refresh tokens rotate every 24 to 26 hours. Requests require a realm_id (company identifier) in the URL path. QuickBooks Online supports both webhooks for real-time events and a CDC endpoint for polling with 30-day history. Webhook payloads contain only the entity ID and operation, so the full record must be fetched via a separate GET call. All updates require a SyncToken for concurrency control.

How Looker works

Looker is a cloud-based business intelligence platform that models and queries data from data warehouses. It exposes queries, dashboards, looks, scheduled plans, users, and folders through REST APIs. Looker uses OAuth2 client credentials; access tokens expire after 1 hour with no refresh endpoint, requiring a fresh login call for each new session. Looker supports Scheduled Plans (cron-driven webhooks) for outbound data delivery to email, S3, or SFTP. Looker does not natively store ERP data like vendors or invoices; it models warehouse data through connections and queries. The API carries no request signature, so security relies on API user roles and permission sets within Looker.

What moves between them

Data flows from QuickBooks Online into Looker. ml-connector polls QuickBooks Online for invoices, bills, vendors, customers, journal entries, and accounts on a schedule you define, then loads those records into Looker via the query API or via webhook delivery to a data warehouse that Looker models. The sync is pull-only from QuickBooks Online; Looker acts as a consumer, not a source. Bill payment history and GL posting details refresh at the same cadence as invoices and bills, so your P&L and balance-sheet dashboards reflect the latest transactional state.

How ml-connector handles it

ml-connector manages two separate OAuth2 token cycles: QuickBooks Online (hourly refresh) and Looker (hourly re-login). It accepts the realm_id per QuickBooks Online customer, since the realm_id identifies the company within Intuit's multi-tenant platform. On the QuickBooks Online side, ml-connector uses the CDC endpoint for polling when available, with a 30-day lookback, and can also subscribe to webhooks if the customer enables them; webhook payloads trigger a full record fetch via GET to ensure all fields are captured. Because webhook payloads may arrive out-of-order or duplicated, ml-connector de-duplicates by entity ID and SyncToken. For Looker, it either posts records via the query API into a target table (if Looker's warehouse connection permits writes) or stages them for a Scheduled Plan to retrieve via S3 or SFTP. QuickBooks Online enforces SyncToken on every update, so ml-connector tracks the token and includes it on any write attempt; if a token is stale, the write fails and must be retried with the current token. Looker token expiration at 1 hour means ml-connector re-authenticates before every batch of queries, ensuring no mid-batch token timeout.

A real-world example

A 50-person product-services firm uses QuickBooks Online for billing and expense management and maintains a data warehouse connected to Looker for finance and operations dashboards. Previously, the finance team exported the P&L and aging reports from QuickBooks Online each week as CSVs and manually uploaded them to the warehouse for Looker to model. Now, with QuickBooks Online and Looker connected via ml-connector, new invoices, bill payments, and GL transactions flow into the warehouse on a daily schedule, Looker models refresh automatically, and the finance dashboards show real-time payables, receivables, and cash position without any manual export or upload step.

What you can do

  • Poll QuickBooks Online invoices, bills, vendors, customers, and journal entries on a schedule and deliver them to Looker for modeling and dashboards.
  • Manage separate OAuth2 token cycles for QuickBooks Online (1-hour expiry) and Looker (1-hour re-login) with automatic refresh.
  • Handle QuickBooks Online SyncToken requirements for concurrency control and retry failed updates with the latest token.
  • De-duplicate QuickBooks Online webhook payloads and fetch full records to ensure all fields are captured.
  • Stage accounting records for Looker Scheduled Plans to deliver into S3, SFTP, or email with cron-driven frequency.

Questions

Does ml-connector write data back to QuickBooks Online from Looker?
No. The sync is pull-only from QuickBooks Online into Looker. Looker acts as a consumer for analytics and reporting, not a source for updates to QuickBooks Online. If you need to update QuickBooks Online records, that goes through a separate integration.
How does ml-connector handle QuickBooks Online's OAuth2 token expiration and realm ID management?
ml-connector refreshes QuickBooks Online access tokens (1-hour expiry) before they expire and stores the realm_id per customer since QuickBooks Online is multi-tenant. It also tracks SyncToken on all records to satisfy QuickBooks Online's concurrency control requirement on updates. If a SyncToken becomes stale, ml-connector fetches the current token and retries.
What if QuickBooks Online webhook delivery is not available or unreliable?
ml-connector falls back to polling the QuickBooks Online CDC endpoint, which maintains 30 days of change history. Scheduled polling ensures records are captured even if webhooks are delayed or lost, and the deduplication logic handles any overlapping webhook and polling data.

Related integrations

Connect QuickBooks Online and Looker

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

Get started