ml-connector
QuickBooks DesktopGoogle Sheets

QuickBooks Desktop and Google Sheets integration

QuickBooks Desktop stores your vendors, bills, invoices, and general ledger on a Windows machine. Google Sheets holds your data in the cloud where your team can view, audit, and report on it. Connecting the two ensures your accounting records are accessible outside the office and creates a reliable backup of transaction history. ml-connector acts as the QBWC SOAP service so you do not need to host polling infrastructure, and it maps QuickBooks Desktop entities into Google Sheets columns that you define.

How QuickBooks Desktop works

QuickBooks Desktop is a Windows-installed accounting product where all data lives in a local company file. Integration requires the QuickBooks Web Connector (QBWC), a customer-hosted polling agent that calls a remote SOAP endpoint to retrieve data. The agent polls on a configurable interval (typically 5 to 15 minutes) and queries QuickBooks Desktop using QBXML, an XML dialect specific to QuickBooks. Changes are detected using ModifiedDateRangeFilter, and deleted transactions are identified with TxnDeletedQueryRq. The system supports no webhooks; all changes are discovered via polling. Session authentication uses a token-based handshake where QBWC provides credentials and receives a session GUID for subsequent calls. QuickBooks Desktop must be running and logged into the company file for the QBWC agent to process requests.

How Google Sheets works

Google Sheets is a cloud-based spreadsheet platform with a REST API (v4) for reading and writing cell data. It uses OAuth 2.0 for authentication and supports both user-delegated and service account flows. Data is stored in sheets (tabs) where customers define their own schema using column headers and named ranges. The API operates on A1 notation ranges or named ranges, so ml-connector writes QuickBooks Desktop records as rows into sheets you configure. Google Sheets is general-purpose and not purpose-built for accounting, so the customer defines which columns map to which QuickBooks Desktop fields. Google Drive watch channels exist for push notifications but have short TTLs (1 hour minimum, 24 hours maximum) and require manual re-registration, so polling is the recommended approach.

What moves between them

Records flow from QuickBooks Desktop into Google Sheets. On each polling interval, ml-connector queries vendors, bills, customers, invoices, and accounts from the QuickBooks Desktop company file and writes or updates corresponding rows in Google Sheets. Deletion is tracked via QBWC TxnDeletedQueryRq and marked in Sheets. The cadence follows the QBWC polling interval you configure (typically 5 to 15 minutes). Reference data such as customer and vendor lists, item definitions, and chart of accounts are synced to maintain consistency between systems. Because Google Sheets has no native ERP schema, you define the column layout in your sheets, and ml-connector writes data into the columns you specify.

How ml-connector handles it

ml-connector hosts the QBWC SOAP endpoint that your customer's Windows machine polls. When QBWC calls authenticate(), ml-connector validates the username and password against the stored credentials and returns a session token (GUID) that QBWC includes in all subsequent SOAP calls during that poll cycle. ml-connector then issues QBXML queries to discover changes since the last poll using ModifiedDateRangeFilter, parses the QBXML response, and writes the records to Google Sheets using the REST API. Session tokens are cached and reused within a single poll cycle to minimize handshakes. Google Sheets writes use the OAuth2 bearer token; ml-connector stores this token encrypted and refreshes it if a call returns 401 Unauthorized. Because QuickBooks Desktop entities have versioning (EditSequence), ml-connector re-queries an object before writing an update to avoid conflicts from concurrent edits. QBWC requests must complete within approximately 60 seconds, so large queries are paginated. Delete detection uses TxnDeletedQueryRq, and those deleted IDs are marked in Sheets. The polling interval is configurable per customer and must respect QBWC's minimum of 1 minute. Every record written carries an audit log entry so you can trace when it arrived and which poll cycle it came from.

A real-world example

A mid-sized bookkeeping firm manages finances for 50 small construction and service businesses using QuickBooks Desktop at each customer site. Before the integration, the firm's accountants logged into each customer's QuickBooks Desktop instance to extract vendor and invoice lists, then manually pasted them into shared Google Sheets for review and reconciliation. Data was stale and spreadsheets frequently out of sync with the QuickBooks Desktop source. With QuickBooks Desktop and Google Sheets connected, every 10 minutes the firm's master sheets refresh automatically with the latest vendors, bills, and invoices from all customer sites. The accountants now log into one central Google Sheets workspace to see all data, flag discrepancies for follow-up, and audit payment history without touching each customer's Windows machine.

What you can do

  • Poll QuickBooks Desktop on a configurable interval and write vendors, bills, invoices, customers, and accounts to Google Sheets.
  • Authenticate QuickBooks Desktop via QBWC session tokens and Google Sheets via OAuth 2.0, storing credentials encrypted.
  • Detect changes using ModifiedDateRangeFilter and deletions using TxnDeletedQueryRq, keeping Sheets in sync with QuickBooks Desktop.
  • Map QuickBooks Desktop QBXML fields to Google Sheets columns that you define, supporting both A1 notation and named ranges.
  • Track audit trails for every record so you can see when data arrived, which poll cycle it came from, and detect conflicts from concurrent edits.

Questions

Why is the QBWC agent required on the customer's Windows machine?
QuickBooks Desktop is a Windows-installed product where data lives in a local file that only the installed QuickBooks application can read. QBWC is the polling agent provided by Intuit that accesses QuickBooks Desktop via QBXML. ml-connector hosts the SOAP endpoint that QBWC calls, so you do not build that polling loop yourself, but QBWC must run on the customer's Windows machine where QuickBooks Desktop is installed.
How does ml-connector handle the QuickBooks Desktop session token handshake?
When QBWC calls the SOAP authenticate() method with a username and password, ml-connector validates those credentials against the stored configuration and returns a session GUID. QBWC includes that session GUID in every SOAP request during the polling cycle. ml-connector caches the session token within the cycle to avoid redundant handshakes. Session tokens expire when the poll cycle completes, so a new authenticate() call starts the next cycle.
What if the QuickBooks Desktop company file is not open or QBWC cannot reach it?
ml-connector will receive a SOAP fault or timeout from QBWC and retry on the next polling interval. Errors are logged in the audit trail so you can see when polling failed. The most common cause is QuickBooks Desktop being closed or not logged into the correct company file on the Windows machine. Once QuickBooks Desktop is running and logged in again, the next QBWC poll will succeed and sync any missed records.

Related integrations

Connect QuickBooks Desktop and Google Sheets

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

Get started