9 min read
What Are Flash Sales? A WooCommerce Setup Guide
A flash sale is a short, steep discount with a hard deadline, usually lasting between a few hours and three days. It works because it compresses the buying decision: the price is clearly better than normal and the window to act is clearly closing. This guide covers what a flash sale is, when it makes sense for a WooCommerce store, and how to set one up step by step using WooCommerce’s own scheduling tools, with notes on where plugins earn their keep and where they don’t.
What makes a flash sale different from a regular promotion

Three things separate a flash sale from a standard discount or seasonal sale.
- Duration. Hours, not weeks. A “sale” that runs all month is a price change. A 24-hour or 48-hour window is a flash sale. Some stores run two-hour “lightning” windows on a single product.
- Depth. Discounts are bigger than your everyday promotions, typically 30% to 70% off. A 10% flash sale doesn’t create urgency because customers see 10% coupons everywhere.
- Scope. Usually a curated set of products rather than the whole catalogue. Limiting scope protects margin and makes the offer feel selected rather than desperate.
Done well, a flash sale clears slow stock, brings lapsed customers back and gives your email list a reason to open. Done badly, it trains customers to wait for the next one and erodes your regular pricing. The difference is mostly in frequency and planning.
When a flash sale is the right tool
We’ve run these for store clients and seen them both pay off and flop. The ones that work tend to have a clear reason behind them.
- Clearing inventory before a new season or product version. Margin matters less than the cash and the shelf space.
- Re-engaging a dormant list. A short, loud offer to subscribers who haven’t bought in six months often outperforms a drip sequence.
- Launching a new product with an introductory price for the first 48 hours.
- Competing during peak events like Black Friday, when customers expect deep discounts anyway and a full-price store looks out of place.
- Testing price elasticity. A one-day drop tells you quickly how demand responds without committing to a permanent price.
Skip flash sales if your brand is built on price stability (luxury goods, professional services) or if your margins can’t absorb 30%+ without selling at a loss. A half-hearted 15% “flash sale” does more harm than good.
The numbers to decide before you touch WooCommerce

Work these out on paper first. Most flash sale problems we get called in to fix come from skipping this step.
| Decision | Our default | Why |
|---|---|---|
| Discount depth | 30% to 50% | Deep enough to feel special, shallow enough to keep a margin on most products |
| Duration | 24 to 72 hours | Under 24 hours and many customers never see it; over 72 and urgency fades |
| Product count | 10 to 30 SKUs | Enough variety to interest most visitors, small enough to merchandise properly |
| Stock cap | Set per product | Use WooCommerce stock management so you don’t oversell a clearance item |
| Frequency | Quarterly at most | Monthly flash sales stop being flash sales |
| Break-even | Calculate per SKU | Know the unit cost, shipping and payment fees so you never sell below cost by accident |
Also decide now whether coupons stack on top of sale prices. In most cases they shouldn’t, and WooCommerce lets you enforce that per coupon.
Setting up a flash sale in WooCommerce, step by step

