QuickBooks and HubSpot Integration: What the Native App Won't Do
A QuickBooks and HubSpot integration connects your deal pipeline to your accounting ledger so a closed-won deal becomes an invoice and payment status flows back to the record. HubSpot's native app handles contacts, companies, invoices and deal-to-invoice creation. Anything involving line items, multi-entity books, custom revenue logic or two-way writes needs a custom sync.
That gap is the whole article. The pages ranking for this query are setup instructions and app listings, which is fine if all you need is the OAuth handshake. They do not tell you what happens in month four when a customer exists three times in QuickBooks and your HubSpot deal amount no longer matches what was actually billed.
What the native QuickBooks and HubSpot integration actually does
Installed from Connected Apps, the native app gives you a defined and fairly narrow set of behaviours. HubSpot's own QuickBooks Online integration documentation is the source of truth, and it is worth reading before you buy anything third-party.
| Capability | Native HubSpot app | What you usually also want |
|---|---|---|
| Contact and company sync | Two-way via Data Sync, filterable | Match on email plus domain, not DisplayName |
| Deal to invoice | Creates a draft invoice in QuickBooks from a deal | Line items mapped from HubSpot products with tax codes |
| Invoice status back to HubSpot | Paid, overdue, sent surfaced on the record | Payment events triggering workflows and revenue attribution |
| Products and services | Import QuickBooks items into HubSpot products | Keeping SKU, price book and tax rates in step both ways |
| Multiple QuickBooks companies | One realm per HubSpot portal in practice | Routing by deal owner, region or legal entity |
| Custom objects | Not supported | Subscriptions, usage records, credit notes |
For a single-entity business with a clean customer list and simple invoices, the native app plus HubSpot Data Sync filters is genuinely enough. I have told people to stop there. If the accounting side is one QuickBooks company, invoices are flat-fee, and nobody edits customer names by hand, do not build anything.
The moment any of those three assumptions breaks, you are building a QuickBooks and HubSpot integration rather than installing one.
Where a QuickBooks and HubSpot integration breaks in production
Four failure modes cover most of what I get called about, and I have written up the QuickBooks side of these in more detail. Here they are with HubSpot specifically on the other end.
**1. Customer matching. ** QuickBooks Online enforces uniqueness on DisplayName, not on email. HubSpot dedupes contacts on email and companies on domain. So "Acme Corp" in HubSpot hits an existing "Acme Corp." in QuickBooks and the create call fails with a duplicate name error, or worse, succeeds as "Acme Corp 2". Store the QuickBooks Id on the HubSpot company as a custom property the first time you match, and never match on name again.
2. SyncToken conflicts. Every QuickBooks entity carries a SyncToken that increments on write. Send an update with a stale token and the API returns error 5010, a stale object error. Under a two-way sync where a bookkeeper edits in QuickBooks while your workflow edits from HubSpot, this happens weekly. The fix is a read-before-write on every update and a retry that re-reads the token once before it gives up.
3. Rate limits and token expiry. Intuit allows 500 requests per minute per realm, and the OAuth refresh token rotates on use with a 100 day lifetime. A workflow that has not run in a quarter comes back to a dead connection. Intuit's OAuth documentation spells this out; most builds ignore it until a Monday morning when nothing has invoiced since Friday.
4. Amount drift. HubSpot's amount on a deal is what sales agreed. The QuickBooks invoice total is what finance billed, after discounts, tax and the line someone added manually. If your reporting treats them as the same number, your forecast is wrong. Write the invoice total back to a separate property such as qbo_invoiced_total and reconcile the two deliberately.
Building a custom QuickBooks and HubSpot integration that survives
When the native app runs out, the architecture is not complicated. It is just unglamorous.
- Pick a source of truth per field, not per system. Customers originate in HubSpot. Invoice totals, tax and payment status originate in QuickBooks. Write that table down before any code exists, because this is the decision that stalls projects, not the API work.
- Use webhooks in both directions. QuickBooks fires entity webhooks for Invoice, Payment and Customer. HubSpot fires workflow webhooks and object change events. Polling every 15 minutes is a fallback, not a design.
- Queue everything. Each event goes into a queue with the entity type, the ID and the direction. If QuickBooks throttles or Intuit has an incident, records wait rather than vanish.
- Store the mapping table.
hubspot_company_idtoqbo_customer_id,hubspot_deal_idtoqbo_invoice_id. A separate Postgres table beats stuffing IDs into custom properties once you have more than a couple of object types. - Make failures loud and named. The alert should say "invoice create failed for deal 2288114, error 6240 duplicate document number", not "sync error".
Where it runs matters less than people think. Self-hosted n8n handles this well with a queue node and its own Postgres, and if you are choosing a platform, the tradeoffs are covered in how CRM workflow automation gets built and where it fails. Zapier will do the happy path and will not do read-before-write on SyncToken, so it survives until the first concurrent edit. If you are weighing the hosting options generally, the low code workflow tools comparison covers execution limits and error handling in more depth.
Choosing between native, middleware and custom
| Approach | Best for | Where it stops |
|---|---|---|
| Native HubSpot app | One QuickBooks company, simple invoices, standard objects | No line item control, no custom logic, one realm |
| Zapier or Make | Event-driven one-way pushes, low volume | No stale token handling, per-task cost at volume |
| Middleware (DBSync, Cloudify and similar) | Teams wanting templates and vendor support | Logic lives in their tool, and leaves when you do |
| Custom on n8n or code | Multi-entity, custom objects, real two-way sync | You own the upgrades and the on-call |
On the question Google keeps surfacing, which CRM integrates best with QuickBooks: Method CRM sits closest because it was built on the QuickBooks data model, and Salesforce has the deepest connector ecosystem. HubSpot is the better CRM for most sales teams and the QuickBooks link is adequate out of the box, which is a different claim from best. Pick the CRM your sales team will use, then engineer the accounting link.
And yes, HubSpot integrates with Microsoft 365 through the Outlook add-in and calendar sync, which matters here only because the same Data Sync engine underpins several of these connections and inherits the same one-object-at-a-time limits.
If your QuickBooks and HubSpot integration is already installed and the numbers still do not reconcile, the problem is almost never the connection. It is a field ownership decision nobody made. Book twenty minutes and bring your deal stage list and your QuickBooks chart of accounts. I will tell you whether this is a configuration fix or a build, including when the answer is that you do not need me.
Frequently asked questions
Is the QuickBooks and HubSpot integration free?
The native HubSpot app for QuickBooks Online is free to install and appears in Connected Apps, but two-way contact and company syncing runs through HubSpot Data Sync, which requires an Operations Hub tier for custom field mappings and filters. Third-party connectors from the HubSpot marketplace charge their own subscription. Your QuickBooks Online plan is unaffected by installing it.
Can HubSpot deals create invoices in QuickBooks automatically?
Yes. The native integration lets you send a HubSpot deal to QuickBooks Online as a draft invoice, pulling line items from HubSpot products where they are mapped to QuickBooks items. It creates a draft rather than sending it, so someone still approves. Fully automated send, tax code logic and multi-entity routing require a custom build against the QuickBooks Online API.
Does the QuickBooks and HubSpot integration sync two ways?
Contacts and companies sync two ways through HubSpot Data Sync with directional rules you set per object. Invoices are effectively one way plus status feedback: HubSpot pushes the draft, QuickBooks returns paid or overdue states. True two-way editing of invoice records is not supported natively and needs a custom sync with SyncToken read-before-write handling.
Why do duplicate customers appear after connecting HubSpot to QuickBooks?
QuickBooks Online enforces uniqueness on the DisplayName field while HubSpot dedupes on email address and company domain. Any difference in punctuation, trading name or legal suffix creates a second QuickBooks customer. Fix it by storing the QuickBooks customer Id on the HubSpot company record the first time a match is confirmed, then matching on that ID forever after.
How long does a custom QuickBooks and HubSpot integration take to build?
One clean sync between the two, with webhooks, a queue and named error alerting, is usually days rather than weeks. What stretches the calendar is deciding which system owns which field, cleaning a QuickBooks customer list with years of duplicates, and waiting on Intuit app credentials. Projects slip on decisions about data ownership, almost never on the API work itself.
Want this built rather than explained?
I build these systems for a living: CRM architecture, API integration and AI automation that runs without a person babysitting it. Six are in production right now, and two are products of my own with the code public. If you have a process that is breaking, book a call and bring it. Twenty minutes, no pitch.