An optional-product bundle is an ordinary Product bundle with the Optional products setting turned on. You still choose the products; the shopper decides which of them to actually buy, and the bundle discount applies to whatever they keep.
Optional products lives on the Offer tab, in the Product settings card, and it appears on every structure that shows that card. It is available on every plan under current pricing — Free, Tier 1, Tier 2, Tier 3, Tier 4 and Enterprise — with no restriction. A Pro badge beside it means your shop is still on a legacy plan generation.
Testing more than one version
Use Add variant to create up to four widget variants (A–D) of one bundle, each with its own configuration and preview, edited in its own tab. Run A/B test splits shoppers across the active variants; End A/B test shows revenue and purchases per variant, and the variant you pick then receives all the traffic while the rest are archived.
While a test is running, some fields can only be changed on the primary (A) variant: the bundle's internal name, the active period, the countdown timer, Markets, the whole Widget placement card, "Enable integration with subscription apps," "Exclude B2B customers," and Bundle priority.
Step 1: Choose a structure
Optional products works on both of the Product bundle layouts.
Separate products. One fixed slot per product you add. The shopper cannot exchange a slot's product for another one, but with Optional products on they can drop the slots they do not want.
Product groups. One slot holds several products, or a whole collection, and the shopper picks one of them. Optional products then lets them drop the whole slot.
You can also start from a preset tile. Clicking a preset replaces every offer setting with that preset's full configuration, so pick your preset first and adjust it afterwards rather than the other way round. Presets only appear while you are creating a bundle.
Step 2: Add your products
Click Add products to put specific products in. On Separate products each product becomes its own slot; inside a Product group each product becomes an alternative the shopper can choose between in that one slot.
See most & least selling products opens a recommendation picker listing your best- and worst-selling products, so you can add them straight into the bundle.
Add collections fills a slot with a whole Shopify collection. It appears only on a Product groups bundle, only inside a group that is still empty, and only while the bundle's type is Widget-only. Once the group holds a product, or the bundle creates a Shopify product, the button disappears rather than greying out.
A bundle needs at least one product to save — "Add at least one product." An existing group cannot be left empty — "Add at least one product to the group or remove the group."
Step 3: Turn on Optional products
Turn Optional products on in the Product settings card. It adds an Optional and a Pre-selected checkbox to each slot, plus the Minimum items required and Maximum items allowed fields.
Tick Optional on a slot to let the shopper drop it from the bundle; leave it unticked and that slot is always included. Pre-selected decides how an optional slot arrives: a pre-selected optional product is already ticked in the widget, with its price already counted in the bundle total, so the shopper opts out of it rather than into it.
The Optional checkbox locks while Pre-selected is unticked on that same slot. Re-tick Pre-selected to unlock it.
Customers choose products: With checkboxes or From a pop-up
This choice appears only while Optional products is on, the structure is Separate products, and the bundle type is Widget-only. In every other combination you see a banner reading "Mark above the products that are optional." instead, and optional items are marked with inline checkboxes on the product rows themselves.
Choosing "From a pop-up" changes three things about the bundle's pricing:
Applies to is forced to Bundle subtotal amount, and the field is not rendered at all.
The Free gift discount group is turned off.
A legacy Free-products discount type is rewritten to Percentage the next time you save.
If you want to price the bundle product by product, or offer a free gift, stay with "With checkboxes".
Step 4: Set the minimum and maximum number of items
Both fields appear while Optional products is on, or while the Quantity selector is on.
Minimum items required is the smallest number of items the shopper must keep in the bundle for the discount to apply — Add to cart stays blocked, or the discount does not apply, until that many items are selected. It accepts 1–999. You will see "The specified value is greater than the number of products, add products or change the value of this field" when Optional products is on, the Quantity selector is off, Apply to is not All store, and the products you have added add up to less than this number.
Maximum items allowed caps how many items a shopper can put in the bundle. Choose Limited and type a number; each row's + button stops once the total reaches the cap. The number box is hidden, not greyed out, while "No limit" is selected. The cap must be at least Minimum items required and at least the number of compulsory slots, and it accepts 1–999. "Max can't be lower than min" and "Max can't be lower than the number of required groups" both block saving.
This cap is also what re-opens the Sale price and Amount off discount types — see Step 6.
Step 5: The Quantity selector, and what it does not do
The Quantity selector is offered on Widget-only bundles and lets the shopper raise or lower the quantity of each item inside the widget with a +/- stepper on each row.
The stepper multiplies the quantity of the variant already chosen on that row. It never gives each added unit its own variant selector, however high the shopper raises it. If you need three copies that can each be a different size, build the copies yourself: set the slot's Item quantity to 3 and tick Uncombined quantity, which splits the slot into three independent rows, each with its own product choice, its own variant selector and its own cart line.
Uncombined quantity does combine with Optional products, and that combination is the answer to "can the shopper take fewer copies than I set". Each copy carries its own Optional checkbox, so mark the first copy required and the rest optional, and the shopper can take anywhere from one copy up to the number you built in.
Step 6: Choose a discount
A Separate products or Product groups bundle shows a Discount card with radio buttons for No discount, Standard discount, Tiered discount and Free gift.
There is no automatic "cheapest item free"
Nothing in the app finds whichever item happens to be cheapest in a shopper's selection and discounts it to zero. Every free-item path needs you to name the products, variants or collections in advance: the per-row Free tick box in the Free gift group, the legacy gift list, or a Volume discount option's free gift add-on.
No discount
Choose this when the bundle exists to group products together and any price reduction comes from your own Shopify discounts rather than the bundle.
Standard discount
This is the group that gives you the Applies to, Type and Value fields.
Applies to prices the bundle either as a whole, with Bundle subtotal amount, or product by product, with Individual product price. Both options are available on every current plan, Free included. The field is not rendered at all while Optional products uses the pop-up picker.
Type is where Percentage, Sale price and Amount off live. Percentage is always offered. On an optional-product bundle, Sale price and Amount off appear only once the item count is pinned down — set Maximum items allowed to Limited, or, with the Quantity selector off, set Applies to to Individual product price. If a bundle is saved with Sale price or Amount off and the item count later becomes unbounded again, the type is silently rewritten to Percentage on save.
Value applies to the whole bundle when Applies to is Bundle subtotal amount; with Individual product price you type a number on each product row instead. Values are clamped in the field itself, with no blocking error: negative numbers become 0, Percentage is capped at 100, Sale price and Amount off are capped at 999,999,999, and everything is rounded to two decimals.
A sale price can only lower the bundle total. If the products the shopper selected already cost less than the sale price you set, the bundle goes into the cart at the real product price instead.
Tiered discount
This is the discount group built for this bundle shape. It appears only once the bundle is Widget-only — the "Create a product for this bundle additionally to widget" checkbox is off — and Optional products or the Quantity selector is on. Until both conditions hold the radio is not shown at all; it is absent rather than greyed out.
A Tiered discount gives one percentage per quantity tier and replaces the Applies to / Type / Value row entirely. It offers no Label, Badge, Free gift or pre-selected tier, and it holds the "Create a product" checkbox off with the caption "Not available with tiered discounts." Turn both Optional products and the Quantity selector off again and the Tiered discount is cleared when you save.
Percentage is the only type a tier can use, because the shopper decides how many items go into the bundle. That percentage is taken off each product's own price in the cart rather than off a single pooled total, so with products at different prices the more expensive ones give up more money.
Each tier's Required items must be at least 1 and strictly greater than the tier before it — "Must be at least 1+ more than previous option" blocks saving. Once one tier carries a discount, every later tier must carry one too.
If you need a fixed price per tier rather than a percentage, switch the bundle to the Volume discount structure, where every option can be priced with Percentage, Sale price or Amount off.
Free gift
The Free gift group appears when Optional products is off, or on with Customers choose products set to "With checkboxes". It is absent while the pop-up picker is in use.
Selecting it switches the bundle to per-product pricing and replaces the Type and Value fields with a "Free" tick box on every product row. Tick the gifts and leave the paid items unticked. It also resets every product's discount to 0, except any already at 100%.
You must tick at least one product, variant or collection as free, or saving fails with "Select at least one product as a free gift".
Put the candidate gifts in their own product group so the shopper can choose which one they get.
Free gift, legacy separate list
A second radio carries the same "Free gift" label. It appears only on a bundle already saved with the older free-products discount type, while that bundle is Widget-only and Optional products is off or uses checkboxes. It offers the shopper one free gift chosen from a separate list of products or collections that are not otherwise part of the bundle.
At least one free product or collection must be added, or saving fails with "No products added". A bundle that has never used this mechanism cannot be switched to it — use the regular Free gift group instead.
Step 7: Decide where the widget appears
Tick Show the widget on product pages of included bundle items in the Advanced tab → Widget placement card to make the bundle appear on the product pages of the products it contains.
Select where the widget will be displayed then lets you pick exactly which of those items show this bundle on their own page. Every item is selected by default, and the button caption reports how many are selected.
The store-wide setting is checked first. If "Widget on product pages" in Widget customization → General tab → Global display is set to No, no bundle's widget appears on any product page, whatever each bundle says. Saving that store-wide setting also writes the same Yes/No onto every bundle's own tick, so flipping it to No and back resets your per-bundle exceptions.
The Bundle title and Bundle description fields on the Bundle information card are what the widget shows on those item pages. Both are translatable with the Translate button once your shop has more than one widget language.
Step 8: Set the active period and countdown timer
Set Start date and Start time in the Offer tab → Bundle active period card. The form defaults them to the moment you opened it, so leaving them alone puts the bundle live as soon as you save. Set a future moment and the bundle saves as Scheduled and goes Active at that time, invisible on your storefront until then.
Tick Set end date and time to give the bundle an expiry. When the end moment passes the badge changes to Expired, the bundle disappears from every placement and its discount stops applying immediately. There is no validation on either date — you can save a start date in the past, and an end date earlier than the start date.
To show shoppers a countdown, tick Show countdown timer on the Advanced tab and pick one of four conditions:
Follow end date and time set for bundle — the default. It needs "Set end date and time" ticked; with no end date, or one already past, no timer is drawn.
Fixed duration — a Duration (min) field appears beside the select, seeded to 15, giving each shopper their own countdown of that length.
Ends at midnight (user's local time) — no further field to fill in.
Custom end date — End date and End time fields appear, seeded to one hour from now. Saving is blocked on a past or missing value with "End date and time must be in the future".
The countdown is a display element only. None of the four conditions ever starts, stops or expires a bundle — only the End date and time in the Bundle active period card decides whether a bundle is served.
Step 9: Limit the bundle to specific markets
The Markets card on the Advanced tab appears only once your store has more than one Shopify market; with one market or none, the whole card is absent.
All markets, the default for a new bundle, offers the bundle to every shopper. Specific markets reveals an autocomplete where you pick one or more markets, limiting the bundle to shoppers browsing from the countries those markets cover. You must choose at least one — saving without one is blocked with "Select at least one market".
Step 10: Advanced settings
These sit on the Advanced tab, in the Advanced settings card.
Display discount to customers from Compare-at price. Tick this when your products carry a compare-at price and you want the saving shoppers see measured against that higher price. The discount itself is still calculated from the product's actual price.
Pre-select the first available product variant in the widget. Leave this ticked for the widget to arrive with a variant already chosen for each item. Untick it to force the shopper to choose a variant before the bundle can be added to the cart.
Product variant selection. On Product groups bundles only. Choose which product a group shows pre-selected in the widget: "The product from the current product page the customer is viewing," which falls back to the first product in the group when that one is unavailable, or always "The first product in the group list."
Add new product variants to product bundle automatically. Only on widget-only bundles whose items are individual products. Leave it ticked so that variants you create later are added to this bundle automatically; untick it to freeze the bundle's variant list as it is today.
Enable integration with subscription apps. On widget-only and Physical bundles of any structure; it is removed for Shopify bundles. Tick it when the bundle's products are sold on a subscription or selling plan, so the widget passes the selling plan through to the cart.
Enable custom property field. Tick this to add a free-text input to the widget, for example a pet's name. Three more fields then appear: Field title, which is both the shopper-facing label and the property name printed on the order; Field help text, the hint shown under the input; and Make the field required, which blocks Add to cart until the shopper has filled it in.
Exclude B2B customers. Tick this to hide the bundle from shoppers signed in to a company account. They lose both the widget and the automatic discount.
Bundle priority
Bundle priority decides which bundle wins when several compete for the same product page. The higher the number, the earlier the bundle is shown — so give your flagship bundle a larger number, not a smaller one. Bundles that share a number are ordered by their bundle ID, highest first.
A bundle whose own product is the page being viewed always comes first, whatever its priority number.
This setting is on Separate products, Product groups and BOGO bundles; Volume discount bundles do not have it. It is greyed out on the non-primary variant of a running A/B test.
Step 11: Publish and test
Publishing is the toggle beside the title in the page header, not a status dropdown in the form. Switch it on to publish the bundle and off to keep everything you have configured while stopping the bundle from being served to anyone. If the bundle is beyond your current plan's limits, clicking the toggle opens an upgrade modal instead of saving.
To check a bundle before shoppers can see it, use a theme preview: turn on the "MBC Bundles App" embed in a draft theme and open that theme's preview from Online Store → Themes. Draft, Scheduled and Expired bundles all render there while staying invisible on your live theme. The discount will not apply in preview — the automatic-discount data is built only from published, in-period bundles.
Need Help?
If you have any questions, please contact our support team.
📩 Contact Support: Reach out to us via live chat or send an email to [email protected].











