Key takeaways
- A price you save in Shopify's product editor or bulk editor takes effect right away; the price field itself has no start or end date.
- Discount codes and automatic discounts have built-in active dates, which makes them the simplest native way to time a promotion, but shoppers see them in the cart and at checkout.
- Markets rollouts (Basic plan or higher) can activate a catalog or discounts for a set period and then roll them back; Launchpad can change product pricing at the start and end of an event, but only on Shopify Plus.
- Shopify Flow can run at a scheduled time, but it has no dedicated price action, so you build the price change, the revert and the record of old prices yourself.
- Sale Scheduler by SalePilot schedules a sale price's start and end and restores the saved previous prices automatically, within about one minute of the times you set.
Can you schedule a sale on Shopify without an app?
Partly. Shopify lets you schedule discounts, and it gives some plans tools to schedule catalogs and events, but the price on a product has no date attached. When you edit prices in the product editor or the bulk editor, the change is final when you click Save. If you want a lower price to appear on Friday at 6 p.m. and disappear on Sunday night, something has to make both changes at those times.
That something can be Shopify itself, if your sale fits one of its scheduling tools. It can be a person with an alarm, or it can be an app. The right choice comes down to one question: should shoppers see the reduced price on the product page with the old price crossed out, or is it enough for the discount to apply in the cart and at checkout?
Which ways to schedule a sale does Shopify offer?
Here is how the native options compare with doing it by hand and with an app. "Ends on its own" means nobody has to undo the change manually when the sale is over.
| Method | What it changes | Where shoppers see it | Ends on its own | Availability |
|---|---|---|---|---|
| Discount with active dates | Applies a code or automatic discount between a start and an end date | Cart and checkout | Yes, at the end date | Discounts page in the Shopify admin |
| Markets rollout (Event) | Sets a market catalog to Active or Draft, or activates discounts, for a set period | Catalog prices show in the markets the catalog is assigned to | Yes, the Event rolls back when it ends | Basic plan or higher |
| Launchpad event | Product pricing at the start and end of an event, plus publishing, inventory and theme changes | Wherever your theme shows prices | Yes, pricing changes at the start and end | Shopify Plus only |
| Shopify Flow workflow | Whatever Admin API mutation you configure | Depends on what the workflow changes | Only if you build a second workflow to revert | Basic, Grow, Advanced and Plus plans |
| Manual edit | Product price and compare-at price | Wherever your theme shows prices | No, someone changes it back | Any store |
| Sale scheduling app, such as Sale Scheduler by SalePilot | Product price and compare-at price | Wherever your theme shows prices | Yes, saved previous prices are restored | Shopify App Store |
How do you schedule a discount with start and end dates?
If a discount at checkout is enough, Shopify's own discounts are the quickest route. Every amount off discount has an Active dates section with a start date and an optional end date, and the start and end follow the time zone set in your Shopify admin (amount off discounts).
The trade-off is visibility. Shopify applies automatic discounts in the cart and at checkout, and shoppers type codes at checkout, so product pages keep showing the regular price unless your theme or an app adds a message. If you want the crossed-out price on the product page, you need a sale price instead. We compare the two in sale prices vs discount codes.
- From your Shopify admin, go to Discounts and click Create discount.
- Choose Amount off products, then choose whether it is a discount code or an automatic discount.
- Enter the value as a percentage or a fixed amount, and under Applies to pick the collections or products in the sale.
- Set Combinations on purpose, so the sale doesn't stack with codes you didn't plan for.
- In Active dates, set the start date and time, click Set end date, and set when it ends.
- Save, then test the discount in a cart once it becomes active.
How do rollouts, Launchpad and Flow schedule price changes?
Rollouts. In Markets, a rollout schedules changes to your theme, checkout, discounts or catalogs. An Event rollout publishes its changes for a set period and rolls them back when it ends. For prices, a rollout changes a catalog's status only: setting a catalog to Active publishes its prices, while edits to the catalog's prices are saved right away, so you prepare the catalog in Draft first. A catalog's prices apply to the markets it is assigned to, and your store's default prices stay as they are. Shopify lists rollouts as available on the Basic plan or higher (rollout requirements).
Launchpad. Shopify's Launchpad app can change product pricing at the start and end of an event, make products available on sales channels, raise inventory and schedule theme changes. It is available only to stores on the Shopify Plus plan (Launchpad).
Shopify Flow. Flow's Scheduled time trigger starts a workflow at a set date and time, once or on a repeating schedule (Scheduled time trigger). Flow has no dedicated action for changing a variant's price, so the change has to go through the Send Admin API request action. That means you write the price logic, a second workflow to put prices back, and a way to remember what the old prices were.
How do you schedule a sale price that restores itself?
If you want the reduced price and the crossed-out compare-at price on product pages, without Shopify Plus or a custom workflow, a sale scheduling app handles both ends of the job. Here is the process in Sale Scheduler by SalePilot, which changes product prices and compare-at prices (it does not create discount codes):
- Create a sale and choose how prices change, for example Decrease price by 20%, with the compare-at action Set compare-at to original price so the old price shows crossed out.
- Pick the products: all products, collections, products, specific variants, or one advanced condition such as a product tag, plus one type of exclusion if you need it.
- Check the preview. Every variant shows its price before and after, with a status of Ready, Warning or Skipped. No Shopify prices change at this step.
- Choose Schedule start and end. Set the start date and time, then set the end either as a date and time or as a duration.
- Confirm. At the start time the new prices go live, and at the end time the app restores the previous prices it saved, both within about one minute of the times you set.
A scheduled sale can't be edited before it starts. To change the prices, products or dates, delete it (that changes no prices) and create a new one. New prices are calculated when you review the sale, so do the same if you change regular prices on those products before the start.
What should you check before a scheduled sale goes live?
Most scheduled sales that go wrong fail on details, not on the scheduling tool. Run through this list a day before the start:
- Time zone. Shopify discounts and rollouts use the time zone from your Shopify admin settings. Sale Scheduler's one-time sales are entered in your browser's local time, and its recurring sales follow the shop's time zone. If your team works across time zones, write the deadline in the store's time zone everywhere.
- Compare-at price. Shopify only shows a sale when the compare-at price is higher than the price. Check a few variants, including ones that had no compare-at price before.
- Stacking. If discount codes can apply to sale items, a 20% sale plus a 10% code is 28% off, not 30%. Decide whether that's acceptable before the email goes out. The discount calculator does the math.
- Other price edits. Agree that nobody edits prices on sale products while the sale runs, and know what your tool does at the end if someone does.
- Ads and emails. Make sure every message uses the same end date and time as the schedule.
- Plan limits. Sale Scheduler checks your monthly allowance at the start time. If the sale would go over it, the sale is marked as failed and no prices change.
- A test run. Schedule a short sale on one product first and watch it start and end.
Schedule the start a few minutes before your email or ad goes out. Scheduled tools work on a cycle: Sale Scheduler checks every minute, and large sales take longer because variants are updated one after another. A small buffer means nobody clicks through to full prices.
What happens when a scheduled sale ends?
It depends on the method, and this is where the options differ most. A discount simply stops applying after its end date. An Event rollout rolls back, and the places it affected return to the catalogs' current prices. A Flow workflow does only what you built it to do. A manual sale ends when someone remembers to end it.
Sale Scheduler saves each variant's previous price and compare-at price before the sale changes anything, and at the end it restores them automatically. Before it writes a variant back, it reads the live price. If someone changed that price elsewhere during the sale, the variant is skipped and labeled "Skipped because price changed", so the newer price is not overwritten. You can also click Restore prices at any time to end a sale early. Restoring is never blocked by your plan or usage, and it doesn't count toward usage. Our guide to undoing bulk price changes explains why that check matters.
Worked example: a weekend sale set up on Wednesday
Say you sell outerwear and want 25% off the Jackets collection from Friday at 6 p.m. to Sunday at 11:59 p.m. An $80 jacket becomes $60, because sale price = original price × (1 − discount %) = $80 × 0.75. For the saving to show on the product page, its compare-at price should be $80. Here's how each approach handles it:
- Saving at checkout is enough: create an automatic Amount off products discount of 25% on the Jackets collection, with active dates from Friday 6 p.m. to Sunday 11:59 p.m. It's fully native and ends on its own.
- Crossed-out price on the product page: schedule a sale price instead. Decrease prices by 25%, set compare-at to the original price, choose Schedule start and end, and let the end restore the previous prices.
- The same sale every weekend: use a repeating schedule rather than rebuilding it each week. See our guide to recurring sales.
- Either way: put the same end time in your banner, emails and ads, and check one jacket on the storefront at 6:05 p.m. on Friday.