Shopify bundle discount stacking works only when the bundle mechanism and the second promotion satisfy the same combination rules. Before touching the Combinations checkboxes, identify whether your bundle uses a product discount, a separately priced bundle product, a price already reduced in the catalog, or Buy X Get Y. Then check the second promotion’s discount class, eligible products, combination settings, and customer requirements.
Kaching documents its bundle offers as product discounts. That makes an eligible order discount or free-shipping promotion a practical combination to test. It does not mean every promotion will stack: Shopify still decides the final eligible combination, and another product discount aimed at the same item has a separate limitation.
⚡ ShopSideK Verdict
Map the bundle mechanism before you configure combinations. Use Kaching Bundle Discounts when you want a visible bundle offer that behaves as a product discount, then test any welcome, order, product, or shipping promotion against the real cart.
- Best for: A bundle plus an eligible welcome code or free-shipping offer
- First check: Which discount class the bundle uses
- ShopSideK deal: 20% OFF for the first 3 months
Prelaunch roadmap
- Record the mechanism, class, scope, and combination settings of every promotion.
- Configure both sides of each intended combination.
- Run the 16-cart matrix below and compare checkout with your expected total.
Unlock 20% OFF Kaching for your first 3 months →
The form is the route for the ShopSideK discount code. Test the offer on your own product, cart, and checkout before promoting it.
Start with the bundle mechanism, not the checkbox
“Bundle” describes the offer a shopper sees. It does not tell you what Shopify’s discount engine receives. Two storefronts can show the same “Buy 2 and save 10%” message while producing different checkout behavior.
Use this first-pass classification:
| Bundle architecture | What Shopify evaluates | What to check before adding another promotion |
|---|---|---|
| Kaching or another app-generated bundle discount | Kaching currently documents its deal as a product discount | Whether the other discount can combine with product discounts, whether both offers target the same items, and whether the shopper qualifies |
| Shopify Bundles parent product | The shopper buys a bundle product built from components | Whether the second discount targets the bundle product, and whether the bundle price is already the intended base price |
| Bundle price already built into the product or variant price | The reduced amount can be the merchandise price rather than a separate discount | Whether the additional code is intentionally allowed to reduce that price again |
| Shopify Buy X Get Y | A product discount with specific Buy X Get Y rules | Whether the customer added all required items and whether another discount targets an affected item |
| Several discounts created by an app | One or more product, order, or shipping discounts, depending on the implementation | Every class, target, and combination permission; do not infer the architecture from the widget |
Shopify Bundles creates a bundle product from component products, so do not assume that it behaves like an app applying a percentage product discount. At the other end of the spectrum, Simple Bundles documents one of its own discounted-price methods as a lower Price or Compare-at Price rather than a separate Shopify discount. That is a vendor-specific example, not a rule for every bundle app.
For a native gift or BOGO offer, review Shopify’s Buy X Get Y requirements, including the need for shoppers to add the qualifying items themselves. A quantity threshold and an automatically added gift are not interchangeable promises.
This distinction changes the question. If $80 is already the bundle product’s selling price, applying a 10% order code produces $72 of merchandise revenue when the code is eligible. If a $100 cart receives a 10% product discount first, the same 10% order code is calculated after that product reduction and produces $81. The totals are different because the base amounts and mechanisms are different, not because one storefront “supports stacking” and the other does not.
Build a promotion interaction map
List every promotion that can reach the cart, including automatic discounts and app discounts that the shopper never types. A welcome code is only one participant.
| Field | What to record | Why it changes checkout |
|---|---|---|
| Promotion name | A unique internal label | Prevents two similarly named campaigns from being confused |
| Source | Shopify admin, bundle app, loyalty app, subscription app, or custom implementation | Tells you where its settings and evidence live |
| Method | Automatic or code | Reveals whether a hidden promotion may already occupy the cart |
| Discount class | Product, order, or shipping | Controls which combination settings apply |
| Scope | Products, variants, collections, order, or shipping rates | Determines whether the same merchandise is affected twice |
| Eligibility | Minimum spend or quantity, customer segment, market, channel, and dates | A permitted combination can still be ineligible |
| Combination permissions | Product, order, and shipping discounts allowed | Shopify evaluates the relationship between the promotions |
| Intended outcome | Must combine, may combine, or must never combine | Converts a vague setup into a testable rule |
| Expected total | Merchandise after discounts plus shipping, before tax | Makes silent replacement or over-discounting visible |
Do not write “all discounts can combine” as the intended outcome. Define each relationship. For example: “BUNDLE10 must combine with FREESHIP, may combine with WELCOME10 for first-time shoppers, and must not combine with another discount on the same Serum line.”
That sentence is specific enough to test and specific enough to reject when the economics are unsafe.
How Shopify bundle discount stacking works
Shopify groups discounts into product, order, and shipping classes. The checkbox is necessary, but it is not the whole decision.
The combination permission has to match the other class
When several discounts are meant to work together, Shopify says the combination setting on each discount must allow the relevant relationship. A product discount intended to work with an order code needs a product-to-order combination path. The order code must also allow product discounts.
An allowed relationship still does not override scope or eligibility. A first-order code will not become valid for a returning customer. A free-shipping code will not waive a rate or destination it excludes. A product code cannot reduce a variant outside its target set.
If the expected product-and-order or order-and-order controls are unavailable, check Shopify’s current store eligibility notes. Legacy checkout.liquid customization and certain installed apps can affect access to those combinations.
Product discounts are applied before order discounts
Shopify applies eligible product discounts first. It then calculates order discounts against the revised merchandise subtotal. Shipping discounts affect shipping rather than product revenue.
This order matters. On two $50 Serums, a 10% product discount reduces $100 to $90. A combinable 10% order discount then removes $9, not $10. Merchandise revenue is $81.
Shopify’s current documentation also says that when multiple percentage order discounts combine, each percentage is calculated from the same subtotal after product discounts. In that $90 example, 10% and 15% order discounts remove $9 and $13.50. A fixed order discount is applied after percentage order discounts.
Shopify can choose a better eligible combination
If all active discounts cannot combine, Shopify evaluates eligible combinations and applies the best available result for the customer. The losing code may be rejected or replaced even though each promotion works on its own.
That protects the shopper from a worse eligible option; it does not protect your campaign logic. A checkout total can be mathematically valid and still violate the promotion you intended to advertise.
Current Shopify limits also matter during campaign overlap. Shopify documents a maximum of 25 active automatic discounts, including app-based automatic discounts, and channel-specific limits for codes and shipping discounts. Treat those values as prelaunch checks, not timeless constants, because platform rules can change.
Configure Kaching with Shopify order and shipping discounts
Kaching’s current combination guide says its bundle deals are treated as product discounts. It documents combinations with order discounts, free shipping, and product discounts on different products when the Shopify discount is configured to combine with product discounts.
Use this setup sequence for a welcome or order code:
- Create or open the Shopify order discount.
- Under Combinations, allow it to combine with product discounts.
- If the same code must also work with free shipping, allow shipping discounts on the order offer and order discounts on the shipping offer.
- Confirm the code’s customer, minimum-purchase, date, market, and channel rules.
- Save the discount and open a clean storefront session.
- Add the exact bundle quantity, apply the code, and reconcile every line with the expected total.
For free shipping, open the shipping discount and allow combination with product discounts. If an order discount must join the same stack, configure that relationship too. Then test a qualifying and nonqualifying address or rate. A green combination setting cannot make an excluded shipping method eligible.
For a second product promotion, first ask whether it targets a different product. Kaching’s guide documents that different-product combination as possible when the other Shopify product discount allows combination with product discounts. If both discounts target the same bundle item, stop and read the next section before launch.
If Kaching’s product-discount architecture matches the promotion map you need, unlock 20% OFF Kaching for your first 3 months. The app gives you the implementation layer; the promotion map and checkout tests remain your responsibility.
Treat same-item product stacking as a separate boundary
The normal rule is simple: only one product discount applies to a cart line. That is also the boundary described in Kaching’s current help article, which says another product discount cannot combine with a Kaching discount on the same product.
Shopify now documents a narrow exception for Shopify Plus. Its Admin API includes a productDiscountsWithTagsOnSameCartLine option for app discounts whose tags match reciprocally. Both discounts must opt into the relationship with matching tags. This is not a general “stack product discounts” switch, and Shopify documents the field as Plus-only.
There is an important evidence gap: Kaching’s help article does not say that Kaching supports this newer tagged same-line route. Until Kaching documents support for your exact setup, use its stated same-product limitation as the operating rule. Do not turn a Shopify platform capability into a Kaching feature claim.
For a non-Plus store, or any setup without verified reciprocal-tag support, expect Shopify to select the better eligible product discount on the line rather than add the two reductions.
Run this 16-case checkout matrix before launch
The matrix below is hypothetical. It demonstrates a reproducible method; it does not predict your tax, rounding, Markets, subscription, or third-party app behavior.
Assumptions:
- Serum: $50 each and eligible for the bundle.
- Belt: $40 and excluded from the bundle.
- Standard shipping: $12.
- BUNDLE10: 10% product discount when two Serums are purchased, modeled on Kaching’s documented discount class.
- WELCOME10: combinable 10% order code for eligible first-time shoppers.
- ORDER15: combinable 15% order discount.
- ORDER20: combinable $20 fixed order discount.
- BELT5: combinable $5 product discount on the Belt, a different item.
- SERUM20: 20% product discount targeting the same Serum line.
- SITE15: noncombinable 15% order discount.
- FREESHIP: free standard shipping.
- SHIP5: $5 shipping discount; shipping discounts do not stack with one another in this model.
- Taxes are excluded. Dollar totals are the final merchandise plus shipping shown for the test.
| # | Test cart and promotions | Expected checkout behavior | Expected total | What the case proves |
|---|---|---|---|---|
| 1 | 1 Serum; BUNDLE10 active | Bundle threshold is not met | $50 + $12 = $62.00 | An active offer is not automatically eligible |
| 2 | 2 Serums; BUNDLE10 | 10% product discount applies | $100 − $10 + $12 = $102.00 | Bundle-only control |
| 3 | 2 Serums; BUNDLE10 + WELCOME10 | Product discount applies, then 10% order discount | $100 − $10 − $9 + $12 = $93.00 | Product-plus-order calculation order |
| 4 | 2 Serums; BUNDLE10 + FREESHIP | Bundle applies and standard shipping becomes $0 | $100 − $10 = $90.00 | Product-plus-shipping path |
| 5 | 2 Serums; BUNDLE10 + WELCOME10 + FREESHIP | Eligible product, order, and shipping discounts apply | $100 − $10 − $9 = $81.00 | Three-class combination |
| 6 | 2 Serums + Belt; BUNDLE10 + BELT5 | Product discounts affect different products | $140 − $10 − $5 + $12 = $137.00 | Different-item product combination |
| 7 | 2 Serums; non-Plus; BUNDLE10 + SERUM20 | Same-line product discounts do not combine; 20% is better | $100 − $20 + $12 = $92.00 | Normal same-item boundary |
| 8 | 2 Serums; Plus; generic tagged 10% + $5 same-line app discounts | Both apply only in a verified reciprocal-tag setup | $100 − $10 − $5 + $12 = $97.00 | Shopify Plus exception; not proof of Kaching support |
| 9 | 2 Serums; BUNDLE10 + noncombinable SITE15 | Shopify chooses the better eligible result: 15% order discount | $100 − $15 + $12 = $97.00 | Best-combination replacement |
| 10 | 2 Serums; BUNDLE10 + WELCOME10 + ORDER15 | Both percentages use the $90 post-product subtotal | $90 − $9 − $13.50 + $12 = $79.50 | Multiple percentage order discounts |
| 11 | 2 Serums; BUNDLE10 + WELCOME10 + ORDER20 | Percentage order discount applies before fixed order discount | $90 − $9 − $20 + $12 = $73.00 | Percentage-plus-fixed order sequence |
| 12 | 2 Serums; BUNDLE10 + FREESHIP + SHIP5 | Only the best shipping discount applies | $100 − $10 + $0 = $90.00 | Shipping discounts do not add together |
| 13 | 2 Serums; returning shopper; BUNDLE10 + WELCOME10 | Welcome code is ineligible; bundle remains | $100 − $10 + $12 = $102.00 | Eligibility can block an allowed combination |
| 14 | 2 Serums + Belt; BUNDLE10 | Only the two Serums receive the bundle discount | $140 − $10 + $12 = $142.00 | Excluded items stay at their base price |
| 15 | 2 Serums; non-Plus; Buy 2 Pay for 1 + SERUM20 | Same-item discounts do not combine; BOGO is better | $100 − $50 + $12 = $62.00 | Buy X Get Y still needs a same-item conflict test |
| 16 | One separately listed bundle priced at $80 + WELCOME10 | No product discount in this example; eligible order code reduces the $80 price | $80 − $8 + $12 = $84.00 | A priced bundle product is a different mechanism |
Read case 3 line by line
The $10 bundle reduction comes first because BUNDLE10 is a product discount. The remaining merchandise subtotal is $90. WELCOME10 removes 10% of $90, or $9. Shipping adds $12, producing $93.
If checkout shows $92, $102, or $112, do not call that a rounding issue. One of the assumed discounts, permissions, or eligibility conditions is different from the map.
Use case 7 to catch a false stacking promise
Both discounts target the Serum. In the non-Plus test, the two product reductions cannot be added. SERUM20 gives the customer $20 off, compared with $10 from BUNDLE10, so the better eligible result produces $92 after shipping.
If your campaign promised “20% off on top of the bundle,” the promotion is broken even though Shopify calculated a valid customer-friendly result.
Use case 10 to protect your margin
The two order percentages remove $22.50 from the same $90 subtotal. They are not calculated as a 10% reduction followed by 15% of $81. This distinction changes the expected total and should be in the margin model before the campaign goes live.
The checkout matrix proves discount eligibility and arithmetic. It does not prove that $79.50 is a profitable order. Compare final merchandise revenue with your COGS, payment fees, fulfillment, returns, and minimum contribution floor.
Use case 16 to expose an architecture mismatch
The $80 bundle is already the selling price in this example. There is no separate BUNDLE10 event for Shopify to combine. The welcome code reduces the $80 merchandise price to $72 when eligible.
If the merchant intended $80 to be final, the fix is not another stacking checkbox. The promotion needs different targeting, exclusion, or pricing architecture.
Fix the failure at the correct layer
When a code fails, changing several settings at once destroys the evidence. Reproduce one cart, compare it with the promotion map, and work down this order.
The code says it cannot be used with existing discounts
- Identify every automatic and app discount already applied to the cart.
- Record the class of the bundle and the rejected code.
- Confirm that the intended relationship is allowed in both promotions’ combination settings.
- Check whether both target the same product line.
- Check customer, minimum, date, market, channel, and usage eligibility.
- Compare the accepted and rejected paths with Shopify’s better-combination result.
Do not remove a live automatic discount just to make the error disappear. First decide which offer should win and whether the campaign promise needs to change.
Free shipping is missing
Confirm that the shipping discount allows product-discount combinations, then inspect its country, rate, minimum-spend, customer, and date rules. Test with a real qualifying destination. A bundle can combine correctly while the selected shipping rate remains outside the shipping promotion.
An excluded product receives too much discount
Separate product scope from order scope. BUNDLE10 can exclude the Belt while an order-wide percentage still reduces the revised order subtotal that includes the Belt. If that is not intended, the order promotion’s architecture or target must change; tightening the bundle’s product list alone will not solve it.
The total is eligible but fails the margin floor
Turn off or redesign the unsafe relationship. Technical compatibility is not a reason to fund every stack. Record a minimum contribution amount for each priority cart and compare it with final merchandise revenue after the complete discount sequence. If you need to rebuild those inputs, use the Shopify profit margin calculator and growth guide before approving the campaign.
When Kaching fits—and when it does not
Kaching is a documented fit when you want the visible bundle offer to enter Shopify as a product discount and you need to test it with eligible order, free-shipping, or different-item product promotions.
It is not proof that every existing promotion will combine. Kaching does not override Shopify’s eligibility engine, make two same-item product discounts stack on a typical non-Plus store, or decide whether the final discount is profitable. It is also a different job from building a component-inventory kit or repairing a custom checkout conflict.
If the product-discount model is wrong for your catalog, compare the other Shopify bundle approaches and apps before installing another discount layer.
Your prelaunch stacking checklist
- Every bundle has been classified by mechanism and discount class.
- Automatic, code, app, loyalty, subscription, and shipping promotions are in one map.
- Each intended relationship is labeled must combine, may combine, or must not combine.
- Combination settings are configured on both participating discounts where required.
- Product and variant scope is recorded separately from order-wide scope.
- Customer, minimum, date, market, channel, and usage eligibility are tested.
- Same-item product promotions have a non-Plus test unless the Plus tagged route is explicitly verified.
- The expected merchandise, shipping, and final pre-tax totals are written before checkout.
- At least one below-threshold, excluded-product, returning-customer, and noncombinable case is included.
- Final merchandise revenue clears the store’s contribution floor.
- The live theme, cart drawer, and checkout reproduce the expected result.
- The matrix is rerun whenever an app, discount, market, checkout, or campaign setting changes.
If Kaching’s product-discount model matches your promotion map, review Kaching and claim 20% OFF for your first 3 months. If you prefer the direct route, view Kaching on the Shopify App Store; the ShopSideK form is the route for the discount code.
Frequently asked questions
Can a Shopify bundle discount combine with a discount code?
Yes, when the bundle mechanism, the code’s discount class, both promotions’ combination settings, and the shopper’s eligibility allow it. Kaching documents its bundle deals as product discounts, so an eligible order or shipping code should be configured to combine with product discounts and then tested at checkout.
Why does Shopify say my code cannot be used with existing discounts?
An automatic or app discount may already be active, the two promotions may not allow the relevant combination, both product discounts may target the same line, or the shopper may fail an eligibility rule. Shopify can also replace incompatible discounts with the best eligible combination.
Can two product discounts apply to the same bundle item?
Normally, only one product discount applies to a cart line. Shopify documents a Plus-only route for reciprocally tagged app discounts on the same line, but Kaching’s current documentation does not claim support for that exception. Do not assume it works with a Kaching bundle without product-specific evidence.
Can a bundle discount combine with free shipping?
It can when the shipping promotion allows combination with product discounts and its address, rate, minimum, customer, and date conditions are met. Test both a qualifying and nonqualifying shipping path because a valid combination does not make every rate eligible.


