Connect HubSpot to Neblex CPQ
A HubSpot deal reaches the stage you choose and a quote is waiting in Neblex CPQ with the company, contact, and address already matched through the deal's associations. The rep configures and prices in CPQ, approvals run there, and every stage the quote moves through is written back to the deal. Neblex Integration Fabric supplies the HubSpot connector and the flow; CPQ supplies the API and the event feed.
Why teams connect HubSpot and Neblex CPQ
Sales runs its pipeline in HubSpot. Product rules, price lists, and the approval matrix live in Neblex CPQ. Without a link, a rep re-types the company, contact, and deal into the quoting tool, then re-types the quote number and total back onto the deal. Companies get duplicated, the deal amount trails the priced quote, and the pipeline report is only as good as the last manual update.
Neblex CPQ has no HubSpot connector of its own, by design. It exposes every customer and quote operation through its API and records every meaningful change in a pull-based event feed that the consumer fetches and acknowledges. Neblex Integration Fabric supplies the other half: a HubSpot connector with 336 operations and 48 polled triggers, association-aware reads, and a visual flow that maps fields, matches records, pauses for a person where needed, and writes the result back.
HubSpot owns the company, the contact, and the deal. CPQ owns the configuration, the price, the approval, and the quote record. Neither side edits what the other owns.
How it works
On the CPQ side there are two surfaces. The first is the API, reached through the Neblex CPQ connector in Integration Fabric, which carries 286 operations. This flow uses postapi_customers_list to find an existing customer, postapi_customers, postapi_customer_addresses, and postapi_customer_contacts to create one, postapi_quotes for the quote header, putapi_quotes_id for the line items, and getapi_quotes_id to read the total. Every call clears the four mandatory access layers and the token's per-module scopes before any business logic runs.
The second surface is the event feed. An event listener subscribes a service account to the event types the flow needs: QUOTE_CREATED, QUOTE_STATUS_CHANGED, and QUOTE_VERSION_CREATED, which are append-only, one ordered row per occurrence, and QUOTE_UPDATED, which is coalesced to the latest state of the quote. CPQ offers no push webhooks. The flow fetches with postapi_integrations_listeners_id_events_fetch on the schedule you set, processes the batch, and acknowledges it with postapi_integrations_listeners_id_events_ack.
On the HubSpot side, the Integration Fabric connector authenticates with a private app token or an OAuth 2.0 grant, scoped per object. Deals are object type 0-3, so the flow starts from the changed_get_crm_v3_objects_0_3_getPage trigger, polled on the schedule you set. It reads the deal with get_crm_v3_objects_0_3_dealId_getById, walks its associations with get_crm_v4_objects_objectType_objectId_associations_toObjectType_getPage, reads the company with get_crm_v3_objects_companies_companyId_getById, batches the line items with post_crm_v3_objects_line_items_batch_read_read, and writes back with patch_crm_v3_objects_0_3_dealId_update. None of the 48 HubSpot triggers deliver webhooks; HubSpot's own webhook subscriptions can call a Neblex webhook endpoint for an event-driven start instead.
Between them sits the flow: mapping, matching, optional approval, and a run log.
Worked example: a deal at the presentation stage becomes a governed CPQ quote, status back
Triggered on the deal stage change, matched on the deal ID, safe to run twice.
- Trigger. The polled deal trigger fires when
dealstagereaches the stage you pick, for example Presentation Scheduled. The flow reads the deal and walks its associations to the company, contacts, and line items. - Idempotency. If the custom deal property
neblex_quote_idis already populated, the quote exists and the run stops, so a re-fired trigger is harmless. - Resolve the customer.
postapi_customers_listsearches CPQ for a customer whosecustomerNumberequals the company'shs_object_id. If none is found,postapi_customerscreates the customer,postapi_customer_addressescreates aBILL_TOaddress from the company address fields, andpostapi_customer_contactscreates the primary contact. CPQ recordsCUSTOMER_CREATEDin the feed. - Create the quote.
postapi_quotescreates the quote header withquoteNamefromdealname,currencyfromdeal_currency_code,validUntilfromclosedate, and thecustCustomerId,custContactId, andcustBillToIdreferences from step 3. The deal ID is stored incustomFieldValues. Thenputapi_quotes_idwrites one line per HubSpot line item, keyed onhs_skuaspartNumber. CPQ recordsQUOTE_CREATED. - Write the number back.
patch_crm_v3_objects_0_3_dealId_updatesetsneblex_quote_idandneblex_quote_numberon the deal, so the rep can open the quote from HubSpot. - The rep works the quote in CPQ. Configurable products are built in the product configurator, pricing rules apply, and a discount past your threshold moves the quote to Needs Approval and locks it. Each stage move records
QUOTE_STATUS_CHANGEDwithfromStatusandtoStatus. - Status back. When the polled fetch returns a
QUOTE_STATUS_CHANGEDevent, the flow reads the quote withgetapi_quotes_id, thenpatch_crm_v3_objects_0_3_dealId_updatesetsneblex_quote_statustotoStatusandamounttototalPrice. WhentoStatusis your closed-won snapshot status, the flow can also movedealstagetoclosedwon. It then acknowledges the event bylastEventId. - Optional gate. If the quote total is over your threshold, the flow pauses for a named approver in Integration Fabric before it moves the deal stage. On reject, it logs a note on the deal and stops.
Field mapping
The starting map for the deal to quote step. Every CPQ field named here exists on the customer, address, contact, quote, or line item record.
| HubSpot | Neblex CPQ | Notes |
|---|---|---|
Company hs_object_id | Customer.customerNumber | Match key; the company ID is a stable, unique customer number. |
Company name, domain, industry | Customer.name, Customer.website, Customer.industry | Customer.type is required in CPQ; the flow sets it from a lookup on company type. |
Company address, city, state, zip, country | CustomerAddress.line1, city, state, zip, country with type = BILL_TO | One company address in HubSpot, so SHIP_TO is copied from BILL_TO. |
Contact firstname plus lastname, email, phone, jobtitle | CustomerContact.name, email, phone, title | Names are joined in the flow. phone is required in CPQ, so a contact without one needs a placeholder rule. |
Deal dealname | Quote.quoteName | The quote number is issued by CPQ, never by HubSpot. |
Deal hs_object_id | Quote.customFieldValues | Lets a CPQ-side search find the originating deal. |
Deal deal_currency_code | Quote.currency | Multi-currency portals only; CPQ defaults to USD. |
Deal closedate | Quote.validUntil | CPQ locks the quote when this date passes; an admin extends it to unlock. |
Line item quantity, price, hs_sku | QuoteLineItem.quantity, sellingPrice, partNumber | The part must exist in CPQ; configured products are added by the rep. |
Quote.quoteNumber, Quote.status, Quote.totalPrice | Deal neblex_quote_number, neblex_quote_status, amount | Return path, driven by QUOTE_STATUS_CHANGED. The neblex_ properties are custom deal properties you create once. |
What syncs, each direction
HubSpot to Neblex CPQ
- Customers. Company name, domain, industry, and a stable customer number, created once, matched afterward.
- Addresses and contacts. The company address as
BILL_TO, and the primary associated contact. - Quote header. Name, currency, validity date, and the customer, contact, and bill-to references.
- Line items. Standard products from the deal's line items, keyed on SKU as part number.
Neblex CPQ to HubSpot
- Quote identity. The CPQ quote ID and quote number, written to the deal on creation.
- Status. Every stage move, from
QUOTE_STATUS_CHANGED, including the closed-won snapshot status. - Amount. The quote total, read after each status event, so the pipeline follows the priced quote.
Governance and audit
- Service account scopes. The flow authenticates to CPQ as a service account, not a user. Its token starts with every action disabled on every module, and an administrator enables only read, create, and update on the customer and quote modules. Disabling the account revokes every token beneath it in one step.
- Four layers on every call. Environment header, client certificate, bearer token, and the optional IP allowance, checked in that order, before scopes are evaluated.
- Event acknowledgment. Events are delivered at least once until the flow acknowledges them, so a run that fails mid-batch sees the same events again, and the cursor never regresses. A coalesced
QUOTE_UPDATEDrecord that changed between fetch and acknowledgment is marked stale and arrives again on the next fetch. - Approvals in the flow. Discount and margin approvals run inside CPQ, where the quote locks until an approver acts. CRM-side thresholds, such as a large deal stage change, pause in Integration Fabric for a named approver.
- Run history. Every run records the deal, the customer it resolved, the lines it mapped, and each CPQ and HubSpot response, and can be replayed from the failed step without re-creating the quote.
- Audit log. CPQ writes an audit entry for every create and update the service account makes, under the service account's name. Each token records when it was last used, so a dormant credential is easy to find and revoke.
Frequently asked questions
Does Neblex CPQ have its own HubSpot connector?
No. CPQ exposes its API and event feed and ships no connectors of its own. The HubSpot connector belongs to Neblex Integration Fabric, which also carries the flow and the run history.
Is the sync immediate?
No. The HubSpot deal trigger is polled on the schedule you set, from every minute upward, and the CPQ event feed is fetched the same way. For an event-driven start on the HubSpot side, point a HubSpot webhook subscription at a Neblex webhook endpoint.
What happens if the flow runs twice on the same deal?
Nothing. Step 2 checks neblex_quote_id before creating anything, and CPQ events are acknowledged by ID, so a replayed run finds the quote already there and stops.
Where does a configurable product get configured?
In Neblex CPQ. The deal's line items seed standard parts, but a configured line is built in the product configurator, where the rules, the validation gate, and the bill of materials live.
Can someone in HubSpot change a quote after it is approved?
No. The flow writes status and identifiers to the deal and never writes back into a CPQ quote. Inside CPQ, an approved quote at a snapshot status is locked, and a change means a new revision, which records QUOTE_VERSION_CREATED in the feed.
Connectors on this page
HubSpot
CRM
- Operations
- 336
- Typed outputs
- 81.5%
- Change triggers
- 48 (poll)
- Authentication
- Bearer
Neblex CPQ
Applications
- Operations
- 286
- Typed outputs
- 100%
- Change triggers
- Poll or inbound webhook
- Authentication
- Bearer
Bring one real product
Bring a real deal from your HubSpot sandbox, and we will run it into a CPQ quote and back, with the run log and the event feed open, in one session.