Ecom Store Pro

How to Put Products on Sale on Shopify and End It Cleanly

Put Shopify products on sale with compare-at prices, automatic discounts or a Rollouts Event, show it in your store, and end the sale with nothing left behind.

Listen to a short brief of this article
Hands-free while you multitask

The short version

To put a product on sale, enter the new price in Price and the old price in Compare-at price, then click Save.

Shoppers can then see both prices on product and collection pages, while checkout shows only the sale price.

An automatic discount with an end date stops by itself, but shoppers see its saving only in the cart and at checkout unless you add an app or a custom build.

To end a compare-at sale, put Price back and clear Compare-at price rather than entering $0.00, and export the old prices to a CSV before you start.

The Quick Verdict
Key Takeaway: Use compare-at prices to show old prices before the cart, and an automatic discount when checkout savings suffice and the sale should end itself. On Basic or higher, a Rollouts Event schedules a discount or a market's catalog, saved as Draft; on Plus, Launchpad changes prices at the start and end of an event.

Find your situation; the sections below hold the steps and what each route leaves behind.

Which way to run the sale, by situation

Your situationPickWhy
Shoppers should see the old price crossed out before the cartCompare-at priceBoth prices can show on product and collection pages; you end it by hand
The sale must switch off by itself, and savings at checkout are enoughAutomatic discount with an end dateCheckout always crosses out discount savings; product pages need an app or a custom build for that
Crossed-out prices and a fixed end, on Basic or higherCatalog in a Rollouts EventA market's catalog, saved as Draft and set to Active in the Event, carries its own compare-at prices and goes back to Draft at the end date; first confirm your market can take one
You are on Plus and run dated sale eventsLaunchpadIt changes prices at the start and end of an event
Discount rules with crossed-out prices on product pagesA third-party discount app or a custom buildShopify's sale-pricing help names these two routes

What Does Each Sale Method Show the Shopper?

Key takeaway

Shopify gives you two ways to lower a price, and they look different to a shopper well before checkout. A compare-at price is a display field on the product: Price holds what the shopper pays and Compare-at price holds the old value. An automatic discount takes money off in the cart and at checkout, and the product keeps its regular price on the page.

Compare-at price and automatic discount, side by side
What you are checkingCompare-at priceAutomatic discount
Product and collection pagesBoth prices can show: the sale price and the crossed-out old price.The regular price. Crossed-out savings here need a third-party discount app or a custom build.
CheckoutOnly the sale price.Savings always show with a crossed-out price. The discount also applies in the cart.
Its own end dateYou end it by editing the fields, or you use a scheduled route below.Yes: click Set end date in the discount.
Who runs the displayYour theme decides whether sale prices show on the storefront, and where.Checkout shows it on its own; product and collection pages need an app or custom build.
Discounts in reportsNot part of it. Shopify's finances report says discounts aren't related to compare-at prices.Reported. Sales by discount codes groups sales under the automatic discount's name.
POSProduct details show the compare-at price, and a printed receipt can show or hide it.Applies on POS only where you turn it on in the discount, for POS Pro locations.

Shopify Help Center pages on sale pricing, discounts, sales and finances reports, POS product details and printed receipts, read November 2026.

Two product cards on a store page in the Horizon theme
The compare-at product shows a struck price and Sale badge; the one under an automatic discount looks unchanged.

Your theme runs the compare-at side. It controls whether sale prices show on your storefront and where, as Shopify's sale-pricing page puts it. It doesn't control how they appear on AI channels such as ChatGPT and Microsoft Copilot, which find products through Shopify Catalog.

If you want a discount's saving crossed out before the cart, the same page names two routes:

To display savings from discounts with crossed-out (strikethrough) prices on product pages and collection pages, you need to use a third-party discount app, or hire a Shopify Partner to build a custom solution for you.
Shopify Help Center — Setting sale prices for products ·

Which Route Fits Your Sale?

