Integration

Connect HubSpot to QuickBooks

Turn a closed-won HubSpot deal into a QuickBooks invoice, built from the deal's line items, with the company matched so nothing is duplicated. When the invoice is paid, the deal shows it, and revenue properties in HubSpot stay honest. An approval step can hold anything unusual. Every invoice is a run you can inspect step by step.
Two-way (invoice out, payment back)
Direction
Minutes after close and after payment
Latency
Won deal; payments found by polling
Common trigger
Build the flow, then map items and terms
Setup

Why teams connect HubSpot and QuickBooks

Sales runs in HubSpot. The books are in QuickBooks. Without a link, a rep pings finance every time a deal closes, finance re-keys the line items, and the "closed revenue" number in HubSpot and the invoiced total in QuickBooks slowly drift apart.

  • A closed-won deal creates a QuickBooks invoice from the deal's line items, with products, quantities, and prices carried across
  • Companies are matched on a stored QuickBooks ID, falling back to a normalized name and domain, so a repeat customer is never duplicated
  • When QuickBooks records a payment, the deal shows paid, partially paid, or overdue, and the paid date is set
  • An approval step can hold an invoice over a threshold or with a non-standard discount before it posts

Worked example

The deal-to-invoice flow most teams turn on first.

A closed-won HubSpot deal becomes a QuickBooks invoice, payment status back

Started by the polled deal trigger, safe to repeat on the deal ID.

  1. Trigger: HubSpot New or updated deal, polled on the schedule you set, with a Filter that continues only for a closed-won stage. The flow then reads the deal's company, primary contact, and line items with Get association and a batch read.
  2. Resolve company: find the QuickBooks customer by the company's quickbooks_customer_id property. If empty, search by normalized name and domain, and write the ID back on a match.
  3. Idempotency: query QuickBooks for an invoice whose private note holds the deal ID. If one exists, stop.
  4. Map lines: for each HubSpot line item, resolve the QuickBooks item by SKU, carry quantity and price, and apply the tax code from a lookup on the company's region.
  5. Approval: if amount is over the threshold or the discount exceeds the limit, a Wait for form step sends finance an approval task. Otherwise continue.
  6. Create invoice: QuickBooks Create Invoice with the lines, the customer, the terms, and the deal ID in the private note.
  7. Write back: set the deal properties invoice_number and invoice_status = sent. A second flow polls QuickBooks with the Change Data Capture operation and, when a payment lands, updates the status and sets invoice_paid_date.

Field mapping

The starting map for the HubSpot deal to QuickBooks Invoice step.

HubSpotQuickBooks OnlineNotes
deal.dealIdInvoice.PrivateNote (contains ID)Idempotency key. Queried before creating so a repeated trigger does not double-invoice.
company.quickbooks_customer_idInvoice.CustomerRefMatch key. Written back on first match if only name and domain matched.
line_item.quantityInvoice.Line.SalesItemLineDetail.QtyOne line per HubSpot line item.
line_item.hs_skuInvoice.Line.SalesItemLineDetail.ItemRefResolved to the QuickBooks item ID. Unmapped SKUs fall back to a generic item and flag for review.
line_item.priceInvoice.Line.SalesItemLineDetail.UnitPriceOverride, so QuickBooks price rules do not restate the quoted price.
deal.deal_currency_codeInvoice.CurrencyRefCurrency gotcha: only on a multi-currency company, and must match the customer's currency or the create fails.
company.payment_termsInvoice.SalesTermRefMapped through a lookup to a QuickBooks term record. Defaults to Net 30 if unset.
QuickBooks Invoice.Balance vs paymentsdeal.invoice_status, deal.invoice_paid_dateReturn path. Paid at zero balance, Partially Paid otherwise, Overdue past due date.

What syncs, each direction

  • Invoices. A closed-won deal creates an invoice from the line items, with mapped items, prices, terms, and tax. (HubSpot to QuickBooks)
  • Customers. A new or changed company creates or updates the QuickBooks customer, matched on a stored ID. (HubSpot to QuickBooks)
  • Payment status. Payments and credit memos, picked up by polling, update the deal's invoice status and paid date. (QuickBooks to HubSpot)
  • AR aging (optional). A nightly roll-up writes open AR and days overdue onto the company for CS and collections. (QuickBooks to HubSpot)

Governance and audit

The same controls apply to this sync as to every other Neblex workload.

  • Run history. Every invoice is a run with the deal, the resolved customer, the mapped lines, and the QuickBooks response. A failed run can be replayed from the step that failed, and the invoice check stops a second posting.
  • Approval steps. Invoices over a threshold or with a non-standard discount wait for a named approver before they are booked.
  • Scoped access. HubSpot uses a private app scoped to deals, companies, contacts, and line items. QuickBooks uses an OAuth connection to one company file.
  • Environments. Build against a HubSpot test account and a QuickBooks sandbox company, then promote the same flow to production.

Frequently asked questions

How is this different from the HubSpot QuickBooks app or a marketplace connector?

HubSpot's built-in QuickBooks integration is a fair starting point for basic invoice creation. Neblex fits when you want the invoice step inside a larger flow, an approval gate you control, matching logic on your terms, payment status and AR aging back on the company, and one run history across every integration.

Does it create the invoice automatically?

By default, on closed-won. You can require an approval first, always or only over a threshold.

How does it avoid duplicate customers?

It matches on a QuickBooks customer ID stored on the company. On the first match by name and domain it writes the ID back so later runs match directly.

What if the deal has no line items?

The flow can fall back to a single line from the deal amount and a default item, or hold for review, depending on how you configure it. It never creates a zero-line invoice.

Can it keep HubSpot revenue properties accurate?

Yes. The invoiced total and paid amount write back to deal properties, so HubSpot reporting reflects what was actually billed and collected, not just what was forecast.

How quickly does a payment show on the deal?

On the next poll, which you can run as often as every minute. The flow reads QuickBooks changes with the Change Data Capture operation, so a payment shows on the deal within minutes of being recorded.

Connectors used

HubSpot

CRM & Sales

Operations
336
Operations with typed output
81.5%
Change triggers
46 (poll)
Signs in with
API token
Connector reference

QuickBooks

Finance, Billing & Payments

Operations
50
Operations with typed output
100%
Change triggers
Poll or inbound webhook
Signs in with
OAuth 2.0 sign-in
Connector reference
See it on your data

Bring one real integration

We will build it with you against your own systems, with the run log open.