ml-connector
QuickBooks DesktopHubSpot

QuickBooks Desktop and HubSpot integration

QuickBooks Desktop runs your accounting on-premises; HubSpot runs your customer relationships in the cloud. Connecting the two keeps your customer and vendor master data in sync without the manual re-entry. When you add a new customer in QuickBooks Desktop, it flows to HubSpot as a contact and company, so your sales and service teams have the same address, phone, and email data that accounting is working from. When contact information changes in either system, the integration can propagate that change to keep both sides consistent.

How QuickBooks Desktop works

QuickBooks Desktop exposes customers, vendors, invoices, bills, accounts, and employees through a SOAP-based interface called QBXML. A customer-hosted Windows agent called the Web Connector (QBWC) polls your remote SOAP endpoint on a configurable interval (typically every 5 to 15 minutes) and provides a session token via a SOAP authenticate() method. Authentication uses a username and password passed by QBWC, and your service returns a session ticket (GUID) for all subsequent SOAP calls in that session. QuickBooks Desktop has no webhooks and no way to push data outbound, so polling via QBWC is the only integration method. Queries use ModifiedDateRangeFilter to detect changes since the last sync, and TxnDeletedQueryRq to find deleted transactions.

How HubSpot works

HubSpot exposes contacts, companies, deals, and invoices through a REST API at https://api.hubapi.com. Authentication uses a Private App Access Token (Bearer token, format pat-na1-) for server-to-server integrations. HubSpot supports both webhooks with signature verification and polling through list and search endpoints, though webhook subscriptions require a separate Public App registration. Batch operations are capped at 100 records per request, and cursor-based pagination is limited to 200 records per page. Rate limits vary by tier: Free and Starter plans allow 100 calls per 10 seconds, while Professional and Enterprise plans allow 190 calls per 10 seconds.

What moves between them

Customer and vendor records flow from QuickBooks Desktop to HubSpot. Customers from QuickBooks map to HubSpot contacts and are associated with HubSpot companies. Vendors from QuickBooks also map to contacts and companies in HubSpot, allowing your procurement and sales teams to reference vendor information from the same CRM. The sync runs on a polling schedule you configure in QBWC (typically every 5 to 15 minutes) and detects changes by querying for transactions modified since the last sync. HubSpot does not push data back to QuickBooks Desktop, so the flow is one-way from accounting to CRM.

How ml-connector handles it

ml-connector implements a SOAP client that responds to QBWC's authenticate() call with a session token and processes QBXML requests during the polling interval. On each poll, it queries QuickBooks Desktop for customers and vendors modified since the last sync using ModifiedDateRangeFilter, then sends the records to HubSpot via its REST API using the Bearer token. ml-connector maps each QuickBooks customer to a HubSpot contact and company, and each vendor to a contact and company as well, associating them correctly so they appear as distinct entities in HubSpot. Because QBWC polling is sequential and typically runs every 5 to 15 minutes, the sync is not real-time but captures all changes within the polling window. ml-connector stores the session token securely, tracks the last-synced timestamp so the next poll queries only for changes, and maintains a full audit trail of every record sent to HubSpot so failed syncs can be retried without re-creating duplicate contacts or companies.

A real-world example

A mid-sized services firm uses QuickBooks Desktop for accounting and HubSpot for client and prospect management. Previously, the finance team would add new customers to QuickBooks Desktop at invoice time, and the sales team would manually re-enter the same companies and contacts into HubSpot, leading to mismatched addresses and phone numbers. With QuickBooks Desktop and HubSpot connected, every customer added to QuickBooks Desktop appears in HubSpot within the next polling interval as a contact and company, and the sales team can immediately see full billing and shipping address data that accounting has already validated. When a customer's phone number or billing address changes in QuickBooks Desktop, that update syncs to HubSpot automatically, so the CRM always reflects the master customer record from accounting.

What you can do

  • Sync customers from QuickBooks Desktop to HubSpot as contacts and companies with complete address and contact information.
  • Sync vendors from QuickBooks Desktop to HubSpot as distinct contacts and companies so procurement data is available in the CRM.
  • Authenticate to QuickBooks Desktop via SOAP session tokens issued by QBWC and store them securely across polling intervals.
  • Authenticate to HubSpot using Bearer tokens and handle rate limiting and batch operation caps.
  • Detect changes in QuickBooks Desktop using modified-date queries and sync only new or updated records on a configurable polling schedule.

Questions

How does the integration detect changes in QuickBooks Desktop if there are no webhooks?
ml-connector uses QBXML ModifiedDateRangeFilter on each polling cycle to query only customers and vendors modified since the last sync. QBWC calls your endpoint on a schedule you configure (typically every 5 to 15 minutes), and each poll captures all changes that happened in QuickBooks Desktop during that window. This ensures no changes are missed even though QuickBooks Desktop cannot push data outbound.
What happens if a customer exists in both QuickBooks Desktop and HubSpot already?
ml-connector tracks the last synced record ID and timestamp so it does not re-create duplicates on subsequent polls. When a customer is updated in QuickBooks Desktop, the integration updates the corresponding HubSpot contact and company by matching on the customer ID, preventing duplicate records from accumulating over time.
Can data flow from HubSpot back into QuickBooks Desktop?
No. QuickBooks Desktop QBWC is poll-only and designed to pull data from your server, not receive updates. The integration is one-way: customers and vendors flow from QuickBooks Desktop to HubSpot. If you need to sync changes from HubSpot back to QuickBooks Desktop, that would require a separate process outside of QBWC.

Related integrations

Connect QuickBooks Desktop and HubSpot

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

Get started