The verdict at the top answers by what the shopper should see. This quiz answers by combination: your plan, the display you want, how the sale ends, your markets and how many products are involved. It returns one route, with its tool, its setup and how it ends.

Which sale route fits your store?Five questions, then a tool, a setup and a way to end the sale.
Which sale route fits your store?Five questions, then a tool, a setup and a way to end the sale.
Question 1 of 5
Which Shopify plan is your store on?

How to Set a Sale Price on One Product

Key takeaway
  1. From your Shopify admin, go to Products.
  2. Click the product that you want to edit.
  3. To edit a variant, go through the Variants section, as described under Products with variants.
  4. In the Price section, click Compare at, enter the original price in Compare-at price, and enter the new price in Price.
  5. Click Save.
In Shopify adminOpen in your store
  1. Products
  2. Product
Step 4: the Compare-at chip sits beside Price; the old price goes there and must be the higher one.

Here is the worked example, taken from Shopify's own help page: you sell seasonal t-shirts for $30 and put last season's designs on sale for $10. Price becomes $10, Compare-at price becomes $30, and your theme shows both alongside a sale badge. When the sale ends, the same t-shirt goes back to Price $30 with an empty Compare-at field, as covered under ending a sale.

Filled in both fields and still see no crossed-out price? Start with why the compare-at price isn't showing.

Products with variants

Key takeaway

Shopify's help sends you from the Variants section, through a link it writes as XX variants, to the variant, where the same Compare at control sits in the Price section. In the admin state shown below, the table on the product page has a Price column but no Compare-at column, so the old price goes in on the variant's own page, or in the bulk editor for several variants at once.

This step may look different on your store. As of November 2026, Shopify's changelog says variant management now lives in the product page, with Plus stores to be opted in automatically on December 12, 2026 and the rollout to all merchants to begin gradually in December.

In Shopify adminOpen in your store
  1. Products
  2. Product
  3. Variants
The Variants table edits Price per variant; there is no Compare-at column to fill in here.
In Shopify adminOpen in your store
  1. Products
  2. Product
  3. Variant
On the variant's own page, the Compare at control sits in the Price card.

Consistency matters more than it looks, because a collection card shows what applies to all of a product's variants. Shopify's help spells out the failure:

If some variants have compare-at prices that are inconsistent (such as some variants having a compare-at price of $0.00 USD, or some being empty, or different values across variants), then the collection page won't display the product as being on sale, even if individual variants are.
Shopify Help Center — Setting sale prices for products ·

The video below is a third-party demonstration from Ecommerce TV by Nick, published in 2022, so its screens are older than the ones above. It shows the same rule for Price and Compare-at price, but its description ends a sale by setting Compare-at price to 0; clear the field instead, as covered under ending a sale.

Shopify: How to Set Sale Prices for Products with VariantsA third-party demonstration from Ecommerce TV by Nick, published in August 2022. The admin screens have changed since, so check the steps against the text above.

For adding options, or editing many variants together, see our product variants guide.

What to enter as the old price

Key takeaway

A compare-at price tells shoppers the product used to cost more, so the number has to be true. The FTC's pricing guides describe the false version:

If, on the other hand, the former price being advertised is not bona fide but fictitious—for example, where an artificial, inflated price was established for the purpose of enabling the subsequent offer of a large reduction—the “bargain” being advertised is a false one; the purchaser is not receiving the unusual value he expects.
US Federal Trade Commission — 16 CFR Part 233, Guides Against Deceptive Pricing ·

Two sets of rules are worth checking before you fill in the field. This is a starting point rather than legal advice, so check the rules in each place you sell:

  • United States. The same FTC guides say a former price is a legitimate basis for a comparison when it is the actual, bona fide price at which the article was offered to the public on a regular basis for a reasonably substantial period of time.
  • European Union. An announced price reduction must indicate the prior price, meaning the lowest price you applied during a period not shorter than 30 days before the reduction; member states can set different rules for goods that deteriorate or expire rapidly, allow a shorter period for products on the market for less than 30 days, and, when a reduction is progressively increased, take the prior price as the price before the first reduction. Shopify's steps for a primary market in the EEA tell you to enter that lowest price in the Compare-at price field.
