Product bundles
On this page
Product bundles let you sell a curated group of products as a single offering. Customers select their options and add the bundle to their cart from the bundle product page on your storefront.
StoreConnect’s native bundle system does not require Salesforce CPQ. If you are using CPQ, see Product bundles with Salesforce CPQ instead.
How bundles work
A bundle consists of:
- An anchor product — the bundle itself (e.g., “Gaming Laptop Bundle”). This is the product your customers visit and purchase.
- Components — the individual products that make up the bundle (e.g., a laptop, keyboard, monitor). Each component has quantity and pricing rules.
- Component groups (optional) — logical groupings of components that let you apply additional selection and quantity constraints (e.g., “Choose your accessories”).
When a customer adds a bundle to their cart, the anchor product and each selected component appear as separate line items, grouped together under the bundle.
Set up a bundle
Step 1: Create the anchor product
Create a standard product to represent the bundle (e.g., “Gaming Laptop Bundle”). This is the product customers will visit on your storefront — it acts as the bundle container, not as a purchasable item in its own right.
Configure the product with these settings:
| Field | Value | Notes |
|---|---|---|
| Product Name | The name of the bundle | Displayed as the bundle title on the storefront |
| Is Master | Checked | Default for standalone products. Do not create the anchor as a variant of another product. |
| Track Inventory | Unchecked | Bundle availability is determined by component stock, not anchor stock. Leave this off. |
| Active | Checked | Required for the product to appear on the storefront |
| Virtual | Optional | Check this if the bundle contains no physical items requiring shipping (e.g., all digital downloads). Leave unchecked if any component requires shipping. |
:::note The anchor product itself is never sold or shipped directly — it is just the entry point for the bundle. There is no need to assign a SKU or manage stock for the anchor. :::
Add the anchor product to a category so it appears on your storefront. Customers navigate to it and configure the bundle from the product page.
Step 2: Add a pricebook entry and set the pricing strategy
The anchor product must have an active Pricebook Entry in your store’s pricebook. The pricing strategy controls how the bundle total is calculated.
On the Pricebook Entry for the anchor product, set:
| Field | Description |
|---|---|
| Bundle Price Strategy | Choose flat_price or component_price (see table below) |
| Price | For flat_price: the fixed bundle price. For component_price: set to $0 — the total is calculated from components. |
| Bundle Only | Leave unchecked on the anchor. (This field is used on component products — see Step 3.) |
| Strategy | How pricing works |
|---|---|
flat_price |
The bundle total is the anchor product’s price only. Component prices are ignored. |
component_price |
The bundle total is the sum of all selected component prices × quantities (less any free quantities). |
Step 3: Create your component products
Create or identify the products you want to include as components. If a product should only ever be sold as part of a bundle (never standalone), check Bundle Only on its pricebook entry.
:::note If a component is a variant product, set the price on the variant’s price book entry, not the master product. The price used is the selected variant’s price. :::
Step 4: Create Product Component records
For each component, create a Product Component record linking it to the anchor product. Set the following fields:
| Field | Description |
|---|---|
| Anchor Product | The bundle anchor product |
| Component Product | The product to include as a component |
| Required | If checked, the component must be included. The customer cannot remove it. |
| Default Quantity | The quantity pre-selected when the customer opens the bundle page |
| Minimum Quantity | Minimum quantity the customer must select (0 = none required) |
| Maximum Quantity | Maximum quantity the customer can select |
| Free Quantity | Quantity included in the bundle price at no extra charge (applies to component_price strategy) |
| Position | Display order — lower numbers appear first |
| Component Group | (Optional) Assign to a group for additional constraints |
Step 5: Create Component Groups (optional)
Use component groups to organize components and apply group-level selection rules. For example, an “Accessories” group where customers must choose at least one but no more than three items.
On the Component Group record, set:
| Field | Description |
|---|---|
| Display Name | The group heading shown to customers on the storefront |
| Position | Display order of the group |
| Minimum Components | Minimum number of different components from this group the customer must select (0 = none required) |
| Maximum Components | Maximum number of different components the customer can select from this group |
| Minimum Group Quantity | Minimum total quantity across all components in this group |
| Maximum Group Quantity | Maximum total quantity across all components in this group |
Then assign each component to its group by setting the Component Group field on the Product Component record.
:::tip Minimum Components and Minimum Group Quantity serve different purposes. For example: Minimum Components = 2 means the customer must pick at least 2 different items from the group. Minimum Group Quantity = 4 means the combined quantities of all items in the group must total at least 4. :::
:::note At least one product component must not be assigned to a component group, otherwise the bundle cannot be added to the cart. Groups are for organizing subsets of components — they cannot contain all components in a bundle. :::
Quantity constraints
Constraints are enforced both in the browser (real-time feedback) and server-side before adding to the cart.
- Required component with matching min/max/default: The component cannot be removed.
- Min Quantity = 0, Required = false: The component is optional and can be excluded entirely.
- Free Quantity: For the
component_pricestrategy, the first N units of a component are included in the bundle price. Units above the free quantity are charged at the component’s price.
Nested bundles
A component product can itself be a bundle. This lets you build hierarchical bundle structures.
Example:
Ultimate PC Bundle
├── Gaming Laptop Bundle (nested)
│ ├── Gaming Laptop (required)
│ └── Keyboard Cover (optional)
├── 4K Monitor (optional)
└── HD Webcam (optional)
Customers set up the nested bundle in a pop-up window before adding the parent bundle to the cart. Quantities cascade: the parent bundle quantity multiplies through all nested component quantities.
To set up a nested bundle, create a Product Component record where the Component Product is itself a bundle anchor product. The nested bundle’s own Product Component records define its contents.
Bookable product bundles
A component product can be a bookable or rental product. When included in a bundle, customers select booking dates, times, and location for that component directly on the bundle page.
Each bookable component in a bundle can have a different booking period. Availability is validated per component when the bundle is added to the cart.
For more on configuring bookable products, see Sell bookable events and services and Configure rental products.
Customer experience
- The customer visits the bundle product page on your storefront.
- The bundle page shows required components (pre-selected) and optional components.
- The customer adjusts quantities, selects optional components, chooses variants, sets up any nested bundles, and selects booking details for any bookable components.
- The total price updates in real time as selections change.
- The customer adds the bundle to the cart. The anchor product and each component appear as grouped line items.
- To edit a bundle in the cart, the customer selects Edit. The bundle page reopens with their previous selections pre-filled.
- Removing the bundle from the cart removes all component line items together.
Component pricing overrides
By default, a component’s price comes from its standard pricebook entry. If you need per-pricebook pricing for a component — or different pricing when the same component appears in different anchor bundles — use Component Pricing (Component_Pricing__c) records.
Priority order when determining a component’s price:
- Component Pricing record matching both the anchor product and the pricebook (most specific)
- Component Pricing record matching the pricebook only (general)
- Standard pricebook entry for the component (default)
To create a Component Pricing override:
- In Salesforce, navigate to Component Pricing in the App Launcher.
- Create a new record and set:
| Field | Description |
|---|---|
| Component Product | The component product to override pricing for |
| Anchor Product | (Optional) The bundle this override applies to. Leave blank to apply to all bundles. |
| Pricebook | The pricebook this price applies to |
| Unit Price | The overridden price for this component |
See Component Pricing Object Reference for the full field reference.
POS behavior
Cashiers can configure and add bundles to the POS cart using the bundle modal. The anchor product and each selected component appear as a grouped set in the cart.
In the POS cart:
- Bundle items are displayed as a group. The quantity picker and remove button are hidden for individual items — the bundle must be managed as a unit.
- Bundles persist through park and resume. The bundle grouping is restored when the cart is resumed.
- Bundles added on the web storefront and synced to POS display correctly, and vice versa.
Limitations in POS:
- Bundles cannot be edited after being added to the cart. To change the configuration, remove the bundle and reconfigure it.
- Bundle-level discounts are not supported.
- Fulfillment type for bundle items defaults to takeaway regardless of cart context.
Bundle-only products: Component products with Bundle Only enabled on their price book entry are visible in POS search, product grid, and scan results, but cannot be added to the cart directly. This prevents staff from accidentally selling a bundle component as a standalone item.
CPQ coexistence
StoreConnect’s native bundle system and Salesforce CPQ can coexist in the same org. However, a single product cannot use both approaches simultaneously — a product is either a StoreConnect native bundle or a CPQ bundle, not both.
Salesforce object reference
The bundle system uses these custom Salesforce objects:
- Product Component Object Reference — defines each component’s relationship to the anchor, quantities, and group assignment
- Component Group Object Reference — defines component group display and selection rules
- Component Pricing Object Reference — defines per-pricebook and per-anchor pricing overrides for components
The Bundle Price Strategy and Bundle Only fields are on the Pricebook Entry record for each product.
Was this article helpful?
Thanks for your feedback! It helps us improve our docs.