To exclude Shopify bundles from discount codes, start with the code type, not a no-discount tag. A product discount can be limited to regular products or an eligible collection. A standard order discount applies to the revised order subtotal, so it cannot natively skip only the bundle line in a mixed cart.
Turning off discount combinations does not lock the bundle price either. When eligible discounts cannot combine, Shopify can apply whichever discount or combination gives the customer the best result. Your welcome code may replace the bundle instead of leaving it untouched.
Kaching Bundles makes this distinction especially important. Kaching documents its bundle offers as Shopify product discounts on the ordinary product lines in the deal. That model can work cleanly with shipping discounts and product discounts on different items. It does not create a native switch that tells an order-level code to ignore only the Kaching-qualified lines.
ShopSideK Verdict
Best no-code policy: Create the welcome or seasonal offer as an amount off products code, then scope it to a positive discount-eligible collection. Leave separate bundle products and Kaching deal products out of that collection when they must not receive the code.
Do not use an order discount when bundle lines must remain at their final price. A native order code has no product or collection scope, and allowing it to combine can reduce the post-bundle subtotal.
Same-SKU limit: A collection can exclude a product. It cannot allow a code on one Serum while withholding that code only when two units of the same Serum qualify for a Kaching quantity deal.
Kaching fit: Kaching Bundles fits when you want a visible quantity offer and intentional combinations with shipping or different-item product discounts. Exact cart-dependent code rejection or line exclusion needs a different discount architecture or compatible app/custom logic.
Decision path: Identify the bundle mechanism → classify the incoming code → choose the mixed-cart policy → configure the narrowest workable scope → run the 12-cart protection matrix.
Choose the policy before changing Shopify settings
“Do not stack discounts” is not precise enough to configure or test. Write the expected result for a bundle-only cart and a mixed cart first.
| What you want | Best starting architecture | Main limitation |
|---|---|---|
| The code discounts regular products but never a separately listed bundle product | Product discount code scoped to specific regular products or a positive eligible collection | New regular products need to be added to the eligible scope |
| The code discounts regular items in a cart containing a Kaching deal | Product code scoped to products outside the Kaching deal; allow product discounts on different items where required | The same product cannot be eligible below the Kaching threshold and excluded only after it qualifies through collection scope |
| Free shipping remains available with the bundle | Shipping discount configured to combine with product discounts | Address, rate, minimum, and customer eligibility still apply |
| An order percentage applies to regular lines but ignores bundle lines | Compatible discount app or custom Discount Function with line exclusions | This is not a standard Shopify admin order-code setting |
| Any entered code is rejected when a protected bundle is present | App/custom rejection logic with a clear checkout message | Shopify’s documented rejection route is development work, not an admin checkbox |
| The customer simply receives whichever promotion saves more | Leave the offers noncombinable and accept Shopify’s better-discount selection | The bundle can disappear when the code is better |
The first three policies often have a no-code path. The fourth and fifth require more precision than the standard Shopify discount form provides. The last policy is valid only when your campaign copy does not promise that the bundle price will remain visible or final.
Step 1: Identify how the bundle enters checkout
The storefront may call several different things a “bundle,” but Shopify does not calculate them the same way.
Kaching quantity deal on ordinary product lines
Kaching states that its bundle offers are treated as product discounts. If two $50 Serums qualify for 10% off, the cart still contains the Serum lines; Kaching supplies the product-discount saving.
This is useful for visible quantity breaks, but it creates a targeting boundary. A Shopify collection sees which product or variant is in the cart. It does not become a conditional collection that changes when the shopper moves from one Serum to two.
If Serum is outside your welcome-code collection, ITEM15 will not apply to one Serum or two. If Serum is inside the collection, the product code can be eligible before and at the quantity threshold, subject to Shopify’s same-line combination rules and better-discount selection.
Separate bundle product or fixed-price gift set
A separately listed Gift Set has its own product identity. That makes product-level exclusion straightforward: omit the Gift Set from the products or collection eligible for the code.
Check how the app represents the product at checkout before assuming this model. Some bundle systems sell a parent product and expand components for fulfillment; others discount ordinary component lines. The correct exclusion signal may be the parent product, component products, a product tag, a metafield, or an app-specific line attribute.
A compare-at sale price also differs from a Shopify discount. Shopify notes in its discount FAQ that a sale price and a discount are not the same mechanism. A code may still reduce an eligible item that merely has a lower selling price.
Buy X Get Y
Buy X Get Y has its own product-discount restrictions. Shopify’s current discount combination rules say that on non-Plus plans, products involved in Buy X Get Y are ineligible for additional product discounts; Shopify applies the best overall value when another product code targets them. Do not reuse the Kaching test result for a Buy X Get Y campaign.
Step 2: Classify the incoming discount
Shopify separates discounts into product, order, and shipping classes. The class determines what can be targeted and where the saving appears.
Product discount
A product discount can target specific products or collections. This is the native tool for “the code works on regular items but not the bundle product.” Shopify’s amount off discount setup exposes the Applies to step for amount off products.
Product scope also makes mixed carts easier to reason about. A Belt can receive ITEM15 while a separate Gift Set stays at $80. With a Kaching quantity deal, a product code can apply to the Belt while the product discount from Kaching applies to the Serums, provided the promotions are eligible to combine on different products.
Order discount
An order discount targets the cart subtotal. Shopify applies product discounts first, recalculates the subtotal, and then applies eligible order discounts.
That sequence is why a combinable order code can deepen a bundle deal. It is also why changing the bundle’s product list does not solve an order-code problem. The Kaching discount can be perfectly scoped to Serum, then WELCOME15 can still reduce the revised order subtotal containing those Serums.
Shopify’s standard Amount off orders setup does not provide the product or collection Applies to step that Amount off products uses. If your policy says “15% off the order except bundle lines,” the policy and the native discount class conflict.
Shipping discount
A shipping discount changes shipping cost rather than merchandise lines. Shopify allows product discounts and shipping discounts to combine, subject to eligibility and the relevant combination settings.
This is often the cleanest bundle-friendly loyalty benefit. The merchandise remains at the intended bundle price while the customer receives free or reduced shipping. You still need to test the destination, rate, order minimum, customer segment, and channel.
One app discount with several savings
Shopify also supports app-created discounts that can produce product, order, and shipping savings under one discount. Do not classify such an offer from its customer-facing code name. Inspect the configured discount classes and targets.
Step 3: Build a fail-closed eligible collection
For a separate bundle product, the cleanest native setup is usually a positive collection of products that may receive the code.
A negative collection says, in effect, “everything qualifies unless someone remembers to exclude it.” That is fail-open: a newly added bundle or low-margin product can receive the code until the exclusion rule catches it.
A positive collection says “nothing qualifies until someone approves it.” That is fail-closed. It requires more discipline when adding regular products, but accidental margin leakage is less likely.
Create the collection
- Add a simple product tag such as discount-eligible only to products approved for the promotion.
- In Shopify admin, go to Products → Collections → Create collection.
- Choose an automated collection.
- Set the condition to Product tag includes discount-eligible.
- Save the collection and inspect the complete product list. Confirm that separate bundle products, gift cards, subscriptions, protected-margin products, and Kaching deal products are absent when your policy requires that.
Shopify’s collection condition documentation supports tag-based inclusion and exclusion. It also warns that multiple negative conditions can inadvertently include products and points merchants toward tag-based conditions for more reliable exclusions. The positive tag here is ShopSideK’s operational recommendation because it makes missing approval visible.
Create the code
- Go to Discounts → Create discount.
- Choose Amount off products, not Amount off orders.
- Select Discount code and enter the campaign code.
- Set the percentage or fixed amount.
- Under Applies to, choose Specific collections and select the discount-eligible collection.
- Configure minimums, customer eligibility, usage limits, dates, and purchase type.
- In Combinations, allow only the relationships your policy requires. If the code should work on a Belt while Kaching discounts Serums, validate the product-discount-on-different-items path.
- Save and run the matrix later in this guide.
Do not rely on the collection title as evidence. Open the collection and review its products. Add a recurring check for new products, because a fail-closed collection can also cause a legitimate code to appear broken when a regular product was never tagged.
Why this no-code setup cannot isolate a Kaching-qualified quantity
Suppose the merchant wants this rule:
- One Serum: WELCOME15 may apply.
- Two Serums: Kaching’s 10% quantity deal applies, and WELCOME15 must not touch the Serum lines.
- Two Serums plus one Belt: the Belt may still receive WELCOME15.
A product collection cannot express that rule. Serum would have to be both eligible and ineligible for WELCOME15 depending on its cart quantity. Adding or removing a product tag changes catalog membership, not the real-time state of one shopper’s cart.
Two same-item product discounts normally do not combine outside the documented Shopify Plus route. That prevents one form of stacking, but it does not guarantee the Kaching price wins. If WELCOME15 saves more than the Kaching tier, Shopify can choose WELCOME15 as the better eligible product discount.
There are four honest options:
- Exclude Serum at every quantity. Use the eligible collection and accept that one Serum cannot use the code.
- Let the offers compete. Keep both eligible, do not promise a final bundle price, and accept Shopify’s better-discount result.
- Redesign the customer benefit. Make the code product-scoped to other products or shipping-only.
- Use conditional discount logic. Ask a compatible discount app or developer to identify the SKU and quantity independently, then exclude or reject according to the written policy.
The fourth option should not attempt to “read Kaching’s discount.” Shopify’s Discount Function API says discount functions run concurrently and have no knowledge of one another. Conditional logic needs its own dependable signal: merchandise ID, quantity, product tag or metafield, or an intentional cart-line attribute that your storefront and checkout flow preserve.
Why turning off combinations can still break the bundle
Use a simple hypothetical cart to see both failure modes.
Two Serums cost $50 each. Kaching BUNDLE10 gives 10% off at quantity two, so the bundle result is $90 before tax and shipping. WELCOME15 is a 15% order code.
If BUNDLE10 and WELCOME15 combine
The product discount applies first: $100 becomes $90. The order code then removes 15% of the revised subtotal, or $13.50. Final merchandise revenue is $76.50.
The bundle did not remain a final $90 offer. It received another effective reduction through the order subtotal.
If they do not combine
Shopify compares the eligible outcomes. BUNDLE10 produces $90. WELCOME15 alone produces $85. Shopify’s better-discount rule can select WELCOME15, so the customer pays $85 and the Kaching bundle discount is not the winning offer.
The setting stopped stacking, but it did not protect the $90 bundle result.
If the code targets only a different product
Add a $40 Belt. ITEM15 is a product code scoped only to the eligible collection containing Belt, not Serum. Kaching reduces the two Serums to $90; ITEM15 reduces the Belt to $34. Final merchandise revenue is $124.
That is a protected mixed cart: the bundle remains $90, the approved regular item receives its code, and each promotion has a product scope that matches the policy.
These examples are pre-tax and hypothetical. They explain eligibility and calculation, not profitability.
When an app or custom Discount Function is justified
Use a more advanced route when the condition depends on the live cart rather than fixed product eligibility. Common requirements include:
- reject WELCOME15 whenever a protected quantity bundle is present;
- allow WELCOME15 on one Serum but exclude the same SKU at two or more units;
- apply an order-style saving to regular lines while omitting protected lines;
- identify protected products through a metafield, line property, or bundle component relationship;
- show a specific checkout message instead of a generic incompatible-discount result.
Shopify documents Discount Function use cases for excluding selected cart lines. It also provides a discount-code rejection tutorial that queries entered codes, applies custom validation, and returns a customer-facing message. That tutorial is an app-development path, not a hidden setting in the Shopify admin.
Give the app provider or developer a policy brief before asking for implementation:
- Which exact codes are controlled?
- What independently identifies the protected line?
- Is the rule based on product, variant, quantity, collection, customer, market, or channel?
- Should the code be rejected entirely or apply only to eligible lines?
- What message should the customer see?
- What happens if the identifying signal is missing?
- Which Online Store, accelerated checkout, POS, draft-order, subscription, and order-edit paths must work?
- Which 12 carts must pass before launch?
Shopify lists different support levels for Discount Functions across checkout surfaces. Manual custom discounts on POS carts and draft orders can also bypass normal combination settings. Treat alternate channels as separate tests, not extensions of an Online Store result.
The 12-cart Bundle-Code Protection Matrix
Use this hypothetical model to validate the architecture, then replace every product, price, code, and eligibility rule with your own.
Test promotions and products
- Serum costs $50. Two Serums trigger Kaching BUNDLE10 for 10% off, producing $90.
- Belt costs $40 and belongs to the positive discount-eligible collection.
- ITEM15 gives 15% off products in that collection. Serum and Gift Set are not members.
- ORDER15 gives 15% off the order.
- FREESHIP is an eligible shipping code configured to combine with product discounts.
- Gift Set is a separately listed $80 bundle product outside the eligible collection.
Merchandise totals below exclude tax and shipping. PASS means the stated protection policy is met; it does not mean the order is profitable.
| Case | Cart and promotion | Expected result | Policy check |
|---|---|---|---|
| 1 | One Serum + ITEM15 | Serum remains $50; ITEM15 has no eligible product | PASS if Serum is excluded at every quantity; FAIL if single units were meant to qualify |
| 2 | Two Serums + BUNDLE10 | Serums total $90 | PASS: qualifying bundle-only control |
| 3 | Two Serums + ITEM15 | BUNDLE10 remains $90; ITEM15 has no eligible product | PASS: product scope protects Serum |
| 4 | Two Serums + Belt + BUNDLE10 + ITEM15 | Serums $90; Belt $34; merchandise $124 | PASS: code affects only the regular item |
| 5 | Belt + ITEM15 | Belt becomes $34 | PASS: regular-only control proves the code works |
| 6 | Two Serums + combinable ORDER15 | Product discount creates $90; order code removes $13.50; merchandise $76.50 | FAIL if the bundle price must be final |
| 7 | Two Serums + noncombinable ORDER15 | Shopify compares $90 from BUNDLE10 with $85 from ORDER15; ORDER15 can win | FAIL if the bundle must remain the winning offer |
| 8 | Two Serums + FREESHIP | Merchandise remains $90; eligible shipping becomes $0 | PASS for a shipping-only customer benefit |
| 9 | Gift Set + ITEM15 | Gift Set remains $80; ITEM15 has no eligible product | PASS: separate bundle product excluded |
| 10 | Gift Set + Belt + ITEM15 | Gift Set $80; Belt $34; merchandise $114 | PASS: separate bundle protected in mixed cart |
| 11 | Two Serums + Belt + ITEM15 entered by an ineligible customer | BUNDLE10 remains $90; Belt remains $40; merchandise $130 | PASS if customer eligibility is intentional; code rejection/message must match campaign promise |
| 12 | Protected bundle with a manual POS or draft-order discount | Do not infer the Online Store result; run a separate channel test | PASS only when the actual channel follows the written policy |
What case 1 exposes
The positive collection is intentionally conservative. It excludes Serum at one unit and at the Kaching threshold. If the real policy requires a welcome code on one Serum but not two, stop. Do not publish the native setup and hope same-line behavior will enforce the rule. That is the signal to redesign or obtain conditional logic.
What cases 6 and 7 prove
Case 6 catches the obvious margin leak: the order code reduces the post-bundle subtotal. Case 7 catches the less obvious one: disabling combinations may replace the bundle with the higher-value code.
Both cases can be valid customer experiences. They fail only because the declared policy says the Kaching bundle must stay final. A test matrix is useful because it evaluates the promise, not whether Shopify produced a mathematically valid discount.
What cases 4 and 10 prove
These are the mixed carts that generic bundle-only tests miss. The customer receives the advertised product code on the Belt without reducing the protected Serum deal or Gift Set. If your live checkout cannot reproduce these outcomes, inspect the code class, eligible collection, product membership, reciprocal combination settings, and customer rules one at a time.
Maintain the protection after launch
Discount leakage usually returns through catalog or campaign changes, not because the original setup edits itself.
- Add discount eligibility to the product-launch checklist. A new regular product needs approval and a new bundle product must remain outside the collection.
- Name the policy in plain language inside the campaign brief: “ITEM15 applies to discount-eligible products; it never applies to Serum or Gift Set.”
- Retest after changing Kaching tiers, product assignments, Shopify discount classes, combination settings, customer segments, markets, or checkout apps.
- Review real orders that contain a bundle and another promotion. Compare the applied discount titles and line allocations with the expected policy.
- Keep POS and draft-order instructions separate if staff can apply manual discounts.
- Retire old codes and automatic discounts instead of leaving overlapping promotions active without an owner.
Do not monitor only the average discount per order. Sample the exact mixed carts that carry the largest margin risk.
Where Kaching fits in this architecture
Kaching is a documented fit when you want a visible quantity or bundle offer to enter Shopify as a product discount and you are willing to design other promotions around that class. A product code on different items or an eligible shipping discount can give customers another benefit without touching the protected Kaching lines.
Kaching is not the enforcement layer for every external code. Its current documentation says the app does not control how Shopify combines discounts. It also does not document a per-deal switch that makes a native order code ignore only Kaching-qualified lines.
That limitation is useful before installation: decide whether the product-discount model matches the promotions you intend to keep. If it does, review Kaching and claim 20% OFF for your first 3 months. If you prefer to bypass the ShopSideK form, you can view Kaching on the Shopify App Store; the ShopSideK form is the route for the discount code.
Frequently asked questions
Can I exclude a Shopify bundle from a discount code?
Yes, when the bundle has a stable product identity and the code is a product discount. Scope the code to specific regular products or a positive eligible collection that omits the bundle. A standard order discount does not have the same product or collection scope.
Can a discount code work on regular items in the same cart as a Kaching bundle?
Yes. Use a product code scoped to different eligible products and configure the intended product-discount combination. Kaching documents product discounts on different products as a supported relationship. Test the exact mixed cart because product membership, customer eligibility, and other active discounts can still change the result.
Can I allow a code on one unit but block it when the same SKU qualifies for a quantity bundle?
Not with a fixed Shopify product or collection exclusion. The same SKU does not change collection membership at the quantity threshold. You must exclude it at every quantity, let the eligible offers compete, redesign the benefit, or use compatible app/custom logic based on quantity and merchandise identity.
Does disabling discount combinations prevent discount stacking on a bundle?
It prevents the incompatible discounts from applying together, but it does not guarantee that the bundle wins. Shopify can apply the better eligible discount or combination for the customer. Test both the bundle result and the competing code result.
Can an order discount exclude bundle products in Shopify?
Not through the standard native Amount off orders form. If the order-style saving must omit selected cart lines, use a product-scoped code instead or evaluate a compatible discount app/custom Discount Function with line exclusions.
Can I keep free shipping without discounting the bundle again?
Yes, when the shipping discount and bundle product discount are eligible to combine and the shipping conditions are met. Because the shipping discount changes shipping rather than merchandise, it is often the cleanest extra benefit for a protected bundle.
Methodology
This guide was built from Shopify’s current documentation for discount classes, combination eligibility, application order, better-discount selection, amount-off targeting, automated collection conditions, Discount Function exclusions, and entered-code rejection, plus Kaching’s current discount-combination guide. The policy map and 12-cart matrix are ShopSideK analysis. All product names, prices, codes, and calculated outcomes in the examples are hypothetical.
ShopSideK has not represented these examples as a live-store test. Recheck the linked documentation and reproduce the matrix in your own theme, checkout, markets, customer eligibility, and sales channels before launching the promotion.