Lowering prices more than once every 30 days

The same Shopify page says that if you offer price reductions more than once every 30 days, you should consider editing your theme to add a statement on each discounted product page, showing both the regular selling price and the lowest prior price. Shopify links that step to its theme editor help, and the same page describes metafields as another way to display the lowest prior price.

Planning the old prices for a Black Friday sale? The BFCM checklist covers what to check before you show a “was” price.

How to Mark Down Many Products at Once

Key takeaway

Start with an export. Before you touch a price, export the products going on sale to a CSV (Products > Export) and keep that file: it is your record of what every price goes back to. Then use the bulk editor:

  1. From Products, use the checkboxes to select the products, then click Bulk edit.
  2. Click Columns and select the compare-at price property if it isn't in the table.
  3. Type the new price in the price column, labelled Base price in the frame below and price in Shopify's help, and the old price under Compare-at price.
  4. Click Save. If errors appear, fix them and click Save again.
In Shopify adminOpen in your store
  1. Products
  2. Bulk edit
Step 3: each row is a product or variant; type the new price under Base price and the old one under Compare-at.

Choosing the products and the columns is covered in depth in how to use the bulk editor.

For a permanent price change rather than a sale, including a rise by a percentage, see how to change prices in bulk.

Using a CSV

Key takeaway

In a Product CSV, the Compare-at price column takes the original price of the variant, as a monetary value without a currency symbol. The new price goes in Price.

To import, go to Products, click Import, then Add file. In our test admin as of November 9, 2026, Overwrite products with matching handles appeared in the dialog only after we chose the file. Without that option, products whose handle matches an existing product are ignored during the import. With it selected, a blank in any non-required column overwrites the matching value as blank.

In Shopify adminOpen in your store
  1. Products
  2. Import
Tick Overwrite to change existing products; with it ticked, a blank non-required cell overwrites the value as blank.

Before you run that import, read what an Overwrite import replaces.

Can Shopify Start and End a Sale on Its Own?

Key takeaway

Three routes carry documented dates, and they differ in what they move and what comes back at the end. Read the last column first: it decides how much cleaning up you still do.

Routes that start and stop a sale
RoutePlanWhat it schedulesWhat happens at the end
Automatic discount with an end dateOn POS, only where you turn it on in the discount, for POS Pro locationsThe discount's own start and end datesThe discount stops on its end date.
Rollouts Event with a discount changeBasic or higherActivates or deactivates discounts you already created, for customers in the rolloutThe change rolls back. The discount also keeps its own active dates, which apply independently.
Rollouts Event with a catalog changeBasic or higherSets a catalog to Active or Draft, which publishes or withdraws its prices and product availabilityThe catalog goes back to the status saved on it, so a catalog saved as Draft is withdrawn and one saved as Active stays published. Its current prices apply, not a copy from the start. POS and feeds return on their next sync.
LaunchpadPlus onlyChanges product pricing at the start and end of an eventRegular and compare-at prices change back to their values before the event.

Shopify Help Center pages on amount off discounts, rollout types, rollout requirements and Launchpad, read November 2026.

One Shopify page reaches further, and it disagrees with another on whether a CSV can schedule a price. Shopify's overview of determining pricing, read November 9, 2026, lists “scheduling price changes for future dates” under CSV import and export and gives no steps. The CSV reference we read lists no date column, as of November 9, 2026.

While those two disagree, don't plan a sale around a dated CSV. Use a route from the table, or run the import yourself on the day the sale starts.

Automatic discount with an end date

Key takeaway
  1. From your Shopify admin, go to Discounts and click Create discount.
  2. Choose Amount off products or Amount off orders.
  3. Under Method, select Automatic discount, then enter a title.
  4. Enter the discount value and, for amount off products, choose the products or collections under Applies to.
  5. Optional: to offer the discount at your retail locations, select the option Shopify's help calls Also offer on Point of Sale (POS Pro locations only).
  6. In Schedule, which Shopify's help page calls Active dates, set the start date, click Set end date and choose when the discount ends.
  7. Click Save.
