How to bulk schedule a sale in WooCommerce
Put many products on sale with start and end dates, and find out why a scheduled WooCommerce sale does not start or does not end.
In WooCommerce a scheduled sale is a sale price plus a “from” and a “to” date. WooCommerce’s bulk edit screen sets a sale price for many products at once, but its documentation lists no date fields, so for dates you use a CSV import, the Variations bulk action, or edit each product. Here is each way, then the checks to run when a sale does not start or end.
What a scheduled sale is
On a product, you enter a Sale price. Next to it is a Schedule link that adds two date fields. According to WooCommerce’s product editor guide, From is the date the sale price should start displaying, and To is the date it should stop, expiring at 11:59 pm. After the end date the product goes back to its regular price.
One product at a time
For three or four products, this is fine. Open the product, go to the General section of Product data, type the sale price, click Schedule, set both dates and click Update. For a variable product, use the Variations bulk actions described below.
The built-in bulk edit
The bulk edit page gives you a Sale field with four options: change to, increase or decrease the existing sale price, or set it to the regular price decreased by an amount or percentage. With the last one, a blank or zero value removes the sale price. The page does not mention sale dates. Check the bulk edit panel in your version, but plan on the sale starting as soon as you press Update unless you add dates another way.
For variations, the variable products guide lists bulk actions in the Variations tab, including “Set sale prices to regular prices decreased by (fixed amount or percentage)” and “Set scheduled sale dates”. They apply to one variable product at a time.
The CSV way
The product CSV importer and exporter uses these column headers: Sale price, Date sale price starts and Date sale price ends.
- Go to Products > All Products, filter, and use Export and Generate CSV.
- Fill in the three columns for the products in the sale. Use the date format you see in your own export.
- Select Import, choose the file, tick Update existing products and select Continue.
- In Column mapping, choose Do not import for other columns, then Run the importer.
Rows are matched by ID or SKU. Variations are separate rows with the type variation.
Why a scheduled sale does not start or end
WooCommerce’s scheduled actions depend on WP-Cron, and WooCommerce’s documentation says WP-Cron runs when someone visits the site, so a quiet shop can run tasks late. Run these checks:
- Open WooCommerce > Status > Scheduled Actions. Look for pending actions whose time has passed, and failed ones. You can run a pending action from there and read the log of failed ones.
- Check the timezone under Settings > General in WordPress (WordPress documentation), and remember that the end date lasts until 11:59 pm.
- Clear your page cache and any CDN after the start time, as a precaution.
- Look at your WooCommerce version. In December 2023 a user of the support forum reported that on WooCommerce 8.3.1 the sale badge appeared on the start day, but the price stayed at the regular price. Re-saving the product with an earlier date made it work. No confirmed cause is visible in the thread. That was one report on one version.
- After a sale ends, check the product. A feature request from June 2026 reports that on WooCommerce 10.8.1 the price went back, but the old sale price and dates stayed in the product editor. The workaround it gives is to remove them by hand.
A checklist for the sale
- Before: export the products. Open two of them on the storefront and note the prices.
- At the start time: look at those two product pages, not only the admin.
- After the end: check the same two pages, then sort the product list by price and look for leftover sale prices.
If something went wrong, here is how to put values back.
The StoreEdit AI way
You ask your assistant, for example: “Put everything in the Shoes category on sale at 20% off from 24 November to 1 December.” StoreEdit AI can set a sale price by a percentage, by an amount or to a value, with sale start and end dates, for products you filter by category, tag, product type, status, or on sale or not on sale. It can also end a sale. In WordPress you see every row with the value now and the value it would become, untick what you do not want, and press Apply selected. You can undo the whole request afterwards.
StoreEdit AI writes the sale price and the dates. WooCommerce starts and ends the sale on those dates. StoreEdit AI does not act on its own: it has no schedules, so it does not start or end a sale at a later time itself.
The limits
- The built-in bulk edit has no dates in its documentation, so dates need another route.
- CSV needs care with date formats and variation rows.
- If the scheduled sale does not start, check cron and your version. StoreEdit AI does not change how WooCommerce runs scheduled sales.
- StoreEdit AI works with simple and variable products. On a variable product, the change is made on the variations customers buy.
Questions
Why is my scheduled sale price not working?
Start with WooCommerce > Status > Scheduled Actions, then the timezone, then the cache. Reports on specific versions exist, as above.
Can I schedule a sale for a whole category?
Not with the built-in bulk edit screen as documented. Use a CSV with the three columns above, or a request in StoreEdit AI.
Does the sale end at midnight?
WooCommerce’s product editor guide says the end date expires at 11:59 pm.
How do I raise prices instead of discounting them?
See raising prices by a percentage.
Do it by asking, and see it first
StoreEdit AI lets you ask for a sale on a whole category with start and end dates. You see each product with its old and new sale price before anything is written, and can undo the request afterwards.