How to schedule a Shopify price sale that ends itself

Updated July 2026

Shopify has no built-in way to say “put these 500 products on sale Friday at midnight and restore the old prices Monday morning.” So merchants do it by hand: export a CSV as backup, edit prices late at night when the sale starts, then edit them all back when it ends — and hope nothing was missed in either direction.

This guide covers the workflow that avoids both late nights and the two failure modes that quietly cost money: prices that never changed when the sale started, and sale prices that never changed back.

The two silent failure modes

1. Partial application. Any tool that changes hundreds of products calls Shopify’s API hundreds of times. Some calls can fail — rate limits, locked variants, invalid values for a market. If your tool reports “done” without re-checking, 20 of your 2,000 products can silently keep the old price through the whole sale.

2. Partial restore. The same thing in reverse, but worse: products stuck at the discounted price after the sale ends. You sell at a loss until a spreadsheet audit or an observant customer finds it.

The workflow

  1. Select the exact products. Filter by collection, vendor, product type, or tag. Check the match count before doing anything — if the number surprises you, fix the filter, not the aftermath.
  2. Preview the change. A percentage discount compounds badly with rounding. Preview what each price becomes (for example, “20% off, then round to .99 endings”) before a single value is written.
  3. Schedule the start — in your store’s timezone. Midnight UTC is not midnight for your customers. Confirm which timezone your tool uses; getting this wrong starts the sale nine hours early or late.
  4. Schedule the restore at the same moment. Do not leave “ending the sale” as a manual task for future you. The restore should be part of the same operation, using the recorded original price of each variant — not a second discount calculation run in reverse, which reintroduces rounding errors.
  5. Verify both directions. After the sale starts and after it ends, every price should be re-read from Shopify and compared to the intended value, with a list of any items that failed. “No errors thrown” is not the same as “every price confirmed.”

Doing this with SureEdit

SureEdit was built around exactly this workflow:

  • Filter products, then preview the exact new price of every variant before running.
  • Pick a start time and an optional “automatically restore original values” end time — both in your store’s timezone.
  • The restore uses each variant’s journaled original price. If you changed a price mid-sale on purpose, the restore detects the conflict and keeps your newer value instead of blindly overwriting it.
  • Every write — sale and restore — is re-read from Shopify and only reported Verified when the value is confirmed. Anything that fails is itemized with a reason and a one-click retry.

Try SureEdit — free plan available

FAQ

Should I use compare-at prices instead of changing the price?
For a visible “was / now” strikethrough, set the compare-at price to the original and lower the price. The same two failure modes apply — you are now bulk-editing two fields, which is more reason to verify the writes.

Can I do this with a CSV export/import?
Yes, and a CSV export is a reasonable backup regardless. But CSV import is fire-and-forget: Shopify processes it in the background, partial failures land in an easily-missed report, and the “restore” is a second import you have to remember to run at the right moment.

What about flash-sale apps that change theme display only?
Apps that overlay a discounted display price without changing the real variant price break on some sales channels (search-engine listings, marketplaces) that read the actual price. Changing the real price keeps every channel consistent.

Related guides

← All guides