In Shopify adminOpen in your store
  1. Discounts
  2. Create discount
  3. Amount off products
Step 6: with Method on Automatic discount, the end date sits in the Schedule section.

Automatic discounts apply on all the sales channels you have set up except POS, where you turn them on in the discount, and only for locations with a POS Pro subscription.

How to Create Automatic DiscountsShopify Academy's walk-through of creating an automatic discount in the admin, published in September 2023, so its screens are older than the steps above.

The same form sets minimums and combinations, and our discounts guide covers every discount type and what each does to your margin.

A Rollouts Event

Key takeaway

A rollout is a scheduled set of changes, and rollouts are available on the Basic plan or higher. Of the 3 rollout types, the Event is the one for a sale: it publishes your changes for a set period, rolls them back when the rollout ends, and requires an end date.

Pick the type on purpose. A Launch applies its changes permanently at the scheduled time and can't be reverted after it ends, and the third type, Experiment, needs Grow or higher.

In Shopify adminOpen in your store
  1. Markets
  2. Rollouts
  3. Create rollout
Set the type to Event, pick both dates, then use Add changes to attach the discount or the catalog.

A discount change activates or deactivates discounts that already exist, so create the discount first. One rollout can hold up to 250 discounts, and a discount can be part of only one unended rollout at a time. Shopify's help says a rollout's eligible markets are determined by the changes you add, so you can't select them, and a catalog change reaches the markets its catalog is assigned to; the same page lets you apply theme edits to specific markets if you have more than one. Shopify's March 2026 changelog post puts market-specific targeting of a rollout on Advanced and Plus, without saying whether that covers discount or catalog changes.

For crossed-out prices on a schedule, use a catalog change instead. A market's catalog can carry its own Compare-at price per product. Its Price adjustment also moves compare-at prices by default, so toggle off Include compare-at price when you want to type the old prices yourself.

In Shopify adminOpen in your store
  1. Markets
  2. Catalogs
  3. Your catalog
To type old prices yourself, turn off Include compare-at price, then use the Compare at price column.

Four things decide whether that catalog does what you expect:

  • It needs a market. A rollout's catalog change isn't displayed to any customers until the catalog is assigned to at least one market. Shopify's help says Markets doesn't use a primary market: your home country or region sits in a domestic market that Shopify creates with the store, and a catalog is assigned to a market. Before you build on this route, open a new catalog, click Add a market and confirm your market is listed.
  • It is saved as Draft. When an Event ends, the catalog uses the status that's saved on it. A catalog saved as Active publishes its prices as soon as you save it and stays published after the Event, so save it as Draft and let the Event set it to Active.
  • It needs 100% of visitors to reach other channels. A rollout that publishes catalog changes to 100% of visitors updates your online store and, depending on the catalog's markets and sales channels, places such as POS and Google.
  • It doesn't restore a copy. A rollout changes only whether the catalog is active or draft, and edits you make while it runs stay in place.

A seasonal sale is the use Shopify itself gives for this type:

You can create an Event for a time-sensitive change, such as a seasonal sale.
Shopify Help Center — Rollout types ·

Running a Black Friday campaign, with a theme change in the same rollout? The BFCM checklist covers that in how to schedule the whole sale.

Launchpad, on Plus only

Key takeaway

Launchpad is available only to stores on Shopify Plus. Its considerations page holds four points that change how you plan the sale:

  • Compare-at during the event. If your products have compare-at prices, those values change to the regular, pre-sale prices for the duration of the event. Both prices change back when it ends.
  • Percentages. All percentage discounts in an event apply to the regular prices of a product, not the compare-at prices.
  • Discount codes. Customers can use discount codes during a Launchpad event, so stacking is yours to plan for.
  • Edits during the event. If you edit a product's price during an event, it returns to its pre-event price when the event ends, and you can't edit the event's details after it starts.

