Starting a flash sale is easy. Anyone can drop a price at 9am. The part that trips people up is the end.

Because a sale is never just one change. It is a price, a banner across the top of the store, and usually a "Sale" collection you built to show it all off. Turning those on takes five minutes. Turning them off, cleanly, at the exact minute the sale should stop? That is where stores leave money on the table or leave a dead banner up for two days.

This is about the end. Let's be precise about what Shopify does on its own and what it doesn't.

What Shopify ends by itself, and what it doesn't

Here is the honest breakdown, because getting this wrong is how sales run long.

Scheduled discounts do expire on their own. Both code discounts and automatic discounts have a start and an end date and time you set right in the admin. Shopify turns them on and off for you. You do not need an app for that part, and you do not need Shopify Plus. If your entire sale is one automatic discount, the native scheduler already handles it.

A price you edited by hand does not roll back. If you opened a product and typed a new number into the price field, that number stays until you change it back. There is no native scheduled price change in Shopify. The discount is the native way to schedule a temporary markdown. A raw price edit is permanent until you undo it.

An announcement bar does not turn itself off. Shopify has no native scheduling for the banner across the top of your store. You edit the theme by hand to put it up, and you edit the theme by hand to take it down.

A sale collection does not unpublish on a schedule. Products have a scheduled availability date picker. Collections do not have the equivalent built-in scheduler. There is no native "unpublish this collection Friday at midnight" setting. You publish it and unpublish it manually.

Note

Native scheduled discounts and product publishing run on your store's timezone, set under Settings > General. Shopify does not localize the launch time per customer. If your sale should end at midnight for you, that is the clock it uses.

So the native discount scheduler covers one piece. The banner, the manual price, and the collection are all still sitting there waiting for you to clean them up by hand. That is the gap.

The manual way, and why it hurts

Run a two-day flash sale the manual way and here is the actual list at the end:

  1. Turn the announcement bar off in the theme editor.
  2. Undo any prices you edited by hand back to their originals.
  3. Unpublish or empty the sale collection so it stops showing.
  4. Confirm the discount actually expired.

None of that is hard. It is just that it lands at a specific time, often a bad one, and if you miss it the sale keeps running or the store looks broken. Being at the keyboard at midnight to switch off a banner is not a good use of a founder's night.

Run the whole sale as one automation with an end time

This is the fix. Instead of scheduling four separate things and babysitting the shutdown, you build one automation that flips the sale on, and an end time that flips it back off.

Schedule It runs store changes on a timer, server-side, at an exact date and time. A flash sale is a natural fit because it chains several actions into one event:

  • Publish and tag the products into your sale collection at go-live so shoppers land somewhere. If your sale collection runs on tag rules, adding the tag fills it.
  • Apply the discount or drop the price. You can schedule a percent or fixed price change, or schedule and stack discounts as one timed combo.
  • Turn the announcement bar on with no theme code, through the app embed block.

Then you set the end time. When the sale is over, the automation reverts to the previous state automatically. The price goes back. The banner switches off. The change rolls back to exactly what it was before, without you touching anything.

That is the point. One event on. One end time off. You set it once and walk away.

Tip

If you run the same flash sale every month or every holiday, save it as a reusable template. Load it, change the two dates, schedule. You are not rebuilding the whole thing from scratch each time.

What "auto-revert" actually means

Auto-revert is the difference between a discount that expires and a sale that ends. Set an end time on a price change and the app writes the original value back for you at that minute. Same for the announcement bar and the product tags that filled your sale collection. You are not trusting yourself to remember. The server does it. For a deeper look at just the price side, see how to auto-revert a sale price on Shopify.

Make sure it fired

Automation is only worth anything if you can trust it ran. Every automation keeps full execution logs with status, timestamp, and the Shopify request id. If a Shopify call hits a transient error, it retries on its own, up to 20 times. You can send email alerts to as many as ten people on completion, failure, or revert. So the midnight shutoff happens whether or not you are watching, and you get a note that it did.

If you want to see the rest of what runs on a timer, the Features page lists every action. And if you are stacking the discount side of things, how to schedule discount launches goes deeper on the timing.

Three steps. No code. No waiting at the keyboard.