1. DISCOUNT TYPES OVERVIEW
App offers 4 main discount types:
1.1 Product Discount
- Purpose: Offer discounts on specific products based on conditions
- Discount Value Options: Percentage, Amount Off, New Price
- Use Cases: Product sales, collection discounts, category promotions
- Example: "20% off T-shirts collection"
- New: Product discounts can match the shopper's shipping Zip / Postal code. This one needs a one-time setup on your checkout first. See section 2.6.
1.2 Buy X Get Y (BXGY)
- Purpose: Promotional offers where customers buy X items and get Y items discounted/free
- Discount Value Options: Percentage, Amount Off, New Price
- Use Cases: BOGO deals, bundle promotions, upselling
- Example: "Buy 2 T-shirts, get 1 free"
1.3 Order Discount
- Purpose: Discounts applied to the entire order total
- Discount Value Options: Percentage, Amount Off ONLY (No New Price)
- Use Cases: Cart threshold rewards, order-level promotions
- Note: Focuses on final order total, not individual product prices
- Example: "10% off entire order over $100"
1.4 Shipping Discount
- Purpose: Discounts applied to shipping costs
- Discount Value Options: Percentage, Amount Off ONLY (No New Price)
- Use Cases: Free shipping, reduced shipping costs
- Note: Focuses on shipping cost, not product prices
- Example: "Free shipping on orders over $50"
1.5 Tiered Discount
- Purpose: Discounts applied based on purchasing quantity / purchasing amount
- Discount Value Options: Percentage, Amount Off ONLY (No New Price)
- Use Cases: bulk discount on products based on purchasing quantity / purchasing amount
- Note: Focuses on product cost, not order prices
- Example: Save $5 on 5 units of Product A, or $7 on 10 units of Product A.
2. DISCOUNT CONDITIONS SYSTEM
2.1 Overview
- Conditions determine WHEN and TO WHOM discounts apply
- Multiple conditions can be combined using AND/OR logic
- Conditions are organized in GROUPS
- Each group can contain multiple conditions
- Logic can be controlled at TWO LEVELS: within groups and between groups
Important Note: Different types of conditions (product, cart, customer) can ALL be in the same group!
2.2 CONDITION LOGIC (Simple → Advanced)
Usage Statistics:
- 90% of merchants use simple single-group logic
- 10% use advanced multi-group scenarios
Recommendation: Start with single group. Only add multiple groups when you have distinctly different qualifying scenarios.
COMMON USE CASE: Single Group Logic (90% of Use Cases)
2.2.1: ALL Conditions (AND) - "This AND That"
Use When: All conditions must be true together
Business Rule: "Discount on T-shirts BUT exclude sale items"
GROUP 1 - "all conditions" (AND)
├─ Collections is any of [T-shirts]
└─ Collections excludes [Sale]
Results:
✅ T-shirt, NOT on sale → QUALIFIES
❌ T-shirt, ON sale → REJECTED (excluded)
❌ Hoodie, NOT on sale → REJECTED (wrong collection)
Business Rule: "Discount on Nike products over $50"
GROUP 1 - "all conditions" (AND)
├─ Vendor is any of [Nike]
└─ Price is greater than 50
Results:
✅ Nike product, $60 → QUALIFIES
❌ Nike product, $40 → REJECTED (price too low)
❌ Adidas product, $60 → REJECTED (wrong vendor)
Business Rule: "VIP customers buying from Orange collection with cart total $100+"
GROUP 1 - "all conditions" (AND)
├─ Collections is any of [Orange]
├─ Sub total is greater or equal to 100
└─ Customer tags is any of [VIP]
✅ Different types of conditions CAN be in the SAME group!
Results:
✅ VIP, Orange product, $150 cart → QUALIFIES
❌ VIP, Orange product, $50 cart → REJECTED (cart too low)
❌ Regular customer, Orange, $150 → REJECTED (not VIP)
Common Scenarios for AND:
- Include collection BUT exclude specific items
- Target vendor AND price range
- Require cart total AND specific products
- Customer segment AND minimum purchase
- Mix product, cart, and customer conditions together
2.2.2: ANY Conditions (OR) - "This OR That"
Use When: At least ONE condition needs to be true
Business Rule: "Discount applies to T-shirts OR Pants OR Hoodies"
GROUP 1 - "any conditions" (OR)
├─ Collections is any of [T-shirts]
├─ Collections is any of [Pants]
└─ Collections is any of [Hoodies]
Results:
✅ Product in T-shirts → QUALIFIES
✅ Product in Pants → QUALIFIES
✅ Product in Hoodies → QUALIFIES
✅ Product in T-shirts AND Pants → QUALIFIES
❌ Product in Jackets → REJECTED
Business Rule: "VIP members OR Wholesale customers OR Email subscribers"
GROUP 1 - "any conditions" (OR)
├─ Customer tags is any of [VIP]
├─ Customer tags is any of [Wholesale]
└─ Customer accepts marketing is true
Results:
✅ VIP customer → QUALIFIES
✅ Wholesale customer → QUALIFIES
✅ Regular customer who accepts marketing → QUALIFIES
❌ Regular customer, no marketing opt-in → REJECTED
Common Scenarios for OR:
- Multiple collections/categories qualify
- Multiple customer segments
- Multiple vendors/brands
- Alternative qualifying criteria
Quick Reference: AND vs OR
| Use AND ("all conditions") | Use OR ("any conditions") |
|---|---|
| Refinement with exclusions | Multiple alternatives |
| Multiple requirements together | Broadening eligibility |
| "This AND that AND that" | "This OR that OR that" |
| Narrowing down | Expanding options |
| More restrictive | More permissive |
AND = Fewer products qualify (more restrictive)
Example: Must be T-shirt AND expensive AND from Nike
OR = More products qualify (more permissive)
Example: Can be T-shirt OR Pants OR Hoodies
ADVANCED USE CASE: Multiple Groups (10% of Use Cases)
When You Need Multiple Groups
Key Indicators:
- Different product categories need different exclusion rules
- Bundle/combo requirements (must buy A AND B)
- Alternative qualifying scenarios (Scenario A OR Scenario B)
- Cross-category purchase requirements
Important: Only use multiple groups when scenarios have truly different rules that cannot be expressed in a single group.
2.2.3: Different Rules Per Category (OR Between Groups)
Use When: Different product categories have different exclusion rules
Business Rule:
- "T-shirts qualify BUT exclude sale items"
- OR
- "Pants qualify INCLUDING all items (even on sale)"
BETWEEN GROUPS: "any conditions" (OR)
│
GROUP 1 - "all conditions" (AND)
├─ Collections is any of [T-shirts]
└─ Collections excludes [Sale]
│
OR (between groups)
│
GROUP 2 - "all conditions" (AND)
└─ Collections is any of [Pants]
(No exclusion - sale items ARE included)
Results:
✅ T-shirt, NOT on sale → QUALIFIES (Group 1)
❌ T-shirt, ON sale → REJECTED (Group 1 excludes)
✅ Pants, NOT on sale → QUALIFIES (Group 2)
✅ Pants, ON sale → QUALIFIES (Group 2 - no exclusion!)
Why Multiple Groups?
- Cannot apply different exclusion rules to different collections in a single group
- Each category has independent qualifying rules
2.2.4: Alternative Bundles (OR Between Groups)
Use When: Customers can qualify by completing EITHER complete bundle
Business Rule:
"Buy (T-shirt AND Pants) OR (Shoes AND Accessories)"
Translation: Complete clothing bundle OR footwear bundle
BETWEEN GROUPS: "any conditions" (OR)
│
GROUP 1 - "all conditions" (AND)
├─ Collections is any of [T-shirts]
└─ Collections is any of [Pants]
│
OR (between groups)
│
GROUP 2 - "all conditions" (AND)
├─ Collections is any of [Shoes]
└─ Collections is any of [Accessories]
Results:
✅ T-shirt + Pants → QUALIFIES (Group 1 complete)
✅ Shoes + Accessories → QUALIFIES (Group 2 complete)
✅ All 4 items → QUALIFIES (Both groups complete)
❌ T-shirt only → REJECTED (incomplete)
❌ Shoes only → REJECTED (incomplete)
❌ T-shirt + Shoes → REJECTED (neither bundle complete)
Real-World Use Cases:
- "Buy complete outfit A OR complete outfit B"
- "Buy lunch combo 1 OR lunch combo 2"
- "Buy starter kit OR pro kit"
2.2.5: Cross-Category Requirements (AND Between Groups)
Use When: Must have items from multiple categories
Business Rule:
"(T-shirt OR Pants) AND (Shoes OR Accessories)"
Translation: At least one clothing item AND at least one footwear/accessory
BETWEEN GROUPS: "all conditions" (AND)
│
GROUP 1 - "any conditions" (OR)
├─ Collections is any of [T-shirts]
└─ Collections is any of [Pants]
│
AND (between groups)
│
GROUP 2 - "any conditions" (OR)
├─ Collections is any of [Shoes]
└─ Collections is any of [Accessories]
Results:
✅ T-shirt + Shoes → QUALIFIES
✅ Pants + Accessories → QUALIFIES
✅ T-shirt + Pants + Shoes → QUALIFIES
❌ T-shirt only → REJECTED (need Group 2)
❌ Shoes only → REJECTED (need Group 1)
Real-World Use Cases:
- "Complete the look" promotions
- "Top + Bottom" requirements
- Cross-sell incentives
2.3 Pattern Comparison Table
| Pattern | Structure | Use Case | Complexity |
|---|---|---|---|
| (A AND B) | Single group, all conditions | Include with exclusions | ⭐ Simple |
| (A OR B) | Single group, any conditions | Multiple options | ⭐ Simple |
| Different rules per category | Multi-group, OR between | T-shirts (exclude sale) OR Pants (include all) | ⭐⭐ Mid |
| (A AND B) OR (C AND D) | Multi-group, OR between | Alternative complete bundles | ⭐⭐ Mid |
| (A OR B) AND (C OR D) | Multi-group, AND between | Cross-category mix | ⭐⭐⭐ Advanced |
Use When: Must have items from multiple categories
Business Rule:
"(T-shirt OR Pants) AND (Shoes OR Accessories)"
Translation: At least one clothing item AND at least one footwear/accessory
BETWEEN GROUPS: "all conditions" (AND)
│
GROUP 1 - "any conditions" (OR)
├─ Collections is any of [T-shirts]
└─ Collections is any of [Pants]
│
AND (between groups)
│
GROUP 2 - "any conditions" (OR)
├─ Collections is any of [Shoes]
└─ Collections is any of [Accessories]
Results:
✅ T-shirt + Shoes → QUALIFIES
✅ Pants + Accessories → QUALIFIES
✅ T-shirt + Pants + Shoes → QUALIFIES
❌ T-shirt only → REJECTED (need Group 2)
❌ Shoes only → REJECTED (need Group 1)
Real-World Use Cases:
- "Complete the look" promotions
- "Top + Bottom" requirements
- Cross-sell incentives
2.4 Complete Logic Control Reference
TWO LEVELS OF LOGIC:
LEVEL 1: Within Each Grou
- "all conditions" (AND) → ALL conditions in this group must match
- "any conditions" (OR) → At least ONE condition in this group must match
LEVEL 2: Between Groups (only with 2+ groups)
- "all conditions" (AND) → ALL groups must be satisfied
"any conditions" (OR) → At least ONE group must be satisfied
2.5 Available Condition Types (Complete List)
PRODUCT CONDITIONS
1. Collections
- Operators: is any of, is all of, excludes
- Purpose: Target products in specific collections
- UI: Opens modal to select from existing collections
- Example: Collections is any of [Orange, Summer, Sale]
2. Tags
- Operators: is any of, is all of, excludes
- Purpose: Filter products by product tags
- Example: Tags excludes [discontinued, out-of-stock]
3. Product type
- Operators: is any of, is all of, excludes
- Purpose: Target specific product categories
- Example: Product type is any of [T-Shirt, Hoodie]
4. Vendor
- Operators: is any of, is all of, excludes
- Purpose: Filter by product supplier/brand
- Example: Vendor is any of [Nike, Adidas]
- Not available on Product discounts. It still works on Order, Buy X Get Y and Tiered discounts. See 2.5.1 for the full Product discount set.
5. SKU
- Operators: is any of, is all of, excludes
- Purpose: Target specific product variants by SKU
- Example: SKU is any of [SKU-12345, SKU-67890]
6. Price
- Operators: is greater than, is less than, is greater or equal to, is less or equal to, is equal to, is not equal to
- Purpose: Filter products by price range
- Example: Price is greater than 50
7. Weight
- Operators: is greater than, is less than, is greater or equal to, is less or equal to, is equal to, is not equal to
- Purpose: Filter products by weight
- Example: Weight is less than 5
CART CONDITIONS
8. Sub total
- Operators: is greater than, is less than, is greater or equal to, is less or equal to, is equal to, is not equal to
- Purpose: Set minimum/maximum cart value requirements
- Note: Based on cart subtotal BEFORE discounts are applied
- Example: Sub total is greater or equal to 100
9. Total quantity
- Operators: is greater than, is less than, is greater or equal to, is less or equal to, is equal to, is not equal to
- Purpose: Require minimum/maximum number of items in cart
- Example: Total quantity is greater than 3
10. Total weight
- Operators: is greater than, is less than, is greater or equal to, is less or equal to, is equal to, is not equal to
- Purpose: Filter by total cart weight
- Example: Total weight is less than 10
11. Cartline (Advanced)
- Operators: Various (complex cart line conditions)
- Purpose: Target specific line items in cart
- Example: Specific product variants in cart
CUSTOMER CONDITIONS
12. Customer tags
- Operators: is any of, is all of, excludes
- Purpose: Target customers with specific tags
- Example: Customer tags is any of [VIP, Wholesale, Loyalty-Member]
13. Customer email
- Operators: is any of, is all of, excludes
- Purpose: Target specific customer email addresses
- Input: Text field for email addresses
- Example: Customer email is any of [john@example.com, sarah@example.com]
14. Customer accepts marketing
- Operators: is true, is false
- Purpose: Target customers based on marketing opt-in status
- Example: Customer accepts marketing is true
15. Customer spent
- Operators: is greater than, is less than, is greater or equal to, is less or equal to, is equal to, is not equal to
- Purpose: Target customers by lifetime spend amount
- Example: Customer spent is greater than 1000
- Not available on Product discounts. It still works on Order, Shipping, Buy X Get Y and Tiered discounts. See 2.5.1 for the full Product discount set.
16. Customer ordered
- Operators: is greater than, is less than, is greater or equal to, is less or equal to, is equal to, is not equal to
- Purpose: Target customers by total number of orders placed
- Example: Customer ordered is greater than 5
DISCOUNT CONDITIONS
17. Discount code used
- Operators: is any of, is all of, excludes
- Purpose: Require or exclude other discount codes being used
- Example: Discount code used excludes [SUMMER25, FLASH50]
SHIPPING ADDRESS CONDITIONS
18. Zip / Postal code
- Available on: Product discounts
- Operators: is any of, excludes
- Purpose: Match the shopper's shipping zip or postal code
- Input: Type each code, or paste a list. Commas and new lines both split a paste into separate codes, so a spreadsheet column pastes straight in.
- Example: Zip / Postal code is any of [380015, 380016]
This one needs a one-time setup on your checkout. Until that is done the discount saves normally and then never applies to any order. Section 2.6 covers what to expect, and section 2.7 is the technical reference.
ELIGIBLE CONDITIONS
The "Eligible" condition is a unique and powerful feature that intelligently scans your discount conditions to determine which items or amounts qualify, then applies discount logic based on those eligible items only — regardless of other items in the cart.
2.5.1 Conditions available on Product discounts
Product discounts do not get every condition in the list above. These 17 are the complete set a Product discount can use.
Two shorthands are used in the table. Number operators means is greater than, is greater or equal to, is less than, is less or equal to, is equal to and is not equal to. Text operators means is equal to, is not equal to, starts with, ends with, contains, does not contain and matches regex.
| Condition | Group in the picker | Operators |
|---|---|---|
| Collections | Product | is any of, is all of, excludes |
| Tags | Product | is any of, is all of, excludes |
| Product type | Product | is any of, excludes |
| Item | Product Variant | is any of, excludes |
| SKU | Product Variant | Text operators |
| Price | Product Variant | Number operators |
| Sub total | Cart | Number operators |
| Total quantity | Cart | Number operators |
| Quantity | Cartline | Number operators |
| Amount | Cartline | Number operators |
| Attribute | Cartline | contains, does not contain, is equal to, is not equal to, matches regex |
| Zip / Postal code | Shipping Address | is any of, excludes |
| Tags | Customer | is any of, is all of, excludes |
| Number of orders | Customer | Number operators, plus on every nth order |
| Log in status | Customer | True, False |
| Customer is B2B | Customer | True, False |
| Eligible quantity | Eligible | is greater than, is less than, is equal to, above threshold, below threshold |
Not available on Product discounts:
- Vendor and Customer spent (Lifetime spent). Both still work on Order, Shipping, Buy X Get Y and Tiered discounts. For Product discounts, use Collections, Tags or Product type in place of Vendor.
- Weight, Total weight, Customer email, Customer accepts marketing and Discount code used. These remain available on the other discount types.
2.6 Zip / Postal code discounts
A Product discount can match the shopper's shipping zip or postal code. Pick Zip / Postal code from the Shipping Address group in the condition list, choose is any of or excludes, then enter the codes.
Read this before you build one. Shopify does not pass the shipping address on to Checkout Boost. Your checkout has to send it, and that is a one-time technical setup. Until it is in place, a discount with a zip code condition saves normally and then never applies to any order.
You will see a warning in the app the moment you pick this condition. It links to the setup guide. If the setup is not done yet, contact Checkout Boost support and we will help you get it in place.
How codes are matched
- The match is exact. Spaces at the start and end are trimmed and case is ignored. Nothing else is changed.
- 10001 will not match 10001-1234. If you need both forms, list both.
- SW1A 1AA will not match sw1a1aa. The space matters. Again, list both forms if you need both.
- No wildcards and no prefixes. 380* is not a zip code and the app will refuse to save it. List the codes you want.
- Allowed characters: letters, numbers, spaces and hyphens. Anything else is rejected when you save, and the message names the entry that is wrong.
- An empty list is refused. You cannot save a zip condition with no codes in it.
Business Rule: "15% off T-shirts for Ahmedabad shoppers, but not the 380001 area"
GROUP 1 - "all conditions" (AND)
├─ Collections is any of [T-shirts]
├─ Zip / Postal code is any of [380015, 380016, 380052]
└─ Zip / Postal code excludes [380001]
Results:
✅ T-shirt, shipping to 380015 → QUALIFIES
❌ T-shirt, shipping to 380001 → REJECTED (excluded)
❌ T-shirt, shipping to 400001 → REJECTED (not in the list)
❌ T-shirt, no address entered yet → REJECTED (no zip known yet)
What the shopper sees
- The discount appears a moment late. Shopify works out the price before the shopper has entered their address, so the first price they see has no zip discount in it. It appears once they enter their shipping address. This is expected.
- No address means no discount, including on excludes. A rule like "10% off everywhere except 380001" gives nothing at all until an address is entered.
- Local pickup and digital-only carts never qualify. They have no shipping address, so there is no zip to match.
- Apple Pay and Google Pay do not get zip discounts. Shopify does not support this on those checkouts. There is no way around it.
Getting it set up
Contact Checkout Boost support and mention zip code discount setup. We will walk you through it and can share working example code.
Section 2.7 is the technical reference for the change itself.
It is a one-time change. Once it is live, every zip code discount you build from then on works with no further setup.
2.7 Zip code discount setup
This section is the technical reference for the change itself. Everything above here is the guide to using the condition.
Checkout Boost can apply a discount based on the shopper's shipping zip or postal code. Shopify does not pass the shipping address to the discount function, so the checkout needs to send it. This is a one-time change.
Until this is in place, a discount with a zip code condition will save normally in Checkout Boost and then never apply to any order.
What needs to be built
A Shopify checkout UI extension that writes the shopper's shipping zip into a cart metafield.
| Field | Value |
|---|---|
| Namespace | checkout_boost |
| Key | shipping_address |
| Type | json |
| Value | {"zip": "380015"} |
The namespace must be exactly checkout_boost, with no prefix. Do not use your app's own reserved namespace.
Write it with applyMetafieldChange and the updateCartMetafield change type, from a checkout target that renders once the shopper has entered a shipping address.
The metafield holds the shipping address, so zip sits at the top level. We only read zip. Any other address fields you put in the object are ignored today, so you can include them now and they will keep working.
Five things that will catch you out
1. Check the cart instruction before every write. Read instructions.metafields.canSetCartMetafields and skip the write when it is false. Read it reactively, not once at mount, because instruction values change between checkout steps.
Write only when the shipping address has actually changed, and only once per change. Shopify rate-limits an extension that writes too often, and once that happens the extension cannot make any further changes for the rest of the shopper's session.
That is not limited to the zip. It blocks every metafield write your extension makes.
This is the mistake that costs the most and it fails silently.
3. The namespace must be public. Shopify disabled cross-app access to app-reserved namespaces in May 2025. A metafield written under your app's reserved namespace is invisible to Checkout Boost. Use plain checkout_boost.
4. Apple Pay and Google Pay block the write. Cart metafield changes are not available on accelerated checkout. Shoppers using those methods will not get zip code discounts, and there is no way around it.
5. The first price the shopper sees will not include the discount. Shopify prices the checkout before any extension code runs, so the discount engine sees no zip on its first pass and applies nothing. The discount appears a moment after the address is entered. This is expected. Build for it rather than trying to race it.
Reading the shipping address
Use useShippingAddress(). It needs level 2 protected customer data approval for your app, which is a setting in your Partner Dashboard, not an API scope.
Without that approval the hook throws, it does not return null. Do not wrap it in a try/catch. Check Boolean(useApi().shippingAddress) first and skip the write when it is absent.
Will this contract change?
No. We only ever add to it. Further shipping address fields may appear inside the object over time. zip will never be renamed or removed, so anything you build against it keeps working.
Still stuck?
Contact Checkout Boost support and mention zip code discount setup. We can share working example code.
2.8 Condition Behavior Notes
Important Technical Details:
- Dynamic Dropdowns: Second dropdown options depend on first dropdown selection
- Multiple Selections: Most conditions allow selecting multiple values (e.g., multiple collections)
- Modals for Selection: Collections, Tags, Vendors, Customers open selection modals
- Text Input: SKU, Email accept direct text input
- Pasting Lists: Zip / Postal code splits a paste on commas and new lines. Every other text condition splits on new lines only, because a tag or a vendor name can legitimately contain a comma.
- Zip Codes Match Exactly: No wildcards, no prefixes, no ZIP+4 shortening. See section 2.6.
- Numeric Input: Price, Weight, Subtotal, Quantity require numeric values only
- All Conditions Work Together: Product, cart, and customer conditions can be combined in the same group
3. DISCOUNT VALUE OPTIONS
3.1 Overview
he Discount Value section defines HOW MUCH discount customers receive.
Availability by Discount Type:
| Discount Value Type | Product Discount | Buy X Get Y | Order Discount | Shipping Discount |
|---|---|---|---|---|
| Percentage | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
| Amount Off | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
| New Price | ✅ Yes | ✅ Yes | ❌ No | ❌ No |
Why New Price is Limited:
- Order Discount focuses on final order total, not individual product prices
- Shipping Discount focuses on shipping cost, not product prices
3.2 PERCENTAGE
Description: Gives a percentage off discount from the selling price or order total.
Availability: ALL discount types (Product, BXGY, Order, Shipping)
How It Works:
- Calculates discount as percentage of original price
- Deducts calculated amount from price
- Proportional - higher priced items get larger discount amounts
Final Price = Original Price - (Original Price × Percentage/100)
Original Price: $100
Discount Value: 10%
Calculation: $100 - ($100 × 10%) = $100 - $10
Final Price: $90
$50 item, 20% off → $50 - $10 = $40
$200 item, 20% off → $200 - $40 = $160
$25 item, 15% off → $25 - $3.75 = $21.25
Real-World Use Cases:
- Seasonal sales: "15% off Summer Collection"
- Member discounts: "20% off for VIP members"
- Category sales: "25% off all electronics"
- Flash sales: "30% off for 24 hours"
- Order discounts: "10% off entire order"
- Shipping discounts: "50% off shipping"
UI Elements:
- Input field: Enter percentage value (e.g., 10, 15, 25)
- Unit display: Shows "%" symbol
- Details preview: "15% off on eligible items"
3.3 AMOUNT OFF
Description: A flat deduction from the price. Fixed dollar amount regardless of original price.
Availability: ALL discount types (Product, BXGY, Order, Shipping)
How It Works:
- Subtracts fixed dollar amount from original price
- Same discount value applies to all qualifying items
- Shopify prevents negative prices - minimum final price is $0
Final Price = Original Price - Fixed Amount
(Minimum = $0, never negative)
Original Price: $100
Discount Value: $20 off
Calculation: $100 - $20
Final Price: $80
$150 item, $30 off → $120
$50 item, $30 off → $20
$25 item, $30 off → $0 (not -$5!)
Original Price: $15
Discount Value: $20 off
Calculation: $15 - $20 = -$5
Actual Result: $0 (NOT negative)
✅ CONFIRMED: Shopify automatically prevents prices from going below $0
Real-World Use Cases:
- Welcome discounts: "$10 off your first order"
- Cart threshold rewards: "$20 off orders over $100"
- Fixed savings: "$5 off any purchase"
- Coupon codes: "Use SAVE15 for $15 off"
- Flat shipping: "$5 off shipping"
- Subscription discounts: "$25 off annual plan"
UI Elements:
- Input field: Enter dollar amount (e.g., 5, 10, 20)
- Unit display: Shows "$" symbol (or store currency)
- Details preview: "$20 off on eligible items"
3.4 NEW PRICE
Description: Completely overwrites the original price and defines a new fixed price for ALL qualifying products.
Availability: ONLY Product Discount & Buy X Get Y
- ❌ NOT available in Order Discount
- ❌ NOT available in Shipping Discount
How It Works:
- Replaces original product price entirely
- ALL products meeting conditions get this exact price
- Ignores individual product pricing completely
Works with ALL conditions - if you select 3 collections, all items in all 3 collections get the new price
Final Price = New Price (regardless of Original Price)
Condition: Products in "Clearance" collection
New Price: $8
Product A Original: $10 → New Price: $8
Product B Original: $15 → New Price: $8
Product C Original: $25 → New Price: $8
Product D Original: $50 → New Price: $8
All products now cost exactly $8
Condition: Products in "Collection 1" OR "Collection 2" OR "Collection 3"
New Price: $12
Result: Every product in all 3 collections becomes $12
Important Behavior:
- ✅ Works with ALL conditions
- ✅ Multiple collections = all get same new price
- ✅ Overrides all original pricing
- ✅ Very powerful for uniform pricing strategies
Real-World Use Cases:
- Clearance sales: "All clearance items now $5"
- Uniform pricing events: "Everything in store $9.99"
- Liquidation sales: "All marked items $1"
- Bulk bins pricing: "All items in this collection $12"
- Outlet store pricing: "Entire outlet collection $19"
- BXGY deals: "Buy 2, get 3rd for $1"
UI Elements:
- Input field: Enter new price (e.g., 5, 9.99, 19)
- Unit display: Shows "$" symbol (or store currency)
- Details preview: "New price: $8 for eligible items"
"Use Compare At Price" Checkbox
Full Label: "Use compare at price (fallback to sell price)"
Purpose: Determines which price point to use as the basis for calculating percentage/amount off discounts.
Does NOT apply to: New Price (since it replaces price entirely)
Shopify Price Structure:
- Compare At Price: Original MSRP or "strikethrough" price (shown crossed out to customers)
- Sell Price: Current selling price (may already be on sale/discounted)
Behavior:
☐ UNCHECKED (Default):
- Discount calculated from current "Sell Price"
- Standard discount calculation
- Most common scenario
☑ CHECKED:
- Discount calculated from "Compare At Price" (original/MSRP)
- Falls back to Sell Price if Compare At Price is not set on product
- Shows larger discount amounts to customers
- Better for marketing/perception
Product: Designer Jeans
Compare At Price (MSRP): $150
Current Sell Price: $100
Discount: 20% off
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SCENARIO A: Checkbox UNCHECKED (Default)
├─ Discount calculated from: $100 (Sell Price)
├─ Discount amount: $100 × 20% = $20
├─ Final price: $100 - $20 = $80
└─ Customer saves: $20
SCENARIO B: Checkbox CHECKED
├─ Discount calculated from: $150 (Compare At Price)
├─ Discount amount: $150 × 20% = $30
├─ Final price: $150 - $30 = $120
└─ Customer saves: $30 (larger discount amount!)
When to Use CHECKED:
- Stacking discounts on already-discounted items
- Showing deeper discount percentages for marketing appeal
- During sales where compare-at prices are prominently displayed
- Protecting margins while offering attractive discount numbers
- Products with MSRP significantly higher than sell price
When to Use UNCHECKED:
- Standard discount calculations
- When you don't use compare-at pricing on products
- Simple, straightforward discounts
- Most typical use case (default)
- New product launches without previous pricing
3.6 Discount Value Comparison Table
| Feature | Percentage | Amount Off | New Price |
|---|---|---|---|
| Calculation | % of price | Fixed $ off | Replace price |
| Input Example | 15 | 20 | 50 |
| $100 Item Result | $85 | $80 | $50 |
| $50 Item Result | $42.50 | $30 | $50 |
| $20 Item Result | $17 | $0 (capped) | $50 |
| $200 Item Result | $170 | $180 | $50 |
| Best For | Proportional sales | Flat savings | Uniform pricing |
| Availability | All types | All types | Product & BXGY only |
| With Conditions | ✓ Works | ✓ Works | ✓ All items same price |
| Compare At Price | ✓ Applies | ✓ Applies | ✗ N/A |
4. ELIGIBILITY SETTINGS
4.1 Overview
The Eligibility section determines WHO can use the discount.
Purpose: Control which customers can see and apply the discount.
4.2 Eligibility Options
☑ All customers (Default)
- Discount available to everyone (logged in and guests)
- No restrictions on who can use it
- Most common option for public promotions
- Use for: General sales, public promotions, seasonal discounts
☐ Specific customer segments
- Target pre-created customer segments from Shopify
- How It Works: Customer segments are created in the Shopify admin separately, then selected here
- Selection Method: Choose from dropdown of existing segments
- Segments Must Exist: Cannot create new segments from discount page
Use Cases:
- VIP members segment
- Wholesale customers segment
- High-value customers segment (e.g., spent > $1000)
- Geographic segments (e.g., "California Customers")
- Behavioral segments (e.g., "Repeat Buyers", "Abandoned Cart")
- Email subscribers segment
- Loyalty program tiers
Eligibility: Specific customer segments
Selected Segment: "VIP Members"
Result: Only customers in the VIP Members segment can use discount
☐ Specific customers
- Target individual customers by email address
- How It Works: Enter specific email addresses (fixed emails)
- Input Method: Text input field for email addresses
- Format: Comma-separated or one per line
Use Cases:
- Personal thank-you discounts
- Customer service recovery/apology discounts
- Individual B2B client pricing
- Employee discounts
- Friend & family discounts
- Influencer/affiliate codes for specific people
- Beta tester rewards
Eligibility: Specific customers
Emails: john@example.com, sarah@example.com, mike@company.com
Result: Only these three email addresses can use the discount
4.3 Eligibility Examples
Eligibility: All customers
Discount: 20% off Summer Collection
Result: Anyone can use it
Eligibility: Specific customer segments
Segment: "VIP Members" (pre-created in Shopify)
Discount: 30% off entire store
Result: Only VIP segment members see and can use discount
Eligibility: Specific customers
Email: complainant@email.com
Discount: 50% off next order
Result: Only this specific customer can use the code
5. MAXIMUM DISCOUNT USES
5.1 Overview
Control how many times a discount can be used (total across all customers and per individual customer).
Purpose: Prevent abuse, control budget, create scarcity, limit exposure.
5.2 Usage Limit Options
Limit number of times this discount can be used in total
Purpose: Set a maximum total number of redemptions across ALL customers
How It Works:
- Enter a numeric value (e.g., 100, 500, 1000)
- Discount automatically deactivates after reaching the limit
- Counter tracks total uses across all customers
- Cannot be reused once limit is reached
Limit: 100 uses total
Scenario: Flash sale "First 100 customers get 50% off"
✅Customer 1 uses code (99 remaining)
✅Customer 2 uses code (98 remaining)
✅Customer 3 uses code (97 remaining)
...
✅Customer 100 uses code (0 remaining)
❌Customer 101 tries to use code (DISCOUNT DEACTIVATED)
Use Cases:
- Limited quantity promotions ("First 50 orders")
- Flash sales with caps
- Budget-controlled campaigns
- Scarcity marketing tactics
- Inventory liquidation limits
- Test campaigns with controlled exposure
Important Notes:
- Deactivation is automatic
- Once limit reached, discount code becomes invalid
- No manual reactivation of count
- Useful for managing promotional budgets
Limit to one use per customer
Purpose: Prevent individual customers from using the same discount code multiple times
How It Works:
- Each customer (identified by email address/account) can only use the code once
- Applies regardless of how many separate orders they place
- Tracked by customer email/account
- Prevents discount abuse and repeat usage
Customer A: john@example.com
✅First order (Nov 1): Uses code WELCOME10 | Success → Saves $10
❌Second order (Nov 5): Tries code WELCOME10 | Already used
❌Third order (Nov 10): Tries code WELCOME10 | Still rejected
Result: Customer A cannot use WELCOME10 again, ever
Use Cases:
- Welcome/first-time customer discounts
- One-time incentives
- New customer acquisition codes
- Referral codes (one use per referee)
- Birthday/anniversary discounts
- Account activation rewards
- Preventing serial discount abuse
Important Notes:
- Tracked by customer email/account
- Guest checkouts: tracked by email entered
- Cannot be reset for individual customers
- Permanent one-time use restriction
Limit the discount amount
Purpose: Set a maximum dollar cap on the discount value to protect margins
How It Works:
- Enter maximum discount amount (e.g., $200, $50, $100)
- Discount calculation stops at the cap, even if percentage/amount would be higher
- Protects profit margins on large orders
- Customer still gets discount, just capped at maximum
Actual Discount = MIN(Calculated Discount, Discount Cap)
Order Total: $600
Discount: 50% off
Calculated Discount: $600 × 50% = $300
Discount Cap: $200
Actual Discount Applied: $200 (capped)
Final Order Total: $600 - $200 = $400
Customer saves: $200 (not $300)
Order Total: $300
Discount: 50% off
Calculated Discount: $300 × 50% = $150
Discount Cap: $200
Actual Discount Applied: $150 (below cap, no restriction)
Final Order Total: $300 - $150 = $150
Customer saves: $150 (full discount)
Discount: 30% off | Cap: $100
✅ Order $200 → 30% = $60 off → Applied: $60 (below cap ✓)
✅ Order $300 → 30% = $90 off → Applied: $90 (below cap ✓)
❌ Order $400 → 30% = $120 off → Applied: $100 (capped ✗)
❌ Order $500 → 30% = $150 off → Applied: $100 (capped ✗)
Use Cases:
- Protecting margins on high-value percentage discounts
- Budget control for open-ended promotions
- Wholesale pricing with maximum discount caps
- VIP discounts with reasonable limits
- Percentage discounts that scale too much on large orders
- Tiered discount strategies
Without cap:
Order $10,000 × 50% = $5,000 discount (huge loss!)
With $500 cap:
Order $10,000 × 50% = capped at $500 discount (controlled)
Important Notes:
- Cap applies AFTER discount calculation
- Cap is in dollar amount (not percentage)
- Customers see the capped discount applied
- Useful for generous percentages that could get expensive
5.3 Combining Usage Limits
You can enable multiple limits simultaneously:
Limit number of times: 200 uses total
Limit to one use per customer: Yes
Limit the discount amount: $150 cap
Result:
- Maximum 200 total redemptions
- Each customer can only use it once
- No single order gets more than $150 off
Eligibility: Specific customer segments
Segment: "VIP Members" (pre-created in Shopify)
Discount: 30% off entire store
Result: Only VIP segment members see and can use discount
Eligibility: Specific customers
Email: complainant@email.com
Discount: 50% off next order
Result: Only this specific customer can use the code
6. APPLIES ON (PURCHASE TYPE)
6.1 Overview
Determines what type of purchases the discount applies to: one-time purchases, subscriptions, or both.
Purpose: Control whether discount works for regular purchases, recurring subscriptions, or both scenarios.
6.2 Purchase Type Options
Applies on one time purchase (Default)
- Discount applies to regular, one-time product purchases
- Standard checkout flow
- No recurring billing involved
- Most common scenario
Use Cases:
- Regular product sales
- Standard promotions
- One-time purchase discounts
- Traditional e-commerce
Applies on subscription
- Discount applies ONLY to subscription products
- Products with recurring billing
- Requires subscription functionality enabled in store
Use Cases:
- Recurring product promotions
- Subscription plan incentives
- Monthly/annual subscription discounts
Product: Monthly Coffee Subscription ($30/month)
Discount: 20% off subscription
Result: First payment $24, subsequent payments depend on settings
Both
- Discount applies to BOTH one-time purchases AND subscriptions
- Most flexible option
- Works regardless of purchase type
- Customer can use for either scenario
Use Cases:
- Store-wide promotions
- Customer acquisition campaigns
- Flexible discount codes
- Mixed product catalogs (some regular, some subscription)
Code: SAVE20
Applies to: Both
✅ Customer A buys regular product → 20% off
✅ Customer B subscribes to monthly plan → 20% off
6.3 Subscription Discount Behavior
Important Notes:
- Subscription discounts may apply to first payment only, or recurring (depends on discount settings)
- Requires native/compatible subscription app installed
- Check with subscription app for specific behavior
7 Real-World Example
7.1 Real-World Example: ORANGE100 Discount
Business Requirement:
"Create a discount for Orange collection products, minimum cart total $100, 10% off"
STEP 1: Navigate to Discount Creation
- Go to: Shopify Admin → The Checkout app → Discounts
- Click: "Create discount" button
- Select: "Product discount" from the modal
Discount Type: Product discount
Method: Discount code (customers enter at checkout)
Discount Code: ORANGE100
Discount Value Type: Percentage
Value: 10
Unit Display: %
Use compare at price: UNCHECKED (use sell price)
Preview: "10% off on eligible items"
STEP 4: Discount Conditions
BETWEEN GROUPS: "all conditions" (AND)
GROUP 1 - "all conditions" (AND)
├─ Collections is any of [Orange]
└─ Sub total is greater or equal to 100
Conditions:
• Product's collections is any of 1 items
AND
• Cart's sub total is greater or equal to 100
Scenario A: Customer adds Orange item ($80) to cart
→ Cart total: $80
→ Code ORANGE100: ✗ REJECTED (cart below $100)
Scenario B: Customer adds Orange item ($120) to cart
→ Cart total: $120
→ Code ORANGE100: ✓ APPLIED
→ Discount: $120 × 10% = $12 off
→ Final total: $108
Scenario C: Customer adds Blue item ($150) to cart
→ Cart total: $150
→ Code ORANGE100: ✗ REJECTED (wrong collection)
Scenario D: Customer adds Orange item ($80) + Blue item ($30)
→ Cart total: $110
→ Code ORANGE100: ✓ APPLIED (cart > $100)
→ Discount: Only Orange item discounted
→ Orange: $80 × 10% = $8 off
→ Blue: No discount
→ Final total: $102
7.2 Additional Example Scenarios
Code: VIP50
Type: Product discount
Value: 50% off
Conditions:
- Customer tags is any of [VIP]
- Collections is any of [New Arrivals]
Eligibility: All customers (but condition filters for VIP tag)
Max Uses:
- Total: 100 uses
- Per customer: 1 use only
- Amount cap: $200
Active: Nov 15 9:00 AM - Nov 15 11:59 PM
Combinations: Can combine with shipping discounts
Result: VIP customers get 50% off new arrivals (max $200 off), first 100 uses, one per person, one day only, can combine with free shipping
Code: OUTFIT25
Type: Product discount
Value: 25% off
Conditions (Multiple Groups with AND):
GROUP 1 (any conditions - OR within):
- Collections is any of [T-shirts]
- Collections is any of [Pants]
AND
GROUP 2 (any conditions - OR within):
- Collections is any of [Shoes]
- Collections is any of [Accessories]
Eligibility: All customers
Max Uses: Unlimited
Active: Ongoing
Combinations: Cannot stack
Result: Buy (T-shirt OR Pants) AND (Shoes OR Accessories) get 25% off entire cart
Code: WELCOME10
Type: Order discount
Value: $10 off
Conditions:
- Sub total is greater or equal to 50
- Customer ordered is equal to 0 (first order)
Eligibility: All customers
Max Uses:
- Per customer: 1 use only
Active: Ongoing
Combinations: Cannot stack
Result: First-time customers get $10 off orders over $50, one-time use
Code: CLEAR5
Type: Product discount
Value: New Price = $5
Conditions:
- Collections is any of [Clearance]
Eligibility: All customers
Max Uses:
- Total: 500 uses
Active: Until inventory cleared
Combinations: Cannot stack
Result: All clearance items become $5 each, regardless of original price, first 500 customers
8. ADVANCED TIPS & BEST PRACTICES
8.1 Condition Strategy Tips
✅ Start Simple, Add Complexity
- Begin with single group, basic conditions
- Test thoroughly
- Add additional conditions/groups only if needed
- Don't over-complicate unnecessarily
✅ Use Descriptive Discount Codes
- SUMMER20 (clear meaning: summer, 20% off)
- FREESHIP50 (free shipping, $50 minimum)
- VIP30 (VIP customers, 30% off)
- Avoid cryptic codes like XJ4K9P
✅ Test Before Launch
- Create discount in advance
- Test with real cart scenarios
- Verify conditions work as expected
- Check customer experience on frontend
- Test edge cases (minimum cart, wrong collections, etc.)
✅ Document Your Discounts
- Keep spreadsheet of active codes
- Note start/end dates
- Track performance metrics
- Document intended use cases
8.2 Common Mistakes to Avoid
Wrong:
GROUP 1: Collections is any of [Orange]
AND
GROUP 2: Sub total >= 100
Correct (simpler):
GROUP 1:
├─ Collections is any of [Orange]
└─ Sub total >= 100
Problem: "I want discount on T-shirts but sale items still getting discount"
Solution: Add exclusion condition
├─ Collections is any of [T-shirts]
└─ Collections excludes [Sale]
Problem: "Too many products qualifying"
→ Check if you used OR when you meant AND
Problem: "No products qualifying"
→ Check if you used AND when you meant OR
Problem: "Forgot to turn off flash sale, ran for weeks"
Solution: Always set end date for time-limited promotions
☑ Set end date
End: 2025-11-20 11:59 PM
Problem: "Customer used 3 discounts, got 80% off, lost money"
Solution: Control combination settings carefully
- Only allow necessary stacking (e.g., shipping)
- Monitor deeply discounted orders
- Set discount amount caps if using percentages
8.3 Performance Optimization
Efficient Condition Setup:
- Use fewer conditions when possible
- Avoid overly complex multi-group structures
- Collections are faster than SKU lists
- Customer segments better than individual emails (for large lists)
Monitoring:
- Track discount usage regularly
- Watch for abuse patterns
- Monitor profit margins on discounted orders
- Review effectiveness of conditions
8.4 Customer Experience Best Practices
Clear Communication:
- State requirements clearly (e.g., "ORANGE100: 10% off Orange collection, min $100")
- Show discount code prominently
- Explain restrictions upfront
- Display savings clearly at checkout
Error Handling:
- When discount fails, customer sees error message
- Common errors:
- "Cart total below minimum"
- "Products not eligible"
- "Discount expired"
- "Already used"
Good: "Save 20% on Summer Collection with code SUMMER20 (min $50)"
Bad: "Use code XK49P for discount"
Good: "First 100 customers get 50% off - code FLASH50"
Bad: "Limited time offer - code available"
8.5 Discount Strategy by Goal
Strategy: Welcome discounts
Code: WELCOME10
Value: $10 off or 10% off
Conditions: First order (Customer ordered = 0)
Limit: One per customer
Strategy: Threshold discounts
Code: SAVE20
Value: $20 off
Conditions: Sub total >= 100
Purpose: Encourage customers to add more items
Strategy: Deep discounts or new price
Code: CLEAR5
Value: New price $5 or 70% off
Conditions: Clearance collection
Limit: Total uses to match inventory
Strategy: VIP/Loyalty discounts
Code: VIP25
Value: 25% off
Conditions: Customer tags = VIP
Eligibility: Specific segment
Strategy: Bundle requirements
Code: COMPLETE15
Value: 15% off
Conditions: Must buy from 2+ categories
Structure: Multiple groups with AND
8.6 Seasonal Campaign Planning
High discount values (30-50% off)
Strict time limits (24-48 hours)
Total usage caps for budget control
Allow shipping discount stacking
Heavy promotion required
Moderate discounts (15-25% off)
Longer duration (1-2 weeks)
Gift-with-purchase bundles
Free shipping included
Very high discounts (50-70% off)
Very short duration (hours)
Strict total usage limits
Heavy scarcity messaging
Quick decision-making incentive
Lower discounts (5-15% off)
No end date
Segment-specific (VIP, Email subscribers)
Focus on loyalty and retention
8.7 Troubleshooting Guide
Problem: Discount not applying
Check:
- Is discount active? (check active dates)
- Does customer meet eligibility? (segment/email)
- Do cart items match conditions? (collections, price, etc.)
- Is cart total above minimum? (sub total condition)
- Has customer already used it? (one-use-per-customer limit)
- Has total usage limit been reached?
- Is discount expired?
Problem: Wrong products getting discount
Check:
- Condition logic (AND vs OR)
- Missing exclusion conditions
- Collection assignments on products
- Multiple groups logic (between groups)
Problem: Discount too generous
Solutions:
- Add discount amount cap
- Add minimum cart requirements
- Reduce percentage/amount
- Add more restrictive conditions
- Limit total usage
Problem: Not enough redemptions
Solutions:
- Simplify conditions (too restrictive?)
- Increase discount value
- Improve communication/marketing
- Extend timeframe
- Broaden eligibility
- Allow more combinations
8.8 Analytics & Tracking
Metrics to Monitor:
- Total redemptions
- Revenue per discount code
- Average order value with discount
- Discount amount given
- New vs returning customers
- Conversion rate with discount
- Profit margin impact
Regular Reviews:
- Weekly: Check usage of active campaigns
- Monthly: Analyze discount ROI
- Quarterly: Review overall discount strategy
- Annually: Plan seasonal campaigns