How to Show the Sale in Your Store

Key takeaway

Prices alone don't lead anyone to a sale. On Basic or higher, build the collection first, because the banner and the menu item both point at it.

A Sale collection that fills itself

Key takeaway

Collections aren't part of the Starter plan, so this step needs Basic or higher.

  1. From your Shopify admin, go to Products > Collections, click Add collection and add a title.
  2. In the default Products source, click Add condition.
  3. Select Compare at price, then the operator is set.
  4. Read the products listed in the preview, then click Save.
In Shopify adminOpen in your store
  1. Products
  2. Collections
  3. Add collection
Step 3: the condition reads Compare at price is set, and the preview shows matches before you save.

Shopify's conditions page explains who gets in. For is set, its table says all variants must have a compare-at value, including 0, while another passage of the same page says to set $0.00 to exclude a product. A product with an empty compare-at value on any variant doesn't match is set, so clearing the field is the reliable way out.

If you mark down only some variants, is greater than 0 is the operator to try. Shopify's general rule for a Products source is that a condition is true if any variant matches, so a product with some variants marked down should qualify. Whether a variant at $0.00 counts is less clear: the conditions page's troubleshooting notes name is greater than 0.00 for finding products with a compare-at price set and say that includes zero, so read the preview before you rely on it.

The Sale badge in Horizon

Key takeaway

You don't place the badge by hand. Shopify's theme settings page says Sale badges are automatically added to your product images when you reduce the price. In the product card code of Horizon, version 4.4.0 as of November 9, 2026, the test is product.compare_at_price > product.price, which an automatic discount doesn't change.

Other themes can differ: the sale-pricing page only says your theme might add a badge with a message or percentage off to product listing and collection pages.

In Shopify adminOpen in your store
  1. Online Store
  2. Themes
  3. Customize
  4. Theme settings
  5. Badges
Theme settings > Badges holds the Sale badge's background and text colors.

Position and shape sit in the same panel, and our Sold out badge answer covers those controls.

Point shoppers at the collection with an announcement bar and a menu item: menu items are links to, among other things, collections, so the Sale collection can have its own entry.

What Else a Sale Touches

Key takeaway

None of these four needs a separate project, but each one can make a correct price look wrong somewhere you weren't watching.

Discount codes on top

A discount code can apply on top of a sale price, and Shopify's developer changelog lists preventing double discounting on sale prices among the uses of discount code rejection in Discount Function apps. No Help Center page we read offers an exclude-sale toggle, so if you don't want a code stacking, aim it at a collection without sale items.

Other markets and the EEA

Key takeaway

A market with fixed prices ignores what you enter on the product: fixed prices override prices and compare-at prices set in your Shopify admin. That market needs its own compare-at prices, in its catalog or by product CSV; in a product CSV, a fixed compare-at price needs a fixed price in that market. Shopify's sale-pricing page says fixed sale prices can't be created in the admin, while its catalogs page lets you set a Compare-at price per product in a catalog.

For the EEA, Shopify's own page disagrees with itself on what shoppers see when your primary market is outside the EEA. In one section of its Pricing Indication Directive page, read November 9, 2026, compare-at prices for those customers are “displayed by default”. In a later section of the same page, read the same day, they are “hidden by default”, and a 2022 changelog post also says they are no longer shown to EEA markets.

Don't assume either: read your own setting. In Markets, open a market that contains an EEA country, then under More Settings click Compare-at price and see whether Hide compare-at is selected. Do this for each such market.

If your primary market is in the EEA, the same page says the feature is always displayed, although Shopify's Markets help says Markets doesn't use a primary market, so read the setting either way.

In Shopify adminOpen in your store
  1. Markets
  2. Your EEA market
  3. Compare-at price
Open this dialog in each EEA market: the Hide compare-at box shows your own current state.

Google listings and feeds

Key takeaway

Google applies its own conditions before it shows a struck-through original price, and they read from your feed and your page rather than from your intentions:

