HubSpot + QuickBooks: what the native integration cannot do and when custom development is needed

The official HubSpot and QuickBooks Online connector exists — and at first glance it looks convincing. Two-way sync, invoices from deals, payment statuses in the timeline. But as soon as a business steps outside the basic scenario, the integration begins to break: duplicate invoices, inability to edit, no progress invoicing. This article is an honest breakdown of what the native solution cannot do, and when it makes sense to commission a custom integration.


What the native integration can do

The official QuickBooks Online Data Sync connector in the HubSpot marketplace covers basic scenarios:

  • Creating a QuickBooks invoice directly from a HubSpot deal card
  • Displaying invoice status (Draft, Sent, Paid, Overdue) in the contact timeline
  • Two-way product sync between HubSpot and QuickBooks catalogs
  • Basic automation via HubSpot Workflows based on invoice data
  • Syncing contacts from QuickBooks to HubSpot

For a small team with a simple funnel and standard invoices, this is sufficient. But as soon as non-standard business logic appears, the native solution runs into documented limitations.


Where the native integration breaks

These are not hypothetical scenarios — these are officially documented connector limitations.

Invoices cannot be edited after creation.
If an invoice is created from HubSpot, any change must be made through HubSpot only. Editing directly in QuickBooks — adding line items, changing price, modifying tax — breaks the sync. The invoice stops updating in both directions.

No progress invoicing.
It is not possible to issue a partial invoice — for example, a 30% upfront payment upon contract signing and 70% after project completion. The native integration supports only a full invoice for the total deal amount.

Revenue Recognition does not work.
QuickBooks requires the ServiceDate field in line items for Revenue Recognition. HubSpot does not pass this field — companies that need correct period-based revenue recognition are forced to fill in data manually.

Payments cannot be split across invoices.
If one payment in QuickBooks is linked to multiple invoices, this information is not synced to HubSpot. The financial picture in the CRM remains incomplete.

Duplicate invoices.
A known issue: under certain conditions both services create copies of the same invoice. This pollutes data and creates confusion in accounting.

Subscriptions update incorrectly.
When subscription terms are changed in HubSpot, data is passed to QuickBooks with errors. For SaaS companies and service businesses with recurring payments, this is critical.

Standard HubSpot objects only.
The integration does not work with custom CRM objects. If your funnel is built on non-standard entities, the connector simply does not see them.


What a custom integration from Exceltic.dev solves

  • Full editing freedom — invoices are created directly via the QuickBooks API without dependency on HubSpot sync. Changes in QuickBooks do not break the data flow
  • Progress invoicing — middleware supports creating multiple invoices for a single deal: upfront payment, interim, and final — each linked to its pipeline stage
  • ServiceDate transmission — the ServiceDate field in each line item is passed from a custom HubSpot deal field, ensuring correct Revenue Recognition in QuickBooks
  • Payment mapping — one payment can be distributed across multiple invoices with data written to custom HubSpot deal properties
  • Invoice deduplication — before creation the system checks for an existing invoice with the same DocNumber or CustomerRef + TxnDate, eliminating duplicates at the architecture level
  • Custom object support — the integration works with any HubSpot objects via the Custom Objects API, not just standard Deal and Contact
  • Multi-funnel logic — different pipelines in HubSpot have different scenarios: one creates an invoice, another an Estimate, a third only notifies the finance director

How the integration works — technical process

Connection architecture

The integration is built on the HubSpot Webhooks → Exceltic middleware → QuickBooks Online REST API v3 stack. QuickBooks authentication is implemented via OAuth 2.0 with automatic token refresh — no manual reconnection every 60 days. Reverse sync works through QuickBooks CDC (Change Data Capture) Webhooks, which notify middleware when Invoice and Payment objects change.

For correct Revenue Recognition, each line item is passed with a full set of fields: ItemRef, Description, UnitPrice, Qty, ServiceDate, TaxCodeRef, ClassRef.

