Mastering Shopify Discounts: How to Exclude Sale Items from Coupon Codes (Variant-Level Guide)
Hey there, fellow store owners! Let's tackle a common head-scratcher in the Shopify world: how to prevent your welcome coupon codes from stacking on top of already discounted sale items. It sounds straightforward, right? Just exclude sale products. But as many of you know, it gets tricky, especially with variant-level sales.
We recently saw a fantastic discussion in the Shopify community about this, sparked by a store owner needing to apply a 15% welcome discount only to full-price items, even when some variants of a product were on sale (e.g., a 12-month t-shirt on sale, but the 18-month one full price). The challenge? Customers should be able to buy both, but the coupon should only apply to the full-price variant.
The Core Challenge: Why Product-Level Exclusions Fall Short
The key insight from the community, highlighted by experts like Ramadan_Alex, is that standard Shopify collection-based exclusions often operate at the product level. If you exclude a product because one of its variants is on sale, you inadvertently block the discount from applying to all its other (full-price) variants too. What you really need is the discount to evaluate each cart line or variant separately.
Imagine a scenario: you have a 'Gray T-Shirt' product. The 12-month size variant is on a clearance sale, but the 18-month size variant is at full price. Your customer adds both to their cart and then applies a 15% welcome discount. The desired result is:
- 12-month Gray T-Shirt: Sale price → 15% welcome discount does not apply
- 18-month Gray T-Shirt: Regular price → 15% welcome discount applies
Both variants can still be in the same cart, and the discount behaves intelligently. Achieving this requires a nuanced approach beyond simple product exclusions.
Two Approaches to Solving Discount Stacking
The community discussion revealed two main outcomes when dealing with this:
- Apply the code selectively: The discount applies only to full-price items in the cart, skipping sale variants. This is often preferred for a smoother customer experience.
- Reject the code entirely: If any protected (sale) item is in the cart, the discount code is blocked with a message, requiring the shopper to adjust their cart or code. This offers stricter control.
Let's explore how to achieve both, leveraging insights from the community.
Path 1: Selective Application (Discount Applies Only to Full-Price Items)
This is generally the preferred method for a seamless customer journey, ensuring they still get a discount on eligible items without penalizing them for having a sale item in their cart. There are two main ways to achieve this:
1. Native Shopify Solution (Requires New Collections Model)
If your Shopify admin has the new collections model, you might have a powerful native tool at your disposal. This model supports variant-level collections, allowing for much finer control.
- Create a Collection with a Variants Source: In your Shopify admin, when creating an automated collection, look for the option to use a 'Variants source' instead of a 'Product source'.
- Set the Condition: Use the condition
Compare at price > is not set. This collection will then automatically populate with all variants that do NOT have a 'compare at price' defined, effectively capturing your full-price variants. - Apply Discount to This Collection: Create or edit your welcome code as an 'Amount off products' discount and set it to apply specifically to this newly created collection.
Caveats:
- This requires the new collections model. Legacy collections can only contain whole products.
- The full-price variant's 'compare-at price' must be completely empty. A value of
0.00is still treated as 'set' and would exclude the variant. - If your current welcome code is an order discount, you'll need to recreate it as an 'Amount off products' discount to target the collection.
- This assumes 'compare-at price' is a reliable marker for every sale variant.
2. App-Based Solutions for Selective Application
For those without the new collections model, or who need more robust features, several Shopify apps specialize in variant-level discount control:
- Deducto: Smarter Promotions: This app offers a native 'Is On Sale' condition evaluated per cart line. You can set your welcome code to apply only where 'Is On Sale' is false, ensuring variant-level accuracy. They even offer a free plan to try.
- Regios Automatic Discounts: Features a specific 'don’t apply to items already on sale' setting that checks compare-at pricing directly, making it effective for variant-level sales.
- Discount Bot / Discount Bot: Sitewide sales: Allows you to set a 'does not apply to' exclusion list for products/variants alongside your welcome code.
- Alpha Sale: Built specifically around preventing sale-item stacking and ensuring discounts are applied correctly.
- Solo Discount: Another app mentioned in the community that helps manage discount exclusions.
Path 2: Reject the Code Entirely (Stricter Control)
While less common for welcome codes, some merchants prefer a stricter approach where the discount code is rejected entirely if any sale item is present in the cart. This ensures no double-discounting whatsoever, but might require the customer to adjust their cart or remove the code.
App-Based Solutions for Rejection:
- HBN: Discount Floor Guard: This app, developed by a community expert, works by implementing a 'do not discount sale items again' rule. If an eligible code would hit a sale variant, it rejects the code at checkout rather than partially applying it. They offer a free plan for a single storewide rule.
The Crucial Mixed-Cart Test
Regardless of whether you choose a native Shopify solution or an app, the most important step before committing is to run a mixed-cart test. This simple test will immediately tell you if your chosen solution is working as intended at the variant level:
Test Scenario:
- Add one sale variant (e.g., 12-month Gray T-Shirt on sale) to your cart.
- Add one full-price variant of the same product (e.g., 18-month Gray T-Shirt at full price) to your cart.
- Apply your welcome discount code at checkout.
- Verify: Check whether only the full-price variant receives the discount, or if the entire checkout is blocked, or if the discount incorrectly applies to the sale item.
This test will confirm which model each app or native setup actually implements and whether it meets your specific needs.
Why This Matters for Your Business
Properly managing discounts, especially for sale items, is crucial for several reasons:
- Protecting Profit Margins: Preventing double-discounting ensures you maintain healthy profit margins on your sale items.
- Enhanced Customer Experience: A smart discount system prevents customer frustration from codes not working or applying incorrectly, leading to a smoother checkout.
- Brand Perception: A well-managed promotion strategy reflects positively on your brand, showing professionalism and fairness.
- Inventory Management: It allows you to strategically clear out old inventory (sale items) while still incentivizing purchases of new or full-price stock.
If you're looking to start your own e-commerce journey or migrate an existing store, Shopify offers a robust platform with the flexibility to implement these advanced discount strategies, either natively or through its extensive app ecosystem. Understanding these nuances will empower you to create more effective and profitable promotional campaigns.
By implementing these strategies, you can ensure your welcome offers drive sales without eroding your bottom line, keeping both your customers happy and your business thriving.