What Google checks before it crosses out a price
ConditionWhat Google asksWho it applies to
Size of the discountGreater than 5% and less than 90%Strikethrough annotations on Google; meeting it doesn't guarantee the display
Base price history, listed countriesValid for 30 days within the past 200 days, not necessarily consecutiveCountries named on Google's page
Base price history, US5 days within the past 30 days or 15 days within the past 200 days, whichever is met first, not necessarily consecutiveUS Shopping ads; free listings in the US have no history condition
Original price on your pageLess prominent than the sale price: struck through, grayed out or otherwise shown as not currently activeStrikethrough annotations on Google
Sale price and datesMatches what your landing page and checkout show; a wrong start date or time zone shows an incorrect priceProducts sent with a sale price

Google Merchant Center Help pages on sale price annotations and the sale price attribute, read November 2026.

A price mismatch between your landing page and your data source may get the product disapproved. A scheduled sale adds one more gap: in an Experiment, or a rollout to less than 100% of visitors, your online store can display different prices than Google. Our Google Shopping guide covers the channel itself.

POS and reports

Key takeaway
  • POS product details. The details of a product on POS include the compare-at price, if applicable.
  • Printed receipts. Compare-at product price is among the line item details you can display or hide.
  • Automatic discounts at the register. Shopify's discount channel help says they apply on POS only if you turn that on in the discount, and only for locations with a POS Pro subscription.
  • The Discounts line. The sales report says discounts are created using discount codes, not the compare-at price, and the finances report says they aren't related to compare-at prices. Sales by discount codes groups sales by the discount's name, including an automatic discount's.
  • Gross sales. Shopify defines it as product price times quantity. Our reading is that a compare-at sale shows up there as a lower number, with nothing on the Discounts line.
  • Margin on a discount. In Shopify's separate example, a T-shirt with a $20 regular price and a $10 cost shows a 50% margin on the product page, and sold at $15 after a 25% discount it shows a 33% margin in the Gross profit by product report. That example is about discounts, so don't assume a compare-at sale reads the same way.
  • A report field for compare-at. Product variant compare at price holds the compare-at price of the variant at the time of its sale. In our test admin on November 9, 2026, the report editor listed it under Dimensions rather than metrics.
In Shopify adminOpen in your store
  1. Analytics
  2. Reports
  3. New exploration
Search compare at under Dimensions to add the field to a report; it isn't listed as a metric.

For the same Dimensions menu with another product attribute, see how to filter or group reports by product tags.

How to End a Sale With Nothing Left Behind

Key takeaway

Forgetting this part is the most visible mistake a sale can leave: the crossed-out price stays up for everyone. Start by finding your route:

What ends by itself and what stays with you
RouteWhat ends by itselfWhat stays with you
Compare-at on the productThe fields stay as you set them.Put Price back, clear Compare-at price, take the banner down.
Automatic discount with an end dateThe discount, on its end date.Take the banner down and decide about the menu item.
Rollouts EventThe discount or catalog change rolls back at the end date, and the catalog then uses the status saved on it: one saved as Draft is withdrawn, one saved as Active stays published.Allow for the next sync: until then POS and feeds can still display the published prices. Catalog edits made during the rollout stay in place.
LaunchpadRegular and compare-at prices change back.Handle discount codes yourself: Launchpad doesn't deactivate them. Take the banner down.

Shopify Help Center pages on rollout requirements, Launchpad and sale pricing, read November 2026.

For a compare-at sale, the job has four steps, on the product page, in the bulk editor or by CSV:

  1. Open the CSV you exported before the sale and find the old prices.
  2. Enter the old value in Price.
  3. Clear Compare-at price so the field is empty, on every variant.
  4. Click Save, and open the product and its collection to check.
In Shopify adminOpen in your store
  1. Products
  2. Product
Step 3: the Compare-at price field emptied, not set to 0.00; the grey 0.00 is only a placeholder.

