> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://supr-bundles-and-subscriptions.crisp.help/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Bundle types: quantity breaks, Buy X Get Y, fixed bundles, and build-a-box

Supr Bundles & Subscriptions offers four different **bundle types**, and picking the right one is the key to setting up offers like **Buy 1 Get 1 Free**, **buy-more-save-more** volume discounts, a set of **different products** sold together, or a **build your own bundle (BYOB)** where customers choose their own items (also called mix & match or build-a-box). This guide explains each type, when to use it, and every setting available on a bundle option. Every type can be bought **one-time or on subscription**.

### Table of contents

* [How bundles are built](#3-how-bundles-are-built)
* [Do I need a dedicated bundle product?](#3-do-i-need-a-dedicated-bundle-product)
* [Which bundle type should I use?](#3-which-bundle-type-should-i-use)
* [Bundling different products together](#3-bundling-different-products-together)
* [Quantity break](#3-quantity-break)
* [Buying more than your largest option](#3-buying-more-than-your-largest-option)
* [Buy X, get Y](#3-buy-x-get-y)
* [Fixed bundle](#3-fixed-bundle)
* [Build your own bundle (BYOB)](#3-build-your-own-bundle-byob)
* [Tiered discounts on a build your own bundle](#3-tiered-discounts-on-a-build-your-own-bundle)
* [The single option](#3-the-single-option)
* [One choice instead of two](#3-one-choice-instead-of-two)
* [Bundle options and your stock](#3-bundle-options-and-your-stock)
* [Bundle option settings](#3-bundle-option-settings)
* [Setting a bundle as the default](#3-setting-a-bundle-as-the-default)
* [Rounding prices and savings](#3-rounding-prices-and-savings)
* [Additional bundle option settings](#3-additional-bundle-option-settings)
* [Free gifts and add-ons](#3-free-gifts-and-add-ons)
* [Discount codes and bundle prices](#3-discount-codes-and-bundle-prices)
* [Stacking discount codes with bundle prices on Shopify Plus](#3-stacking-discount-codes-with-bundle-prices-on-shopify-plus)
* [Publishing and targeting](#3-publishing-and-targeting)
* [Using bundle discounts with a custom add to cart](#3-using-bundle-discounts-with-a-custom-add-to-cart)
* [Troubleshooting](#3-troubleshooting)
* [Common questions](#3-common-questions)
* [Related guides](#3-related-guides)

### How bundles are built

Everything lives on one page: [**Supr Bundles & Subscriptions > Offers**](https://admin.shopify.com/apps/super-subscriptions/app/offers). Click **Create offer** and choose what you want to offer:

* **Bundle** gives shoppers a better price for buying more, or for buying a set of products together. Bought one-time.
* **Subscription** sells a product on a recurring basis, with no bundle options.
* **Bundle + Subscription** does both, so shoppers can pick a quantity or a set *and* subscribe.

For a bundle, the next step is **Choose a bundle type**: a gallery of ready-made starting points you can filter by **Quantity breaks**, **Buy X, get Y**, **Fixed bundle**, **Build your own**, and **Gifts & add-ons** (for example "Buy one, get one free", "Multipacks", or "Free gift on bigger orders"). Pick one and the offer opens with those options already set up, or click **Start from scratch** at the top of the page for a single option plus one discounted **Double** quantity break option. The **Colors** and **Layout** buttons on that step change the design of every widget in your store. You can change the offer type and every setting later.

Inside a bundle offer you have one or more **options**. An option is a single selectable choice the customer sees on the product page ("1 bottle", "3 bottles, save 15%", "Build your box"). **Each option has its own type**, so a single offer can mix a quantity break with a build your own bundle option if that is what you want. Click **Add bundle option** to add one and pick its type.

The heading above the options is the offer's **Bundle name**, at the top of the **Bundle options** section ("Bundle & Save" unless you change it). Whether the heading shows, and how it looks, is set under **Design > Elements > Bundle options > Heading**.

|| You do not create a separate "bundle product" for this. Bundle options are shown on your existing product pages, and the app handles the component products behind the scenes. See [Do I need a dedicated bundle product?](#3-do-i-need-a-dedicated-bundle-product) below.

### Do I need a dedicated bundle product?

No. Bundles are built as options inside an offer and appear on the product pages the offer targets, so there is nothing extra to create. You do not need the Shopify Bundles app either.

If you would rather market the bundle on **one page of its own** (a "Gift set" page, say, instead of showing bundle options on each component's page), you do that with a normal Shopify product:

1. Create an ordinary Shopify product for the bundle, with its own title, images, and description.
2. In [**Supr Bundles & Subscriptions > Offers**](https://admin.shopify.com/apps/super-subscriptions/app/offers), build the bundle offer, usually with a **Fixed bundle** or **Build your own bundle** option holding the real products.
3. Under **Applies to**, target the offer at that product, so the bundle options render on its page.

Customers get one clean product page, which can also sit in your collections, and stock is still drawn from the real component products.

|| **The older "Grouped product" bundle is no longer the way to do this.** That flow built a special bundle product for you. If you already have one it keeps working and still appears in your Offers list marked **Product bundle**, but it is read-only there and new bundles should be built as options inside an offer using the steps above.

### Which bundle type should I use?

| Goal | Option type |
|---|---|
| Buy more of one product and save (e.g. "Buy 3, save 15%") | **Quantity break** |
| Buy X get Y free or discounted (e.g. "Buy 1 Get 1 Free") | **Buy X, get Y** |
| Sell a fixed set of different products together | **Fixed bundle** |
| Let customers choose their own items from pools you define (mix & match, build-a-box) | **Build your own bundle (BYOB)** |
| Let shoppers buy a single unit at the normal price | **The single option**, see below |
| Let each option decide one-time or subscription, so shoppers make one choice | **Subscription only** and **One-time purchase only** on your options, see [One choice instead of two](#3-one-choice-instead-of-two) |
| Sell a subscription only in fixed pack sizes (e.g. packs of 3) | [**Sell in fixed quantities**](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/a-beginners-guide-to-subscription-offers-1ey00x7/#3-sell-in-fixed-quantities) on the subscription option |

All four option types work for **one-time purchases and subscriptions**.

### Bundling different products together

**Yes, one bundle can contain different products**, and it can be bought one-time or on subscription. Two option types do it:

* **Fixed bundle**: you choose the products and how many of each ("1 shampoo + 1 conditioner + 1 brush"). Customers pick a variant of each product where you allow it.
* **Build your own bundle (BYOB)**: you choose the products customers can pick from, they choose the mix ("any 6 flavours", "2 coffees and 1 filter pack"), and you can give a bigger discount as the box fills.

Both show on the product pages your offer applies to, and the order contains the real products. Add a subscription option to the same offer (type **Bundle + Subscription**) to let customers subscribe to the set.

A **quantity break** cannot do this: it counts each product on its own, so buying three different products never reaches a 3 pack. Bundles made with other bundle apps usually cannot be combined with our subscriptions, see [Using Supr Bundles & Subscriptions with other apps and tools](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/using-the-app-with-other-apps-1ve2ecs/).

### Quantity break

*Buy more, save more.* The classic volume discount, applied to the product the widget is shown on.

For each option, set:

* **Quantity**: how many units this option buys.
* **Price**: **Full price**, **Percentage off**, **Amount off**, or **Fixed price**.
  * **Amount off** comes off **each unit**, which is why the field reads *Amount off per product*. Set $5 on a 3 unit option and the customer saves $15.
  * A **Fixed price** is the price of the **whole option**, not of one unit. Set $30 on a 3 unit option and the customer pays $30 for all three.

A typical setup is [the single option](#3-the-single-option) for one unit, then 3 units at 10% off and 6 units at 20% off. A full-price 1 unit quantity break option does the same job if you would rather have it sit in the list with the others.

**A quantity break counts one product at a time.** The units are counted per product, so a 3 pack means three units of the *same* product. Buying three different products the offer covers does not add up to the 3 pack tier, even on an offer that targets a whole collection or your whole catalogue. For a deal across different products, see [Bundling different products together](#3-bundling-different-products-together).

**Mixing variants in one pack.** Variants of one product do count together, so a customer building a 3 pack out of three different flavours still gets the 3 pack price. The option's variant picker does this for you. If your add to cart is custom-built, see [Using bundle discounts with a custom add to cart](#3-using-bundle-discounts-with-a-custom-add-to-cart).

**In the cart.** A quantity break adds that many units of the product, so an 8 pack shows in the cart as the product with a quantity of 8. Shopify shows quantities this way for every app, and a pack cannot be shown as one single item.

**If your theme keeps its own quantity picker.** The options set the quantity for you, and on most themes the theme's own quantity picker is hidden while bundle options are shown. Where it stays visible, the two move together: a shopper who changes the picker gets the quantity break option that quantity has earned selected for them, always the best one it reaches, so 4 lands on your 3 unit option and going back down to 1 lands on your 1 unit option. Their own number is kept, so asking for 4 buys 4 rather than dropping to the size of the option. Options that are not quantity breaks are left alone on purpose, because a fixed bundle, a build your own bundle, or a Buy X Get Y option is a set of items the picker does not describe, and so is [the single option](#3-the-single-option).

### Buying more than your largest option

**On an offer whose bundle options are all quantity breaks, buying more than your largest option keeps its discount.** Each option works as a threshold: any quantity at or above an option's size earns that option's price on every unit, and the customer always gets the best option they have reached. With options for 2 and 3 units, 4 or 10 units get the 3 unit discount on all of them. This holds however the quantity is reached, on the product page or by changing the quantity in the cart.

Two things to know:

* **An offer that mixes option types is stricter.** As soon as the offer also has a Buy X Get Y, fixed bundle, or build your own bundle option, a quantity break is priced at its own size or an exact multiple of it (3, 6, 9 for a 3 pack), so other quantities may be charged at full price. If you want "buy more, save more" at any quantity, keep that offer's options to quantity breaks.
* **Different purchases count separately.** Units bought on different delivery frequencies, or one-time next to a subscription, are counted as separate purchases, not added together.

### Buy X, get Y

*Buy X items, get Y free or discounted.*

* **Buy quantity**: how many the customer must buy, at full price.
* **Reward quantity**: how many they get as the reward.
* **Reward discount**: **Free**, **Percentage off**, **Amount off**, or **Fixed price**.
* **Reward products**: where the reward comes from.
  * **Same product they buy**, the classic same-SKU offer with no picker.
  * **The offer's products**, so the customer chooses their reward from everything the offer covers.
  * **Specific products** you pick, so the reward comes from a set you control.

That covers "Buy 1, Get 1 Free", "Buy 2, Get 1 at 50% off", and "Buy 3, get a free product of your choice" with the same option type.

**The items being bought are always full price.** A Buy X Get Y option's entire discount is its reward, so there is no percentage or amount off the buy side the way there is on a quantity break. A "Buy 2 get 1 FREE" option on a $43.99 product charges $87.98 and ships three units.

**With a subscription.** On a **Bundle + Subscription** offer, the subscription discount is taken off each unit first and the reward is worked out on that price. So "Subscribe and save 10%" plus "Buy 2 get 1 FREE" charges 2 x $39.59 = $79.18 rather than $87.98. If you want the Buy X Get Y deal on one-time orders only, click **One-time purchase only** on the option and turn it on. Every option lists its other settings as small chips under its main fields, each naming a setting and, once it is on, showing **On** or its value. Clicking a chip opens the option's **Additional settings** section with that setting expanded, and its switch turns it on.

**At checkout on a subscription.** A Buy X Get Y option bought on a subscription goes into the cart as two lines, the items bought and the items rewarded, so Shopify shows "This order has a recurring charge for multiple items" where it would otherwise print a recurring subtotal. That is deliberate. Shopify works its recurring subtotal out itself, without the option's discount, so on these offers it quoted a renewal price nobody is ever charged. The customer still sees the full breakdown on the page, and the first order and every renewal are charged exactly what the option says.

**Every unit is its own choice.** On an option rewarding **the same product**, the customer gets a variant picker for each unit in the set, so a "Buy 2 Get 1 Free" option on a t-shirt lets them take a medium, a large, and a free small. The picker is always shown on Buy X Get Y options (whenever the product has more than one variant), because otherwise the free item is just another copy of whatever the product page happens to have selected. Each row carries its own price, with the price that unit would cost on its own struck through beside it, so the reward reads as a saving.

**Which unit is the free one.** When the units are not all the same price, the reward goes to the **cheapest** unit in the set, the same way Shopify's own Buy X Get Y discount works. That is both what the option strikes through and what the customer is charged, so nobody can drop their most expensive variant into the free slot.

**Rewards chosen from a pool.** When the reward comes from **the offer's products** or **specific products**, the option has two halves and both are pickable. The items being bought sit at the top with a variant picker per unit, so a "Buy 2" option can be one medium and one large rather than two of whatever the product page has selected. The reward is chosen from the cards underneath, each showing the reward's normal price struck through beneath its deal price, and taking the same reward more than once gives a variant dropdown per unit, so two free items can be two different sizes. When the reward comes from a list of more than six products, the cards open in a picker behind a **Choose items** button rather than printing down the option.

The word shown in place of a price on a free item is yours to change under **Design > Labels**, and it is translatable like every other label.

### Fixed bundle

*Sell a fixed set of different products together.* You decide exactly what is in the box; the customer buys it as one thing.

Open the option, set the **Bundle price** (**Full price**, **Percentage off**, **Amount off**, or **Fixed price**), then use **Add a product** under **Bundle products**. For each product you can set:

* **Quantity**: how many of that product the bundle includes.
* **Allowed variants**: every variant is offered unless you narrow it. Click the "X of Y variants" link under the product to restrict the option to a subset.
* **Default variant**: which variant is pre-selected. The customer can still change it wherever a variant dropdown is shown.

**In the cart** each product in the bundle is its own line, and the bundle stays whole: raising the quantity of any item adds a whole second bundle, lowering it takes one bundle off, and removing an item removes the whole bundle. If a cart is edited some other way, only complete bundles get the bundle price and any extra items are charged at their normal price.

**Products added one by one.** Turn on **Bundle these products in the cart** on the option and the bundle price also applies when a shopper adds every product of the bundle separately, for example from each product's own page, a collection page or a custom add to cart. The products have to be bought the same way (all one-time, or all on a subscription), and only complete sets get the price. Items already priced by another bundle option keep that price, so a cart is never discounted twice. Without the setting, only bundles added from the bundle option get the bundle price.

**Stock.** A fixed bundle can only be bought as a complete set, so while any product in it is sold out the option reads **Sold out** in place of its price and cannot be selected. Restock the product or take it out of the bundle before promoting it. See [Bundle options and your stock](#3-bundle-options-and-your-stock).

### Build your own bundle (BYOB)

*Let customers pick their own items from your pools.* Also known as **mix & match** or **build-a-box**, this is a full build your own bundle experience. When you add an option, pick **Build your own bundle (BYOB)** as its type, then set its **Box price**.

An option can have **one or more groups** (click **Add another group** for another), and each group has:

* **Group name**: the label the customer sees for that step.
* **Group subtitle** (optional): a short line under the group's name, such as "Silky and long-lasting". Translate it under **Settings > Translations > Offers**.
* **Minimum to pick** and **Maximum to pick**: setting both to the same number means "exactly N". The box has one slot for each item up to the maximum.
* **Products customers can choose from**: the pool for that group. Each product must be **Active** in Shopify and available on your **Online Store** sales channel, or shoppers cannot pick it.
* **Let customers pick the same product more than once**: on, one product can fill more than one slot, so a customer can put three of it in the box. Off, each product goes in once, so a box of six means six different products.
* **Starting items**: what the box holds when the page loads. The editor fills these with the first products in the group when you add them.
  * **A box with no more slots than products** has one row per slot (**Item 1**, **Item 2**, and so on). Pick a different product from any row's dropdown, or untick an item to leave that slot empty for customers to choose. Every item is ticked unless you untick it.
  * **A box with more slots than products**, for example a box of 25 from 5 meals, has one row per product instead, where you set how many of it the box starts with. Anything you leave unfilled starts empty for customers to choose. If each product can only go in once, each product is a checkbox.

One group is a simple "pick 4 from this pool". Several groups make a stepped box ("pick 2 coffees, then 1 filter pack"). To sell several box sizes, add one option per size, or use [tiered discounts](#3-tiered-discounts-on-a-build-your-own-bundle) so one option covers every size.

**The box opens full.** On the product page the box is already filled with your starting items and the option shows its price straight away, so a customer who likes your selection adds it to the cart in one tap. How a group looks depends on how many products it has:

* **Six products or fewer**: every product is a card on the option, with your starting items already picked. A customer taps a card to add it or take it out, and when **Let customers pick the same product more than once** is on, uses the plus and minus buttons on a picked card to choose how many.
* **More than six products**: one row per item with its picture and name. Every row has a **Change** button that opens a short product list: each product with its picture, its price with the bundle discount already applied beside the normal price struck through, a choice of variant, and a **Choose** button that swaps the item in and closes the list. A slot you unticked shows **Choose an item** with a **Choose** button. Because the products only appear in that list, a long pool never pushes your price and add to cart button down the page.

Either way, a box that is not full yet has to be filled before it can go in the cart. A product your store cannot sell right now (a draft, archived, not on the Online Store, or sold out in every variant) reads **Unavailable** and cannot be picked. If your stock of the products in a group adds up to less than the box needs, the whole option reads **Sold out**, and if a customer picks more of one item than you have, the buy buttons stay off until they change their picks. See [Bundle options and your stock](#3-bundle-options-and-your-stock).

When each product can go in only once, a product already in the box cannot be added a second time, and the product list marks it as **In your box**. In the editor a product used for one starting item is marked **used in another slot** in the other rows.

The **Change** and **Choose** buttons, the **Select product** heading, the **Choose an item** and **In your box** wording, and every other word the box prints are yours to change under **Design > Labels** (in the **Build-a-box** group), and they translate into your other languages under **Settings > Translations > Widgets**. Every one of them ships already translated into the languages the app supports.

You can also tick **Always include the current product in every box**, so the product the widget is shown on is always part of the box. Above a group of cards it reads as an **Includes** line; above rows it is listed as the first item, with no Change button.

A build your own bundle offers what the box can hold, not a step-by-step wizard: there is no separate "choose a box size, then choose by category" flow, and the app does not schedule different box contents for each month. Customers choose the contents, and subscribers can change them later from the customer portal (see below).

|| A build your own bundle option is for picking across **different products**. If all you want is one product bought in a pack where each unit can be a different variant, that is a **quantity break** with its variant picker turned on. A build your own bundle option is also the way to price a set of *different* products the customer chooses: a quantity break counts each product on its own.

### Tiered discounts on a build your own bundle

*Give a bigger discount the more items go in the box.* A build your own bundle option can carry up to 10 discount steps, so one option covers every box size instead of one option per size.

1. Open the option and set **Box price** to **Full price**, or to **Percentage off** for a discount that applies before the first step.
2. Set **Minimum to pick** and **Maximum to pick** to the smallest and largest box you sell.
3. Under **Tiered discounts**, click **Add a discount step**, then set **Items in box** and the **Discount** (% off) for each step, for example 2 or more at 10%, 4 or more at 20%, and 6 or more at 25%.
4. Click **Save**.

Every item in the box counts toward a step, whatever product or variant it is, so a shopper who picks 5 of one flavour and 1 of another reaches the 6 item step without choosing a box size first. The box always takes the biggest discount it has reached, and the option's own box price applies until the first step.

Shoppers see it as they build: the option reads **Save up to 25%** before anything is picked, the price updates with every item added, and a line under the box says how many more items unlock the next discount. Both of those lines are yours to reword under **Design > Labels**, and they translate under **Settings > Translations > Widgets**.

Checkout charges the step the box reached, on one-time orders and on subscriptions, and renewals keep that price. A box a customer edits in the customer portal is repriced at the step its new contents reach.

|| Steps need a **Percentage off** or **Full price** box price. An option priced with **Amount off** or a **Fixed price** box price keeps its single discount whatever the box holds.

### The single option

Every bundle offer also carries a **single option**: one unit of the product at its normal price, with no discount, for shoppers who do not want a bundle at all. It is the bundle equivalent of the one-time purchase row on a subscription offer, and it sits in the **Bundle options** list alongside the options you built, titled **Single** unless you rename it.

**A new offer starts with it shown, at the top of the options** (the **Multipacks** starting point is the exception and leaves it hidden), so shoppers land on buying one and trade up from there. Offers you created before the single option existed keep what you gave them: the option stays hidden until you turn it on, so nothing you already run grows an option it never asked for.

1. Go to [**Supr Bundles & Subscriptions > Offers**](https://admin.shopify.com/apps/super-subscriptions/app/offers) and open the offer.
2. Find the **Single** row in the **Bundle options** list. A **Hidden** badge means it is currently turned off.
3. Click the **eye** to show it on your product pages, or to hide it again.
4. Click the row open to set its **Title**, a **Subtitle**, and an **image**. Leave the title empty and it uses the store-wide wording from **Design > Labels**.
5. Use the **arrows** to put it above or below your bundle options, and click **Save**.

The single option does not drag with the others, because it only ever sits at the top or the bottom of the list, which is where it can appear on the storefront. The arrows work whether it is shown or hidden, so you can decide where it goes before you turn it on.

Because it belongs to the offer rather than the store, you can run it on one bundle and not another. Its title and subtitle are translatable under **Settings > Translations > Offers**, in the group for that offer, so it reads correctly in every language you sell in.

|| The single option has its own **Make default** button, like every other option. Make it the default and the product page opens on one unit at the normal price, at the top or the bottom of the list; make any other option the default and the page opens on that bundle instead. See [Setting a bundle as the default](#3-setting-a-bundle-as-the-default).

**Which subscription options it offers.** Like any bundle option, the single option offers every subscription option on the offer. To keep one off it, open that subscription option, click **Restrict to specific bundle options** and turn it on, and leave the single option unticked: it is listed there alongside the options you built. Keep every subscription option off it and the single unit is sold one-time only. See [One choice instead of two](#3-one-choice-instead-of-two).

### One choice instead of two

On a **Bundle + Subscription** offer a shopper usually makes two choices: a bundle option, then one-time or a subscription in the widget underneath it. If each of your options already says how it is bought, for example **1 unit**, **1 unit every month** and **3-pack**, you can make that a single choice.

1. Go to [**Supr Bundles & Subscriptions > Offers**](https://admin.shopify.com/apps/super-subscriptions/app/offers) and open the offer.
2. Show [the single option](#3-the-single-option) for one unit bought once.
3. Add a **Quantity break** option with a quantity of 1 for the subscription, then click **Subscription only** on it and turn it on.
4. Add your pack, for example a 3 unit **Quantity break** option, then click **One-time purchase only** on it and turn it on.
5. Open your subscription option, click **Restrict to specific bundle options** and turn it on, then tick only the 1 unit quantity break option. Leave the single option unticked so it stays one-time.
6. Click **Save**.
7. Go to [**Supr Bundles & Subscriptions > Design**](https://admin.shopify.com/apps/super-subscriptions/app/widget) and turn on **Hide when single option** in the **Add-on settings** card.

Every option now leaves exactly one way to buy, so the subscription widget steps aside and the option the shopper picks is the whole decision. The subscription only option shows its subscription price from the start, and each option goes into the cart the way it says: once, or on the subscription.

|| The widget only steps aside for an option that leaves one way to buy. A **Subscription only** option on an offer with two delivery frequencies still shows the widget, so the shopper can pick one.

**A different frequency for each pack** works the same way: add one subscription option per frequency (every month, every 2 months, every 3 months), and on each one click **Restrict to specific bundle options**, turn it on, and tick only its pack. The 2 pack is then offered every 2 months, the 3 pack every 3 months, and so on.

### Bundle options and your stock

Bundle options follow your Shopify inventory for products that **Track quantity** with **Continue selling when out of stock** turned off.

* **An option your stock cannot fill reads Sold out** in place of its price, is greyed out, and cannot be selected. For example, a pack of 6 when only 4 are left, or a box of 60 when the products it is built from add up to fewer than 60. It becomes available again as soon as there is enough stock, or when the customer switches to a variant that has it.
* **If the option selected by default is sold out**, the next option that can be filled is selected instead when the page loads.
* **In a build your own bundle, picks are checked against stock.** If a customer picks more of one item than you have, the add to cart, Buy it now and express checkout buttons turn off, and a message under the option says how many are left, until they change their picks.

A sold-out free gift follows the offer's **When a gift is out of stock** setting: the option reads **Sold out**, or it sells without the gift. See [Free gifts and add-ons](#3-free-gifts-and-add-ons).

The product page reads the stock of the product it shows. For other products in a fixed bundle or a build your own bundle it knows only whether they are sold out, so Shopify's own stock check still applies to them: if Shopify cannot add the whole bundle, none of it is added and the customer sees Shopify's message under the option.

Both messages are yours to reword under **Design > Labels** (**Option sold out** and **Not enough stock**), and they translate under **Settings > Translations > Widgets**.

### Bundle option settings

Every option, whatever its type, has these core settings:

* **Title**: the option's main text.
* **Default**: which option is pre-selected on the product page. Click **Make default** on the option you want highlighted. See [Setting a bundle as the default](#3-setting-a-bundle-as-the-default).
* **Variant selector**: let customers pick a variant for each item in the option (click **Variant selector** on the option and turn it on). Always on for a **Buy X, get Y** option rewarding the same product, where the reward is a separate item the customer is choosing.
* Drag options to reorder them, or click **Duplicate** on one to build a similar tier quickly.

In the editor each option row is labelled with its type above its title, for example "Quantity break (x3)", so bundle options and subscription options are easy to tell apart at a glance.

The order the two widgets stack on the product page is set under **Design > Elements > Page layout**: **Bundle on top** puts the bundle options first, and turning it off puts the subscription widget first.

### Setting a bundle as the default

The **default** is the option that is already selected when the product page loads. Making your best-value tier the default, a three-pack rather than a single, is one of the quickest ways to lift average order value.

1. Go to [**Supr Bundles & Subscriptions > Offers**](https://admin.shopify.com/apps/super-subscriptions/app/offers) and open the offer.
2. Click **Make default** on the bundle option you want pre-selected.
3. Click **Save**.

| The **Make default** button sits on the option's row in the list, so there is no need to open the option. It works the same way on [the single option](#3-the-single-option), on subscription options and on the one-time purchase row.

Only one option can be the default at a time, so setting a new one clears the previous default. Reordering options by dragging does not change which is default.

An offer you start from scratch makes none of its bundle options the default, which leaves the single option selected, and its row shows the **Default** badge. Most ready-made starting points make one bundle option the default instead. Click **Make default** on an option to move the opening selection onto it, and **Make default** on the single option to move it back. A hidden single option is never shown, so it cannot be the default: if you hide it without choosing another option, the page opens on your first bundle option.

On a **Bundle + Subscription** offer there are two independent choices. The bundle option default decides which pack size the shopper starts on, and the subscription option default decides whether that pack starts as a subscription or as a one-time purchase. Set both if you want something like "3-pack, delivered monthly" pre-selected.

|| Full steps for subscription options and the one-time purchase row are in [Setting the default option](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/a-beginners-guide-to-subscription-offers-1ey00x7/#3-setting-the-default-option).

### Rounding prices and savings

Two settings on the offer tidy up odd cents. Each applies to every option in the offer.

**Round prices** is the checkbox under **Bundle name** at the top of **Bundle options**. It charges a whole amount on **quantity break** and **Buy X Get Y** options: a "Buy 2 get 1 FREE" option that would come to $79.92 is charged $80.00 instead. Checkout, the cart, the widget on the product page and the renewals of a subscription all use the rounded price, so what the customer sees is what they pay.

* **How it rounds.** Each set of an option is rounded to the nearest whole amount, so two sets in the cart cost twice one set. The rounding works by adjusting the option's discount by the few cents needed, so it never charges more than the items cost without the option, and a free option stays free.
* **What it leaves alone.** An option with no discount of its own, such as [the single option](#3-the-single-option), has nothing to adjust and keeps its price. If you want those whole as well, set the product's own price to a whole amount. Fixed bundles, build your own bundles and Buy X Get Y options with a reward chosen from a pool are not rounded.
* **Prepaid subscription options.** The total charged is rounded, but the per-delivery price shown beside it is that total split across the deliveries, so it is not always a whole amount.

**Round the saved amount** is a checkbox in an option's **Savings chip** section. It shows the saving on the chip as a whole number, so "Save $69.93" reads "Save $70". It changes the wording only and never a price, so use **Round prices** as well if you want the prices whole too.

### Additional bundle option settings

**Subtitle**, **Text below**, **Badge** and **Image** are main fields, shown whenever the option is open. Everything else is a chip under them: click it to open the option's **Additional settings** with that setting expanded, and use its switch to turn it on.

**Text and display**

* **Button labels** (Buy X, get Y options only): override the reward buttons on this option (the **Choose button** and the **Add item prompt**).
* **Subtitle**: a line of supporting text under the title.
* **Text below**: a line of text shown beneath the option.
* **Savings chip**: show how much the customer saves. Turn it off to show no saving on this option.
  * **Automatic** works the saving out for you, counting both the money off the products and the value of any free gifts the option adds. It appears only on options that actually save the customer something. On a **Buy X, get Y** option it reads as an amount, because the saving is the value of the reward; to show a percentage, use a quantity break with a **Percentage off** price.
  * On a **build your own bundle** option the chip shows straight away, before the customer has changed anything, whenever the option takes a **percentage off** or an **amount off**: the saving reads the same whatever ends up in the box, so there is no reason to hide it. An option set to a **fixed** box price is the exception, since its saving is the gap between that price and whatever is in the box, so its chip appears once there is something in the box.
  * **Manual** lets you write the wording yourself. Put `{value}` where you want the calculated amount to appear, for example `You save {value} today`. Leave `{value}` out and the chip reads exactly what you typed, and stays on the option even when that option has no discount to calculate, which is handy for a fixed line such as calling out the value of a free gift.
  * Tick **Round the saved amount** to show the saving as a whole number. See [Rounding prices and savings](#3-rounding-prices-and-savings).
  * The chip text is translatable, so it reads correctly in every language you sell in.
* **Badge**: highlight the option with a badge, for example "Most popular" or "Best seller". Pairs well with making that same option the default. Badges are a bundle option setting; subscription options do not have one. The badge's shape, position, colours and size are on **Design > Elements > Message badge**, and the automatic discount badge is **Design > Elements > Discount badge**.
* **Image**: show an image next to this option on the storefront.

**Pricing and cart behaviour**

* **Free shipping**: include free shipping when a customer selects this option. The "Includes free shipping" line is shown at the bottom of the option, under any add-ons, so it reads as a summary of everything that option earns. Like a quantity break's discount, it is earned by the units of one product.

**Subscription behaviour**

* **Apply discount to subscriptions**: apply this option's discount to subscription orders too. Turn this **off** if you do not want the bundle discount to stack with the subscription discount: the option's discount then applies to one-time purchases only. For a Buy X Get Y option, use **One-time purchase only** instead.
* **Subscription only**: hide the one-time purchase row when this option is selected, so the option can only be bought on a subscription.
* **One-time purchase only**: the opposite. Hide the subscription options when this option is selected, so it can only be bought once. Useful for a gift set, a trial size, or a big stock-up pack you do not want going out on repeat.
* **Hide for B2B customers**: hide this option from customers buying for a company (Shopify B2B) and keep its discount off their orders, since they already buy at their company's catalog price.

**Subscription only** and **One-time purchase only** are two ends of the same choice, so turning one on turns the other off.

|| **Build your own bundle on a subscription.** The products customers choose from are always added to the offer's subscription, so a box bought on subscription stays a subscription whatever **Apply discount to subscriptions** is set to (that setting only decides whether the option's own discount applies too). Those products are sold on subscription only inside the box: unless the offer also targets them, their own product pages show no subscription options, and customers can't add them to a subscription from the customer portal. To let a customer who already has the box change what is in it, or its size, from the portal, turn on **Edit bundle boxes** under [**Settings > Customer portal**](https://admin.shopify.com/apps/super-subscriptions/app/settings/customer-portal). It is off by default. See [Editing a build your own bundle box](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/customer-portal-settings-q1tpjk/#3-editing-a-build-your-own-bundle-box).

Which subscription options a bundle option offers is set the other way round, on the subscription option itself: open it and click **Restrict to specific bundle options**. The single option is in that list too. See [Additional settings](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/a-beginners-guide-to-subscription-offers-1ey00x7/#3-additional-settings).

|| If a bundle option ends up offering nothing at all, because it is one-time purchase only (or no subscription option applies to it) *and* the one-time purchase row is hidden on this offer, the subscription widget is hidden entirely while that option is selected, and the option adds to cart as a plain one-time purchase.

|| With **Hide when single option** turned on in **Design > Add-on settings**, the widget also steps aside while an option that leaves exactly **one** way to buy is selected, and that way is used: a one-time purchase only option adds to cart once, and a subscription only option with one delivery frequency adds to cart on that subscription.

**Extras**

* **Add-ons** and **Free gifts**, described in the next section.

### Free gifts and add-ons

Both are switched on per option, from the **Free gifts** and **Add-ons** chips, and apply while that option is selected.

**Free gifts** add products at no charge.

1. Click **Free gifts** on the option, turn it on, and click **Add a gift** to pick the product, then set its **Quantity**.
2. Set **Gift applies to**: **First order only** or **Every order (ongoing)**.
3. Set **How gifts are given**: **Give every gift** adds each one automatically, **Let the customer choose** turns the gifts into a pool the customer picks from, and **Gifts the customer picks** sets how many (for example 2 free gifts from 3 products).
4. Set **When a gift is out of stock**. This applies to every option in the offer, whichever option you set it on (see below).
5. Click **Save**.

**When a gift is out of stock.** A gift product that tracks its quantity, is at zero and has **Continue selling when out of stock** turned off cannot be added to a cart, so you choose what the offer does instead:

* **Show this option as sold out** (the default): the option reads **Sold out** and cannot be selected until the gift is back in stock. Use it when the gift is part of the deal.
* **Skip the gift and still sell**: customers can still buy the option. The gift row reads **Unavailable** in place of **Free**, the gift is left out of the cart, and the option's saving stops counting the gift's value. Use it when you would rather keep selling than wait for the gift to restock.

On an option where customers choose their gifts, a gift that is out of stock reads **Unavailable** and cannot be picked either way. With **Skip the gift and still sell**, customers pick from the gifts that are left; with **Show this option as sold out**, the option is sold out once too few gifts are left to make up the number customers pick. A gift set to continue selling when out of stock is still added as normal. The word **Unavailable** is the **Unavailable product** label under **Design > Labels**.

A gift row with only a name typed under **Gift product**, and no product picked, shows on the option without adding anything to the cart. That suits a gift you send outside Shopify, such as a handwritten card.

On the storefront each gift is its own row at the bottom of the option: the product's image and name on the left, and a price column on the right showing the gift's normal price struck through over the word **Free**, so the customer can see what the gift is worth. The gift's name comes from the product itself and follows your Shopify translations. The word **Free** is yours to change under **Design > Labels**, and it is translatable like every other label.

On a subscription the gift goes into the cart on the subscription, alongside the item it came with, so checkout shows "This order has a recurring charge for multiple items" rather than a recurring subtotal that Shopify works out without the option's discount. A gift set to **First order only** is taken off the subscription once that first order is placed, so your customer keeps the gift you promised without it arriving free on every renewal. A product you only ever give away does not start offering a subscription on its own product page.

|| **A free gift on one subscription option:** subscription options have their own **Free gift** setting with these same gift settings, plus **A set number of orders**. See [Free gift](/en-us/article/a-beginners-guide-to-subscription-offers-1ey00x7/#3-free-gift) in the subscription offers guide.

**Add-ons** are optional extras a customer ticks on, the closest thing to "frequently bought together" or an order bump on the product page ("Add a brush for $5").

1. Click **Add-ons** on the option, turn it on, and click **Add an add-on**.
2. Pick the product (and **Variant**), and optionally a **Name** to show instead of the product's own name.
3. Set its **Price**: **Full price**, **Percentage off**, **Amount off**, **Fixed price**, or **Free**. Tick **Include free shipping when this add-on is selected** if the add-on should earn free shipping.
4. Click **Save**.

Add-ons show as tickboxes under the selected option, without a heading of their own. Each add-on goes into the cart as a **one-time item**, even when the option is bought on subscription, so it ships with the first order and does not repeat on renewals. To offer extras to people who already subscribe, use [Upsells](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/upsells-t8mfl8/).

| Bundle option add-ons are not the same as the **Add-on settings** card on the Design page, which holds widget features such as **Hide when single option**. See [Product Page Add-ons](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/product-page-add-ons-8qzyrj/).

### Discount codes and bundle prices

Bundle prices are charged by an automatic Shopify discount the app creates for you, named **Supr Bundle Block Pricing** (stores that installed the app before September 2026 may still see an older name until the app updates it). Leave it in place: deleting or deactivating it in **Shopify admin > Discounts** stops every bundle option from discounting at checkout.

That discount is set to combine with product, order, and shipping discounts, so whether a customer's discount code also applies is decided by **the code's own settings**:

* In **Shopify admin > Discounts**, open the code and find **Combinations**. Tick **Product discounts** to let the code apply to an order that already has a bundle price. Leave it unticked to keep the code off bundles: Shopify then applies only one of the two, not both.
* An **order** discount code (for example 10% off the order) or a **free shipping** code applies on top of bundle prices when it is set to combine with product discounts.
* A **product** discount code does not add to a bundle price on the same item: Shopify gives each cart line one product discount, the bigger one. On Shopify Plus you can change that, see [Stacking discount codes with bundle prices on Shopify Plus](#3-stacking-discount-codes-with-bundle-prices-on-shopify-plus). The same rule is why another app's automatic discount can replace your bundle price, see [When another discount app overrides your prices](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/how-subscription-discounts-work-1yk98pw/#3-when-another-discount-app-overrides-your-prices).

For codes aimed at subscribers (first order only, a set number of renewals), see [Shopify discounts and discount codes](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/how-subscription-discounts-work-1yk98pw/#3-shopify-discounts-and-discount-codes).

### Stacking discount codes with bundle prices on Shopify Plus

On the **Shopify Plus** plan, a product discount code can apply to the same item as a bundle price, so customers keep their bundle price or free gift and still get your code. Shopify allows this when the two discounts carry tags that allow each other.

1. Go to [**Supr Bundles & Subscriptions > Settings > Discount combinations**](https://admin.shopify.com/apps/super-subscriptions/app/settings/discounts). The page only shows on Shopify Plus stores.
2. Turn on **Let tagged discounts stack with bundle pricing**.
3. **Tags on bundle pricing** is the tag the app adds to its bundle discounts (**supr-bundle** unless you change it). In **Stack with discounts tagged**, enter the tag you will put on your own codes, for example **coupon**. Separate several tags with commas.
4. Click **Save**.
5. In **Shopify admin > Discounts**, open each code that should stack. Add the tag **coupon**, and under **Combinations** tick **Product discounts** and allow discounts tagged **supr-bundle** to apply to the same product. Save the code.

|| The code must be an **Amount off products** discount aimed at specific products or collections. Shopify only lets product discounts stack on the same item, and a code that applies to the whole order is an order discount.

Two discounts stack only when each one allows a tag on the other. If COUPON10 and COUPON15 are both tagged **coupon** and each allows only **supr-bundle**, either code stacks with your bundle prices, but the two codes never stack with each other.

Shopify works out how stacked discounts add up. A 10% code on a **Buy X, get Y** option, for example, can take 10% of the full price on top of the free item, rather than 10% of the bundle price. Add a bundle and your code to a cart and check the total before you promote the code. On a subscription, the code's own **Recurring payments** setting decides how many renewals it applies to.

### Publishing and targeting

* Every offer has a **Status** in the side card of its page. New offers start as **Published**; choose **Draft** to take the offer off every product it applies to (existing subscribers keep renewing). Only **Published** offers appear on your storefront.
* Choose which products the offer applies to under **Offer details > Applies to**: **All products**, **Specific collections**, or **Specific products**. With specific products you can narrow a product to some of its variants.
* A product shows the bundle options of one offer. If two bundle offers apply to the same product, only one of them shows, so keep one bundle offer per product (offers limited to different variants of the same product are fine).
* Offers that target a collection use the products that were in it when you last saved. After changing a collection, click **Refresh** in the **Collection products** card on the Offers page.

|| Targeting decides which product pages show the options. It does not pool products together: a quantity break option on a collection-wide offer is still earned one product at a time.

|| The widget must be **switched on** for bundles to appear and work on the storefront. If [**Supr Bundles & Subscriptions > Design**](https://admin.shopify.com/apps/super-subscriptions/app/widget) shows an **Enable widget** button, click it, then click **Save** in the theme editor that opens. Options not showing for another reason? See [Bundle options are not showing on the product page](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/bundle-bars-are-not-showing-io0ui7/).

### Using bundle discounts with a custom add to cart

This section is for developers. Skip it unless someone has built a custom add to cart on your store.

Normally the bundle option adds items to the cart itself and everything below is handled for you. But some stores have a landing page, page-builder section, or headless front end that builds its own add to cart. The bundle discount still runs in that case, because it is a Shopify discount rather than part of the widget, but it can only count what the cart tells it. **A custom add to cart must tag its lines, or the discount will misprice mixed carts.**

|| A custom add to cart is not officially supported. It works with the properties below today, but a future update may need your code to change.

**How the discount counts units**

Units are counted **per product**, across the cart lines that belong to the same bundle. Lines are grouped by their `_bundle_block_id` property, their product, and how they are bought (one-time, or on which subscription option), and that group's total is what the option's quantity is matched against. Different products never pool with each other, even when one offer covers them all.

That is why the same 3 pack can behave two different ways:

* **Three of the same variant** arrive as one line of quantity 3. Even untagged, the discount sees 3 units and the 3 pack price applies. This works by accident.
* **Two of one variant and one of another** arrive as two lines, of quantity 2 and quantity 1. Untagged, each line is priced on its own, so the customer gets the 2 pack price plus one unit at full price. On a store with a $16.99 product, a $31.99 two pack, and a $44.99 three pack, that is $48.98 instead of $44.99.

Tag both lines with the same `_bundle_block_id` and the discount sees one group of 3 units, and charges $44.99.

**Properties for a quantity break or Buy X Get Y option**

Send these in `properties` on **every** line of the bundle:

| Property | Value |
|---|---|
| `_bundle_block_id` | The bundle's id. The same value on every line, never one per option. |
| `_bundle_block_quantity` | The total units in the selected pack, as a string, for example `"3"`. |
| `_ssBundleBar` | The option's position in the offer, 0-based, as a string. Leave it off for the single option. |
| `_bundle_block_name` | Optional. The option's title. |

Only `_bundle_block_id` affects the price on an offer whose options are all quantity breaks. Send the others anyway: as soon as the offer gains a Buy X Get Y, fixed bundle, or build your own bundle option, the matching becomes stricter. `_ssBundleBar` then names the option the shopper picked, so a 2 pack and a "buy 1, get 1" (both two units) are never confused, and `_bundle_block_quantity` is checked against that option's pack size.

Do not add `_ssBundleGroup` to these lines. A line carrying it is treated as part of a fixed bundle or build your own bundle box, below. A Buy X Get Y option whose reward the customer picks from other products uses a different set of properties that is not covered here; contact support if you need it.

**Properties for a fixed bundle or build your own bundle option**

These are grouped differently, and they are the ones to use when a single deal spans **different products**. Send one line per variant, tagged with:

| Property | Value |
|---|---|
| `_ssBundleGroup` | The bundle's id. The same on every line of the box. |
| `_ssBundleBar` | The option's position in the offer, 0-based, as a string. |
| `_ssBundleKey` | A value you make up for this box, **identical on every line of the box** and new for each box you add. |
| `_ssMixGroup` | Build your own bundle only: the 0-based index of the group the item was picked from, so each group's minimum and maximum are checked against the right group. |
| `_bundle_block_name` | Optional. The option's title, shown as the box's name in the customer portal. |

The three values `_ssBundleGroup`, `_ssBundleBar` and `_ssBundleKey` together are what make lines one box. Get `_ssBundleKey` wrong and the box is not recognised:

* **A different key on each line** splits the box into boxes of one item each. None of them is complete, so every line is charged full price.
* **The same key on two build your own bundle boxes** merges them into one box, priced as one box: items past a group's maximum pay full price.

The discount checks the box before it prices anything:

* **A fixed bundle** is priced in whole sets: every product in the option, in its quantity. A set that is missing a product earns nothing, and extra units beyond whole sets pay full price.
* **A build your own bundle box** needs at least each group's minimum. Items beyond a group's maximum pay full price.
* **Only the option's own products count**: the fixed bundle's products (and the variants you allowed), or the products customers can choose from in a build your own bundle (plus the product itself when the option always includes it). Any other product with the same tags is charged full price.

A line may have a quantity above 1. Two of the same variant can be one line of quantity 2, or two lines with identical properties, which Shopify merges into one anyway.

**Subscription lines**

To sell the bundle on subscription, add these to **every** line, on any option type:

* `selling_plan` (next to `id` and `quantity`, not inside `properties`): the numeric id of the subscription option. Shopify refuses the line if that subscription option does not cover the variant.
* `_ssPlanBase` (inside `properties`): the variant's normal one-time price for **one** unit, as a plain amount in the cart's currency, for example `"18.99"`. Not cents, and not the line total. Take it from the variant's price.

`_ssPlanBase` matters on an option priced with **Fixed price** or **Amount off**. Those amounts are one-time prices, and a subscription line reaches the discount already reduced by the subscription option, so without `_ssPlanBase` the subscription discount is lost: a $50 box with a 5% subscription option charges $50 instead of $47.50, with no error. A **Percentage off** option prices the same either way.

The option's own settings still apply: with **Apply discount to subscriptions** off, a box bought on subscription gets no bundle discount, and a **Subscription only** option gives none to a one-time purchase.

**Example**

A build your own bundle box of three items, on a subscription, sent to `/cart/add.js` in one request. For a one-time box, leave out `selling_plan` and `_ssPlanBase`.

```json
{
  "items": [
    {
      "id": 44000000000001,
      "quantity": 2,
      "selling_plan": 700000000001,
      "properties": {
        "_ssBundleGroup": "BUNDLE_ID",
        "_ssBundleBar": "0",
        "_ssBundleKey": "box-lq3k9x-1",
        "_ssMixGroup": "0",
        "_ssPlanBase": "18.99",
        "_bundle_block_name": "Build your box"
      }
    },
    {
      "id": 44000000000002,
      "quantity": 1,
      "selling_plan": 700000000001,
      "properties": {
        "_ssBundleGroup": "BUNDLE_ID",
        "_ssBundleBar": "0",
        "_ssBundleKey": "box-lq3k9x-1",
        "_ssMixGroup": "0",
        "_ssPlanBase": "21.50",
        "_bundle_block_name": "Build your box"
      }
    }
  ]
}
```

**Finding the ids**

With the widget switched on, load a product page the offer targets and read them off the rendered option: the bundle id is the `data-bundle-block-id` attribute on the bundle block, and each option's index is its `data-tier-index`. The subscription option's id is the product's selling plan id, available in your theme's Liquid as [`selling_plan.id`](https://shopify.dev/docs/api/liquid/objects/selling_plan). If the widget is not switched on in your theme, contact support and we will look the ids up for you.

**Things worth checking**

* Use the exact property names above. A near miss such as `_bundle_name` is ignored, and the line stays at full price.
* Tagging groups units of the **same product**. Two different products tagged with the same `_bundle_block_id` are still counted separately, so a quantity break is never earned by buying one each of two products. Use a fixed bundle or build your own bundle option for a deal that spans products.
* `_bundle_block_id` only counts on a product the offer applies to. On any other product it is ignored.
* Add all the lines of one box in a single request, so the cart never holds half a box.
* Group your items by variant before posting, so three of one flavour is one line of quantity 3 rather than three lines of 1. Shopify merges identical lines anyway, and grouping keeps the cart tidy.
* An option priced above what the cart already costs is correctly ignored. A $31.99 two pack does nothing once a 10% subscription discount has already taken two units to $30.58, and that is intended: the discount will not raise a price.

### Troubleshooting

* **Nothing happens on the product page after creating a bundle**: work through [Bundle options are not showing on the product page](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/bundle-bars-are-not-showing-io0ui7/). The usual causes are an offer of type **Subscription** (no bundle options), an offer set to **Draft**, a product that is not in **Applies to**, or the widget not switched on under **Design**.
* **Selecting a pack puts only one unit in the cart**: check the widget is switched on (**Design** shows no **Enable widget** button) and that you clicked **Save** in the theme editor. If it is on, your theme's add to cart is bypassing the options: contact support and we will adapt it for your theme.
* **A bundle option reads Sold out**: there is not enough stock to fill it. Restock the products, or for a fixed bundle take the sold-out product out. See [Bundle options and your stock](#3-bundle-options-and-your-stock).
* **A bundle option with a free gift reads Sold out, or its gift reads Unavailable**: the gift product is out of stock. Restock it, or pick what the offer does under **When a gift is out of stock** in the option's **Free gifts** settings. See [Free gifts and add-ons](#3-free-gifts-and-add-ons).
* **A fixed bundle cannot be added to the cart**: a product in it is sold out, or is not **Active** on your **Online Store**. Restock it or take it out of the bundle. See [Fixed bundle](#3-fixed-bundle).
* **A build your own bundle box opens empty, or with empty slots**: those slots have no starting item, or their item is unticked. Boxes set up before starting items existed start this way. Open the offer and, under **Starting items** in the group, pick a product for each row and make sure each one is ticked, or set how many of each product the box starts with, then save. Leave room only where you want customers to pick. See [Build your own bundle (BYOB)](#3-build-your-own-bundle-byob).
* **Shoppers cannot pick products in a build your own bundle box, or a product reads Unavailable**: every product in a group must be **Active** in Shopify and available on your **Online Store** sales channel, or your store cannot sell it. A product you duplicate in Shopify starts out as a **Draft**, so a box built from copies has nothing to pick until you set them to Active. Open each product in Shopify, set its **Status** to **Active**, make sure it is available on the **Online Store** sales channel, and reload the product page. A starting item your store cannot sell right now leaves its slot empty rather than putting something unbuyable in the box.
* **A build your own bundle product shows no subscription options on its own page**: that is intended. The products customers choose from are sold on subscription inside the box only. To sell one on its own too, add it to the products the offer targets, or to another offer. See [Additional bundle option settings](#3-additional-bundle-option-settings).
* **A build your own bundle bought on subscription checked out as a one-time order**: the products customers choose from join the offer's subscription when the offer is saved, so a box set up before that changed may be missing them. Make any change to the offer and save it, or contact support and we will add them for you.
* **A customer cannot add two of the same product to a box**: check **Let customers pick the same product more than once** on that group. With it off, each product goes in once and the product list marks the ones already in the box as **In your box**. See [Build your own bundle (BYOB)](#3-build-your-own-bundle-byob).
* **A build your own bundle product shows no picture, or an old one**: each item shows the chosen variant's image if it has one, otherwise the product's **first** image in Shopify. To change the picture, drag the image you want to the first position on the product in Shopify and reload the product page.
* **The wrong option is pre-selected on the storefront**: only one option can be the default, so setting a new one clears the old. Re-open the offer, click **Make default** on the option you want, save, and reload the product page. See [Setting a bundle as the default](#3-setting-a-bundle-as-the-default).
* **The single option is not on the product page**: new offers show it, but an offer created before it existed keeps it hidden until you turn it on. Open the offer, find the **Single** row in Bundle options, click the eye, and save. See [The single option](#3-the-single-option).
* **The bundle options sit at the bottom of the page, show twice, or look unstyled**: see [The subscription widget appears twice or at the bottom of the page](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/the-subscription-widget-appears-twice-or-at-the-bottom-of-the-page-smaa7r/). On page builders the placement may need a small adjustment from us; contact support.
* **The price on an option shows as code, such as `<span class=money>`**: your theme's price format is clashing with the option. Contact support and we will fix it on your store.
* **An option's image will not upload**: contact support and send us the image in the chat, and we will add it to the option for you.
* **The subscription widget disappears on one bundle option**: that option offers nothing to pick, because it is **One-time purchase only** or no subscription option applies to it, and the one-time row is hidden on the offer. Show the one-time row, or apply a subscription option to that bundle option. It also steps aside when **Hide when single option** is on and the option leaves only one way to buy, which is intended: see [One choice instead of two](#3-one-choice-instead-of-two).
* **The single option no longer offers a subscription**: a subscription option on the offer has **Restrict to specific bundle options** turned on and the single option is not ticked. Tick it to offer that subscription on the single option too.
* **No variant pickers on a Buy X Get Y option**: they only appear when the product has more than one variant, and a product whose only product option is Shopify's default "Title" counts as one variant. Check the product has real product options, such as size or colour.
* **A Buy X Get Y price looks lower than expected**: with a subscription selected, the subscription discount comes off first and the reward is worked out on that lower price, so the total is below "buy quantity x full price". See [Buy X, get Y](#3-buy-x-get-y).
* **A gift row shows Free but no struck-through price**: the price is read live from your storefront, so it is left off rather than guessed when the gift product is not available in the customer's market. Check the gift product is published to that market.
* **A different unit went free than the customer expected on a Buy X Get Y option**: the reward always goes to the cheapest unit in the set, so a customer mixing a $30 and a $20 variant gets the $20 one free. Pricing every variant the same removes the question.
* **A customer expected a discount for buying two different products**: a quantity break counts one product at a time, so two different products bought once each are two singles, not a 2 pack. If you want a deal across different products, use a **fixed bundle** or a **build your own bundle** option.
* **Changing the theme's quantity picker does not move the selected option**: the selection only follows the picker between **quantity break** options. While a fixed bundle, build your own bundle, Buy X Get Y, or single option is selected the shopper's choice is left where it is, because those options are a set of items rather than a number of units. See [Quantity break](#3-quantity-break).
* **One flavour gets the pack price but a mixed pack does not**: the units are landing on separate cart lines and are not being counted together. On the app's own bundle option this is handled for you. On a custom-built add to cart it means the lines are missing the `_bundle_block_id` property. See [Using bundle discounts with a custom add to cart](#3-using-bundle-discounts-with-a-custom-add-to-cart).
* **The discount is named "Volume discount" instead of the option's title**: the checkout name comes from the option's **Title**, or the offer's **Bundle name** when the option has none, as they were when the offer was last saved. Give the option a title, save the offer, and try a new cart.
* **A box from a custom-built add to cart charges full price**: the lines are not being recognised as one box. Check that every line of the box carries the same `_ssBundleGroup`, `_ssBundleBar` and `_ssBundleKey`. If it charges the one-time box price on a subscription, the lines are missing `_ssPlanBase`. See [Using bundle discounts with a custom add to cart](#3-using-bundle-discounts-with-a-custom-add-to-cart).
* **The cart charges a different price than the option shows**: most often another app's automatic discount is replacing your bundle price. See [When another discount app overrides your prices](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/how-subscription-discounts-work-1yk98pw/#3-when-another-discount-app-overrides-your-prices).
* **Checkout says "This order has a recurring charge for multiple items" instead of a price**: that is Shopify's own wording, and it appears whenever a subscription order has more than one item, which is the case on an option carrying a free gift or a Buy X Get Y reward. Shopify works its recurring subtotal out without the bundle discount, so the figure it would have shown in its place is not what anyone pays. The full breakdown is still on the page and the charge is exactly what the option says.
* **Checkout's "Recurring subtotal" is higher than the bundle price**: Shopify works that line out before discounts, and it cannot be changed outside Shopify Plus. The first order is charged the bundle price, and the app keeps that price on the subscription, so renewals are charged it too.
* **A free gift keeps arriving on every renewal**: check the gift's setting on the option. **Every order (ongoing)** repeats by design. **First order only** is taken off the subscription once the first order is placed, so if a gift set that way is still repeating on a subscription created before this changed, edit the subscription and remove the gift line. See [Free gifts and add-ons](#3-free-gifts-and-add-ons).
* **The struck-through "was" price is missing in the cart or at checkout**: Shopify does not display compare-at prices there. This is platform behaviour and affects every app, not just this one.

### Common questions

**What happens if a customer buys more than my largest bundle?**
On an offer whose options are all quantity breaks, they keep the largest option's discount on every unit: with a 3 pack as your top option, 4 or 10 units all get the 3 pack rate. See [Buying more than your largest option](#3-buying-more-than-your-largest-option).

**Can I bundle different products, like 3 or 4 products at a discount, and let customers subscribe?**
Yes. Add a **Fixed bundle** or **Build your own bundle** option to a **Bundle + Subscription** offer. See [Bundling different products together](#3-bundling-different-products-together).

**If a customer adds the bundle's products separately, do they get the bundle price?**
Fixed bundles, build your own bundles, and Buy X Get Y deals are priced only when bought through their option. A quantity break counts units of the same product in the cart, so on an offer whose options are all quantity breaks, raising the quantity in the cart still earns the pack price.

**How do I change the "Bundle & Save" heading above the options?**
Open the offer and edit **Bundle name** at the top of the **Bundle options** section. The Design page only turns the heading on or off and styles it. For other languages, use **Settings > Translations > Offers**.

**How do I add a "Best seller" badge, or change "Save 10%" to my own wording?**
Open the option, type your text in **Badge**, then click **Savings chip** on the option and choose **Manual** for the saving. See [Additional bundle option settings](#3-additional-bundle-option-settings).

**Can customers add an extra product, such as a brush, while buying a bundle?**
Yes, with **Add-ons** on the option. They are optional tickboxes with their own price, and they are one-time items that do not repeat on renewals. See [Free gifts and add-ons](#3-free-gifts-and-add-ons).

**Can I give a free gift with the first subscription order only?**
Yes. Add a gift to an option and set **Gift applies to** to **First order only**. See [Free gifts and add-ons](#3-free-gifts-and-add-ons).

**Do discount codes work on top of bundle prices?**
It depends on the code's **Combinations** setting in Shopify. See [Discount codes and bundle prices](#3-discount-codes-and-bundle-prices).

**Why doesn't the cart show my compare-at ("was") price?**
Shopify shows compare-at prices only on product pages. If you want the saving to show in the cart and at checkout, set the product's regular price to the full price, remove the compare-at price, and let the bundle option or subscription option give the discount: it then shows as a discount line. The tradeoff is that places such as the Shop app and Google Shopping show the full price.

### Related guides

* [A Beginner's Guide to Bundles](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/a-beginners-guide-to-subscription-bundles-azutf/)
* [Bundle options are not showing on the product page](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/bundle-bars-are-not-showing-io0ui7/)
* [A Beginner's Guide to Subscription Offers](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/a-beginners-guide-to-subscription-offers-1ey00x7/)
* [Setting the default option](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/a-beginners-guide-to-subscription-offers-1ey00x7/#3-setting-the-default-option)
* [How subscription discounts work](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/how-subscription-discounts-work-1yk98pw/)
* [The Subscription Widget](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/the-subscription-widget-131jh5z/)
* [Customer Portal Settings](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/customer-portal-settings-q1tpjk/)
* [Upsells](https://supr-bundles-and-subscriptions.crisp.help/en-us/article/upsells-t8mfl8/)