Integration

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.

Two-way
Direction
prompt on deal, scheduled for status
Latency
Deal stage to Closed Won
Common trigger
Template, then map items and fields
Setup

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.

  1. 1Trigger: HubSpot Deal stage changed to closedwon, passing the deal ID and amount.
  2. 2Read associations: Get associations on the deal returns the primary company and every associated contact with its label.
  3. 3Gate: if amount is 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.
  4. 4Customer: NetSuite Upsert record on Customer, keyed on externalId = hs_company_id, from the mapping below, with the primary contact's details.
  5. 5Order: NetSuite Create record on SalesOrder, keyed on externalId = hs_deal_id, with a line per HubSpot line item matched to a NetSuite item by SKU.
  6. 6Write back: write the order number to Deal.erp_order_number and post the order link to the deal owner.
  7. 7Ongoing: a second flow listens for NetSuite Invoice and CustomerPayment changes 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.

HubSpotNetSuiteNotes
company hs_object_idCustomer.externalIdMatch key. Creates the customer if missing.
deal hs_object_idSalesOrder.externalIdIdempotency key. A re-fire updates the order.
company nameCustomer.companyName
company domainCustomer.webAlso a secondary customer match on domain.
primary contact email, firstname, lastnameCustomer.contactPrimary contact on the customer record.
deal closedateSalesOrder.tranDateEpoch milliseconds in HubSpot. Cast and convert to the NetSuite timezone.
deal currencySalesOrder.currencyFails the run if the currency is not enabled in NetSuite.
line item hs_skuSalesOrder.item.itemResolved to internal item ID. A miss holds the order for review.
line item quantitySalesOrder.item.quantity
line item priceSalesOrder.item.rateOverride, so NetSuite price rules do not restate the quoted price.
deal owner emailSalesOrder.salesRepResolved 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.

See it on your data

Bring one real integration

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