Key takeaways
- On Shopify, Price is what the customer pays; Compare-at price holds the original price and must be higher for the sale to display.
- Sale prices are set per variant, so every size and color you put on sale needs its own compare-at price.
- For a collection or the whole store, a product CSV lets you copy prices into Compare-at price and calculate sale prices with one formula.
- Plan the end before the start: keep the original prices, then move them back into Price and clear Compare-at price when the sale is over.
- Discount codes and automatic discounts apply in the cart and at checkout; by themselves they don't put a crossed-out price on product pages.
How does a sale price work on Shopify?
A Shopify sale is two numbers on each variant. Price is what the customer pays. Compare-at price is the original price you show next to it. When the compare-at price is higher than the price, your theme can show both on product and collection pages, often with a Sale badge (Shopify's sale price guide).
So putting an item on sale means moving its current price into Compare-at price and entering the lower price in Price. A $40 hoodie at 25% off gets a compare-at price of $40.00 and a price of $30.00. The formula is: sale price = original price × (1 − discount % ÷ 100). The discount calculator also works backward, if you start from a target sale price and want the percentage.
Nothing in that setup ends the sale on its own. When the sale is over, you move the original price back into Price and clear the compare-at price. Keep that in mind when you choose a method below, because the way back is as much work as the way in.
How do you put one product on sale?
For a single product, the product page in your Shopify admin is quickest. Prices are stored per variant, so a product with sizes or colors needs the compare-at price on every variant you want on sale. Shopify also lets you bulk edit several variants of one product at once. These are the desktop steps:
- In your Shopify admin, go to Products and open the product.
- If the product has variants, open the variant you want to change from the Variants section.
- In the price section, click Compare at to show the Compare-at price field.
- Enter the original price in Compare-at price.
- Enter the sale price in Price.
- Click Save, then open the product on your storefront to check that both prices show.
How do you put a collection on sale?
For a collection of a few dozen products, use the bulk editor. The order of the steps matters: record each original price in Compare-at price before you overwrite Price, or you lose it.
If a variant already has a compare-at price from an earlier sale, check that it's still a genuine former price before you reuse it. An old reference left over from last season is one of the most common ways stores end up advertising a discount that isn't real.
- Go to Products and narrow the list to the products in the sale with search and filters.
- Select them and click Bulk edit.
- Click Columns and add Price and Compare-at price.
- For each variant, enter the current price in Compare-at price. Drag a cell's fill handle to copy a value down when several variants share it.
- Enter the sale price in Price for each variant.
- Click Save, then check a few products and the collection page on your storefront.
How do you put the whole store on sale?
Store-wide, a CSV file is faster and less error-prone than typing, because two spreadsheet steps do all the work. In Shopify's current template the columns are Price and Compare-at price; older files call them Variant Price and Variant Compare At Price. Export first and keep one untouched copy as your backup and your way back.
If you don't need crossed-out prices on product pages, an automatic discount on all products is the other native route. The next section compares the two.
- Go to Products, click Export, choose All products and a CSV format.
- In a working copy, copy the Price values into Compare-at price, except on rows that already have a higher compare-at price you want to keep.
- In a helper column, multiply each compare-at value by 0.8 for 20% off and round to 2 decimals, then paste the results into Price as values.
- Don't sort the sheet, and leave the other columns as exported. With overwrite selected, a blank cell replaces the existing value.
- Go to Products, click Import, select Overwrite products with matching handles, review the summary and click Import products.
- Check a product with variants and a collection page on your storefront.
Should you use a sale price or a discount?
Shopify has three native ways to lower what a shopper pays, and they show the saving in different places. Automatic discounts are applied in the cart and at checkout, and discount codes are entered at checkout (discount methods). To show discount savings as crossed-out prices on product pages, Shopify says you need a third-party discount app or a Shopify Partner.
Use sale prices when you want shoppers to see the offer while they browse. Use discounts when the offer depends on conditions, such as a minimum order, or should reach only people who have a code. Our guide to sale pricing vs discount codes covers the trade-offs in depth.
| Question | Sale price (compare-at) | Automatic discount | Discount code |
|---|---|---|---|
| Where the saving shows | Product and collection pages, as your theme displays it | Cart and checkout | Checkout, after the code is entered |
| Who gets it | Every shopper who sees the product | Every order that meets the conditions | Shoppers who have the code |
| Start and end | You change the prices when the sale starts and ends | Active dates: a start date and an optional end date | Active dates: a start date and an optional end date |
| Good for | Visible sales on chosen products, clearance, seasonal events | Store-wide or threshold offers without editing prices | Email, influencer and targeted offers |
How do you end a sale and restore the original prices?
Ending a compare-at sale is the reverse of starting one: put the original price back in Price, then clear Compare-at price. Clear the field rather than typing 0.00. Shopify's troubleshooting advice treats a 0.00 compare-at price differently from an empty field, and mixed values across variants can stop collection pages from showing sales correctly.
If you used a CSV, re-importing your untouched export with overwrite selected puts every price and compare-at price back as it was. Only do that if nobody changed prices during the sale, because the import also overwrites newer edits, such as a price correction a colleague made last week.
Timing is the hard part. A sale that ends hours late sells at the wrong price, and one that ends early annoys people who saw the ad. If you run sales often, a tool that saves the original prices and restores them at a set time takes that job off your calendar. Our guide to undoing bulk price changes compares the restore options.
How do you schedule a sale with Sale Scheduler by SalePilot?
Sale Scheduler by SalePilot handles the start, the end and the restore as one sale. It changes catalog prices and compare-at prices, so shoppers see a normal Shopify sale, and it saves each variant's previous price and compare-at price before anything changes.
When the sale ends, the restore skips any variant whose price was changed somewhere else during the sale, so a newer price isn't overwritten. The sale scheduler page covers timing and restore in detail. The steps:
- Name the sale, then choose Decrease price, by percent or by amount. Add a price ending such as .99 if you use one.
- Set the compare-at action to Set compare-at price to original price, so the pre-sale price becomes the crossed-out one.
- Choose the products: all products, collections, products, specific variants, or one advanced condition such as a tag or vendor. Add one exclusion type if needed.
- Choose Schedule start and end. Pick the start date and time, then an end date and time or a duration.
- Review every variant's before and after price. Only Ready rows are applied; Warning and Skipped rows are not.
- Click Schedule this sale. Prices change at the start time, usually within about a minute, and the previous prices are restored automatically when the sale ends.
What should you check before a sale goes live?
A few checks catch most sale problems before shoppers do. Run them on a sample of products the day before, not the hour before:
- Margin: at 25% off, a $40 product with a $16 cost earns $14 instead of $24. Make sure the sale price still covers cost, fees and shipping.
- Variants: every variant in the sale has a compare-at price higher than its price, or none at all.
- Theme display: check a product page and a collection page, on desktop and on mobile.
- Markets: fixed prices in a market catalog override your admin price and compare-at price, so shoppers in that market may not see the sale.
- Messaging: ads, emails and banners match the real discount and end date.
Use a genuine reference price. In many places a compare-at or "was" price must be a price you actually charged, and in the European Economic Area an announced price reduction must show the lowest price you charged in the previous 30 days or more (Shopify's summary). This isn't legal advice; check the rules where you sell.