ml-connector
QuickBooks DesktopZoho CRM

QuickBooks Desktop and Zoho CRM integration

QuickBooks Desktop is the backbone of many small accounting operations, but it lives on a Windows machine with no cloud connectivity. Zoho CRM holds your customer relationships and deal pipeline. Connecting the two keeps customer data and sales records in sync without manual re-entry. New customers and invoices created in QuickBooks Desktop flow into Zoho CRM as accounts and deals, and amendments sync in both directions so neither system becomes the source of truth by accident.

How QuickBooks Desktop works

QuickBooks Desktop is installed on a Windows machine and polled via the QBWC (QuickBooks Web Connector) agent, which calls a SOAP endpoint at a URL you specify on a configurable interval (typically every 5-15 minutes). Authentication is session-token based: QBWC supplies username and password, your service returns a session GUID for the duration of that polling cycle. QuickBooks Desktop exposes vendors, bills, purchase orders, invoices, payments, accounts, customers, items, employees, and journal entries through QBXML (XML over HTTPS). There are no webhooks; changes are detected by polling with a modified-date filter and a separate query for deleted transactions. The system supports multi-company deployments through separate QBWC registrations.

How Zoho CRM works

Zoho CRM is a cloud-based customer relationship management platform accessed via REST APIs over HTTPS, region-specific (zohoapis.com, .eu, .in, etc). It authenticates with OAuth 2.0, either Authorization Code flow (with offline refresh tokens for long-lived integrations) or Client Credentials for headless system-to-system connections. Zoho CRM exposes accounts, contacts, vendors, invoices, purchase orders, sales orders, quotes, products, leads, and deals. Notifications arrive via webhooks with channel_id and token verification, though channels expire after about one day and must be renewed. Webhook payloads contain only record IDs; full record details are fetched via REST. Access tokens expire after one hour and must be refreshed from a persistent refresh token. The api_domain field in the OAuth response must be used as the base URL for all subsequent requests.

What moves between them

Customers and invoices flow from QuickBooks Desktop into Zoho CRM as accounts and deals on the QBWC polling cycle. When QBWC calls your service, ml-connector queries QuickBooks Desktop for customers modified since the last poll, invoices, and line items, then writes them to Zoho CRM accounts and deals, linked to the correct products and contacts. Changes to customer names, addresses, or invoice amounts propagate through the sync. Deleted customers and invoices are marked inactive in both systems (QuickBooks Desktop has no true delete, and Zoho marks them as closed). The poll interval is configurable; typical deployments run every 10 minutes.

How ml-connector handles it

ml-connector accepts the QBWC session token in the SOAP authenticate() method, stores it for the polling session, and uses it to query QuickBooks Desktop with ModifiedDateRangeFilter for recent changes. On the Zoho side, it refreshes the OAuth access token hourly and watches for 401 responses to trigger a refresh before retry. Customer records from QuickBooks Desktop are mapped to Zoho CRM accounts by matching email or phone, with fallback to a new account creation; invoice headers become deals, and line items become linked products in the deal. Zoho CRM is Professional edition or above (invoices and purchase orders are not available in Free or Standard). Because QuickBooks Desktop has no idempotency key mechanism, ml-connector deduplicates by transaction ID and EditSequence version counter; concurrent edits to the same customer or invoice are detected and re-queried before attempting a modification. QBWC requests have a 60-second timeout, so large customer or invoice lists are paginated. Webhook channels in Zoho CRM expire after one day and must be renewed via PATCH before lapse; ml-connector tracks expiry and renews proactively.

A real-world example

A mid-sized professional services firm runs QuickBooks Desktop on a Windows office computer to manage vendor bills, customer invoices, and the general ledger. The sales team uses Zoho CRM to track leads and deals. Before integration, the office manager manually entered new customers from QuickBooks Desktop into Zoho CRM and updated invoice amounts in deals when customers were invoiced, a time-consuming and error-prone process. With QuickBooks Desktop and Zoho CRM connected, customers created in QuickBooks Desktop automatically appear in Zoho CRM as accounts, and invoices are added as deals linked to the account. The sales team always sees current customer status and recent invoices without asking the office.

What you can do

  • Sync customers from QuickBooks Desktop to Zoho CRM accounts, with address and contact info mapped to the account record.
  • Create and update deals in Zoho CRM when invoices are created or modified in QuickBooks Desktop.
  • Map QuickBooks Desktop line items to Zoho CRM products, and link them to the correct deals.
  • Handle QBWC SOAP session tokens and Zoho OAuth refresh automatically, with retries on network failure.
  • Detect deleted customers and invoices and mark them closed in Zoho CRM, with a full audit trail on every sync cycle.

Questions

How does the integration detect changes in QuickBooks Desktop if there are no webhooks?
ml-connector uses the QBWC polling agent, which calls your SOAP endpoint on a configurable interval (typically every 5-15 minutes). Each poll queries QuickBooks Desktop with a ModifiedDateRangeFilter to find customers and invoices changed since the last sync, plus a separate TxnDeletedQueryRq for deletions. The polling cadence is a setting you control at QBWC configuration time.
Does the integration work with QuickBooks Desktop on any operating system?
No. QuickBooks Desktop runs only on Windows, and QBWC (the agent that polls your service) also runs on Windows. The QuickBooks Desktop file must be open and logged in on the Windows machine for QBWC to process requests. This is a constraint of QuickBooks Desktop itself, not the integration.
What Zoho CRM editions are supported, and how do invoices and deals map?
Zoho CRM Professional edition and above. Free and Standard editions do not include invoices, purchase orders, or sales orders. Invoices from QuickBooks Desktop are created as deals in Zoho CRM and linked to the account (customer). Line items become products in the deal. Customer names and addresses from QuickBooks Desktop populate the account record in Zoho.

Related integrations

Connect QuickBooks Desktop and Zoho CRM

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

Get started