DiscountsShopify BasicsCampaign Planning

    Shopify Discount Codes vs. Automatic Discounts: When to Use Each (And How to Automate Both)

    Promly Team19 min read

    Short Answer

    Use discount codes when you need control over who redeems an offer and clean attribution; use automatic discounts when you want reach with no code to remember at checkout. Both can run at the same time on Shopify: two order discounts stack by default, while two product discounts on the same item usually do not, so audit combination settings before any multi-discount campaign.

    Most Shopify merchants pick one discount type and stick with it. Either they lean on discount codes because that's what they've always done, or they discover automatic discounts and apply them to everything. Both approaches leave money on the table, and both eventually run into the same follow-up question: what happens when you try to run two discounts at once?

    The real unlock is knowing which mechanism fits each campaign goal, how to run both simultaneously when a promotion calls for it, and what actually happens when two automatic discounts (or a discount and a code) both try to apply to the same cart.

    This guide covers the practical difference between Shopify discount codes and automatic discounts, when each produces better results, whether and how you can stack multiple automatic discounts, how to layer codes and automatic discounts together for major events like BFCM, and how to schedule and automate all of it without doing it manually every time.

    Can you run multiple automatic discounts on Shopify at once? It depends on the discount class, not one yes/no rule. Two automatic order discounts combine by default, each percentage calculated on the original subtotal. Two product discounts on the same line item only combine on Shopify Plus, using tagged combinations.

    What Are Shopify Discount Codes?

    A discount code is a string of text (like SUMMER20 or VIP15) that a customer enters at checkout to unlock a discount. Shopify applies the discount only when a valid code is present.

    What you can configure:

    • Discount type: percentage off, fixed amount off, free shipping, buy X get Y
    • Minimum requirements: order value or item quantity
    • Usage limits: total uses, or one per customer
    • Customer eligibility: all customers, specific segments, or specific email addresses
    • Date range: valid from a start date to an end date
    • Product or collection scope

    The defining characteristic: the customer must actively enter the code. That friction is intentional: it filters for customers who received the code through a specific marketing channel (email, SMS, influencer post, referral link).

    What Are Shopify Automatic Discounts?

    An automatic discount applies without any customer action. When a cart meets the discount's conditions, Shopify applies it automatically at checkout.

    What you can configure:

    • Discount type: percentage off, fixed amount off, buy X get Y, free shipping
    • Minimum requirements: order value or item quantity
    • Product or collection scope
    • Date range: start and end dates
    • Customer eligibility: all customers or specific segments

    The defining characteristic: zero friction. No code to remember, no step to complete. Every qualifying customer gets the discount automatically.

    The Core Trade-Off: Control vs. Reach

    "The choice between discount codes and automatic discounts isn't about preference. It's about whether your campaign needs a gate or a ramp."

    Discount codes create a gate. Only customers who have the code access the discount. Use a gate when you need to control who gets the offer, track where customers came from, or reward a specific segment without discounting your entire store.

    Automatic discounts create a ramp. Every qualifying customer rolls into the discount automatically. Use a ramp when your goal is maximum reach and frictionless conversion.

    At a Glance: Which Discount Type Fits Each Campaign Goal

    Campaign goalUse this
    Email list campaign with trackable resultsDiscount code
    Influencer or affiliate partnershipUnique discount code per partner
    Sitewide BFCM sale (max reach, max conversion)Automatic discount
    Spend threshold to increase AOVAutomatic discount
    Free shipping above a thresholdAutomatic discount
    Flash sale targeted at email subscribers onlyDiscount code
    VIP or loyalty reward for top customersDiscount code
    Flash sale visible to all site visitorsAutomatic discount
    BOGO or gift-with-purchaseAutomatic discount
    A/B testing discount depth across two segmentsDiscount code (one per variant)
    Referral program tracking by referrerUnique discount code per referrer
    Broad sitewide sale plus exclusive loyalty layerAutomatic + code combined

    When to Use Discount Codes

    Targeted email and SMS campaigns

    When you're sending a promotion to a specific list (top buyers, lapsed customers, post-purchase sequences), a discount code ties the discount to the send. If you use WINBACK20 for your re-engagement campaign, every redemption confirms that email recovered a customer. You know exactly how many customers that campaign converted, not just how many clicked.

    Influencer and affiliate partnerships

    Every partner gets a unique code (ALLY20, SARAH15). Redemptions tell you which partnership drove revenue without any additional attribution infrastructure. Without unique codes, you're guessing based on referral traffic and last-click data, which is always incomplete.

    Gated access and VIP offers

    A code enforces exclusivity for loyalty members, design partners, or early subscribers. Customers who aren't on your list don't get the offer. This matters when margin is tight and you'd rather not discount visitors who would have bought at full price.

    Referral programs

    Each referrer gets a unique code. When a referral redeems it, you know exactly who sent them. This makes referral programs measurable without requiring a separate app.

    A/B testing discount depth

    Send SAVE10 to one segment and SAVE15 to another of equal size. Compare conversion rate, average order value, and 90-day retention by code. The code is the experiment variable. Automatic discounts can't run this test cleanly because they apply to everyone.

    When to Use Automatic Discounts

    Sitewide seasonal sales

    Black Friday. Summer clearance. An automatic discount removes the code friction that would otherwise cost you conversions. A customer who can't find a code field drops off. A customer who can't remember where they saved the code abandons their cart. Automatic discounts eliminate both failure modes.

    Spend thresholds to drive average order value

    "Spend $75, get $15 off" is one of the most effective AOV levers available to Shopify merchants. But it only works if the customer discovers it without friction. When "You're $12 away from $15 off" appears automatically in the cart, customers add one more item. If they have to enter a code to activate the threshold reward, many skip it.

    Free shipping above a threshold

    Free shipping thresholds are one of the more effective promotional mechanics available. When "Add $8 more for free shipping" appears automatically in the cart (with no code required), conversion rates respond. A code requirement turns a seamless incentive into unnecessary work.

    Flash sales with universal reach

    When you're running a time-limited price drop visible to all visitors, automatic discounts surface the offer at the right moment: in the product listing, the cart, and at checkout. There's no code to communicate or forget.

    Buy X Get Y and gift-with-purchase

    BOGO and gift mechanics work best when the customer discovers the offer naturally (at the product page, in the cart, or at checkout), not when they have to enter a code to activate a gift they didn't know was available.

    Can you stack multiple automatic discounts on Shopify?

    It depends on the discount class, and the rule is not the same for all three.

    Shopify sorts every discount, automatic or code, into one of three classes:

    • Product discounts: applied to specific products, variants, or collections, at the line-item level
    • Order discounts: applied to the entire order subtotal, after product discounts have been calculated
    • Shipping discounts: reduce or waive the shipping rate at checkout, calculated after both

    The combination toggle in the discount editor ("Combine with product discounts," "Combine with order discounts," "Combine with shipping discounts") controls whether a discount can stack with discounts in other classes. It has nothing to do with two discounts in the same class. Same-class behavior is fixed by Shopify, and it differs by class:

    • Two order discounts combine by default. No toggle required. Shopify calculates each percentage against the original subtotal and applies both.
    • Two product discounts on the same line item do not, unless the store is on Shopify Plus and both discounts carry reciprocal discount-combination tags. Otherwise Shopify applies one and skips the other.
    • Two shipping discounts never combine. A shipping discount applies to the whole shipping rate, so stacking two on one rate isn't supported.

    That is the real source of most "why didn't my second discount apply" confusion: merchants assume one rule covers every discount type, when the answer depends on which class the discount belongs to.

    Which discounts are stackable, and which aren't

    CombinationStacks?What actually happens
    Automatic + automatic, same class: two order discountsYes, automaticallyBoth apply. Shopify calculates each against the original subtotal and totals them. No combination toggle needed.
    Automatic + automatic, same class: two product discounts, same line itemNo, except on Shopify PlusShopify applies the better discount and skips the other, whether both are automatic or one is a code. Shopify Plus stores can combine them if both carry reciprocal discount-combination tags.
    Automatic + automatic, same class: two shipping discountsNoA shipping discount applies to the entire shipping rate, so Shopify allows only one to apply. There's no combination setting that overrides this.
    Automatic + automatic, different classesYes, if both allow itBoth apply. A 15% product discount and a free-shipping threshold can run side by side without conflict.
    Automatic discount + discount codeYes, if both allow itCalculation order follows discount class, not automatic-vs-code status: product discounts apply first, then order discounts on the reduced subtotal, then shipping discounts last. In the common case of an automatic product discount plus an order-level code, the automatic discount reduces the price first and the code applies to what's left.
    Discount code + discount codeLimitedUp to 5 product or order discount codes plus 1 shipping discount code can apply to a single order, all combination-dependent. Most stores never approach that ceiling; the real risk is 2 or 3 codes stacking unintentionally, not hitting the limit.
    Shipping discount + order discountYes, if both allow itShipping discounts apply after product and order discounts are calculated. They layer on top without changing the product or order math.

    A rule change worth knowing if you set up discounts before 2023: per Shopify's own changelog, a July 2023 update expanded what could combine, adding support for order discounts to combine with other order discounts (for eligible stores) and for multiple discounts to apply to a single order rather than an all-or-nothing choice. If you created automatic discounts before that update and haven't revisited their combination settings since, they may be combining (or refusing to combine) in ways you didn't intend to set up.

    Two ceilings to be aware of: a store can have a maximum of 25 active automatic discounts at once (Shopify's own stated limit, inclusive of app-created discounts), and, as noted above, a single order can carry a maximum of 5 product or order discount codes plus 1 shipping discount code. Neither limit is what usually causes problems. The problem is an unintended combination well inside those ceilings.

    How to turn on (or turn off) discount combination

    1. In Shopify Admin, go to Discounts and open the discount you want to configure.
    2. Scroll to the Combinations section.
    3. Check the box for each other class this discount is allowed to combine with: product discounts, order discounts, shipping discounts.
    4. Save, then open the other discount and repeat. The combinable flag has to be set on both sides. Setting it only on Discount A does nothing if Discount B doesn't also allow the combination.
    5. If a discount doesn't need to stack with anything, leave every combination box unchecked. It's easier to turn combination on deliberately than to discover it was on by accident three weeks later.

    4 ways discounts stack by accident

    These aren't hypotheticals. They're the patterns that show up in order exports once a merchant starts digging, and they sit alongside the other configuration and timing errors that cost merchants money.

    1. The forgotten summer automatic discount. A sitewide 15% automatic discount ran in July and was never turned off, because automatic discounts have no expiry unless you set one. In September, a new 20% back-to-school code launches with combination enabled. Every customer who uses the code now gets roughly 32% off, not 20%, because the automatic discount fires first and the code applies to the reduced price.
    2. The email loyalty code plus an active flash sale. A 72-hour flash sale runs as an automatic product discount. A scheduled loyalty-code email, set up three weeks earlier, goes out mid-sale. If both allow combination, every recipient who shops during the flash sale gets both.
    3. BFCM early-access codes plus the sitewide automatic discount. VIP early-access codes go out in late October. The sitewide BFCM automatic discount activates November 1. If the early-access codes are still valid, VIPs who wait can stack both, turning a planned 20% event into an unplanned 40%-plus discount for your best customers.
    4. A birthday welcome code running alongside a weekend sale. Birthday automations are set-and-forget by design, often valid 30 days with combination enabled. Any customer whose birthday window overlaps a weekend flash sale gets both, and it won't show up until the order report.

    The timezone trap: when two discounts don't go live together

    Shopify schedules discounts in UTC by default unless your store's timezone offset is applied at setup. A discount meant to launch at 8am Eastern needs to be entered as 13:00 UTC. If two discounts meant to launch together are configured in different timezone contexts, one can go live hours before the other. That gap does three things: only one discount is live, the order data from that window is skewed, and the customers who bought in it had a different experience from everyone else. If your promo timing matters at all, test the schedule before the launch window, not during it.

    What a stacked discount actually costs

    The compounding math isn't intuitive. "15% plus 20%" does not mean a customer paid 35% less, and it doesn't mean your margin dropped by 35% either.

    Take a $60 product with $36 in cost of goods (a 40% gross margin, $24 in margin dollars). An automatic 15% product discount fires first, then a 20% loyalty code applies to the reduced price:

    Full priceAfter 15% automaticAfter 20% code (on the reduced price)
    Customer pays$60.00$51.00$40.80
    Your margin$24.00$15.00$4.80
    Margin %40%29%12%

    The effective discount is about 32%, not 35%, because the second discount applies to an already-reduced price. But the margin hit is worse than the effective discount suggests: margin dollars fell from $24 to $4.80, an 80% drop, on a single item. On a 50-unit run, that's the difference between $1,200 in margin and $240. (For the full picture beyond one item, see how to measure the real ROI of a promotion.) This example holds cost of goods constant and excludes payment processing fees and return rates, both of which make the real number worse.

    How to Run Discount Codes and Automatic Discounts Together

    Shopify allows one automatic discount and one discount code to apply to the same cart simultaneously, provided both have the applicable combination setting enabled (see the class rules above: the automatic discount and the code need to be in classes that allow combination with each other, most commonly an order or product discount combining with a code in a different class).

    This combination is one of the most underused strategies for major sale events.

    Example for BFCM:

    • Automatic discount: 20% off sitewide (applies to all customers automatically)
    • Discount code: VIP5, giving email subscribers an additional 5% off

    Every visitor gets the 20%. Your most engaged customers get 25% when they use the code. The automatic discount lifts your sitewide conversion rate. The code deepens the relationship with your best customers and gives you attribution data on your email list's response.

    Your campaign architecture for BFCM should be:

    1. One automatic discount for the broadest offer
    2. Unique codes for exclusive segments and channel attribution

    How to Audit and Test Before You Launch a Multi-Discount Campaign

    Two different failure classes need two different checks. A configuration audit catches discounts you forgot were still active. A live cart test catches discount behavior that only shows up once a real cart hits checkout. Skipping either one leaves a gap.

    Phase 1: Audit your active discounts (about 10 minutes)

    1. Export all active discounts. In Shopify Admin, go to Discounts, filter by Status: Active, and export to CSV. This surfaces discounts you forgot about.
    2. Flag every automatic discount with no end date. Automatic discounts run silently and indefinitely unless you set one. No end date is itself a flag worth noting.
    3. Check the combination toggles on every active discount. Note which class each one is allowed to combine with.
    4. Cross-reference your new discount's class against the active list. If your new order discount allows combining with product discounts, every active product discount that also allows combination will stack with it.
    5. Calculate worst-case discount depth using the margin math above: your deepest active discount, applied to your most-discounted product, plus your new discount on top.
    6. Check what's scheduled to activate in the next 7 to 14 days, not just what's active today. A campaign you schedule now can still collide with something that hasn't gone live yet.

    Phase 2: Test the live cart (about 30 minutes)

    1. Guest checkout test. Log out, open a private browser window, and add products that qualify for both discounts. Confirm both apply correctly, or that a code applies cleanly alongside an active automatic discount, before you reach payment.
    2. Logged-in customer test. Repeat as a plain logged-in customer with no special tags. Some discount logic behaves differently for accounts than for guests.
    3. VIP or tagged customer test. If any discount targets a customer tag, log in as a tagged test account and confirm it applies and combines as expected.
    4. Combined-cart test. Build a cart with products that qualify for Discount A only, Discount B only, and both. Confirm neither discount double-applies to a line item where only one should fire.
    5. Timezone test. If either discount is scheduled, set it 15 minutes into the future during your test window and confirm it activates at the expected local time, not the UTC equivalent.

    Configuration-level checks catch setup errors. Live-cart testing catches the behavior-level issues (a wrong tier applied, a double-apply edge case) that a clean-looking admin screen can't show you.

    Scheduling and Automating Both

    Shopify lets you set start and end dates on both discount codes and automatic discounts natively. For simple single-element campaigns, that's enough.

    The complexity comes when your campaign involves multiple moving parts.

    A coordinated BFCM campaign typically includes:

    • An automatic discount going live Thursday night at 11:59pm
    • A discount code deploying to email subscribers at 6:00am Friday
    • An announcement bar changing simultaneously
    • A hero banner updating on the homepage
    • Compare-at pricing refreshing across dozens of SKUs

    Managing all of that through Shopify's native discount interface means multiple separate admin actions, each timed manually. Miss one step, or execute in the wrong order, and part of your campaign goes live incorrectly.

    None of this is unique to BFCM. Summer clearance, back-to-school, an influencer collab: same moving parts, same requirement that they all move together, and the same risk that one of them quietly overlaps a promo you already have live.

    PromoOS is built for the coordination half of that problem. You configure the complete campaign once (discount type, banner copy, compare-at pricing, start and end time) and it deploys all elements simultaneously on schedule, then reverts them automatically when the campaign ends. No 3am alarm, no out-of-order deployment, no forgotten banner running three days after the sale ended.

    For the overlap half, the PromoOS calendar puts every scheduled and active promo on one timeline. Promos that share dates and share product or collection scope get a conflict indicator. And if you save a promo that overlaps an existing non-combinable discount, you get a warning that Shopify will apply only one of the two at checkout, whichever is lower.

    That's a planning check, not a discount feature. The goal isn't to make more of your discounts stack. It's to make sure the ones that shouldn't stack don't ship without you knowing.

    If you're running more than two or three coordinated campaigns a month, this is where the expensive mistakes happen. Not because anyone was careless, but because the checks live in your head instead of anywhere you can see them.

    Attribution: Why the Code Choice Affects Your Data

    When thousands of customers use your sitewide automatic discount, Shopify records that they received a discount. It doesn't record whether they came from your email, a paid ad, a social post, or direct traffic. You need UTM parameters and post-purchase attribution analysis to reconstruct the picture.

    When a customer uses EMAIL-BFCM at checkout, that code confirms the email channel drove that order, with no additional infrastructure needed.

    A practical attribution setup for BFCM:

    1. Run the automatic discount for sitewide reach
    2. Create unique codes per channel: EMAIL-BF, SMS-BF, INSTA-BF, REFER-BF
    3. Send each code exclusively through its channel
    4. After the event, compare redemption rates, average order value, and new-vs-returning customer rates by code

    You now know which channels drove which quality of customer, without any post-campaign data reconstruction. The discount code was doing double duty: delivering the offer and capturing attribution.

    Key Takeaways

    • Discount codes filter; automatic discounts include. Neither is universally better. The right choice depends on whether your campaign needs a gate or a ramp.
    • Whether two same-class automatic discounts stack depends on which class it is. Two order discounts combine automatically. Two product discounts on the same line item usually don't, unless the store is on Shopify Plus with reciprocal combination tags. Two shipping discounts never do. Cross-class combination always needs the toggle enabled on both discounts.
    • Layering one automatic discount with unique codes is the highest-leverage combo for major events. One automatic discount for the broadest offer, unique codes for VIP segments and channel tracking.
    • The costliest stacks are the ones nobody scheduled to combine. Forgotten sales without end dates, scheduled emails that outlive their timing, and early-access codes that stay valid are the most common causes, not a merchant deliberately choosing to stack.
    • A configuration audit and a live cart test catch different problems. Reviewing combination settings finds setup errors; testing a real cart finds the behavior-level issues a clean-looking admin screen can't show you.

    Conclusion

    The discount code vs. automatic discount decision is simpler than it looks once you anchor it to campaign goal: codes when you need control or attribution, automatic when you need reach or frictionless conversion. And when a combination goes wrong, the fix is almost always a class, tag, or scheduling change, not a settings mystery.

    The more advanced play is running both together: a sitewide automatic discount that lifts conversion across your entire store, layered with unique codes for the channels and segments you actually want to measure. The operational challenge is coordination: getting discounts, banners, and pricing updates live simultaneously, catching the overlaps you didn't intend, and reverting everything on schedule.

    One action to take today: export your currently active discounts from Shopify Admin and check which ones have no end date. That single list is where most unintended stacking starts, and it's the fastest way to find out whether your next campaign is about to combine with something you forgot was still running.

    Related reading: BFCM is a 50-day season, not a weekend if your next collision risk is Q4, or how to schedule a flash sale without the 3am alarm if it's the timing that keeps biting you.

    Sources

    Frequently Asked Questions

    Related articles

    Free plan · No credit card

    Schedule your next promo in PromoOS.

    Free plan: one active promo, three total, no credit card. Upgrade only if you outgrow it.

    Install PromoOS free
    PromoOS is a Promly product. © 2026 Promly. All rights reserved.