Connect HubSpot to QuickBooks
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.
- 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 withGet associationand a batch read. - Resolve company: find the QuickBooks customer by the company's
quickbooks_customer_idproperty. If empty, search by normalized name and domain, and write the ID back on a match. - Idempotency: query QuickBooks for an invoice whose private note holds the deal ID. If one exists, stop.
- 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.
- Approval: if
amountis over the threshold or the discount exceeds the limit, a Wait for form step sends finance an approval task. Otherwise continue. - Create invoice: QuickBooks
Create Invoicewith the lines, the customer, the terms, and the deal ID in the private note. - Write back: set the deal properties
invoice_numberandinvoice_status = sent. A second flow polls QuickBooks with the Change Data Capture operation and, when a payment lands, updates the status and setsinvoice_paid_date.
Field mapping
The starting map for the HubSpot deal to QuickBooks Invoice step.
| HubSpot | QuickBooks Online | Notes |
|---|---|---|
deal.dealId | Invoice.PrivateNote (contains ID) | Idempotency key. Queried before creating so a repeated trigger does not double-invoice. |
company.quickbooks_customer_id | Invoice.CustomerRef | Match key. Written back on first match if only name and domain matched. |
line_item.quantity | Invoice.Line.SalesItemLineDetail.Qty | One line per HubSpot line item. |
line_item.hs_sku | Invoice.Line.SalesItemLineDetail.ItemRef | Resolved to the QuickBooks item ID. Unmapped SKUs fall back to a generic item and flag for review. |
line_item.price | Invoice.Line.SalesItemLineDetail.UnitPrice | Override, so QuickBooks price rules do not restate the quoted price. |
deal.deal_currency_code | Invoice.CurrencyRef | Currency gotcha: only on a multi-currency company, and must match the customer's currency or the create fails. |
company.payment_terms | Invoice.SalesTermRef | Mapped through a lookup to a QuickBooks term record. Defaults to Net 30 if unset. |
QuickBooks Invoice.Balance vs payments | deal.invoice_status, deal.invoice_paid_date | Return 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
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
Bring one real integration
We will build it with you against your own systems, with the run log open.