---
title: "Set up bundles for POS"
source: https://support.storeconnect.com/articles/set-up-bundles-for-pos
type: article
format: markdown
site: StoreConnect Support — product and developer documentation for StoreConnect
site_index: https://storeconnect.com/llms.txt
docs_index: https://support.storeconnect.com/llms.txt
note: Append .md to any page or article URL on this site to get its Markdown form.
---
# Set up bundles for POS

Use this process to make a product bundle ready to sell at the register. The settings you choose in Salesforce decide what operators see: whether the bundle screen opens at all, how the bundle is priced and discounted, and where each component is prepared.

Operators cannot change a bundle's structure at the register. For what they do there, see [sell a bundle at POS](sell-a-bundle-at-pos).

## Before you start

- Create the bundle: the anchor product, the **Product Component** records, and any **Component Group** records. See [product bundles](product-bundles).
- Make sure the anchor and every component meet the [minimum requirements for POS](product-minimum-requirements-for-listing-on-pos), including an active price in the price book the outlet uses.

## Prepare a bundle for the register

1.  Open the **Pricebook Entry** for the anchor product in the price book the outlet uses.
2.  Set **Bundle Price Strategy** to match how you want operators to price and discount the bundle:
    - `flat_price` — the anchor carries the whole price, each component reads **Included** at the register, and operators discount the bundle by adjusting the anchor line.
    - `component_price` — each component carries its own price, and operators discount the component lines.
3.  Open the anchor **Product** record. Check **Virtual** if the anchor is only a wrapper with nothing to prepare or hand over, such as a set menu. Leave it unchecked if the anchor is a real product in its own right.

    A virtual anchor never reaches a fulfillment station and is left out of the bundle's product count. **Virtual** also suppresses shipping for the anchor on the web storefront.

4.  On the **Pricebook Entry** of each component that must never be sold on its own, check **Bundle Only**. Operators can still find the component in search, the product grid, and scan results, but cannot add it to the cart outside its bundle.
5.  If your store routes items to fulfillment stations, check that each component's category is routed to a station. Components route by their own categories, not the anchor's. See [fulfillment station routing](pos-fulfillment-station-routing).
6.  On the register, go to **Settings** > **Manage data** and check `s_c__product_component__c` and `s_c__component_group__c`. If **Local records** is lower than **Server records** for either, choose **More actions** > **Clear & resync records**. See [manage POS data sync](manage-pos-data-sync).
7.  Select the bundle on the register's product grid to test it.

The bundle tile is active on the grid, and selecting it opens the bundle screen with every component group, or adds the bundle straight to the cart when it has nothing to choose.

## How the setup shapes the register

| Setting in Salesforce | What the operator sees |
|---|---|
| Every component fixed at one product and one quantity, with no variants, nested bundles, or configurable groups, and an anchor with no variant or variable price | The bundle screen is skipped and the bundle is added straight to the cart |
| **Default Quantity** `1` and **Maximum Quantity** `1` on a **Product Component**, outside a group or alone in one | The component is listed under **Included** and cannot be changed |
| **Maximum Quantity** above 1 on a **Product Component** | A quantity stepper on the component card, which reads **At max** at the limit |
| **Minimum Components** and **Maximum Components** on a **Component Group** | A hint such as `Select 2` under the group heading. **Add to cart** stays disabled until the minimum is met, and the group locks at the maximum. |
| **Free Quantity** on a **Product Component** | Units up to the allowance are not charged. Three units with one free are charged as two. |
| Variable pricing on a component in a `component_price` bundle | A price step on the card, with preset prices and a **Custom** option. A component in a `flat_price` bundle shows no price step. |
| A component that is a variant product | Variant options on the card itself |
| A component that is itself a bundle | A panel to configure the nested bundle |
| A rental product as a component | A booking step on the card. See [process rental products at POS](manage-rental-transactions-at-pos). |

Every bundle is added to the cart with a quantity of one, and neither the bundle's quantity nor a component's quantity can be changed in the cart. A bundle already in the cart cannot be reopened in the bundle screen, so operators remove it and add it again to change it.

## What the records show in Salesforce

