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 entry is an ordered run.
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
Triggered on the deal stage change, idempotent on the deal ID.
- Trigger: HubSpot deal enters a stage flagged closed won, carrying the associated company, the primary contact, and the line items.
- 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, pause for finance approval. 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 later QuickBooks payment 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 re-fired stage change 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 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.
- Ordered run log. Every invoice records the deal, the resolved customer, the mapped lines, and the QuickBooks response. Replay without re-posting.
- Approval steps. Invoices over a threshold or with a non-standard discount pause 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 grant 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 log 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.
Is the payment sync prompt?
on the next poll. QuickBooks payment events trigger the write-back, and a scheduled sweep catches anything the event missed.
Connectors on this page
HubSpot
CRM
- Operations
- 336
- Typed outputs
- 81.5%
- Change triggers
- 48 (poll)
- Authentication
- Bearer
QuickBooks
Accounting
- Operations
- 50
- Typed outputs
- 100%
- Change triggers
- Poll or inbound webhook
- Authentication
- OAuth2
Bring one real integration
We will build it with you against your own systems, with the run log open.