Skip to main content

Best for

Buy X, get Y discounted promotions

Discount types

Percentage, Fixed Amount

Platforms

Checkout, POS, or both

Code required?

Yes — automatic

Bundle Discount

Overview

Bundle Discount creates "Buy X, get Y discounted" promotions. When a customer has both the source (trigger) products and target (discounted) products in their cart, the discount is applied to the target items. Source items display the bundle message but are not discounted.

You can configure multiple bundles within a single discount instance, control how many target items receive the discount based on source quantity, and enforce strict set-based ratios.


Configuration Reference

Top-Level Fields

UI LabelTypeRequiredDefaultDescription
Discount ModestringYesSet to Bundle Discount
PlatformstringNoBoth - POS & CheckoutBoth - POS & Checkout, POS Only, or Checkout Only

Multiple bundles can be added via the Add Bundle button.

Bundle Configuration (each bundle card)

UI LabelTypeRequiredDefaultDescription
Discount TypestringNoPercentagePercentage or Fixed Amount
Discount Percentage / AmountnumberYesThe discount value
Apply Discount TostringNoPricePrice or RRP (Compare At Price)
Discount Selection StrategystringNoAllAll, First, or Maximum
MessagestringNo""Message shown at checkout on source and target items
Source SelectorstringNoVariant IDVariant ID (select specific variants) or Product ID (select whole products)
Add Source Variants / ProductspickerYesThe trigger products for the bundle
Target SelectorstringNoVariant IDVariant ID or Product ID
Add Target Variants / ProductspickerYesThe products that receive the discount
Minimum quantitynumberNo0Gates source and targets: see Minimum Quantitytotal target qty ≥ this value (and source line ≥ this value) when above 0
Limit By SourcecheckboxNooffLimit discounted target qty based on source qty
Target per source (ratio)numberNo1How many targets get discounted per source set
Fixed ratioscheckboxNooffRequire exact multiples on the target side
Max target qtynumberNoHard cap on discounted targets (only when Fixed ratios is on)
Shared poolcheckboxNoonWhether the discount pool is shared across target lines

How It Works at Checkout

  • Target items show the discount message with the value, e.g. "Bundle Deal 20% OFF"
  • Source items show only the message, e.g. "Bundle Deal" — no discount is applied to them
  • Both source and target products must be in the cart for the bundle to activate
  • Minimum quantity (when above 0): At least one source line must meet the threshold and the sum of all target quantities must be greater than or equal to the same minimum, or the bundle does not run

How does minimum quantity work for bundle discounts?

Minimum quantity gates the bundle on both the source and target sides — both conditions must be satisfied or the discount does not activate. The same threshold value (m) applies to each side.

The Minimum quantity field (m) gates the bundle in two ways. Both must be satisfied for the discount to activate:

  1. Source: At least one source cart line has quantity ≥ m
  2. Target: Total target quantity across all target cart lines is ≥ m

In short: target quantity (total) ≥ minimum quantity, and source quantity (on at least one line) ≥ minimum quantity, using the same value m. With the default m = 0, these checks do not block the bundle (any positive target quantity satisfies “≥ 0”).

The same m is used elsewhere in this doc (for example in the Limit By Source formula when that mode is on).


How many target items get discounted with Limit By Source?

Limit By Source caps the number of discounted target items based on how many source items are in the cart. The cap is calculated using the formula floor(source_qty / minimum_quantity) * target_per_source — for example, 4 source items with a minimum of 2 and a ratio of 2 yields 4 discounted targets.

When Limit By Source is enabled, the number of discounted target items is limited by the source quantity.

How it works: For every set of source items (based on Minimum quantity), the number of targets specified in Target per source (ratio) receive the discount.

Formula (source-side cap): Let source_qty = total quantity of source items in the cart, m = Minimum quantity, and r = Target per source (ratio). The bundle only runs if total target quantity ≥ m (see Minimum Quantity). The maximum number of target units that can be discounted from the source side is then:

discounted_targets_cap = floor(source_qty / m) * r

The bundle never discounts more targets than this cap or than you have in the cart; any targets above the cap stay full price.

Source QtyMinimum quantityTarget per sourceDiscounted Targets
2112
4224
3211
6239

What is the difference between Shared Pool on and off?

Shared pool determines whether target cart lines compete for the same discount allowance or receive independent allocations. When enabled (the default), one target line can consume the entire discount pool before the next line is evaluated — cart order matters. When disabled, each target line is evaluated independently against the source-side cap, so the discount can spread more evenly across different products.

When Limit By Source is enabled, Shared pool controls how the discount quantity pool (the maximum number of target units that can be discounted — from Limit By Source) is applied across target cart lines.

