Connect Salesforce to Neblex CPQ
Why teams connect Salesforce and Neblex CPQ
Reps live in Salesforce. Product rules, price lists, and the approval matrix live in Neblex CPQ. Without a link, a rep copies the account, contact, and opportunity into the quoting tool by hand, then copies the quote number and total back. Every customer ends up spelled two ways, the opportunity amount lags the quote by days, and the forecast is built on whichever number was typed last.
Neblex CPQ has no Salesforce 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 Salesforce connector with 1,296 operations, 31 polled triggers, and Change Data Capture streams, and a visual flow between the two that maps fields, matches records, pauses for a person when a decision needs one, and writes the result back.
The split of ownership is the point. Salesforce owns the account and the opportunity. 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 List customers to find an existing customer, Create a customer, Create an address, and Create a contact to create one, Create a quote for the quote header, Update a quote for the line items, and Get a quote 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. A scheduled flow, from every minute upward, fetches the next batch of events, processes it, and advances the listener's cursor to acknowledge it.
On the Salesforce side, the Integration Fabric connector authenticates with OAuth 2.0 and respects the connected user's field-level and object permissions. The flow starts from the New or updated opportunity trigger, polled on the schedule you set, or from a Live stream trigger on Salesforce Change Data Capture for an immediate start. It reads the opportunity and account, runs a SOQL query for the contact and line items, and writes back with an opportunity update.
Between them sits the flow: mapping, matching, an optional approval, and a run history.
Worked example: a proposal-stage opportunity becomes a governed CPQ quote, status back
Started by an opportunity change, matched on the opportunity ID, safe to run twice.
- Trigger. The New or updated opportunity trigger fires for any changed opportunity, and a Filter continues only when
StageNameis the stage you pick, for example Proposal/Price Quote. The flow reads the opportunity, its account, and the primary contact with a SOQL query. - Idempotency. If
Opportunity.Neblex_Quote_Id__cis already populated, the quote exists and the run stops, so a repeated trigger is harmless. - Resolve the customer. List customers searches CPQ for a customer whose
customerNumberequalsAccount.Id. If none is found, Create a customer creates it, Create an address adds abill_toand aship_toaddress from the account's billing and shipping fields, and Create a contact adds the contact. These calls confirm success without returning the new IDs, so the flow reads the customer back to get its address and contact IDs. CPQ recordsCUSTOMER_CREATEDin the feed. - Create the quote. Create a quote sets
quoteNamefrom the opportunity name,currencyfrom the opportunity currency,validUntilfrom the close date, the customer, contact, and bill-to references from step 3, and the opportunity ID in a quote custom field placed in the quote layout. The call confirms success, so List quotes finds the new quote by that custom field. Then Update a quote writes one line perOpportunityLineItem, keyed on the product code aspartNumber. CPQ recordsQUOTE_CREATED. - Write the number back. An opportunity update sets
Neblex_Quote_Id__candNeblex_Quote_Number__c, so the rep can open the quote from the opportunity. - 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 until an approver acts. Each stage move records
QUOTE_STATUS_CHANGEDwithfromStatusandtoStatus. - Status back. When the scheduled fetch returns a
QUOTE_STATUS_CHANGEDevent, the flow reads the quote with Get a quote, then updates the opportunity, settingNeblex_Quote_Status__ctotoStatusandAmounttototalPrice. WhentoStatusis your closed-won snapshot status, the flow can also setStageNameto Closed Won. It then advances the cursor to acknowledge the batch. - Optional gate. If the quote total is over a threshold you set, a Wait for form step sends a named approver a task before the flow touches the opportunity stage. On reject, it logs a note on the opportunity and stops.
Field mapping
The starting map for the opportunity to quote step. Every CPQ field named here exists on the customer, address, contact, quote, or line item record.
| Salesforce | Neblex CPQ | Notes |
|---|---|---|
Account.Id | Customer.customerNumber | Match key. Unique per environment in CPQ, so the account ID is a stable customer number. |
Account.Name, Account.Website, Account.Industry | Customer.name, Customer.website, Customer.industry | Customer.type is required in CPQ; the flow sets it from a lookup on account type. |
Account.BillingStreet, BillingCity, BillingState, BillingPostalCode, BillingCountry | CustomerAddress.line1, city, state, zip, country with type = bill_to | Shipping fields map the same way to a ship_to address. line1, city, and country are required. |
Contact.Name, Contact.Email, Contact.Phone, Contact.Title | CustomerContact.name, email, phone, title | phone is required in CPQ, so a contact without one needs a placeholder rule. |
Opportunity.Name | Quote.quoteName | The quote number itself is issued by CPQ, never by Salesforce. |
Opportunity.Id | quote custom field c_opportunity_id | Must be placed in the quote layout to be kept. Lets the flow and CPQ users find the originating opportunity. |
Opportunity.CurrencyIsoCode | Quote.currency | Multi-currency orgs only; CPQ defaults to USD. |
Opportunity.CloseDate | Quote.validUntil | CPQ locks the quote when this date passes; an admin extends it to unlock. |
OpportunityLineItem.Quantity, OpportunityLineItem.UnitPrice, Product2.ProductCode | QuoteLineItem.quantity, sellingPrice, partNumber | The part must exist in CPQ. Configured products are added by the rep in the configurator. |
Quote.quoteNumber, Quote.status, Quote.totalPrice | Opportunity.Neblex_Quote_Number__c, Neblex_Quote_Status__c, Amount | Return path, driven by QUOTE_STATUS_CHANGED. |
What syncs, each direction
Salesforce to Neblex CPQ
- Customers. Account name, website, industry, and a stable customer number, created once and matched on later runs.
- Addresses and contacts. Billing and shipping addresses as
bill_toandship_to, and the primary contact. - Quote header. Name, currency, validity date, and the customer, contact, and bill-to references.
- Line items. Standard products from the opportunity's line items, keyed on part number.
Neblex CPQ to Salesforce
- Quote identity. The CPQ quote ID and quote number, written to the opportunity 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 forecast 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 what the flow needs: read, create, and update on customers and quotes, create on customer addresses and contacts, and read and update on integrations for the event feed. 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 and cannot be unlocked by anyone until an approver acts. Thresholds that concern the CRM, such as a large deal stage change, wait in Integration Fabric for a named approver.
- Run history. Every run records the opportunity, the customer it resolved, the lines it mapped, and each CPQ and Salesforce response, and a failed run can be replayed from the step that failed; the quote ID check keeps it from creating the quote twice.
- 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 Salesforce connector?
No. CPQ exposes its API and event feed and ships no connectors of its own. The Salesforce connector belongs to Neblex Integration Fabric, which also carries the flow and the run history.
Is the sync immediate?
Close to it. On the Salesforce side, a Live stream trigger on Change Data Capture starts the flow as each change arrives, or the polled trigger checks from every minute upward. The CPQ event feed has no push, so status changes are fetched on a schedule, from every minute upward.
What happens if the flow runs twice on the same opportunity?
Nothing. Step 2 checks Neblex_Quote_Id__c before creating anything, and CPQ events are acknowledged with the listener cursor, so a repeated run finds the quote already there and stops.
Where does a configurable product get configured?
In Neblex CPQ. The opportunity'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 Salesforce change a quote after it is approved?
No. The flow writes status and identifiers to the opportunity 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 used
Salesforce
CRM & Sales
- Operations
- 1,296
- Operations with typed output
- 57.9%
- Change triggers
- 31 (poll)
- Signs in with
- OAuth 2.0 sign-in
Neblex CPQ
ERP & Enterprise Systems
- Operations
- 286
- Operations with typed output
- 100%
- Change triggers
- Poll or inbound webhook
- Signs in with
- API token
Bring one real product
Bring a real opportunity from your Salesforce sandbox, and we will run it into a CPQ quote and back, with the run history and the event feed open, in one session.