Connect HubSpot to NetSuite
Turn a closed-won HubSpot deal into a NetSuite customer and sales order without rekeying: the flow reads the deal's associated company and contacts, creates or matches the customer, and raises the order, with a value gate for large deals. Order number and billing status flow back to the deal. Every order is an ordered run.
Why teams connect HubSpot and NetSuite
Sales closes in HubSpot, finance fulfills and bills in NetSuite, and the handoff is a rep pasting deal details into a NetSuite form, or a nightly job that cannot handle a deal with a new company. Deals stack up at month-end and revenue recognition slips.
- A closed-won deal becomes a NetSuite sales order the same day, with the company and contacts read straight from the deal's associations
- Customers are matched, not duplicated, on an external ID stored on both sides, and a new company is created from the HubSpot company record
- Deals above a threshold pause for controller approval before the order posts, so a large or unusual order is checked
- Order number, invoice, and payment status flow back to the deal, so reps stop asking finance. Every order is an ordered run log
Worked example
The deal-to-order flow most teams turn on first.
Closed-won HubSpot deal to a NetSuite customer and sales order, with a value gate
Triggered on the deal stage change, using the deal's associations to resolve the customer.
- Trigger: HubSpot
Deal stage changedtoclosedwon, passing the deal ID andamount. - Read associations:
Get associationson the deal returns the primary company and every associated contact with its label. - Gate: if
amountis 25,000 or more, send an approval to the controller with the company name and line items. On reject, log a note on the deal and stop. - Customer: NetSuite
Upsert recordonCustomer, keyed onexternalId = hs_company_id, from the mapping below, with the primary contact's details. - Order: NetSuite
Create recordonSalesOrder, keyed onexternalId = hs_deal_id, with a line per HubSpot line item matched to a NetSuite item by SKU. - Write back: write the order number to
Deal.erp_order_numberand post the order link to the deal owner. - Ongoing: a second flow listens for NetSuite
InvoiceandCustomerPaymentchanges and updates a billing-status property on the deal.
Field mapping
The starting map for the deal and company to NetSuite Customer and Sales Order.
| HubSpot | NetSuite | Notes |
|---|---|---|
company hs_object_id | Customer.externalId | Match key. Creates the customer if missing. |
deal hs_object_id | SalesOrder.externalId | Idempotency key. A re-fire updates the order. |
company name | Customer.companyName | |
company domain | Customer.web | Also a secondary customer match on domain. |
primary contact email, firstname, lastname | Customer.contact | Primary contact on the customer record. |
deal closedate | SalesOrder.tranDate | Epoch milliseconds in HubSpot. Cast and convert to the NetSuite timezone. |
| deal currency | SalesOrder.currency | Fails the run if the currency is not enabled in NetSuite. |
line item hs_sku | SalesOrder.item.item | Resolved to internal item ID. A miss holds the order for review. |
line item quantity | SalesOrder.item.quantity | |
line item price | SalesOrder.item.rate | Override, so NetSuite price rules do not restate the quoted price. |
| deal owner email | SalesOrder.salesRep | Resolved to a NetSuite employee record. |
What syncs, each direction
- Deals and companies. Closed-won deals become sales orders. Associated companies become customers. Deal amendments update the open order. (HubSpot to NetSuite)
- Billing status. Invoice created, payment received, and item shipped events update a billing-status property and the amount on the deal. (NetSuite to HubSpot)
- Account financials. Credit hold, payment terms, and balance sync onto the HubSpot company so reps see risk before they quote a renewal. (NetSuite to HubSpot)
- Products and pricing. New items and price changes keep the HubSpot product library and the NetSuite item list aligned, with one source of truth. (Either direction)
Governance and audit
The same controls apply to this sync as to every other Neblex workload.
- Ordered run log. Every order is an event log with the deal, the association read, the customer and item resolution, and the sales order. Replay without re-posting.
- Approval and holds. Large deals pause for controller approval. Orders with an unmapped SKU hold in a review queue.
- Scoped access. HubSpot uses a private app token with deal, company, and product scopes. NetSuite uses a role limited to sales orders, customers, and items.
- Environments. Build against a HubSpot test account and a NetSuite sandbox, then promote the same flow to production.
Frequently asked questions
How does the flow know which company a deal belongs to?
It reads the deal's associations. Get associations returns the primary company and every associated contact in one call, so no company field on the deal is needed.
What happens to a deal with a line item that has no NetSuite item?
The whole order holds in a review queue with the unmapped SKU named, rather than creating a partial sales order.
Are duplicate customers and orders prevented?
Yes. Customers match on the HubSpot company ID stored as an external ID, and the order is keyed on the deal ID, so a re-fire updates rather than creates.
Does anything get installed in NetSuite?
No. The connector uses NetSuite web services. No SuiteScript or bundle is deployed.
Can we use HubSpot line items, or do we need quotes?
Either. The flow reads line items directly from the deal, and can also read a HubSpot quote's line items if that is where your pricing lives.
Connectors on this page
HubSpot
CRM
- Operations
- 336
- Typed outputs
- 81.5%
- Change triggers
- 48 (poll)
- Authentication
- Bearer
NetSuite
Applications
- Operations
- 271
- Typed outputs
- 0%
- Change triggers
- 1 (poll)
- Authentication
- ConnectionString
NetSuite does not publish typed output schemas yet, so the field mapping on this page is configured in the flow rather than pre-verified.
Bring one real integration
We will build it with you against your own systems, with the run log open.