shopify sale stuck halfway

A Black Friday Sale That Stopped Halfway Through

A partial run is worse than a failed one. A failed run leaves you where you started. A partial run leaves you in a state nobody designed, on the day you can least afford to be there.

6 min read · Updated 2026-09-11

The complaint appears every November. One merchant wrote that the app got stuck during their big Black Friday. Another that it stopped working an hour into the sale. The shape is always the same: some products moved, some did not, and there is no list of which is which.

Find the boundary before you touch anything

Export your products to CSV. It carries Price and Compare-at price for every variant, and it takes about thirty seconds. Sort by price and the two populations separate immediately: discounted rows and untouched rows.

Do this first

The export is the only artefact that survives whatever you do next. Take it before you try any fix, because the fix may overwrite the evidence of what the half-run actually did.

Then decide which direction to finish

You have two options and the wrong one is expensive.

Finish the saleRoll it back
When it is rightMost of the catalogue already movedOnly a small share moved
The riskThe remaining products may fail the same wayYou need the original prices, which the half-run may not have saved
What you needA list of untouched variantsA snapshot taken before the run

If you have no record of the original prices, rolling back is not actually available to you. You would be reconstructing prices by arithmetic, and dividing a discount back out is how a 25% sale becomes a permanent 6% price cut nobody notices for months.

What not to do at this point

  • Do not re-run the same job over the whole catalogue. Products that already moved get discounted a second time, and the compounding is silent.
  • Do not fix prices by hand in the admin while a job might still be running. The job will overwrite you.
  • Do not uninstall the app to stop it. Uninstalling removes your access to whatever record it kept, which is the thing you most need.

The property that prevents this

A run that reports per variant, rather than per job, turns a partial failure into a list. Nine hundred and forty succeeded, sixty failed, here are the sixty, retry those. The failure still happened. What changed is that it is now a five minute task instead of an evening spent comparing spreadsheets.

SaleGuard records price and compare-at per variant before writing anything, and reports each variant's outcome separately, so a half-run comes back as a list of exactly what to retry.

Keep a recovery plan before you change prices

SaleGuard snapshots your original prices, previews every change, schedules the sale, and restores automatically when it ends. Install SaleGuard from the Shopify App Store to use it on your next promotion.

Install SaleGuard on Shopify