For a long list, open the bulk editor again, put the old values back in the price column and clear Compare-at price. Or import the old prices with Overwrite selected and Compare-at price blank, after reading the CSV section.

Empty is not the same as $0.00

Shopify's pages pull in two directions here. The sale-pricing page, read November 9, 2026, says a compare-at price of $0.00 USD isn't the same as an empty one and tells you to clear the field for variants that shouldn't display it.

The conditions page, read the same day, says to set $0.00 to exclude a product from collections that use is set, while its own table says the is set value can be 0.

Clear the field. An empty value isn't recognized by compare-at conditions, so the product leaves the Sale collection, and you aren't relying on either reading of $0.00.

The same t-shirt now reads Price $30 with an empty Compare-at field. Then go through what surrounded the sale: in Horizon the badge goes with the compare-at price, and an emptied product drops out of a collection built on is set. Take the banner down.

Think before deleting the collection. Shopify's menu help warns that if you delete a collection used for an On sale menu item, both the collection and the menu item are deleted. Remove the menu item first, or keep the collection for the next sale.

If you sell through Google, check the listing too, since your feed and landing page have to agree again.

Run the Sale, Start to Finish

Key takeaway

Steps 2 and 8 are the ones that hurt when skipped, because without them nothing tells you what the prices were or that the sale is still running. On an automatic discount, step 3 means creating the discount and step 8 shrinks to the banner and menu item.

Step 5 changes too: with no compare-at values the condition finds nothing, so link the banner to the collection the discount applies to.

Shopify sale checklistTick each step as you finish it; your progress stays in this browser.

Shopify sale checklist

Tick each step as you finish it; your progress stays in this browser.

0 of 8 done
  1. Decide between a compare-at price, an automatic discount, a Rollouts Event and Launchpad from what shoppers should see and how the sale ends.

  2. Export the products to a CSV before you change a single price, and keep the file until the sale is over.

  3. Enter Price and Compare-at price on the product, in the bulk editor or in a CSV imported with Overwrite selected, or create the automatic discount with its dates.

  4. Confirm that each old price is a genuine former price, one you actually offered, and check it against the rules in each place you sell.

  5. On Basic or higher, create a collection with the condition Compare at price is set, and read which products the preview shows.

  6. Open one sale product as a shopper would, and follow it from its collection card to checkout.

  7. Point shoppers at the sale with an announcement bar and a menu item that links to the Sale collection.

  8. Put Price back, clear Compare-at price, take the banner down, and check the collection and your feeds.

The Bottom Line

Key takeaway

Filling in the two fields is the quick part. Most of the work on this page sits on either side of it: choosing the route that shows what you want, and getting back to clean prices afterwards.

Decide how the sale ends on the day you start it. Export the old prices before the first edit, then either let a discount date or an Event finish the job, with any catalog in it saved as Draft, or put the last day in your calendar and clear Compare-at price yourself.
Your Next Step by Stage
Price won't showBoth fields are filled in and no crossed-out price appears on your store.Why compare-at isn't showing
Planning a big salePreparing for Black Friday Cyber Monday, from the sale's setup to scheduling it.Open the BFCM checklist
Theme codeA sale badge, price block or lowest-price statement built in your theme, at $28 an hour after an estimate.See developer options

If Your Sale Display Needs Theme Code

For crossed-out discount prices Shopify's help names an app or a custom build, and for EEA sales with price cuts more than once every 30 days it suggests a theme edit showing the lowest prior price. We do that theme code work at $28 an hour, after an estimate. Prices, discounts and apps stay with you.

See theme development options

Frequently Asked Questions