When enabled (default), the pool is shared across all target lines: Line A consumes from the pool first; Line B gets whatever remains. When disabled, each target line independently gets up to the max discounted quantity (the same cap, evaluated per line without one line spending the whole pool first).

Shared poolSummary
On (default)One pool; earlier target lines use it first (Line A, then Line B from the remainder).
OffEach target line can discount up to the max quantity on its own.

Example: two target lines. Limit By Source is on with Minimum quantity 2 (beds) and Target per source (ratio) 1 (pillow). Cart: 4 bedsfloor(4 / 2) * 1 = 2 discounted pillow units total (the pool). Targets are on separate cart lines: Line A — 2× Pillow Standard, Line B — 2× Pillow Firm.

  • Shared pool on: Line A uses both units from the pool (both Standard pillows discounted); Line B gets nothing left — both Firm pillows stay full price. If Line B were first in the cart, it would take the pool instead. Order matters.
  • Shared pool off: Each line can use up to the max discounted quantity on its own. Confirm how totals combine for multi-line carts in checkout or POS.

With only one target line, Shared pool does not change the outcome—use multiple target lines to see a difference.


Fixed Ratios

When Limit By Source is enabled and Fixed ratios is checked, target items must form complete sets of Target per source (ratio) to receive any discount.

Example: Target per source = 4, 1 source item

Targets in CartDiscounted
44
54 (incomplete set of 1 excluded)
30 (no complete set)
84 (limited by source)

Max Target Qty

A hard cap on how many target items can be discounted. Only available when both Limit By Source and Fixed ratios are enabled.

  • The cap scales with source quantity. For example, with Max target qty set to 4:
    • 1 qualifying source → up to 4 targets discounted
    • 2 qualifying sources → up to 8 targets discounted
  • Validation: Max target qty must be greater than both Minimum quantity and Target per source, or the bundle will not activate.

Examples

These walk from a basic bundle to setups that combine Limit By Source, Fixed ratios, Max target qty, Shared pool, and Minimum quantity together. Use the configuration reference for field defaults.

Example 1: Simple Bundle — Buy A, Get 20% off B

Discount UI - Bundle simple config Caption: Bundle configured with Product A as source, Product B as target, 20% Percentage discount

Setup: Minimum quantity is left at the default 0, so the target-total check does not require more than one target unit.

At checkout:

  • Product A: Shows "Bundle Deal", no discount
  • Product B: Shows "Bundle Deal 20% OFF", 20% deducted

Checkout - Bundle simple applied Caption: Source item shows the message only, target item shows the discount

Example 2: Limit By Source — Buy 1 Bed, Get upto 2 Pillow Half Price

Discount UI - Bundle quantity dependent config Caption: Bundle with Limit By Source enabled, Minimum quantity 1, Target per source 2, 50% discount

Setup: Limit By Source on, Minimum quantity 1, Target per source 2 (up to two pillow units discounted per source “set”; see Limit By Source). Total target quantity must be ≥ 1 (Minimum Quantity). Discounted pillow count is capped by the source-side formula and cart contents.

Unit prices (for the calculations below):

ItemList priceWith 50% bundle on pillow
Bed$2,450 each(beds are not discounted by this bundle)
Pillow$134 each$67 each when the line qualifies

At checkout:

1 bed + 3 pillows — 2 pillows at 50% off, 1 pillow full price (Limit By Source caps how many get the deal).

LineCalculationAmount
Beds1 × $2,450$2,450
Pillows (50% off)2 × $67 = $134$134
Pillow (full price)1 × $134$134
Pillow subtotal$134 + $134$268
Cart total$2,450 + $268$2,718

Checkout — 1 bed, 3 pillows: 2 pillows at 50% off, 1 full price 1 bed + 3 pillows at checkout — Limit By Source caps the discount at 2 pillows

2 beds + 3 pillows — 3 pillows at 50% off.

Why all 3 pillows are discounted: With Minimum quantity 1 and Target per source 2, the source-side cap is floor(bed_qty ÷ 1) × 2 discounted pillow units. For 2 beds that is floor(2 ÷ 1) × 2 = 4 units. The cart only has 3 pillows, and 3 ≤ 4, so the allowance covers every pillow — none are left at full price.

LineCalculationAmount
Beds2 × $2,450 = $4,900$4,900
Pillows (50% off)3 × $67 = $201$201
Cart total$4,900 + $201$5,101

Checkout — 2 beds, 3 pillows: all 3 pillows at 50% off 2 beds + 3 pillows at checkout — source allowance covers all 3 pillows

2 beds + 5 pillows — 4 pillows at 50% off, 1 full price.

LineCalculationAmount
Beds2 × $2,450 = $4,900$4,900
Pillows (50% off)4 × $67 = $268$268
Pillow (full price)1 × $134$134
Pillow subtotal$268 + $134$402
Cart total$4,900 + $402$5,302