Step-by-step scenario with progress invoicing

  1. Deal moves to the “Upfront Payment” stage in the HubSpot pipeline
  2. HubSpot Webhook sends an event with the deal ID to the middleware endpoint
  3. Middleware requests deal data GET /crm/v3/objects/deals/{id} with custom properties
  4. System looks up the Customer in QuickBooks: SELECT * FROM Customer WHERE PrimaryEmailAddr = '{email}'
  5. If Customer not found — a new one is created POST /v3/company/{realmId}/customer
  6. Invoice is formed for 30% of the amount with ServiceDate, TaxCodeRef, and a Line items array
  7. Invoice is created: POST /v3/company/{realmId}/invoice
  8. Middleware writes DocNumber and the link to a custom HubSpot deal property
  9. When moving to the “Final Payment” stage — the same cycle creates a second invoice for 70%
  10. When payment arrives in QuickBooks — CDC Webhook updates the Payment Status property on the HubSpot deal

What happens on error

When QuickBooks API returns 503 Service Unavailable, middleware places the event in a queue with exponential backoff: retries after 1, 5, and 15 minutes. If all three attempts fail — a task is created in HubSpot for the responsible manager via the Tasks API with the error description and a link to the deal. All requests are logged with timestamps for retrospective audit.


Real-world case

Cybersecurity consulting company, 5 account managers, ~30 deals per month, clients in the US and UK.

The company operated on a 40/60 model: 40% upfront at contract signing, 60% after the audit was complete. The native connector could not create two invoices for one deal — managers created the second invoice manually directly in QuickBooks. This inevitably broke the sync: financial data in HubSpot became stale, account managers could not see the status of the second payment in the CRM.

The financial controller spent 5–6 hours per week manually reconciling data between HubSpot and QuickBooks. Revenue Recognition did not work — the ServiceDate field was not passed, creating issues during quarterly audits.

After the custom integration launched, progress invoicing works fully automatically. Both invoices are created by pipeline stage triggers and both are visible in the HubSpot deal card. ServiceDate is passed from a custom contract field — Revenue Recognition in QuickBooks works correctly without manual intervention.

Result: 20+ hours per month returned to the financial controller, 0 sync breaks over 5 months, clean data for quarterly audits.


Which businesses benefit most

The custom integration is most relevant for professional services companies with milestone-based billing: cybersecurity, IT audit, legal services, architecture firms, engineering consulting. Wherever one contract means multiple invoices tied to project milestones.

Critical for companies with Revenue Recognition requirements — for example, those undergoing audits under US GAAP or IFRS 15 standards. The native integration does not pass ServiceDate, making QuickBooks data incorrect for audit purposes without manual correction.


Frequently asked questions

How is a custom HubSpot + QuickBooks integration better than native?
The native connector does not support progress invoicing, breaks when invoices are edited in QuickBooks, and does not pass ServiceDate for Revenue Recognition. The Exceltic.dev custom integration works directly with QuickBooks API v3 and covers all of these scenarios without marketplace connector limitations.

What is progress invoicing and how is it implemented in the custom integration?
Progress invoicing is the ability to issue multiple invoices for a single deal by milestone: for example, 40% upfront and 60% final payment. Middleware creates each invoice triggered by a specific HubSpot pipeline stage, links it to the deal, and writes the reference to a custom CRM property.

Will the integration work if we edit invoices directly in QuickBooks?
Yes. Unlike the native connector, the custom integration does not break when edits are made in QuickBooks. Changes are tracked via CDC Webhooks and automatically update data in HubSpot.

Does the integration support custom HubSpot objects?
Yes. Middleware works with any objects via the HubSpot Custom Objects API — not only standard Deal and Contact. This is important for companies with a non-standard CRM architecture.

How long does development take?
A base integration with field mapping and deduplication — 3–5 business days. The full version with progress invoicing, Revenue Recognition, and multi-funnel logic — 7–12 business days. Exceltic.dev sets exact timelines after a technical brief.

If the native HubSpot + QuickBooks connector does not cover your scenarios — describe your requirements to the Exceltic.dev team. We will review the architecture and propose a solution tailored to your funnel.

More articles

All →