Changing a few prices on Shopify is easy. Changing 400 prices for a weekend sale, and getting every one of them back afterwards, is where most merchants get burned. This guide covers the free, built-in ways to bulk change prices, what they can't do, and how to undo a sale without breaking prices you edited since.
The short answer
- Under ~100 products, one-off change: use Shopify's bulk editor.
- Hundreds or thousands of products, or a formula (e.g. 20% off): use a product CSV export/import.
- Want the sale to start and end on its own, at checkout only: use a Shopify automatic discount.
- Want strike-through sale prices on product pages that start, end and revert automatically: Shopify can't do this natively; you need a CSV backup routine or an app.
Sale price vs. discount: pick the right tool first
Shopify has two different ways to "put something on sale":
| Automatic discount | Sale price (Price + Compare-at price) |
|---|---|---|
Where the reduction shows | Cart / checkout | Product page, collections, search |
Strike-through price | Depends on theme / not by default | Yes, when compare-at > price |
Start and end date | Yes, built in | No |
Changes your product data | No | Yes |
Reverts by itself | Yes | No |
If you only need a scheduled reduction and don't need shoppers to see the crossed-out price while browsing, an automatic discount (Discounts > Create discount) is free and ends on its own. The rest of this guide is about the other case: actually changing prices.
For a sale price, Shopify's rule is simple: set Compare-at price to the original price and Price to the new one. The compare-at price must be higher than the price, or no sale is shown. Note that a compare-at of 0.00 is not the same as an empty field; clear it completely when a sale ends.
Method 1: Shopify's bulk editor (free)
- Go to Products and filter the list (for example More filters > Collection, or by tag or vendor).
- Select the products (select all, or shift-click a range), then click Bulk edit.
- Click Columns and add Price and Compare-at price.
- Type the new values. You can drag a value down a column to copy it.
- Click Save.
Limits:
- There is no "decrease by 20%" or ".99 rounding" rule. You type each price, or calculate them in a spreadsheet and paste them in, which is the workaround merchants describe in the Shopify Community.
- It's practical for dozens of products, painful for thousands.
- Changes apply the moment you save. There is no scheduling and no lasting undo.
Method 2: CSV export and import (free, best for large catalogs)
- Products > Export: export the products you'll change. Keep an untouched copy of this file; it is your only backup.
- Open a second copy in Google Sheets or Excel and edit the Variant Price and Variant Compare At Price columns. A formula handles percentages, e.g. for 20% off with the old price kept as compare-at:
Variant Compare At Price = original price
Variant Price = ROUND(original price * 0.8, 2)- Products > Import, choose the file and tick Overwrite products with matching handles. Don't edit the Handle column; it's how Shopify matches rows to products.
- Test with a few products first, then import the rest.
Limits:
- Product CSV files must be under 15 MB; split big catalogs.
- If your store sells in several markets with fixed local prices, those use separate
Price / [Market]columns. A base price change doesn't touch them. - No scheduling: someone has to run the import when the sale starts and again when it ends.
How to undo a bulk price change
Shopify keeps no price history you can roll back to, and Shopify Support can't restore overwritten prices. Your options:
- Re-import the pre-change CSV (the untouched export from step 1). This is the fastest fix. But it is a blunt instrument: it overwrites every column in the file. Any price you or another app changed after the export, such as a supplier price increase or a fix for a typo, gets silently overwritten. Before you re-import, delete every column except Handle, the variant identifiers, Variant Price and Variant Compare At Price, and drop the rows for products you know were edited since.
- No backup? Rebuild the prices from supplier price lists, recent orders (order line items show the price paid) or another system such as your ERP or POS.
- Clear leftover compare-at prices. A common post-sale mistake is restoring Price but leaving Compare-at, so the store keeps advertising a discount that no longer exists.
A safe routine for scheduled sales (no app)
- Export a CSV backup the day before. Name it with the date.
- Prepare the sale CSV in advance.
- Import it when the sale starts, and spot-check 5 products on the storefront.
- Put a calendar reminder for the end time.
- At the end, re-import the trimmed backup (price columns only) and clear compare-at prices.
- Check that no "Sale" badges remain.
This works, but it depends on someone being at a laptop at midnight on Cyber Monday.
When an app makes sense
If you run sales often, have a large catalog, or sell in several markets, a bulk price app saves the original prices for you and puts them back on a schedule. Look for these:
- A preview of every variant before anything is written
- Saved original prices and a revert that doesn't overwrite later edits
- Start and auto-revert scheduling
- Support for compare-at prices and Markets fixed prices
- A CSV export of what changed
One option is our own app, Lilya: Bulk Price & Revert. You target products by collection, tag, vendor or filters, preview each variant, and schedule a start and an automatic revert. When it reverts, it skips any variant whose price was changed after the campaign and reports it. There's a free plan for up to 100 products per campaign. Whichever tool you use, keep the habit from Method 2: back up before you change prices.
FAQ
Can Shopify schedule a price change? Not for product prices. Only discounts have start and end dates.
Can I bulk change prices by a percentage natively? Not in the bulk editor. Use a CSV formula or an app.
Why isn't my sale price showing? Compare-at must be higher than Price, and your theme decides how sales are displayed.
