Instilus

How to schedule a Shopify sale that ends automatically

Shopify can schedule a discount. It cannot schedule a price. That one distinction is the whole problem, and it is why so many stores end up with someone setting an alarm for midnight.

Why a scheduled discount is not a scheduled sale

Discount codes and automatic discounts both take start and end dates, and they genuinely switch themselves off. But in most themes they apply in the cart and at checkout, not on the product page. The product still shows its full price, with no strikethrough and no sale badge, because nothing about the product has changed.

A visible sale price means changing the product price itself and setting compare-at price to the old one. And Shopify has no way to schedule that.

Option 1: automatic discounts

Right when a checkout discount is enough — a site-wide percentage off, a spend threshold, a bundle.

Option 2: change prices by hand

Set compare-at price to the current price, lower the price, then reverse both when the sale ends.

This works for a handful of products. It does not work for a catalogue.

Option 3: Shopify Flow

Flow can run work on a schedule, so in principle a timed price change is the kind of thing it is for. Two caveats before you plan around it: there is no native “price changed” trigger, so a price sale built on Flow means fetching products on a timer and setting values; and which triggers and actions you actually have depends on your plan. Worth opening Flow in your own admin and checking what is available to you before committing to it.

Flow also does not solve the part that matters most. It can set a price. It does not record what the price was first, and it does not read the value back afterwards to confirm it landed.

Option 4: an app that schedules price changes

This is what the category exists for. An app can record every original price, apply the sale at the start time, and restore each price at the end time with nobody watching.

They are not all the same, and two questions separate the ones that can be undone cleanly from the ones that cannot:

  1. Does it save the original values before it changes anything? If the originals are only inferred from compare-at price, then anything with an existing compare-at price comes back wrong.
  2. Does it read each price back after writing it? Shopify’s API can accept a write and not apply it. An app that counts the write as done reports a successful sale that did not fully happen, and you find out from a customer.

Whichever route you take

  1. Export the affected products to CSV before anything changes. One minute, and it is your only guaranteed way back.
  2. Set compare-at price, not just a lower price, or shoppers cannot see that it is a sale.
  3. Check a product page on the storefront after the sale starts, not just the admin.
  4. Check again after it ends. The end is the half that gets skipped, and a sale price left running is a discount you did not budget for.
  5. Watch anything downstream that reads your prices — product feeds, marketplace listings, and any app caching product data — because they can lag behind both the start and the end.
Putback — Run store-wide and scheduled sales that always put every original price back, with one-click undo.
Free plan, no time limit. Pro $19 a month.
Install Putback free on the Shopify App Store →

Common questions

Can Shopify schedule a sale price that ends automatically?

Shopify can schedule a discount, not a price. Discount codes and automatic discounts take start and end dates and switch themselves off, but in most themes they apply only in the cart and at checkout, so the product page still shows the full price. A visible sale price means changing the product price itself, which Shopify cannot schedule.

Why does my scheduled discount not show as a sale price on the product page?

Because nothing about the product has changed. The discount is applied to the cart, not to the product record, so there is no lower price and no strikethrough for a browsing shopper to see. It converts people who were already buying rather than catching people who needed a reason.

Can Shopify Flow schedule a price change?

Flow can run work on a schedule, but there is no native price-changed trigger, so a price sale built on Flow means fetching products on a timer and setting values, and which triggers and actions you have depends on your plan. It also does not record what the price was beforehand or read the value back afterwards to confirm it landed.

What should I check before running a timed sale?

Export the affected products to CSV first, because Shopify keeps no price history and that export is your only guaranteed way back. Set compare-at price as well as the lower price, or shoppers cannot see it is a sale. Then check a real storefront product page after the sale starts, and again after it ends.

What separates a sale app that can be undone cleanly from one that cannot?

Two things. Whether it saves the original values before it changes anything, rather than inferring them from compare-at price, which comes back wrong on any product that already had one. And whether it reads each price back after writing it, because Shopify's API can accept a write without applying it, and an app that counts the write as done reports a sale that did not fully happen.

Which part of a timed sale goes wrong most often?

The end. Starting a sale is deliberate and gets checked; ending it is unattended. A sale price left running past its end date is an unbudgeted discount, and without a record of the original prices there is no reliable way to put them back.

Read next

Instilus apps · Built by Instilus, a trading name of A Star Supply.