WooCommerce ships with everything you need for a basic flash sale. No plugin required.
Option A: scheduled sale prices (recommended for most stores)
- Go to Products → All Products and open a product you want to include.
- In the Product data panel, under the General tab, enter a Sale price below the Regular price.
- Click the Schedule link next to the sale price field. Two date pickers appear: Sale price dates “From” and “To”.
- Set the start and end dates. WooCommerce applies the sale price from 00:00 on the start date and removes it at 23:59 on the end date, in your site’s timezone (Settings → General → Timezone).
- For variable products, repeat the same fields on each variation under the Variations tab. Each variation has its own sale price and schedule.
- Update the product. The “Sale!” badge and strikethrough price appear automatically on shop and product pages once the start date arrives.
Two caveats. The schedule runs on WP-Cron via the woocommerce_scheduled_sales event, which only fires when someone visits the site. On a low-traffic store the sale may start or end a few minutes late. If exact timing matters, set up a real server cron job hitting wp-cron.php every five minutes and define DISABLE_WP_CRON as true in the wp-config file. Second, the schedule works in whole days. If you want a sale that starts at 6 pm, you need a plugin (see below) or a manual update.
Bulk editing sale prices
For 20 or more products, editing one at a time is tedious. Use WooCommerce’s built-in bulk edit:
- Go to Products → All Products, filter by category or tag, and tick the products you want.
- Choose Edit from the Bulk actions dropdown and click Apply.
- In the Sale field choose “Set to regular price decreased by (fixed amount or %)” and enter
40%. - Click Update.
Bulk edit sets the price but not the schedule, so you’ll need to remove sale prices manually at the end (bulk edit again, choose “Delete” under Sale) or use the per-product schedule. For recurring or time-of-day scheduling across many products, a scheduler plugin is worth the cost.
Option B: a time-limited coupon
Coupons suit flash sales aimed at a specific audience (email subscribers, community members) rather than every visitor.
- Go to Marketing → Coupons → Add coupon.
- Set the code (short and memorable, like
FLASH48), the discount type (percentage works best) and the amount. - Set the Coupon expiry date. The coupon stops working at the start of that date, so for a sale ending Sunday night set the expiry to Monday.
- Under Usage restriction, tick Individual use only so it can’t be combined with other coupons, and tick Exclude sale items if you don’t want it stacking on already-discounted products. Restrict to specific products or categories here too.
- Under Usage limits, set Usage limit per coupon (for example 500) and Usage limit per user (1) to cap exposure.
The full field reference is in the WooCommerce coupon documentation.
Adding urgency on the page
The price change alone doesn’t sell the sale. Customers need to see the deadline.
- Countdown timer. WooCommerce core doesn’t include one. Plugins such as Smart Sale Scheduler for WooCommerce or Finale (by XLPlugins) add a countdown to product pages and let you set start and end times to the minute, which also solves the whole-day scheduling limit. Check the plugin’s last update date on WordPress.org before installing.
- Site-wide banner. A simple notice bar stating the discount and end time on every page. Many themes include one; otherwise a small plugin or a block in the header template does the job.
- Stock messaging. Enable WooCommerce → Settings → Products → Inventory and set the “Low stock threshold” so “Only 3 left in stock” appears on clearance items. Real scarcity beats invented scarcity and doesn’t risk consumer-law complaints.
- A dedicated landing page. Create a “Flash Sale” category or tag and link the banner to it so visitors see the curated set, not the whole store.
Promoting the sale
Plan the announcement before the sale starts, not on the morning of.
- Teaser email 24 to 48 hours before. Subject line states the discount and the date. No details on products yet.
- Launch email at the start time with direct links to the sale category.
- Reminder email four to six hours before the end to everyone who hasn’t purchased. This email usually produces 25% to 40% of total sale revenue in our experience.
- Social posts at launch and at the last-chance mark, with the countdown visible in the image.
- Community post if you run a member site alongside the store. A pinned activity update to logged-in members converts better than any broadcast channel because those people already trust you. If you connect WooCommerce to a BuddyPress profile with something like BuddyWoo, members see their orders where they already spend their time.
For the email side, our guide to automating email marketing for WooCommerce covers the tooling.
Making sure the site survives the traffic
A successful flash sale sends a spike of traffic at the exact moment your server is doing the most work (cart calculations, stock decrements, payment calls). We’ve seen stores go down five minutes into a well-promoted sale.
- Turn on full-page caching for product and category pages. Cart, checkout and account pages must stay uncached; most caching plugins exclude them by default, but verify.
- Put a CDN in front of static assets. Product images are the bulk of your bandwidth.
- Run a load test against a staging copy with a tool like k6 or Loader.io at two to three times your expected peak.
- Check that your hosting plan’s PHP worker count can handle concurrent checkouts. Shared hosting with two workers will queue requests and time out.
- Disable non-critical plugins (analytics heat maps, heavy related-product widgets) for the duration.
If the store matters to your revenue, a performance review before the first big sale is cheaper than the lost orders. Our performance optimisation service exists for exactly this situation.
Measuring the result
Judge the sale on more than gross revenue. Open WooCommerce → Analytics and compare the sale window with the same weekday period before it:
- Orders and average order value (flash sales often lower AOV; bundles and “add one more for free shipping” thresholds counter this).
- Net revenue after discount, refunds and fees. Discounted orders see higher return rates on fashion and electronics.
- New versus returning customers. A sale that only brings back existing customers at a lower price is a loss.
- The 30 days after. Did regular-price sales drop because people stocked up? That tells you how often you can repeat it.
Frequently asked questions
Will a scheduled sale price start exactly at midnight?
Close to it, if your site has regular traffic or a real cron job. WP-Cron needs a page load to fire. On quiet stores the switch can lag by minutes or, occasionally, hours. A server cron every five minutes fixes this.
Can I run a flash sale on only some variations of a product?
Yes. Each variation has its own sale price and schedule fields. Leave the others empty and the badge shows only on the discounted variations.
Should coupons work on flash sale products?
Usually not. Tick “Exclude sale items” on your standing coupons before the sale starts, or you’ll stack discounts and sell below cost on some lines.
Do flash sales hurt SEO?
Not if you keep product URLs stable and use a category or tag for the sale rather than creating and deleting pages. Price changes are picked up by Google Merchant Center on its next crawl; submit a feed update if you advertise on Shopping.
What we’d do for a first flash sale
Pick 15 products with healthy margin or ageing stock, set a 40% scheduled sale price for 48 hours from Friday to Sunday, add a notice bar with the end time, and send three emails: teaser, launch and last chance. Cap stock on anything you can’t restock. Check caching and PHP workers the day before. Then read the Analytics report on Monday and decide whether the next one is in three months or never. Keep it rare, keep it real, and customers will keep turning up when you run one.
Related reading