Checkout — 2 beds, 5 pillows: 4 pillows at 50% off, 1 full price 2 beds + 5 pillows at checkout — source allowance caps discount at 4 pillows

1 bed + 1 pillow — 50% OFF.

LineCalculationAmount
Beds1 × $2,450$2,450
Pillows (50% off)1 × $67$67
Cart total$2,450 + $67$2,517

Checkout — 1 bed, 1 pillow at 50% off 1 bed + 1 pillow at checkout — pillow discounted at 50% off

Example 3: Fixed Ratios

"Buy 1 Bed, get 2 pillows at 10% off."

Discount UI - Bundle fixed ratio config

Setup: Limit By Source on, Fixed ratios on, Minimum quantity 1, Target per source 2 (pillows discount in complete pairs). Max target qty is not used here — only Fixed ratios and the source-side cap limit how many pillow units are discounted. For Max target qty with fixed ratios and multiple sources, see Example 5. Every cart below has total pillow quantity ≥ 1 (Minimum Quantity).

Unit prices (for the calculations below):

ItemList priceWith 10% bundle on eligible pillow lines
Bed$2,450 each(beds are not discounted by this bundle)
Pillow$134 each$120.60 each ($134 × 0.9) when the line qualifies

At checkout: 1 bed + 2 pillows — 2 pillows at 10% off (one full pair).

LineCalculationAmount
Beds1 × $2,450$2,450
Pillows (10% off)2 × $120.60 = $241.20$241.20
Cart total$2,450 + $241.20$2,691.20

Checkout — 1 bed, 2 pillows: both pillows at 10% off (one full pair) 1 bed + 2 pillows at checkout — one complete pair discounted at 10% off

1 bed + 3 pillows — 2 pillows at 10% off, 1 pillow full price (one incomplete unit outside the pair).

LineCalculationAmount
Beds1 × $2,450$2,450
Pillows (10% off)2 × $120.60 = $241.20$241.20
Pillow (full price)1 × $134$134
Pillow subtotal$241.20 + $134$375.20
Cart total$2,450 + $375.20$2,825.20

Checkout — 1 bed, 3 pillows: 2 at 10% off, 1 full price 1 bed + 3 pillows at checkout — incomplete third pillow stays full price

1 bed + 1 pillow — no pillow discount (no complete pair of 2).

LineCalculationAmount
Beds1 × $2,450$2,450
Pillows (no deal)1 × $134$134
Cart total$2,450 + $134$2,584

Checkout — 1 bed, 1 pillow: no discount (no complete pair) 1 bed + 1 pillow at checkout — no complete pair, pillow stays full price

2 beds + 4 pillows — 4 pillows at 10% off (two pairs; within the source allowance).

LineCalculationAmount
Beds2 × $2,450 = $4,900$4,900
Pillows (10% off)4 × $120.60 = $482.40$482.40
Cart total$4,900 + $482.40$5,382.40

Checkout — 2 beds, 4 pillows: all 4 at 10% off (two complete pairs) 2 beds + 4 pillows at checkout — two complete pairs within source allowance

2 beds + 5 pillows — 4 pillows at 10% off, 1 pillow full price (source allowance caps discounted units at 4; the fifth stays full price).

LineCalculationAmount
Beds2 × $2,450 = $4,900$4,900
Pillows (10% off)4 × $120.60 = $482.40$482.40
Pillow (full price)1 × $134$134
Pillow subtotal$482.40 + $134$616.40
Cart total$4,900 + $616.40$5,516.40

Checkout — 2 beds, 5 pillows

Example 4: Shared Pool — Bed, Pillow, and Storage Drawer

This example uses three product types from the same catalog as the examples above: bed (source), pillow, and storage drawer (targets). The cart below has four target units in total (2 pillows + 2 drawers) on two target lines.

Unit list prices (same bed and pillow figures as Example 3; add storage drawer at list price $189 each if your catalog uses a different number, swap it in the tables):

ItemList priceWith 10% bundle on eligible lines (targets only)
Bed$2,450 each(beds are not discounted by this bundle)
Pillow$134 each$120.60 each ($134 × 0.9) when discounted
Storage drawer$189 each$170.10 each ($189 × 0.9) when discounted

Setup (both scenarios): Limit By Source on. Minimum quantity 1, Target per source 2 — i.e. 1:2 (one qualifying source “set” unlocks 2 discounted target units; see Limit By Source). Discount 10% on targets (same idea as Example 3). Cart: 1 bed, 2 pillows, 2 storage drawers. Target lines appear in this cart order: Line A — Pillow, then Line B — Storage drawer.

