Planning your Black Friday and Cyber Monday sale on Shopify
To plan a Shopify Black Friday and Cyber Monday (BFCM) sale: set the sale depth by margin group instead of one flat percentage, add one or two short flash windows, and build and schedule every task at least two weeks ahead, each with an end time, so prices revert on their own. The twelve tactics below cover planning, urgency, margin and operations, each with the PriceDip setup. PriceDip runs the sale by changing prices and compare-at prices on a schedule and reverting them, with no discount codes.
The strategy on this page is our advice. The lines marked In the app describe what the app does.
The short version
Section titled “The short version”- Build and schedule every task two weeks early.
- Set sale depth by margin group, not one flat percentage.
- Use short flash windows inside the long weekend to keep momentum.
- Make every deadline real: when the timer runs out, the offer ends.
- Stagger start and end times so no two tasks start or end together.
- Keep each product in one active task at a time.
- Rehearse the price revert on three products before the event.
How deep should the discount be?
Section titled “How deep should the discount be?”There is no single right percentage. The right depth is the one each product’s margin can pay for. A discount comes straight out of gross profit, so the same percentage costs a thin-margin product far more than a high-margin one.
To earn the same gross profit as before, you need to sell this many more units:
extra units needed = margin ÷ (margin − discount) − 1
| Gross margin | 10% off | 20% off | 30% off | 40% off |
|---|---|---|---|---|
| 30% | +50% units | +200% units | No profit left | Sold at a loss |
| 50% | +25% units | +67% units | +150% units | +400% units |
| 70% | +17% units | +40% units | +75% units | +133% units |
How to use the table:
- Find each product group’s margin first, after product cost. Then pick the deepest discount whose extra volume you can realistically reach.
- Keep deep cuts for high-margin and clearance products. A 40% discount on a 70%-margin product is a strong offer. On a 30%-margin product it is a loss on every order.
- Set a floor. Decide the lowest price each group can go to once shipping, payment fees and ad spend are counted, and do not go below it.
- Use a few hero products for the headline. One deep, well-chosen offer brings visitors in. The rest of the catalogue can carry a modest discount.
Choose a sale structure
Section titled “Choose a sale structure”| Structure | How it works | Strength | Watch out for |
|---|---|---|---|
| Flat storewide | One percentage on everything | Simple message, easy to market | Over-discounts thin-margin products |
| Depth by margin group | A different price cut for each product group | Protects margin | More tasks to schedule |
| Hero products | Deep discount on a few products, modest elsewhere | Strong headline offer | Heroes can sell out early |
| Rolling flash windows | A new category on sale every few hours | Repeat visits, sustained urgency | Needs careful staggering |
| Clearance | Deepest cuts on end-of-line stock | Frees cash and space | Trains shoppers to wait if overused |
Our advice: start with depth by margin group as the base and add one or two flash windows. Whichever you choose, keep each product in one active task at a time. A second Flash Sale task on a product stacks on the first, and when it reverts, the product returns to its original price while the first sale is still running.
Planning
Section titled “Planning”1. Build every sale two weeks early
Section titled “1. Build every sale two weeks early”A sale built in a hurry the night before is where mistakes get in. Build, review and schedule tasks while the store is quiet, so launch day involves no editing at all.
In the app: create each task from Run flash sale > Create task, set its start and end date and time on the Schedule tab, and check the discount against your margin sheet. See Flash Sale tasks.
2. Set sale depth by margin group
Section titled “2. Set sale depth by margin group”A flat storewide percentage over-discounts thin-margin products and under-discounts the ones that could move. Sort products into margin tiers and give each tier its own depth, using the table above.
In the app: tag products by tier in Shopify admin, for example bfcm-20, bfcm-30 and bfcm-40, and create one task per tag. Targeting by tag needs a paid plan. On the Free plan, pick specific products, up to 50 product variants in total across your active tasks. See Selecting products.
3. Give early access to your list
Section titled “3. Give early access to your list”Telling subscribers a day before everyone else rewards your best customers and spreads order volume, which eases the load on fulfilment. A price change is visible to every visitor, so the early access is in who you tell, not who can buy.
In the app: start a task on a small set of hero products a day early and announce it only to your list. Start the wider task the next day, at a different time, and leave the hero products out of it. A product in both tasks would be discounted twice.
Urgency
Section titled “Urgency”4. Run short flash windows inside the long sale
Section titled “4. Run short flash windows inside the long sale”Our view: a four-day sale loses attention after the first day. Flash windows of two to four hours on a single category give shoppers a reason to come back.
In the app: schedule several short Flash Sale tasks on different product groups across the weekend, each with Display countdown timer ticked. Use product groups that are not in your base sale. A flash window on a product already in an active task stacks on that task, and the product goes back to full price when the window ends. The countdown timer requires a paid plan.
5. Show a real deadline
Section titled “5. Show a real deadline”A countdown works because it is true. A deadline that holds builds trust. A sale that is quietly extended after the timer runs out destroys it.
In the app: tick Display countdown timer on the task’s Schedule tab. It shows shoppers the time left before the offer expires. Give your promotion banner the same end date and time.
6. Pair scarcity with stock you actually have
Section titled “6. Pair scarcity with stock you actually have”Stock messages convert when inventory is genuinely limited. Use them on end-of-line and limited-run products, and leave them off evergreen items.
In the app: tick Display stock progress bar on the task’s Display settings tab and enter a Stock inventory number. The bar shows while the product still has stock and that stock is no higher than the Stock inventory number. It is hidden when the product is out of stock, and when the stock is higher than the number you entered. See Stock progress bar.
Margin protection
Section titled “Margin protection”7. Decide which price field carries the discount
Section titled “7. Decide which price field carries the discount”The two fields behave differently. A discount on the Price field is calculated from the original price, and the original price is shown as the compare-at price during the sale. A discount on the Compare-at price field is calculated from the compare-at price, and on a product with no compare-at price the selling price does not change. Choosing the wrong field is the fastest way to discount more, or less, than you planned.
In the app: on the Product & discount tab, under Set price change rules, choose Price or Compare-at price. Run the task on one product first and check the price on your storefront. Set the test task to Inactive and confirm the prices have reverted before you run the full task, so the two do not stack.
8. Use charm prices or price codes
Section titled “8. Use charm prices or price codes”Percentage discounts produce untidy prices such as $41.37. A charm price such as .99, or a consistent price code such as .97 or .00, looks intentional and makes collection pages easier to scan.
In the app: turn on Override cents to set the same ending for every product in the task. The app calculates the discount first and then replaces the cents, so the real discount changes: with prices ending in .99, a 15% discount can be about 14% off, and the gap is bigger on low prices.
9. Check how discount codes stack before launch
Section titled “9. Check how discount codes stack before launch”A discount code or automatic discount that applies to a product is applied on top of its sale price. A sale price, plus a welcome code, plus an automatic discount can add up to more than you meant to give. Decide which offers may combine and switch off the rest.
In the app: check your active discounts, especially any automatic discount that applies to all products. Restrict them to a collection of full-price products: see Exclude sale items from Shopify discount codes. Then put one product in a short test task, apply your codes in the cart or at checkout, and check the total.
Operations
Section titled “Operations”10. Stagger every start and end time
Section titled “10. Stagger every start and end time”Shopify limits how many bulk updates can run at the same time, and the order they are applied in is not certain. A task can get stuck if two tasks start or end at the same time.
In the app: allow about 5 minutes for every 3,000 product variants in the earlier task, plus a 5-minute buffer. If task 1 has 3,000 product variants and starts at 11:00 pm, schedule task 2 for 11:10 pm at the earliest. See Staggering tasks.
11. Avoid price-based automated collections
Section titled “11. Avoid price-based automated collections”If a collection’s conditions are based on price, a discount can remove products from the collection mid-sale. The task then cannot find them to revert, so they keep their sale price.
In the app: target specific products instead or, on a paid plan, a tag or a manual collection. Do not remove products from a collection a task targets while it is running. Add the tag in bulk in Shopify admin before building the task. See Tasks on automated collections.
12. Rehearse the price revert
Section titled “12. Rehearse the price revert”The end of the sale matters as much as the start. Prove the revert on a few products before you trust it with the whole catalogue.
In the app: run a 30-minute test task on three products a week before the event and confirm the prices revert as expected.
Four-week BFCM timeline
Section titled “Four-week BFCM timeline”| When | What to do |
|---|---|
| 4 weeks out | Pick the discount structure. Build the margin sheet. Choose hero products. |
| 3 weeks out | Tag products by discount tier. Confirm your plan covers your variant count and the targeting you need. |
| 2 weeks out | Build and schedule every task. Stagger start and end times. Design the banner, badge and timer. |
| 1 week out | Run the revert rehearsal. Test how discount codes stack. Enable the app embed on the live theme. |
| Launch day | Spot-check five products after each task starts. Watch total revenue, conversion rate and active tasks on the app dashboard. |
| Sale end | Spot-check five products after each task ends. Confirm the storefront shows normal prices. |
| Week after | Review orders and revenue for the sale period in your Shopify reports. Note what to change next time. |
The price revert checklist
Section titled “The price revert checklist”Run through this before any sale goes live.
- Every task has an end date and time, in the store time zone.
- The revert rule is set on purpose: Revert to original price or Revert to the last price edited.
- No two tasks start or end at the same time.
- No product is in two active tasks.
- The strikethrough price on every product is one you really charged. For EU and EEA shoppers, check the EU 30-day lowest price rule.
- No task targets an automated collection with a price condition.
- A test task on a few products has reverted correctly.
- Someone will spot-check five products after the end time.
- Every task will be set to Inactive before the app is ever uninstalled.