docs/user/how-to/schedule-sale-pricing.mdx
Seasonal and promotional pricing events — Black Friday, end-of-season sales, flash discounts — require precise timing. Prices need to go live at the right moment, apply to the right customers, and revert automatically when the window closes. Doing this manually is error-prone, and scrambling to update prices or remove a promotion code at midnight is not how you want to spend a Friday evening.
Price Lists in Spree are designed for exactly this. You build the sale in advance — set the discounted prices, define which markets or customer groups it applies to, and attach a start and end date. Spree schedules the activation automatically. When the sale starts, the discounted prices appear on product pages for the right customers. When it ends, base prices return — no manual intervention needed.
This guide walks through a Black Friday scenario: one set of discounts for US customers and another for EU customers, starting Friday midnight and ending Monday. The same approach works for any time-limited pricing event, whether it's a single market or several.
Both tools can reduce what a customer pays, but they work differently and suit different situations.
Promotions apply a discount at checkout — a percentage off the order total, a fixed amount off, free shipping, or a coupon code. They're well suited to straightforward sitewide offers (e.g., 15% off everything with a code) or one-time deals. However, if you want to apply different discounts to different products — say, 20% off one category, 10% off another, 15% off one set of products, 25% off another set — you'd need a separate promotion for each variation. Promotions also don't change the price shown on the product page; the discount appears at checkout.
Price Lists let you set the actual sale price for each product individually. One price list can cover your entire catalog — add as many products as you need and set each one's sale price directly. The discounted price shows on the product page, not just at checkout, and the list activates and deactivates automatically on schedule. This makes Price Lists the better tool for sitewide or catalog-wide sales where you want the reduced price to be visible from the moment a customer lands on a product.
<Note>For a simple sitewide percentage discount with a code, promotions may be quicker to set up. Price Lists shine when you need scale, market-specific rates, or per-product control over the discounted price.</Note>
Before you start, make sure:
Navigate to Products → Price Lists in the admin dashboard and click New Price List.
Fill in the details:
Black Friday — US (USD)Sale discounts for US customers, Black Friday weekend)Click Create to open the price list editor.
In the price list editor, click Add Rule and select Market from the rule type dropdown. Select United States from the options.
This ensures the sale pricing only applies to customers shopping in the US market.
Click Add Products to open the product selector. Select the products you want to include in the sale and click Add Selected.
Once the products appear in the list, click Edit Prices. Make sure USD is selected in the currency switcher, then enter the discounted price for each product in the Price column.
<Note>The price editor works like a spreadsheet — you can highlight multiple price fields and paste values in bulk to speed up entry across a large catalog.</Note>
Click Save to apply the prices.
Click New Price List again and create a second list for EU customers:
Black Friday — EU (EUR)Sale discounts for EU customers, Black Friday weekend)Click Create, then in the price list editor:
Click Save.
With both price lists configured, go back to each one and click Schedule in the top right corner.
<Note>Because both price lists have a future start date, the button reads Schedule rather than Activate. Spree will automatically activate them at the start date and deactivate them at the end date — no manual intervention needed.</Note>
Both price lists will now appear as Scheduled in your Price Lists overview. On Black Friday, they activate automatically. On Monday at midnight, they switch off and your base prices return.
Once the sale is live (or to test in advance by temporarily setting the start date to now), confirm the pricing is applying correctly:
If the sale price isn't showing, check that: