Shopify sale prices and discount codes can both lower what a customer pays, but they do it at different layers of the buying journey.
A sale price changes the product's current price and can show a higher compare-at price on product and collection pages. A discount code or automatic discount is evaluated as a discount and appears in cart or checkout according to the offer and theme. If you use both without a plan, the storefront can imply one saving while checkout calculates another.

Shopify sale prices vs discount codes: key differences
| Method | Where configured | Product-page display | Checkout behavior | Best for |
|---|---|---|---|---|
| Sale price + compare-at price | Product or variant pricing | Theme can show original and sale price | Sale price is the item price | Merchandising a visible markdown |
| Automatic discount | Discounts or app | Theme may need app/widget support | Applies when conditions are met | Low-friction promotions |
| Discount code | Discounts or app | Usually promoted with copy | Shopper enters code; checkout validates it | Controlled distribution and attribution |
Shopify defines a sale price by setting Price to the lower selling price and Compare-at price to the higher original value. Only the sale price is shown at checkout. Review Shopify's sale pricing guide for current instructions.
How compare-at pricing works
For a product normally priced at $80 and on sale for $60:
- Price: $60
- Compare-at price: $80
The compare-at value must be higher than the price for the sale treatment to display. Your theme decides where and how the original value, strikethrough, badge, or percentage appears.
Compare-at price is merchandising data, not a discount code. At checkout, Shopify treats $60 as the product price.
What happens when a discount applies to a sale-priced item?
Unless the discount excludes the item or another rule prevents it, the discount can be calculated from the current sale price.
Example:
- Compare-at price: $80
- Current price: $60
- Additional code: 10% off
- Checkout item price after code: $54
The customer saves $26 compared with the compare-at value, but the code itself creates only $6 of that saving. This distinction matters in campaign claims and margin calculations.
Do not advertise “10% off the original price” if the code actually applies 10% to the current $60 price.
When to use sale prices
Sale prices are a strong fit when:
- The lower price should be visible before cart
- A collection or product group is being marked down
- Customers should not need a code
- Merchandising badges and sorting should reflect the promotion
- The lower price is the active selling price for the campaign
They are less suitable when the offer is customer-specific, requires complex cart conditions, or needs code-level attribution.
When to use discount codes
Discount codes work well when:
- The offer belongs to a channel, partner, or customer group
- You need maximum-use or one-use-per-customer limits
- The discount should activate only after minimum requirements
- The campaign needs a memorable redemption mechanic
- You want the regular product price to remain unchanged
Codes add a step and can spread beyond their intended audience. Use eligibility and usage controls instead of relying on secrecy.
When to use automatic discounts
Automatic discounts are useful when the rule should apply without shopper action. They are a strong option for cart goals, product quantities, and broad limited-time promotions.
The tradeoff is visibility. Shopify notes that discounts requiring a code and automatic discounts show crossed-out savings at checkout, while product and collection pages need theme support, a third-party app, or custom work to show those discount savings there.
If the promotion matters before checkout, provide accurate product-page, cart, or widget messaging.
Compare-at pricing and discount messaging
Avoid presenting the same saving twice.
Bad example:
25% sale + save 10% today
This can be read as 35% off even though sequential discounts produce a different result.
Better example:
Now $60, regularly $80. Apply VIP10 for an additional 10% off eligible sale items.
State whether the extra discount applies to sale items and what exclusions exist.
Protect your margin before stacking a markdown and discount
Calculate the economics from the actual selling price.
| Item | Amount |
|---|---|
| Compare-at price | $80 |
| Sale price | $60 |
| Additional 10% discount | -$6 |
| Customer pays | $54 |
| Product and fulfillment cost | $38 |
| Contribution before other costs | $16 |
The “original” $80 does not fund the order. The $54 paid does.
Test returns as well. Support and finance should understand how the discount was allocated and what amount is refundable.
International pricing and compare-at prices
Markets can add another layer. Shopify notes that fixed prices can override prices and compare-at prices configured in admin, and market-specific sale prices may require CSV imports.
Merchants selling into the European Economic Area should also review applicable price-reduction rules. Shopify's European Price Indication Directive guidance explains tools for displaying the lowest prior price and controlling compare-at visibility by market. This is operational guidance, not legal advice; confirm obligations for your markets.
Common problems and fixes
Compare-at price does not show on collection pages
Review variant consistency. Shopify notes that blank, zero, or conflicting compare-at values across variants can prevent a collection card from displaying a product as on sale.
Checkout shows only the sale price
That is expected: the sale price is the product price at checkout. The compare-at value is not a separate checkout discount.
The code applies to sale items unexpectedly
Review product scope and exclusions, then test a cart with regular-price and sale-price items.
The storefront and checkout show different savings
Check theme calculations, selected variant, market price, discount eligibility, and combinations. Treat checkout as the source of truth.
Customers expect discounts to add arithmetically
Explain sequential discounts with the final price rather than adding percentages together.
Where Multiscount fits
Multiscount helps Shopify merchants create automatic product-volume, order-goal, gift, and shipping discounts with conditions and tiers. Customizable widgets can make an eligible reward or next threshold visible on the storefront.
Use product and variant pricing for true sale prices and compare-at merchandising. Use Multiscount when the offer depends on quantity, cart value, gifts, shipping, or multiple promotion conditions. Test sale-priced products explicitly so the displayed message matches the checkout calculation.
For help choosing the discount value itself, compare fixed-amount and percentage discounts on Shopify.
Promotion setup checklist
- [ ] Sale price and compare-at price are valid on every variant
- [ ] Product and collection display is tested in the live theme
- [ ] Sale-item eligibility is explicit
- [ ] Discount calculations use the current price
- [ ] Combination rules are tested
- [ ] Market-specific prices are checked
- [ ] Customer-facing copy distinguishes markdown from extra discount
- [ ] Final price and margin are approved
Choose the method that matches the shopper experience
Use sale prices when the lower price should become the visible product price. Use codes for controlled redemption. Use automatic discounts when qualification should be frictionless.
When a campaign needs quantity tiers, cart goals, shipping rewards, or visible progress, explore Multiscount and test the complete experience against any existing sale prices.
Install Now