Source-side cap: floor(1 ÷ 1) × 2 = 2 discounted target units. Total target quantity is 4 (≥ 1), so Minimum Quantity is satisfied.

Discount UI — Shared Pool example: Limit By Source on, Target per source 2 Shared Pool bundle configured with Limit By Source, Target per source 2, and Shared pool toggle

Shared pool on

One global pool of 2 units; Line A consumes first, then Line B gets the remainder (Shared pool).

What happensDetail
Pool2 units
Line A (2 pillows)Uses both units → 2 pillows at $120.60
Line B (2 drawers)0 units left → 2 drawers at full $189

At checkout (Shared pool on):

LineCalculationAmount
Bed1 × $2,450$2,450
Pillows (10% off)2 × $120.60 = $241.20$241.20
Storage drawers (full price)2 × $350 = $700$700
Cart total$2,450 + $241.20 + $378$3,391.20

Checkout — Shared pool on: both pillows discounted, both drawers full price Shared pool on — Line A (pillows) consumes the entire pool, Line B (drawers) stays full price

Shared pool off

Shared pool is off. The same 2-unit cap from Limit By Source still applies overall, but target lines are not merged into one sequential pool—each line is considered without the other line spending the allowance first (Shared pool). Exact allocation can vary by checkout; one common pattern is splitting the 2 discounted units across lines (1 pillow + 1 drawer at the bundle price, 1 pillow + 1 drawer at list price) instead of awarding both units to Line A.

Illustrative totals if 1 pillow and 1 drawer receive the 10% price:

LineCalculationAmount
Bed1 × $2,450$2,450
Pillow (10% off)2 × $120.60$241.20
Storage drawer (10% off)2 × $315.10$630
Cart total$2,450 + $241.20 + $630$3,321.20

Confirm the live line-by-line allocation when Shared pool is off in your checkout or POS—if your engine still applies a strict global cap, totals will match that behavior.

Checkout — Shared pool off: discount split across pillow and drawer lines Shared pool off — discount units distributed independently across target lines

Compare: With Shared pool on and pillows first in the cart, both discounted units attach to pillows. With Shared pool off, you can get a different split across pillow and drawer lines instead of Line A taking the entire allowance—cart order can still matter for some engines when pool is on; when pool is off, behavior follows your app’s rules for independent target lines.


Frequently Asked Questions

Are source items ever discounted in a Bundle Discount?

No. In a Bundle Discount, source items only display the bundle message (e.g. "Bundle Deal") but are never discounted. Only target items receive the discount. If you need discounts on both source and target products, use Split Bundle Discount instead.

Can I use the same product as both a source and a target?

No. A product should be assigned as either a source or a target within a bundle, not both. If you need a product to trigger a bundle and also be discounted, consider using a Tier Discount or Split Bundle Discount.

What happens if only source products are in the cart (no targets)?

The bundle does not activate. Both source and target products must be in the cart for any discount to apply. Source items will appear at full price with no bundle message.

Can I have multiple bundles in a single discount instance?

Yes. You can add multiple bundles using the Add Bundle button. Each bundle has its own source products, target products, and discount configuration. However, you cannot target the same product in two different bundles within the same discount instance.

What is the difference between "Limit By Source" and "Minimum quantity"?

Minimum quantity is a gate — it sets the threshold that both source and target quantities must meet before the bundle activates at all. Limit By Source is a cap — once the bundle activates, it limits how many target items get discounted based on how many source items are in the cart, using the formula floor(source_qty / minimum_quantity) × target_per_source.

Does Bundle Discount work on Shopify POS?

Yes. By default, the Platform setting is Both - POS & Checkout, so the bundle applies at both online checkout and POS. You can restrict it to POS Only or Checkout Only if needed.

What does "Fixed ratios" do and when should I use it?

When Fixed ratios is enabled (requires Limit By Source), target items must form complete sets of the Target per source ratio to receive any discount. Incomplete sets get no discount. Use this when your promotion requires exact quantities — for example, "Buy 1 bed, get exactly 2 pillows discounted" where 1 pillow alone should not qualify.


Notes

  • No duplicate targets across bundles. You cannot target the same product in two different bundles within the same discount instance. Use separate discount instances instead — Shopify automatically applies the highest discount.
  • Minimum quantity and targets: If Minimum quantity is greater than 0, total target quantity in the cart must be that value, not only the source side. See Minimum Quantity.
  • Source items are never discounted. They only display the bundle message.
  • Fixed ratios can prevent any discount. If the total target quantity doesn't form at least one complete set of the Target per source ratio, no targets are discounted.
  • RRP (Compare At Price): When Apply Discount To is set to RRP (Compare At Price) but a product has no RRP set, the current selling price is used instead.