Open the product in your admin, click Compare at in the Price section, enter the original price in Compare-at price and the new price in Price, then click Save. The compare-at value must be higher than Price for the sale price to display. Your theme then decides whether and where both prices appear.
Use a compare-at price when shoppers should see the old price on product and collection pages, and an automatic discount when cart and checkout savings are enough and you want a built-in end date. A compare-at sale ends when you edit the fields; for a schedule, use a market's catalog, saved as Draft, in a Rollouts Event (Basic or higher), or Launchpad on Plus.
Shopify's sale-pricing help says crossed-out savings from discounts on product and collection pages need a third-party discount app or a Shopify Partner's custom solution. At checkout, savings from automatic discounts and discount codes always show with a crossed-out price. If shoppers must see the old price earlier, use a compare-at price instead.
Yes, through three documented routes: an automatic discount with an end date, a Rollouts Event on Basic or higher, and Launchpad on Plus, which changes prices at both ends. On Basic or higher without Plus, Shopify's built-in way to schedule crossed-out prices is a market's catalog, saved as Draft, in a Rollouts Event; Starter has neither Rollouts nor Launchpad.
For a compare-at sale, put the old value back in Price, clear the Compare-at price field completely and click Save, on every variant. Don't type $0.00, because Shopify says that isn't the same as an empty field. Then check your Sale collection, take the banner down, and keep the collection while a menu item uses it.
No. Shopify's sale-pricing page says a compare-at price of $0.00 USD isn't the same as an empty one, and tells you to clear the field for variants that shouldn't show it. Its collection conditions page treats 0 as a value that matches is set, and elsewhere suggests $0.00 to exclude a product. Clear the field.
For collection pages, yes. Shopify's help says that when compare-at prices are inconsistent across variants, through $0.00 values, empty fields or different values, the collection page won't display the product as being on sale, even if individual variants are. The product page can look correct while the card doesn't, so check collection pages after you save.
On Basic or higher, create a collection under Products > Collections, and in its Products source add the condition Compare at price is set. A product joins once all of its variants have a compare-at value, and the preview shows the matches before you save. After the sale, clear compare-at values rather than setting them to $0.00, so those products drop out.
Yes, a code can apply on top of a sale price. No Help Center page we read offers an exclude-sale toggle, so aim the code at a collection without sale items instead. Launchpad events on Plus don't change that: Shopify says customers can use discount codes during a Launchpad event, so plan for it there too.
Enter a genuine former price, one you actually offered. US FTC guides treat a former price as legitimate when it was a bona fide price offered regularly for a reasonably substantial period. In the EU, an announced reduction must show your lowest price from a period of at least 30 days, and Shopify's EEA steps use that figure. Check local rules.
It can, if its conditions are met. Google's rules for the strikethrough include a discount greater than 5% and less than 90%, plus a base price history that depends on the country and the listing type. Meeting them doesn't guarantee the display. Your feed and landing page must also agree, since a mismatch may get the product disapproved.
No. Shopify's sales report says discounts are created using discount codes, not the compare-at price, and its finances report says discounts aren't related to compare-at prices. Our reading of the Gross sales formula is that a compare-at sale appears as lower Gross sales. Automatic discounts do appear, grouped by name in Sales by discount codes.
POS product details include the compare-at price when a product has one, and a printed receipt can display or hide it as a line item detail. Automatic discounts work differently: on POS they apply only where you turn them on in the discount, for POS Pro locations, so check your subscription before you plan an in-store sale around one.
Select the products, click Bulk edit, add the compare-at price column through Columns, enter both values and save. For longer lists, import a Product CSV with Overwrite products with matching handles selected, where a blank non-required cell overwrites the value as blank. Export first to keep the old prices. Smart Pricing suggests markdowns, but its help page says any price change is implemented by you.
About This Article
Shopify Developer & Editorial Director
9+ years with Shopify since 2017

Front-end developer specializing in Shopify since 2017. Experienced in building custom Liquid themes, optimizing storefront performance, and integrating third-party apps. Directs the editorial process behind Ecom Store Pro: sets its topics and the rules every AI-written page must pass before publication.

Some links in this article are affiliate links. If you sign up for a Shopify store through these links, we may earn a commission at no extra cost to you. Read our full advertising policy.

Continue Learning

What to Read Next

Stay updated

Get notified about new articles

Subscribe to receive updates when we publish new Shopify guides and insights.