Combining and stacking discounts in Shopify: why only one applies, and how to fix it

Updated · SMART Functions Creator (E-TRADE PARTNER)

Two Shopify discounts combine only when both have combinations enabled for each other's class, and a single product can never receive two product discounts at once. That explains most "my discount is not applying" tickets. SMART Functions Creator exposes the combination settings on every discount rule and lets you design exclusive conditions so the intended discount wins. It cannot override Shopify's combination rules, and no app can.

5.0 · SMART Functions Creator builds this as a Shopify Function, free on live stores, no code.

Install free
On this page
  1. The three rules Shopify enforces
  2. What a Functions discount sees
  3. Automatic discounts and discount codes
  4. Cart-value tiers on one offer
  5. Checklist when a discount is not applying
  6. Scheduling and labels
  7. Frequently asked questions

Combination questions are the most common support topic for this app by a wide margin: a volume discount that does not appear alongside a native buy 3 get 1 offer, a code that should be non-combinable with one other code, two collection discounts that should both apply, a free gift that should stack with free shipping. Almost all of them come down to three Shopify rules that apply to every discount on the platform, Functions-based or not.

The three rules Shopify enforces

  1. Both sides must allow it. Every discount has a combination setting per class: product discounts, order discounts, shipping discounts. Discount A combines with discount B only if A allows B's class and B allows A's class. One side enabled is not enough.
  2. A product gets one product discount. Two product discounts can both be active, but each cart line receives at most one of them. If both target the same product, Shopify keeps one and drops the other. Product discounts combine only when they affect different products.
  3. Classes stack, not peers. A product discount, an order discount, and a shipping discount can all apply to the same cart when combinations allow it. Two order discounts on the same cart do not.

This is why the volume discount and the native buy 3 get 1 did not both apply

Both were product discounts targeting the same items. Even with combinations enabled on both, Shopify applies one product discount per line. The fix is to design one rule that expresses the whole offer, or to make the two rules target different products.

What a Functions discount sees

A discount function runs against the original cart. Cart total and Cart subtotal conditions receive the pre-discount values, so a rule cannot test "the amount remaining after the other discount". If your logic depends on a chain (apply the sale price first, then a VAT exemption only if the sale did not apply), express it as separate rules with mutually exclusive conditions rather than as a sequence.

You wantWhat to buildWhy
10% off collection A and 15% off collection B, both in one cartTwo Product discount rules, each with its own Line group, combinations enabled between product discountsThey affect different products, so both can apply
A sale discount, and a VAT-exemption discount only for items the sale did not coverTwo rules whose Line groups exclude each other's productsConditions cannot see the other rule's result; exclusivity must be in the targeting
Free gift plus free shipping on the same orderProduct discount at 100% on the gift group, shipping discount rule, product-shipping combinations enabled on bothDifferent classes stack when both allow it
Code BDAY26 must not combine with code WELCOME10Set the combination classes so the two codes do not allow each other; if both are product codes they already cannot apply to the same productPer-code exclusions are combination settings, not conditions

Automatic discounts and discount codes

A Functions discount can be automatic or attached to a code. The two behave the same at calculation time; the difference is whether the customer has to type something. Three things merchants ask for do not exist on the platform, and it is better to know now:

  • Rejecting a code with a custom message. Shopify accepts a valid code before the function runs. The function can withhold the discount amount when conditions are not met, but it cannot remove the accepted code or show a custom ineligibility message.
  • First-use-only automatic discounts. An automatic discount cannot be limited to a customer's first use. A code can be limited to one use per customer, but then the customer has to enter it.
  • Discounting by payment method. Shopify does not pass the selected payment method to discount functions, so a discount cannot depend on how the customer pays.

Cart-value tiers on one offer

"50 and above gets 10%, 100 and above gets 15%, 150 and above gets 20%" is a tier ladder on cart value rather than quantity. Build it as Order discount rules with exclusive Cart total ranges: 50 to 99.99, 100 to 149.99, 150 and above. Because the ranges do not overlap, only one rule matches any cart. Thresholds are entered in the store currency; Shopify converts presentment amounts before comparing. If the ladder must live behind a single discount code, ask support before building, because a code belongs to one discount in Shopify's model.

Checklist when a discount is not applying

  1. Is the rule active? Inactive rules never run, even in tests.
  2. Does another discount target the same product? Only one product discount per line.
  3. Are combinations enabled on both discounts for each other's class?
  4. Is a third automatic discount with combinations disabled in the cart? It can block yours.
  5. Are the conditions written against pre-discount values?
  6. Is the Line group matching what you think? A collection whose source is variants will not match a products-based condition; select the variants directly instead.
  7. Are you looking at the cart page or the checkout? The theme controls what the cart shows; the discount is authoritative at checkout.

Set combinations deliberately, on every rule

SMART Functions Creator is free on live stores and rated 5.0 stars across 110+ Shopify App Store reviews.

Install free

5.0 stars · 110+ reviews

Scheduling and labels

Every discount rule can carry a start and end date; a scheduled rule becomes active on its own once the function is live. The text customers see at checkout is the rule's action label, not the product title, so name it for the customer ("Buy 2 save 15%") rather than for your team.

Frequently asked questions

Why does only one of my two discounts apply?

Either combinations are not enabled on both discounts for each other's class, or both are product discounts targeting the same product. Shopify applies one product discount per cart line.

Can Functions Creator override Shopify's combination rules?

No. Combinability must be enabled on both discounts, and a product cannot receive two product discounts. The app exposes the settings; it cannot bypass them.

Can a discount code be rejected with a custom message when conditions are not met?

No. Shopify accepts a valid code before the function runs. The function withholds the amount but cannot remove the code or show a custom message.

Can an automatic discount apply only on a customer's first order?

No. Automatic discounts cannot be limited to first use. Use a discount code limited to one use per customer instead.

Do conditions see the cart after other discounts?

No. Cart total and subtotal conditions receive the original values before any discount, so chained logic has to be expressed as exclusive rules.

Related articles