- **Order products.** The order carries one order product for the anchor and one for each component. Each component's **Bundle Lead Item** field (`Bundle_Lead_Item_Id__c` on OrderItem) points to the anchor's order product. In a `flat_price` bundle the component order products are `$0`.
- **Fulfillment type.** The register gives every bundle component a takeaway fulfillment when it is added, whatever the rest of the cart is doing. The order's **Shipment** records therefore show `Takeaway` in **Fulfillment Type** for bundle items, even for a sit-down meal. A rental component that starts today also shows `Takeaway`, with an on-loan status. A rental component with a future start date shows `Reserved`.

## Troubleshooting

| Problem | Cause and fix |
|---|---|
| The bundle tile is grayed out | The anchor's price has not synced to the register. Check the price book entry, then check sync in **Settings** > **Manage data**. |
| The bundle screen opens without one of its groups | The **Component Group** record has not reached the register. Resync `s_c__component_group__c`, as in step 6. |
| Operators can sell a component on its own | **Bundle Only** is not checked on the component's **Pricebook Entry** in the outlet's price book. |
| A set menu sends an empty ticket to a station | The anchor is not marked **Virtual**, so it routes to a station like any product. |

## Example

A cellar door sells a `Cellar Door Tasting Trio` at a flat `$380`: a bottle of VELVET HERON Grande Cuvee that is always included, and two reds the customer picks from four. The anchor's **Pricebook Entry** has **Bundle Price Strategy** set to `flat_price` and a price of `$380`. The sparkling wine's **Product Component** has **Default Quantity** and **Maximum Quantity** both set to `1`. The four reds sit in a **Component Group** with the **Display Name** `Choose two reds` and **Minimum Components** and **Maximum Components** both set to `2`. The anchor is left unchecked for **Virtual**, so operators can discount the trio by adjusting the anchor line.

After a sale, the order in Salesforce carries four order products: the trio at `$380` and three bottles at `$0`, each bottle with the trio as its **Bundle Lead Item**.

---

## Follow StoreConnect

- [Email Newsletter](https://storeconnect.com/c/lp-newsletter)
- [LinkedIn Newsletter](https://www.linkedin.com/build-relation/newsletter-follow?entityUrn=7444956928444862464)
- [YouTube](https://www.youtube.com/channel/UCngKdP2x8l1wcbAKW3tvU8g)
- [LinkedIn](https://www.linkedin.com/company/storeconnect)
- [X / Twitter](https://x.com/storeconnecthq)

## Popular Links

- [Partners](https://storeconnect.com/partners)
- [Become a Partner](https://storeconnect.com/become-a-partner)
- [News](https://storeconnect.com/articles/news)
- [Events](https://storeconnect.com/articles/events)
- [Feature Comparison](https://storeconnect.com/how-we-compare)
- [Download a free trial](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FMkeKUAT)
- [Book a Demo](https://storeconnect.com/contact)

## Documentation

- [Help documentation](https://support.storeconnect.com/help-documentation)
- [AI agents](https://support.storeconnect.com/ai)
- [Videos & tutorials](https://support.storeconnect.com/videos-tutorials)
- [Developer reference](https://support.storeconnect.com/developer-reference)
- [Release notes](https://support.storeconnect.com/release-notes)
- [Troubleshooting](https://support.storeconnect.com/troubleshooting)
- [Trust Center](https://trust.getstoreconnect.com/)
- [Status Page](https://status.storeconnect.com/)

## Contact

- info@getstoreconnect.com
- US +1 415 745 3230
- AUS +61 2 8365 2308

100 S Ashley Dr, Suite 600-2461
Tampa FL 33602-600 USA

Level 22, Sydney Place
180 George Street
Sydney, NSW, 2000, AUS

## Machine-readable

- [Site index for agents](https://storeconnect.com/llms.txt): curated map of the StoreConnect site in llms.txt format
- [Documentation index for agents](https://support.storeconnect.com/llms.txt): full technical and product documentation map

Every page and article on this site has a Markdown rendering: append `.md` to its URL.

Continue in Markdown: [Help documentation](https://support.storeconnect.com/help-documentation.md) · [Developer reference](https://support.storeconnect.com/developer-reference.md) · [Videos & tutorials](https://support.storeconnect.com/videos-tutorials.md) · [Release notes](https://support.storeconnect.com/release-notes.md)

---

StoreConnect Support — https://support.storeconnect.com/articles/set-up-bundles-for-pos