Use this skill when configuring or troubleshooting the Salesforce CPQ Guided Selling wizard: building Quote Process records, defining ProcessInput questions that filter products by field value, mapping user responses to Product2 classification fields, and choosing the right search type (Standard, Enhanced, or Custom). Trigger keywords: CPQ guided selling, quote process wizard, product selection wizard, SBQQ__QuoteProcess__c, SBQQ__ProcessInput__c, guided product selection, auto select product, product search plugin. NOT for OmniStudio product selection flows, standard Salesforce pricebook product browsing, CPQ product bundle configuration, or CPQ pricing rules.
Use this skill when configuring or troubleshooting the Salesforce CPQ Guided Selling wizard. Guided Selling lets reps answer a structured set of questions, and CPQ filters the product catalog to show only products that match every answer. This skill covers Quote Process and ProcessInput record setup, classification field mirroring, search type selection, Auto Select Product behavior, and common filtering failures. It does not cover OmniStudio product selection flows, standard Salesforce product browsing, CPQ product bundle setup, or CPQ pricing rules.
Gather this context before working on anything in this domain:
SBQQ__) is installed and the objects SBQQ__QuoteProcess__c and SBQQ__ProcessInput__c exist in the org schema.Product_Category__c, Deployment_Model__c), a mirrored field with the identical API name must exist on SBQQ__ProcessInput__c — this is the most common source of silent filtering failure.SBQQ.ProductSearchPluginSBQQ__GuidedSelling__c).A SBQQ__QuoteProcess__c record is the top-level configuration object for Guided Selling. Setting SBQQ__GuidedProductSelection__c = true on this record activates the wizard mode — without this flag the Quote Process does not show the guided selling wizard when a rep adds a product to a CPQ quote.
The Quote Process is activated for a quote in one of two ways:
SBQQ__GuidedSelling__c on a specific Pricebook2 record to a Quote Process Id. Quotes using that pricebook launch the associated wizard.When a rep clicks "Add Products" on a CPQ quote and a Quote Process is active, the wizard opens and presents the ProcessInput questions in order. The rep's answers are used to filter Product2 records using the configured operator and field mapping.
Each SBQQ__ProcessInput__c record defines one question in the wizard. Key fields:
| Field | Purpose |
|---|---|
SBQQ__QuoteProcess__c | Parent Quote Process lookup |
SBQQ__Label__c | Question label displayed to the rep |
SBQQ__Active__c | Whether this question appears in the wizard |
SBQQ__Required__c | Whether the rep must answer before proceeding |
SBQQ__Order__c | Display sequence within the wizard |
SBQQ__SearchField__c | The API name of the Product2 field this answer filters against |
SBQQ__Operator__c | Filter operator: equals, not equals, contains, starts with, greater than, less than |
SBQQ__InputType__c | How the rep enters the answer: text input, picklist, or product family |
The runtime mechanism: when the rep submits their answers, CPQ reads the answer value stored on the ProcessInput record and executes a SOQL filter against Product2 using the SBQQ__SearchField__c API name and SBQQ__Operator__c. The answer value at runtime is held on the ProcessInput record itself — this is why the ProcessInput must have a field with the same API name as the Product2 field being filtered.
When a wizard question filters against a custom field on Product2 (e.g., Product_Category__c), CPQ reads the answer value from a field of the same API name on SBQQ__ProcessInput__c. This means:
Product_Category__c) must exist on Product2.Product_Category__c) must also exist on SBQQ__ProcessInput__c.SBQQ__SearchField__c on the ProcessInput record must be set to the API name (Product_Category__c).If the mirror field on SBQQ__ProcessInput__c is missing, the wizard appears to work — the question shows and the rep can answer — but the answer silently produces no filter, and CPQ returns all products regardless of the answer. This is the most common guided selling bug reported in production.
CPQ Guided Selling supports three search types, set on the SBQQ__QuoteProcess__c record via SBQQ__SearchType__c:
| Search Type | Behavior | When to use |
|---|---|---|
| Standard | Basic filter: one answer per question, equality or contains operators | Most use cases; straightforward classification filtering |
| Enhanced | Multi-select: rep can pick multiple values per question; any match returns the product | When a product should appear for multiple answer values (e.g., compatible with both "SMB" and "Enterprise") |
| Custom | Executes an Apex class implementing SBQQ.ProductSearchPlugin interface | Complex search logic, external system lookups, or scoring/ranking requirements |
For Custom search, the Apex class must implement the search(SBQQ.ProductSearchContext ctx) method from the SBQQ.ProductSearchPlugin interface and return a List<Id> of matching product IDs. The class name is registered in CPQ Settings under the "Product Search" section.
When SBQQ__AutoSelectProduct__c = true on the Quote Process, and the guided selling answers return exactly one matching product, CPQ skips the results list and adds that product directly to the quote. If zero products match, the wizard shows an empty results screen. If two or more products match, the standard product results grid is shown for manual selection.
This feature is useful for high-specificity wizards where the combination of answers is expected to uniquely identify a SKU. It should not be enabled when the answer set is broad enough to return multiple matches, as it can produce confusing behavior where a product appears on the quote without the rep explicitly choosing it.
When to use: The product catalog has custom classification fields (e.g., industry, deployment model, service tier) and reps should answer a sequence of dropdown questions to narrow the catalog.
How it works:
Product2 for each classification dimension (e.g., Industry__c as a Picklist, Deployment_Model__c as a Picklist).SBQQ__ProcessInput__c using compatible data types.Product2 records in the catalog.SBQQ__QuoteProcess__c record: set SBQQ__GuidedProductSelection__c = true, SBQQ__SearchType__c = 'Standard'.SBQQ__ProcessInput__c per question, setting SBQQ__SearchField__c to the API name, SBQQ__Operator__c to equals, SBQQ__InputType__c to Picklist, and SBQQ__Order__c for sequence.Why not the alternative: Using Product Families alone for guided selling limits classification to a single field. Custom classification fields on Product2 allow multi-dimensional filtering without modifying the managed package schema.
When to use: A product should appear in results when the rep's answer matches any of several applicable values — for example, a product that applies to both "Healthcare" and "Financial Services" industries.
How it works:
Product2 and SBQQ__ProcessInput__c as above.SBQQ__SearchType__c = 'Enhanced' on the Quote Process.Why not the alternative: Standard search with "contains" operator can partially approximate multi-value matching but is fragile when values share substrings. Enhanced search is the supported, purpose-built mechanism for OR-matching across classification values.
| Situation | Recommended Approach | Reason |
|---|---|---|
| Filtering on standard Product2 fields (Family, Description) | Set SBQQ__SearchField__c to the standard field API name | No mirror field needed; standard fields are always available on ProcessInput |
| Filtering on a custom Product2 field | Create mirror field with identical API name on SBQQ__ProcessInput__c | Required for CPQ to store and apply the answer at runtime |
| Rep should select multiple values per question | Use Enhanced search type | Standard search only supports single-value input per question |
| Search logic depends on external data or scoring | Implement SBQQ.ProductSearchPlugin Apex class; use Custom search type | Only Custom search allows Apex-controlled filtering logic |
| Wizard should auto-add product when exactly one match | Set SBQQ__AutoSelectProduct__c = true on Quote Process | Built-in; only enable when answers reliably produce a single match |
| Default wizard for all quotes | Set Quote Process in CPQ Settings as org default | Applies to all new quotes regardless of pricebook |
| Different wizard per pricebook | Set SBQQ__GuidedSelling__c on Pricebook2 | Allows different question sets per price list context |
| Question should be optional (rep can skip) | Set SBQQ__Required__c = false on ProcessInput | CPQ skips the filter for that question if the rep leaves it blank |
Step-by-step instructions for an AI agent or practitioner working on this task:
SBQQ__QuoteProcess__c and SBQQ__ProcessInput__c exist. List all Product2 fields the wizard will filter against. For each custom field, flag that a mirror field is required on SBQQ__ProcessInput__c.SBQQ__ProcessInput__c with the identical API name and a compatible data type. This step is a prerequisite — skipping it causes silent filtering failures that are difficult to diagnose after the fact.equals operator.SBQQ__GuidedProductSelection__c = true. Choose the appropriate SBQQ__SearchType__c (Standard, Enhanced, or Custom). Set SBQQ__AutoSelectProduct__c if single-match auto-add is required.SBQQ__ProcessInput__c record: set the parent Quote Process, label, order, search field API name, operator, input type, and required flag. Verify that SBQQ__SearchField__c matches the exact API name of the Product2 field (and the mirror field on ProcessInput).SBQQ__GuidedSelling__c. Test by opening a new CPQ quote and clicking "Add Products" to confirm the wizard launches.SBQQ__ProcessInput__c.Run through these before marking work in this area complete:
SBQQ__GuidedProductSelection__c = true is set on the Quote Process recordSBQQ__ProcessInput__cSBQQ__SearchField__c on each ProcessInput matches the exact Product2 field API name (case-sensitive)SBQQ__Order__c valuesSBQQ__Required__cNon-obvious platform behaviors that cause real production problems:
SBQQ__SearchField__c references a custom field that does not exist on SBQQ__ProcessInput__c, CPQ cannot store the rep's answer at runtime. The wizard accepts the input but applies no filter — every product in the catalog appears in results. There is no error message. The only diagnostic is to check field existence on the ProcessInput object.SBQQ__Operator__c = 'equals' and a Product2 record has a null value on the filtered field, it will never appear in guided selling results for that question, even if the rep selects a catch-all or leaves the question blank with Required = false. Products must be data-complete on all classification fields used in the wizard.SBQQ__AutoSelectProduct__c = true and the one matching product is not in the quote's active pricebook, CPQ will attempt to add it and generate a pricebook entry error at line creation. Always confirm pricebook coverage for products surfaced by guided selling before enabling Auto Select.SBQQ__GuidedProductSelection__c = false does not launch the wizard; "Add Products" falls back to the standard product selector. This is an easy configuration mistake when cloning Quote Process records — always verify this flag on newly created or cloned records.| Artifact | Description |
|---|---|
| SBQQ__QuoteProcess__c record | Top-level guided selling configuration with GuidedProductSelection, SearchType, and AutoSelectProduct settings |
| SBQQ__ProcessInput__c records | One per wizard question; defines label, field mapping, operator, order, and required status |
| Mirror custom fields on SBQQ__ProcessInput__c | Custom fields matching Product2 classification field API names; required for custom-field-based filtering |
| Guided selling configuration checklist | Completed checklist documenting all setup decisions and test results |