# Disco - Shopify Sales & Discounts > Plan, schedule and launch Shopify flash sales, sitewide sales and BFCM campaigns - no code. Countdown timers, automatic price resets and stacking protection. Public Ghost content for AI and LLM tooling. This file includes a bounded export of public pages first, then recent public posts. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages ### About this site URL: https://productessentials.app/about/ Last updated: 2026-02-27T12:05:03.000Z ProductEssentials is an independent publication launched in February 2026 by John Skovsgaard. If you subscribe today, you'll get full access to the website as well as email newsletters about new content when it's available. Your subscription makes this site possible, and allows ProductEssentials to continue to exist. Thank you! ### Access all areas By signing up, you'll get access to the full archive of everything that's been published before and everything that's still to come. Your very own private library. ### Fresh content, delivered Stay up to date with new content sent straight to your inbox! No more worrying about whether you missed something because of a pesky algorithm or news feed. ### Meet people like you Join a community of other subscribers who share the same interests. --- ### Start your own thing Enjoying the experience? Get started for free and set up your very own subscription business using [Ghost](https://ghost.org/?ref=productessentials.app), the same platform that powers this website. ## Posts ### Best Black Friday Shopify App Deals for 2026 URL: https://productessentials.app/blog/black-friday-shopify-app-deals/ Last updated: 2026-10-20T06:51:36.000Z The five Black Friday Shopify app deals on this page are Disco for scheduled sales (30% off for 3 months), Claspo for email pop-ups (30% off the annual Pro plan), WowOptions for personalized products (50% off for 6 months), Ordertracker for order tracking (1 month of Premium free) and Flits for loyalty (26% off paid plans). Each entry below lists the code, eligible plans and end date. Disco runs the sale, and the other four follow the shopper: the first visit, the product page, the delivery and the next purchase. For our broader shortlist for the weekend, read [our list of the best Shopify apps for Black Friday](https://productessentials.app/blog/best-shopify-apps-black-friday-cyber-monday-bfcm/). ## Which Black Friday Shopify app deals end first? Of the five deals, Disco's ends first: November 29, 2026 at 11:59 PM UTC, two days after Black Friday on November 27\. The table below lists every deal's end date and code, earliest first, so you can claim the deals at the top before they close. | App | Valid until | Code | Black Friday deal | App Store rating | | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | --------------------------- | ------------------------------------------------------------------------ | ---------------- | | [Disco](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) | November 29, 2026 | 30BFCM26 | 30% off paid plans for 3 months | 4.8 ★ (105) | | [WowOptions](https://apps.shopify.com/product-options-app?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) | November 30, 2026 | WOWBFCM50 | 50% off for 6 months | 5.0 ★ (15) | | [Ordertracker](https://apps.shopify.com/ordertracker?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) | November 30, 2026 | ORDER30 | 1 month of Premium free | 4.5 ★ (58) | | [Flits](https://apps.shopify.com/flits?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) | December 1, 2026 | Applied by the install link | 26% off paid plans | 5.0 ★ (391) | | [Claspo](https://apps.shopify.com/claspo?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) | December 30, 2026 | BFCM26LucxWJ | 30% off the annual Pro plan, free pop-up setup, 3 months of AI optimizer | 5.0 ★ (35) | *Ratings and review counts as shown on the Shopify App Store on October 18, 2026.* ## [Disco Flash Sale Bulk Discount](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ![Disco banner: Flash sales that run themselves, beside a scheduled Black Friday sale and a product card with a sale badge, a struck-through price and a countdown timer](https://productessentials.app/content/images/2026/10/disco-077c6208.png) **Best for:** Scheduling Black Friday and Cyber Monday sales that start, end and reset prices on their own. **What it offers:** Bulk discounts on the whole store or selected products, scheduled start and end dates, automatic price reset, countdown timers, announcement bars, sale badges and a flash sale page. **Black Friday deal:** 30% off any paid plan for 3 months. **Why it stands out:** You set up every BFCM sale weeks ahead, and Disco starts it, ends it and puts your prices back. Disco Flash Sale Bulk Discount ("Disco") is a Shopify flash sale app by ProductEssentials. It sets sale prices in bulk, runs scheduled sales and reverts prices when they end, and adds countdown timers, announcement bars, sale badges and a flash sale landing page. No coding needed. Disco writes the sale price and the compare-at price in Shopify. Shoppers see the sale price, with the original struck through, on product and collection pages before checkout and without a code. It carries the Built for Shopify badge and has been on the App Store since August 30, 2019. BFCM is the busiest pricing week of the year, and editing prices by hand is where mistakes happen. In Disco you schedule an early access sale, the Black Friday sale (November 27, 2026) and the Cyber Monday sale (November 30, 2026) in advance. Several campaigns can run at once, and the countdown timer shows only while the sale is active, so it matches the real deadline. Sale badges and product exclusion rules are included on Lite and up, and the flash sale page is on Professional and up. Blocking discount codes on sale products is on the Business plan only. [View Demo](https://disco-discount-planner.myshopify.com/?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ### Black Friday Offer **Deal:** 30% off for 3 months. **Available on:** All paid plans: Lite, Professional, Business and Unlimited. **Valid until:** November 29, 2026, 11:59 PM UTC. **Good to know:** The discount covers your first 3 months, then the plan renews at its regular price ([see pricing](https://productessentials.app/#pricing)). The free Starter plan covers up to 30 discounted products if you want to try Disco first. **How to claim it:** Install Disco from the link below and enter code **30BFCM26** when you choose your plan. [Get the App](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ## [Claspo AI Pop up | Quiz, Wheel](https://apps.shopify.com/claspo?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ![Claspo banner: The right tactic for every shopper, above three phone pop-ups: a spin-the-wheel discount, a product finder quiz and a countdown timer offer](https://productessentials.app/content/images/2026/10/claspo-9637a014.png) **Best for:** Growing your email list before Black Friday and catching visitors who are about to leave. **What it offers:** Welcome email pop-ups, pop-up discounts with a countdown timer, exit-intent, browse and cart abandonment pop-ups, spin-the-wheel and 6+ other games, and product quizzes. **Black Friday deal:** 30% off the annual Pro plan, plus free email pop-up setup and 3 months of AI optimizer. **Why it stands out:** Its AI A/B tests every pop-up and offer for revenue per visit. Claspo uses AI agents to match pop-ups to live traffic segments based on new or returning visitors, traffic source, and browse and cart behavior. Each pop-up discount can be personalized per segment as a percentage off, BOGO or free shipping. Claspo also offers free migration from Privy, Alia Popups, Justuno, OptiMonk or Wisepops. Suppose a shopper browses your gift collection on November 20 and leaves without buying. A pop-up that captures their email lets you tell them when the sale starts on November 27\. Exit-intent or cart abandonment pop-ups also catch shoppers who are about to leave. [View Demo](https://claspo-popups.myshopify.com/?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ### Black Friday Offer **Deal:** 30% off the annual Pro plan, free email pop-up setup and 3 months of AI optimizer. **Available on:** The annual Pro plan, priced by usage. The listing's paid plans go by monthly pageviews, currently from $349 a year for 50,000. **Valid until:** December 30, 2026. **Good to know:** Claspo has a free plan for up to 3,000 pageviews a month, so you can build pop-ups before you upgrade. **How to claim it:** Install Claspo from the link below and enter code **BFCM26LucxWJ** in the Claspo app. [Get the App](https://apps.shopify.com/claspo?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ## [Wow Custom Product Options (WowOptions)](https://apps.shopify.com/product-options-app?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ![WowOptions banner: Add Unlimited Product Options With Live Preview, beside a purple mug personalized with a photo and the name Prince Jack](https://productessentials.app/content/images/2026/10/wowoptions-e3d59b4e.jpg) **Best for:** Merchants who sell personalized or made-to-order products and want options, a live preview and paid add-ons in one app. **What it offers:** 25+ product option types (custom text, file uploads, image and color swatches, dropdowns, checkboxes), conditional logic, paid add-ons and variant upcharges, a live product personalizer, and ready-made templates. **Black Friday deal:** 50% off all paid plans for 6 months with code WOWBFCM50. **Why it stands out:** Shoppers see their personalization in a live preview while they build the product, and you can charge for the extras. WowOptions is a no-code product options and personalization app for customizable products, including apparel, jewelry engraving, gifts, mugs, phone cases, print-on-demand items and cakes. With conditional logic, options can show or hide based on the shopper's earlier choices, keeping the product page clean even when an item has many configurations. Suppose you sell photo mugs as gifts. A shopper uploads a photo, types a name and adds a sticker, and each extra carries its own price, as in the banner above. Paid add-ons for premium personalization raise the order value on discounted items. [View Demo](https://wowoption.myshopify.com/?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) (store password: `1`) ### Black Friday Offer **Deal:** 50% off for 6 months. **Available on:** Every paid WowOptions plan (PRO, ADVANCED and ENTERPRISE). There is also a free plan. **Valid until:** November 30, 2026. **Good to know:** The 50% applies to every billing period in your first 6 months. **How to claim it:** Install WowOptions, choose your plan and apply coupon code **WOWBFCM50** when you purchase or upgrade. [Get the App](https://apps.shopify.com/product-options-app?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ## [Ordertracker: Track & Upsell](https://apps.shopify.com/ordertracker?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ![Ordertracker banner: Boost your Shopify sales, with a branded tracking page, email notifications and translated tracking pages](https://productessentials.app/content/images/2026/10/ordertracker-49f0b086.jpg) **Best for:** Merchants and dropshippers who want a branded tracking page that cuts "where is my order?" emails. **What it offers:** A branded order tracking page, automated email notifications, product upsells on the tracking page, delivery analytics and incident reports, and masking of Chinese carriers. **Black Friday deal:** 1 month of Premium free, with no limits, with code ORDER30. **Why it stands out:** It turns the tracking page into a support saver and a sales channel. Ordertracker lets customers track orders on your own store rather than on external carrier sites, with automatic email notifications from purchase to delivery across 1,200+ carriers, according to its App Store listing. For dropshipping stores, Chinese carriers and tracking events are replaced with clean generic phrases, and the tracking history is translated automatically. A free plan covers up to 25 orders a month. Suppose a shopper orders a discounted coat on Black Friday and wants to know on Tuesday where it is. A self-serve tracking page on your own store answers that before it reaches your support inbox. Product upsells on the same page also put a second offer in front of them while they check their shipment. [View Demo](https://ordertracker.myshopify.com/?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ### Black Friday Offer **Deal:** 1 month of Ordertracker Premium free, with no limits. **Available on:** The Premium plan, with all features and no order limits. **Valid until:** November 30, 2026. **Good to know:** After the free Premium month, you pay the regular price of the plan you pick. The App Store listing currently has Essential at $9, Pro at $29 and Business at $99 a month. **How to claim it:** Install Ordertracker from the Shopify App Store and apply code **ORDER30**. [Get the App](https://apps.shopify.com/ordertracker?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ## [Flits Loyalty Rewards Program](https://apps.shopify.com/flits?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ![Flits banner: Customer retention platform for Shopify brands](https://productessentials.app/content/images/2026/10/flits-745deef2.png) **Best for:** Brands that want to turn BFCM's first-time buyers into repeat customers. **What it offers:** Loyalty points, rewards, referrals, VIP tiers and store credit. **Black Friday deal:** 26% off all paid plans. **Why it stands out:** It gives shoppers more reasons to come back after BFCM. Flits builds customer relationships through loyalty rewards and a better account experience, combining points, referrals, VIP tiers and store credit in one retention program. It works with Shopify POS, Judge.me, Klaviyo and 40+ other apps, and it has a free plan for stores with up to 250 monthly orders. BFCM brings in a wave of first-time customers. Having points or store credit waiting in their account when the November order arrives gives those shoppers a concrete reason to return in December and January. [Book a demo](https://www.getflits.com/lets-talk?utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ### Black Friday Offer **Deal:** 26% off all paid plans. **Available on:** Flits Loyalty Program paid plans. **Valid until:** December 1, 2026. **Good to know:** A straight 26% off; paid plans start at $15 a month on the listing, each with a 14-day free trial. **How to claim it:** Install Flits with the link below and upgrade to a paid plan; the discount is applied through that link. [Get the App](https://app.getflits.com/getflits%5Fdiscount?code=BFCM26&shop=&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) ## FAQ What are the best Black Friday Shopify app deals for 2026? The five Black Friday Shopify app deals in this guide are Disco (30% off paid plans for 3 months with code 30BFCM26), Claspo (30% off the annual Pro plan with code BFCM26LucxWJ), WowOptions (50% off paid plans for 6 months with code WOWBFCM50), Ordertracker (1 month of Premium free with code ORDER30) and Flits (26% off paid plans via its install link). Do you need a code to claim these Black Friday app deals? Yes for four of the five deals, while Flits applies its 26% through its install link instead. Enter Disco's 30BFCM26 and WowOptions' WOWBFCM50 when you choose or upgrade a plan, apply Ordertracker's ORDER30 after you install it, and enter Claspo's BFCM26LucxWJ in the Claspo app. What happens when the discounted months end? With Disco the plan renews at its regular price after 3 months and with Ordertracker after the free month, while WowOptions' 50% covers every billing period in your first 6 months. Claspo's and Flits' offers don't state what you pay afterwards, so check the plan's price in the app before you upgrade. Can you try Disco before Black Friday without paying? Yes: Disco's free Starter plan covers up to 30 discounted products and 2 campaigns, including scheduled sales and a countdown timer, with no credit card needed. Lite, Professional and Business also come with a 3-day free trial. ## When should you set up your Black Friday apps? Set your apps up at least a week before Black Friday (November 27, 2026), so a test can show problems while there is still time to fix them. In Disco, schedule a short test sale on one product and check that its price drops when the sale starts and goes back when it ends, both on their own. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=black-friday-shopify-app-deals) --- **Next:** the [BFCM playbook](https://productessentials.app/blog/bfcm-playbook/) plans the season around these dates, and the [early access guide](https://productessentials.app/blog/shopify-early-access-black-friday-sale/) shows how to open the sale to your list first. ### The best flash sale apps for Shopify (2026) URL: https://productessentials.app/blog/best-shopify-flash-sale-apps/ Last updated: 2026-10-18T08:44:38.000Z The best flash sale app for Shopify does four jobs on its own. It sets sale prices in bulk and puts them back, shows the deadline, gives the sale a page, and keeps discount codes off sale prices. We make [Disco](https://productessentials.app/#features), and it is our pick: of the six apps we compared, it is the only one whose App Store listing covers all four. In this guide 1. [What is the best flash sale app for Shopify?](#what-is-the-best-flash-sale-app-for-shopify) 2. [What does a flash sale app have to do?](#what-does-a-flash-sale-app-have-to-do) 3. [Can you run a flash sale on Shopify without an app?](#can-you-run-a-flash-sale-on-shopify-without-an-app) 4. [Which flash sale app suits which store?](#which-flash-sale-app-suits-which-store) 5. [What is the best bulk discount app for Shopify?](#what-is-the-best-bulk-discount-app-for-shopify) 6. [FAQ](#faq) 7. [When should you set up your flash sale app?](#when-should-you-set-up-your-flash-sale-app) ## What is the best flash sale app for Shopify? Disco is our pick for the best flash sale app for Shopify. It is the only app in this comparison that does all four flash sale jobs in one place, while GetSale comes closest. On Disco's Business plan, currently $25.99/month, it costs less than GetSale's $29.99/month Unlimited plan, which still has no sale page. | App | Price | Rating (reviews) | Standout feature | Best for | | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | | [Disco](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=best-shopify-flash-sale-apps) | Free plan; paid from $9.99/month | 4.8 (105) | A sale page that runs as a coming soon page first, then the live sale | One flash sale with bulk prices, a timer, a sale page and code blocking in one app (all four on Business) | | GetSale Bulk Discounts & Sales | Free plan; paid from $9.99/month | 4.9 (332) | EU Compliance add-on that can show the lowest price before an offer | Stores selling in the EU, or adding quantity breaks to a sale | | Rockit Discounts & Sales App | Free plan; paid from $7.99/month | 5.0 (499) | A countdown timer and a volume discount on the free plan | A free start, or sales plus volume discounts | | Alpha: Sale & Discount Manager | Free plan; paid from $9.99/month | 4.9 (313) | Sale prices for fixed-price markets (Ultimate plan) | Stores that set fixed prices per market | | Discounty: Bulk Discount Sales | Free plan; paid from $9.90/month | 4.9 (1,273) | BOGO, free gifts and quantity discounts beside sale prices | Stores that run Buy X Get Y offers and sales from one app | | Bulk Price Editor Pro | From $20/year | 4.5 (159) | Scheduled price edits with rollback, billed yearly | Scheduled price changes on a budget, without storefront widgets | Prices, ratings and review counts as of October 18, 2026, from each app's Shopify App Store listing. Paid prices are each app's lowest regular paid plan; some listings show a first-month offer. ## What does a flash sale app have to do? A flash sale app has to act on its own at four moments. Before the start it teases the sale. At the start it sets sale prices in bulk. During the sale it shows the deadline and blocks codes on sale prices, and at the end it puts original prices back. ![Timeline of a flash sale with four stops: before the start, a coming soon page and teaser bar; at the start, sale prices set in bulk; during the sale, a countdown timer and discount codes blocked; at the end, the original prices back.](https://productessentials.app/content/images/2026/10/01-flash-sale-app-jobs-87b0ff48.png) ### Set sale prices in bulk and put them back Suppose you offer 25% off 40 products from Friday 8 PM to Saturday 8 PM. That is 40 prices to change at the start and 40 to put back at the end. Disco writes each product's price and compare-at price, so shoppers see the saving on product and collection pages before checkout, without a code. At the end it restores the prices saved before the sale. Another app that rewrites prices can undo a sale; see [why sale prices revert](https://productessentials.app/blog/shopify-sale-price-keeps-reverting/). ### Show the deadline Shoppers need to see when the sale ends. In Disco, turn on **Show countdown timer on product page** on the free Starter plan, and the timer shows only while the sale is active. The announcement bar can carry a timer too when you turn on **Show countdown timer in announcement** (Lite plan and up). Read [how to add a countdown timer](https://productessentials.app/blog/how-to-add-countdown-timer-to-shopify/). ### Give the sale a page Email and social posts need one page built for the sale. Disco's sale page has one URL and two modes (Professional plan and up). The coming soon page goes up when you save and collects emails into Shopify **Customers**, tagged `newsletter`, `disco` and the sale's name. At the start it becomes the live sale page, and it comes down at the end. See [how to create a sale page](https://productessentials.app/blog/how-to-create-a-sale-page-on-shopify/). ![Disco's live flash sale page on a phone: the Flash Sale banner and countdown, then the first products with Save badges, sale prices in dollars and the original prices struck through](https://productessentials.app/content/images/2026/10/storefront-flash-sale-page-mobile-15455850.png) ### Keep discount codes off the sale price A welcome code on top of a flash sale price cuts your margin twice. In Disco, tick **Block discount codes on sale products** in the **Discount code blocking** card (Business plan). A cart with any product on an active Disco sale can't take a code, even with full-price items. Codes other apps create as non-rejectable may still apply, so test one at checkout. See how to [stop discounts from stacking](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/). How the six apps compare on those four jobs: | App | Sets sale prices in bulk and puts them back | Countdown timer | Sale page | Blocks discount codes on sale items | | --------------------- | ------------------------------------------- | ---------------------------------- | ----------------------------- | ----------------------------------- | | Disco | Yes, automatically at the end | Yes, free plan | Yes, Professional plan and up | Yes, Business plan ($25.99/month) | | GetSale | Yes, automatically | Yes, from Basic ($9.99/month) | — | Yes, Unlimited plan ($29.99/month) | | Rockit | Yes, automatic sale resets | Yes, 1 on the free plan | — | — | | Alpha | Yes, restored when the sale ends | — | — | Yes, from Basic ($9.99/month) | | Discounty | Sale with a start and end date | Yes, from Essential ($29.90/month) | — | — | | Bulk Price Editor Pro | Scheduled edits, rollback any time | — | — | — | A dash means the feature isn't on the app's Shopify App Store listing (October 18, 2026). We compared App Store apps built to run a sale on product prices whose listing offers flash sales. We kept those with 4.5+ stars from 100+ reviews on October 18, 2026\. Amai Bulk Discount & Sales (3.8 stars) and Wi Flash Sale & Price Discount (3.9 stars) fall below that. Bold Discounts is no longer on the App Store. Heartcoding Sales & Discounts (4.9 stars) schedules sales, but its App Store listing doesn't name flash sales among its features. Apps built for checkout or volume discounts, such as Discount Mix, aren't here. Bulk editors such as Ablestar Bulk Product Editor, NA Bulk Price Editor and SA Bulk Product Editor & Price also schedule and revert price changes. They are built to edit products, not to run a sale. We kept the one with the lowest paid price, Bulk Price Editor Pro at $20 a year, as the budget pick. ## Can you run a flash sale on Shopify without an app? Partly. Shopify schedules an automatic discount with a start and end time, but shoppers see the saving only in the cart and at checkout. Bulk-editing **Price** and **Compare-at price** shows a crossed-out sale price, but the bulk editor has no end date. In Disco, a flash sale is one scheduled sale with **Active dates**. | Native option | What shoppers see | When it ends | | ----------------------------------------------------------------------------- | ----------------------------------------------------------- | --------------------------------------- | | Automatic discount (**Amount off products**) with **Active dates** | The saving in the cart and at checkout only | At its end date | | Bulk-edit **Price** and **Compare-at price** | The sale price with the original struck through | Never: you set every price back by hand | | A market catalog with a price adjustment, switched on by an **Event** rollout | Lower catalog prices; compare-at prices drop too by default | When the Event ends | In Shopify you can schedule an [automatic discount](https://help.shopify.com/en/manual/discounts/discount-types/percentage-fixed-amount?ref=productessentials.app) under **Discounts** \> **Create discount** \> **Amount off products** with **Automatic discount** and **Active dates**. It applies only in the cart and at checkout: the Help Center says [showing its saving crossed out on product pages needs a third-party app](https://help.shopify.com/en/manual/discounts/discounts-faq?ref=productessentials.app). Disco resolves this by writing and restoring sale prices on schedule. If a saving at checkout is all you need, that is enough. ### How to run a flash sale in Disco 1. **Create the sale.** Click **Create sale** and choose **Same discount**. On the **Include products** tab, pick **All products** or **Select products, collections, tags or types**. 2. **Set the discount.** Choose **Percentage**, **Amount off** or **New price**, and tick **Round to nearest** for clean prices. 3. **Schedule it.** Enter the start and end in **Active dates**. Disco writes the sale prices at the start and restores the originals at the end. 4. **Show the deadline.** Turn on **Show countdown timer on product page** (free Starter plan). For the announcement bar (Lite plan and up), turn on **Show while the sale is active** and **Show countdown timer in announcement**. To tease the sale, also turn on **Show before the sale starts** with its **Get notified!** button. ![A product page during a Disco flash sale, with the sale price, the original price struck through and Disco's countdown timer under the price](https://productessentials.app/content/images/2026/10/storefront-sale-product-desktop-b12050f9.png) 1. **Add the sale page.** Turn on **Add flash sale page** and **Add Coming Soon sale page** (Professional plan and up). 2. **Block codes, then save.** Tick **Block discount codes on sale products** in the **Discount code blocking** card (Business plan, currently $25.99/month) and save. The coming soon page and teaser bar go up as soon as you save. For a full run-up with a test sale and emails, follow [how to run a flash sale on Shopify](https://productessentials.app/blog/how-to-run-a-flash-sale-on-shopify/). ## Which flash sale app suits which store? Disco is our recommendation for a flash sale with a timer, a sale page and code blocking. GetSale suits EU stores and quantity breaks, Rockit a free start, Alpha fixed market prices and Discounty Buy X Get Y offers. Bulk Price Editor Pro suits yearly-billed price edits. ### Disco **Rating:** 4.8 ★ (105 reviews) · **Price:** Free Starter plan; paid plans from $9.99/month (Lite); code blocking on Business, $25.99/month We make Disco (Built for Shopify), on the Shopify App Store since August 2019, and it runs the flash sale from one campaign. The free Starter plan schedules sale prices and shows the product-page timer for 30 products and 2 campaigns. Lite adds banners and sale badges, Professional the coming soon and live sale page, and Business code blocking (see [pricing](https://productessentials.app/#pricing)). Where it falls short: Disco does not run BOGO or cart-level discounts. ★★★★★ Disco gives me a way to create professional looking sales, with countdown timers and more. Couldn't do it on my own without Disco. Thanks — That Kilted Guy DIY, [Shopify App Store review](https://apps.shopify.com/discount-app/reviews?ref=productessentials.app), November 19, 2025 **Best for:** Stores that want scheduled sale prices, a countdown timer, a coming soon and live sale page, and discount code blocking in one app. ### GetSale Bulk Discounts & Sales **Rating:** 4.9 ★ (332 reviews) · **Price:** Free plan; Basic $9.99/month, Standard $19.99/month, Unlimited $29.99/month GetSale (Built for Shopify) schedules catalog price changes and restores original prices automatically. The timer and banner start on Basic, and code blocking is on Unlimited. An optional EU Compliance add-on tracks prior prices. Where it falls short: its listing has no sale landing page, and code blocking requires the top plan. **Best for:** EU stores that want prior-price tracking, or sales combined with quantity breaks. ### Rockit Discounts & Sales App **Rating:** 5.0 ★ (499 reviews) · **Price:** Free plan; Starter $7.99/month, Plus $12.99/month, Professional $29.99/month Rockit (Built for Shopify) schedules sales, and its free plan covers 50 variants, 1 countdown timer and 1 volume discount. Starter covers 2,000 variants, Plus 20,000 and Professional unlimited. Where it falls short: its listing has no sale landing page or discount code blocking. **Best for:** Small stores starting on a free plan, or catalogs that want sale prices plus a simple volume discount. ### Alpha: Sale & Discount Manager **Rating:** 4.9 ★ (313 reviews) · **Price:** Free plan; Basic $9.99/month, Pro $17.99/month, Ultimate $25.99/month Alpha (Built for Shopify) runs flash, scheduled and recurring sales and restores regular prices at the end. Basic (100 products) excludes sale items from discount codes, and Ultimate adds sale prices for fixed-price markets. Alpha also includes coupons and tiered quantity discounts. Where it falls short: its listing has no countdown timer or sale page, and lower plans cap monthly products. **Best for:** Stores that set fixed prices per Shopify market and want sale prices on them. ### Discounty: Bulk Discount Sales **Rating:** 4.9 ★ (1,273 reviews) · **Price:** Free Starter plan; Lite $9.90/month, Essential $29.90/month, Discounty $49.90/month Discounty (Built for Shopify) is the most-reviewed app in this comparison. It puts products on sale with a start and end date, and Lite adds Buy X Get Y and free gift offers. Where it falls short: the countdown timer starts on Essential, with no sale page or code blocking listed. **Best for:** Stores that run BOGO, free gift or tiered quantity promotions alongside scheduled sales in one app. ### Bulk Price Editor Pro **Rating:** 4.5 ★ (159 reviews) · **Price:** Basic $20/year, Pro $40/year, Super $60/year (limited-time pricing; free plan only for staff, partner and trial stores) Bulk Price Editor Pro (Built for Shopify) is a price-editing tool billed by the year. It bulk-edits price and compare-at price, runs changes now or on a schedule, and lets you roll an edit back any time. Where it falls short: it is a back-office editor, with no timer, banner, sale page or code blocking. **Best for:** Merchants who only need scheduled bulk price changes and rollbacks at a low yearly cost. ## What is the best bulk discount app for Shopify? Disco is our pick for the best bulk discount app for Shopify when you want sale and compare-at prices set across products or collections and restored at the end. If "bulk discount" means buy more, save more, Disco doesn't do that: GetSale, Discounty, Rockit or Alpha do. In Shopify you can bulk-edit **Price** and **Compare-at price** for many products at once, but the bulk editor has no end date, so you set every price back by hand when the sale ends. Disco resolves this by applying one discount across your whole selection on a schedule and restoring every original price. ### How to put products on sale in bulk in Disco 1. **Choose the discount type.** Click **Create sale**, then choose **Same discount** for one discount on everything, or **Different discounts** for a different discount per product (Professional plan and up). 2. **Select the products.** On the **Include products** tab, pick **All products**, or use **Add product(s) by tag, type, title or vendor** to select all products that match. 3. **Leave items out.** On the **Exclude products / collections** tab, exclude specific products or whole collections, and tick **Exclude draft and archived products** (Lite plan and up). 4. **Set the dates and save.** Enter the start and end in **Active dates**; Disco restores every price when the sale ends. The free Starter plan covers 30 discounted products, Lite covers 300 and Professional covers 1,500 (see [pricing](https://productessentials.app/#pricing)). These limits count products, not variants. On Lite, 300 products can cover more variants than the 2,000 Rockit allows on its $7.99/month Starter plan. Follow [how to put your entire Shopify store on sale](https://productessentials.app/blog/shopify-bulk-discounts/) step by step. ## FAQ What is the best flash sale app for Shopify? Disco is our pick when you want scheduled bulk sale prices, a countdown timer, a sale page and discount code blocking in one app. GetSale is the strongest alternative, above all for EU stores that want its prior-price compliance add-on or quantity breaks. What is the best bulk discount app for Shopify? Disco is our pick when you want sale and compare-at prices set across many products on a schedule and restored automatically at the end. If by bulk discount you mean quantity breaks where buying more lowers the unit price, look at GetSale, Discounty, Rockit or Alpha instead. Is there a free flash sale app for Shopify? Yes: Disco's free Starter plan includes sale scheduling and the product-page countdown timer for up to 30 discounted products and 2 campaigns, with no credit card needed. Rockit's free plan covers up to 50 product variants, sale scheduling and 1 countdown timer. Do flash sale apps put prices back after the sale? Disco, GetSale, Rockit and Alpha all state on their App Store listings that original prices are restored automatically when a scheduled sale ends. Bulk Price Editor Pro schedules price edits and includes a rollback you can run at any time. Can you block discount codes during a Shopify flash sale? Yes: in Disco, tick **Block discount codes on sale products** (Business plan, currently $25.99/month), and GetSale and Alpha also list code controls. Disco doesn't block Shopify's automatic discounts, so [restrict them](https://productessentials.helpscoutdocs.com/article/22-exclude-products-on-sale-from-shopify-discount-codes?ref=productessentials.app) to a collection with **Compare at price** **is not set**, or **Compare-at price** **is empty** in legacy smart collections. ## When should you set up your flash sale app? Install your app a week before the sale and run a one-product test sale that starts in 10 minutes, so you see prices change and revert on their own. Then build and save the real sale a few days ahead. In Disco, the coming soon page and teaser bar go up as soon as you save. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=best-shopify-flash-sale-apps) --- **Next:** [How to run a flash sale on Shopify](https://productessentials.app/blog/how-to-run-a-flash-sale-on-shopify/) gives you a 24-hour template to run with any of these apps, and [our BFCM apps guide](https://productessentials.app/blog/best-shopify-apps-black-friday-cyber-monday-bfcm/) covers the rest of your Black Friday setup. ### How to run a Shopify early access Black Friday sale URL: https://productessentials.app/blog/shopify-early-access-black-friday-sale/ Last updated: 2026-10-18T10:58:53.000Z To run a Shopify early access Black Friday sale, collect signups on a coming soon page, give them a segment-only discount code, and schedule the public sale to start on its own. Open signups in early November, and send the code a week or two before Friday, November 27, 2026. Because Disco changes prices for every shopper, the early window uses a Shopify discount code; Disco supplies the coming soon page, tagged signups and scheduled launch. This is the "early access, then deeper" shape in our [BFCM playbook](https://productessentials.app/blog/bfcm-playbook/). In this guide 1. [Who should get early access to your Black Friday sale?](#who-should-get-early-access-to-your-black-friday-sale) 2. [What does an early access Black Friday timeline look like?](#what-does-an-early-access-black-friday-timeline-look-like) 3. [How do you set up a Shopify coming soon page with email signup?](#how-do-you-set-up-a-shopify-coming-soon-page-with-email-signup) 4. [How do you give customers early access to a sale on Shopify?](#how-do-you-give-customers-early-access-to-a-sale-on-shopify) 5. [FAQ](#faq) 6. [When should you open early access signups?](#when-should-you-open-early-access-signups) ## Who should get early access to your Black Friday sale? Give early access to your email subscribers, VIPs by spend or order count, loyalty members, and everyone who signs up on your coming soon page for this sale. [Shopify's own advice](https://www.shopify.com/blog/8-awesome-black-friday-email-campaigns-you-can-steal-this-holiday-season?ref=productessentials.app) is to target your most engaged subscribers, loyal customers, or VIPs "who've opted into early access". | Group | How to find them in Shopify | Why they get it first | | ---------------------------- | ----------------------------- | --------------------------- | | **Email subscribers** | Subscribed to email marketing | They asked to hear from you | | **VIPs** | Amount spent or order count | They buy the most | | **Loyalty members** | Your loyalty app's tag | They joined for perks | | **Coming soon page signups** | Tag with the sale's name | They asked for this sale | Shopify's [segmentation guide](https://www.shopify.com/enterprise/blog/black-friday-cyber-monday-email-segments?ref=productessentials.app) suggests early access for subscribers and notes that "What VIP means is specific to each business." Its example, CityLocs, counted customers who purchased more than 3 times or spent more than $500 in a single order, and gave them special discounts 3 to 4 days before the BFCM weekend. Keep the early discount visibly lighter than Friday's, as in our BFCM playbook (for example, 20% early and 30% on Black Friday), so the list gets first pick of sizes and stock while Friday still has news. One Shopify limit to know: a [segment-only discount applies to existing customer profiles only](https://help.shopify.com/en/manual/discounts/discounts-faq?ref=productessentials.app), and a shopper without a profile joins a segment only after their first order. Signups from Disco's coming soon page land in Shopify **Customers** with their tag, so they already have a customer profile and don't need a first order to join the segment. ## What does an early access Black Friday timeline look like? An early access Black Friday timeline has 4 milestones, as in our BFCM playbook example. Signups open on Monday, November 2\. Early access starts for your list on Monday, November 16, with a 20% code. The public sale starts at 12:00 AM on Friday, November 27, at 30% off. It ends at 11:59 PM on Monday, November 30. ![Early access Black Friday timeline in two lanes: your list signs up from November 2, gets 20% early access from November 16 and the 30% sale from November 27; everyone else sees the coming soon page until November 27, then the 30% sale; prices go back after November 30.](https://productessentials.app/content/images/2026/10/01-early-access-timeline-b14dae32.png) Your list shops 11 days before everyone else; the coming soon page stays up until the public launch. | Date | What happens | Who can buy | | ------------------------- | ---------------------------------------------------------------------------- | -------------------------- | | **Mon, Nov 2** | You save the sale in Disco; the coming soon page goes up and collects emails | Nobody at a discount | | **Mon, Nov 16** | The 20% code starts in Shopify; you email it to the list | The segment, with the code | | **Thu, Nov 26** | The code ends at 11:59 PM | The segment, until then | | **Fri, Nov 27, 12:00 AM** | Disco starts the 30% sale; the coming soon page becomes the sale page | Everyone | | **Mon, Nov 30, 11:59 PM** | The sale ends; prices go back and the sale page comes down | Nobody at a discount | [Shopify suggests](https://www.shopify.com/blog/8-awesome-black-friday-email-campaigns-you-can-steal-this-holiday-season?ref=productessentials.app) letting early birds shop "two to five days before the general public". If 11 days of a lighter discount is too long for your margin, start the code on Monday, November 23 instead and keep the other dates. Until a scheduled Disco sale starts, its products and discount can still be changed, so you can adjust the public sale after seeing what moved in early access. ## How do you set up a Shopify coming soon page with email signup? In Disco, set up a Shopify coming soon page with email signup by turning on **Add Coming Soon sale page** for your Black Friday sale and saving it the day signups open. The page goes up on save, collects emails into Shopify **Customers** tagged with the sale's name, and becomes the live sale page when the sale starts. In Shopify you can collect signups on the [password page](https://help.shopify.com/en/manual/online-store/themes/password-page?ref=productessentials.app), which has an **Email signup banner** section, or on a page with a [**Newsletter** section](https://help.shopify.com/en/manual/online-store/themes/os20/customize/theme-newsletter?ref=productessentials.app). But the password page needs **Private mode**, which hides your whole store from visitors and search engines, and a separate page must be swapped for the sale by hand. Disco resolves this by switching one page from coming soon to live at the sale's start. ### How to add a coming soon page with email signup in Disco 1. **Create the sale.** Click **Create sale**, choose **Same discount**, then **Percentage**, and enter 30. 2. **Pick the products.** On the **Include products** tab, choose **All products**, or **Select products, collections, tags or types** for part of the catalog. 3. **Name the sale.** Disco uses the name as the sale page's title and as the tag on every signup. This guide uses "Black Friday". If an earlier sale already tagged signups with that name, pick a new one, such as "Black Friday 2026", so last year's signups stay out of the segment. 4. **Schedule the public launch.** In **Active dates**, start the sale on November 27, 2026 at 12:00 AM and end it on November 30, 2026 at 11:59 PM. Disco starts and ends it on its own; see our [scheduling guide](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) for the full setup. 5. **Turn on the sale page.** In the **Flash sale page** card, turn on **Add flash sale page** (available on the Professional plan and up). 6. **Add the coming soon page.** In the **Coming soon page** card, turn on **Add Coming Soon sale page**. ![Disco's Flash sale page and Coming soon page cards for a Black Friday sale, with Add Coming Soon sale page switched on](https://productessentials.app/content/images/2026/10/disco-coming-soon-card-desktop-22d1231f.png) 1. **Save it on November 2.** The coming soon page goes up as soon as you save. ![Disco's coming soon page for a Black Friday sale on a Shopify storefront, with an email field to sign up before the sale starts](https://productessentials.app/content/images/2026/10/storefront-coming-soon-page-desktop-2658c95a.png) Add the page to your store menu with the steps in our [sale page guide](https://productessentials.app/blog/how-to-create-a-sale-page-on-shopify/); the [Disco help doc](https://help.productessentials.app/article/32-flash-sale-page?ref=productessentials.app) covers the page options. Because the coming soon and live sale pages share one URL, a link you share in early November becomes the live page on November 27\. Our [teaser and waitlist guide](https://productessentials.app/blog/shopify-flash-sale-page-waitlist-timer/) covers the announcement bar and launch emails. ## How do you give customers early access to a sale on Shopify? Disco tags every coming soon page signup with the sale's name, so your early access list already sits in Shopify **Customers**. Turn that tag into a customer segment, give the segment a discount code that runs from early access to the night before launch, and let Disco start the public sale on November 27. Disco changes a product's price for every shopper, so the gate is a Shopify setting. These are the 3 common gates, and only the first keeps the discount to one group. | Gate | Who gets in | Trade-off | | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------- | | **Segment-only code** | The segment, by checkout email or phone | Existing customers only; the saving shows at checkout | | **Hidden link** or [**Unlisted**](https://help.shopify.com/en/manual/products/add-update-products?ref=productessentials.app) products | Anyone with the link | Links get shared; anyone who finds a product sees the lower price | | **Password page** | Anyone with the password | Hides the whole store from visitors and search engines | Unlisted products are "accessible only by direct URL", which suits a new drop more than products you already sell. In Shopify you can [limit a discount code to a customer segment](https://help.shopify.com/en/manual/discounts/managing-discounts?ref=productessentials.app), and when every email subscriber should get early access, a segment of subscribers is all you need. When only this sale's signups should get in, Disco tags each of them with the sale's name, so the segment needs a single tag filter. ### How to give your Disco signups early access with a Shopify code 1. **Use the sale's name as your list.** Every signup on the coming soon page lands in Shopify **Customers**, tagged `newsletter`, `disco` and the sale's name, here `Black Friday`. 2. **Build the segment.** In Shopify, go to **Customers** \> **Segments** \> [**Create segment**](https://help.shopify.com/en/manual/customers/customer-segmentation/create-customer-segments?ref=productessentials.app), enter `customer_tags CONTAINS 'Black Friday'` with your sale's exact name ([Shopify's segment filters](https://help.shopify.com/en/manual/customers/customer-segmentation/reference-guide/shopify-segments?ref=productessentials.app) match the whole tag but ignore case), click **Run query**, then **Save segment** and name it "Black Friday early access". New signups join it automatically. 3. **Create the code from the segment.** Open the segment, click [**Use segment** \> **Discount**](https://help.shopify.com/en/manual/customers/customer-segmentation/manage-customer-segments?ref=productessentials.app), and choose [**Amount off products**](https://help.shopify.com/en/manual/discounts/discount-types/percentage-fixed-amount?ref=productessentials.app). Under **Method**, select **Discount code** and enter a code such as EARLYACCESS20\. Set 20% in **Value**, then in **Applies to** choose **Specific collections** or **Specific products** and add the products in your Black Friday sale. 4. **Limit it to the segment.** In the **Eligibility** section, check that **Customer segments** is selected with "Black Friday early access" added. ![Shopify admin discount code editor with Eligibility set to Customer segments and the Black Friday early access segment added](https://productessentials.app/content/images/2026/10/shopify-discount-eligibility-desktop-93ab54bb.png) 1. **End it before Disco's sale starts.** In **Active dates**, set the start date to November 16, click **Set end date**, and end it on November 26 at 11:59 PM. Otherwise the 20% code stacks on the 30% sale price; our [guide to stopping discounts from stacking](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/) explains why. On the Business plan, Disco's **Block discount codes on sale products** also keeps codes off any cart with a sale product while the sale runs. 2. **Email the code on November 16.** Send it to the segment, and ask shoppers to check out with the email address they signed up with. ## FAQ What is a Shopify early access Black Friday sale? A Shopify early access Black Friday sale lets a chosen group (subscribers, VIPs, or signups) buy at a discount before the public sale opens on Friday, November 27, 2026\. On Shopify, the gate that keeps the price to that group is a discount code limited to a customer segment. How to give customers early access to a sale on Shopify without a password page? Give them a discount code limited to a customer segment, such as the customers Disco's coming soon page tagged. A password page hides your whole store, while a segment code leaves the store open and shows the lower price only at checkout. Does a Shopify coming soon page with email signup need a paid plan? Shopify's built-in password page is free but hides your whole store. In Disco, the flash sale page, which the coming soon page turns into, starts on the Professional plan (see current [pricing](https://productessentials.app/#pricing)). Can Disco show the early access price only to VIPs? No: Disco changes the product's price for every shopper. Use a Shopify discount code limited to your VIP segment for the early window and Disco for the public sale. Should the early access discount be smaller than the Black Friday discount? Our BFCM playbook keeps it visibly lighter, for example 20% early and 30% from Friday, so the list gets first pick of stock and Friday still has news. ## When should you open early access signups? Open signups by Monday, November 2, 2026\. That gives the list 2 weeks to grow before early access starts. Build the Black Friday sale in Disco now, turn on the coming soon page, and save it on the day signups should open. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-early-access-black-friday-sale) --- **Next:** the [BFCM playbook](https://productessentials.app/blog/bfcm-playbook/) plans the whole season around these dates, and the [sale page guide](https://productessentials.app/blog/how-to-create-a-sale-page-on-shopify/) builds the page your early access list lands on. ### How to build a Black Friday sale page in Shopify URL: https://productessentials.app/blog/how-to-create-a-sale-page-on-shopify/ Last updated: 2026-10-18T08:44:48.000Z Here's how to create a sale page on Shopify for BFCM: a collection that fills itself with your discounted products, a Black Friday landing page on top of it, a link in your menu, and a cleanup after Cyber Monday. Disco names the collection after the sale, publishes the sale page when the sale starts and takes it down when it ends. In this guide 1. [How do you set up a Shopify automatic sale collection with compare at price?](#how-do-you-set-up-a-shopify-automatic-sale-collection-with-compare-at-price) 2. [How do you create a Black Friday collection on Shopify?](#how-do-you-create-a-black-friday-collection-on-shopify) 3. [What should a Shopify BFCM sale page include?](#what-should-a-shopify-bfcm-sale-page-include) 4. [How do you build a Shopify Black Friday landing page?](#how-do-you-build-a-shopify-black-friday-landing-page) 5. [How do you add a sale collection to your Shopify menu?](#how-do-you-add-a-sale-collection-to-your-shopify-menu) 6. [How do you hide or remove the sale page after BFCM?](#how-do-you-hide-or-remove-the-sale-page-after-bfcm) 7. [FAQ](#faq) 8. [When should you build your BFCM sale page?](#when-should-you-build-your-bfcm-sale-page) ## How do you set up a Shopify automatic sale collection with compare at price? A Shopify automatic sale collection uses one condition on compare at price: **Compare at price** **is set** (in admins still on smart collections: **Compare-at price** **is not empty**). Every product with a compare-at price joins on its own. Disco writes the compare-at price when your sale starts, so the sale's products fill it with no tagging. In Shopify you bulk-edit **Price** and [**Compare-at price**](https://productessentials.app/blog/shopify-compare-at-price-complete-guide/), but after the sale you clear every compare-at price by hand, or the products stay in the sale collection. Disco resolves this by restoring the saved prices when the sale ends, so products that had no compare-at price before the sale leave the collection. ### How to create the compare-at sale collection in Shopify 1. **Add the collection.** From your Shopify admin, go to **Products** \> **Collections** and click [**Add collection**](https://help.shopify.com/en/manual/products/collections/create-collection?ref=productessentials.app). 2. **Name it.** Click **Add title** and enter a name such as "Sale". 3. **Add the condition.** In the **Products** source, click **Add condition**, then choose **Compare at price** and **is set**. ![Shopify admin collection editor for a Sale collection, with the condition Compare at price is set](https://productessentials.app/content/images/2026/10/smart-collection-compare-at-desktop-6ddc5089.png) 1. **Choose how conditions match.** If you add a second condition, for example a tag to keep gift cards out, select **Match all conditions**. 2. **Save.** Click **Save**. Shopify adds every matching product automatically. 3. **Check where it shows.** Under **Sales channels**, keep the Online Store selected. You can also set a date to publish it. If your admin still shows a **Collection type** section, click **Smart**, select **all conditions**, then choose **Compare-at price** and **is not empty** (see examples in the [Shopify Help Center](https://help.shopify.com/en/manual/products/collections/smart-collections/examples?ref=productessentials.app)). **What the condition catches** - **A compare-at price of 0 counts.** Shopify treats any value as set, 0 included. - **Every variant, in the new model.** The **is set** rule [requires every variant to have a compare-at price](https://help.shopify.com/en/manual/products/collections/conditions?ref=productessentials.app), so a product with one size on sale stays out. The older **is not empty** requires only one. - **Permanent "was" prices.** Products with permanent compare-at prices join too. This catches every marked-down product, so Black Friday needs its own collection. ## How do you create a Black Friday collection on Shopify? Create the Black Friday sale in Disco, name it "Black Friday" and check **Create collection**: Disco builds a collection of just that sale's products, named after the sale (free Starter plan). On the Professional plan, **Autotagging** adds a tag when the sale starts and removes it when it ends, to feed a collection you already have. In Shopify you can make an automated collection with a tag condition, but you tag and untag every product by hand. Disco resolves this by building the collection from the sale's products or tagging them on its dates. ### How to create a Black Friday collection in Disco 1. **Create the sale.** Click **Create sale** and choose **Same discount**. 2. **Name it "Black Friday".** Type the name shoppers will see, then check **Create collection** under it. Disco uses it as the collection's name, the sale page's title and the sale's name in the admin. ![Disco's sale editor for a Black Friday sale, with the Create collection checkbox under the sale's name outlined](https://productessentials.app/content/images/2026/10/disco-create-collection-desktop-fd0dc9be.png) 1. **Pick the products.** On the **Include products** tab, choose **All products** or **Select products, collections, tags or types**. 2. **Set the discount and the dates.** Choose **Percentage**, **Amount off** or **New price**, then set **Active dates** from November 27, 2026, 12:00 AM to November 30, 2026, 11:59 PM. 3. **Feed an existing collection (optional).** In the **Autotagging** card, turn on **Add tag to products on sale** (Professional plan and up), then use that tag as the condition of an automated collection ([help doc](https://help.productessentials.app/article/6-add-products-on-sale-to-existing-collection?ref=productessentials.app)). 4. **Save.** ## What should a Shopify BFCM sale page include? A Shopify BFCM sale page shows the start and end, the sale price with the real original struck through, a timer that ends with the sale, filters, a layout that works on a phone, and the same offer as your ads. Disco handles the prices and the timer; the rest is your page. | What it needs | Why | In Disco | | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | **Dates and times** | Shoppers plan around them; your page should match your ads' wording and dates ([Shopify](https://www.shopify.com/enterprise/blog/black-friday-ads-facebook?ref=productessentials.app)) | **Active dates** set the start and end | | **The sale price with the original struck through** | The saving shows before checkout. [Shopify's advice](https://www.shopify.com/enterprise/blog/black-friday-ads-facebook?ref=productessentials.app): the "was" price must be a real previous selling price | Disco writes **Price** and **Compare-at price**, so product and collection pages show both | | **A timer to the real end** | Shopify's BFCM checklist lists countdown timers as an urgency tool ([Shopify](https://www.shopify.com/blog/bfcm-campaigns?ref=productessentials.app)) | **Show countdown timer on product page**, free Starter plan | | **Filters and sorting** | [Shopify's checklist](https://www.shopify.com/blog/bfcm-campaigns?ref=productessentials.app): "Enable site-wide search and filtering for faster navigation." | Your theme's collection filters | | **A phone-first layout** | 46.9 million consumers shopped online by mobile device on Cyber Monday 2025, [Shopify reports](https://www.shopify.com/blog/bfcm-campaigns?ref=productessentials.app), citing the NRF | Open the sale page on your phone once you save, and again after the start | | **The same offer as your ads** | [Shopify](https://www.shopify.com/blog/bfcm-campaigns?ref=productessentials.app): "The offer in your Meta or Google ad should match exactly what's on the page it points to." | One sale sets the discount for the collection, the page and the widgets | ![Two products on Disco's flash sale page for a Black Friday preview sale, each with its sale price in dollars and the original price struck through](https://productessentials.app/content/images/2026/10/storefront-flash-sale-page-desktop-ddcd883d.png) If you sell to the EU, use our [Omnibus directive guide](https://productessentials.app/blog/shopify-omnibus-directive-lowest-price-30-days/) to show the lowest price from the last 30 days. ## How do you build a Shopify Black Friday landing page? In Disco, turn on **Add flash sale page** (Professional plan and up) and **Add Coming Soon sale page** for the Black Friday sale. A coming soon version goes up when you save and can collect emails. At 12:00 AM on November 27 the same URL becomes the live sale page, and Disco takes it down when the sale ends. In Shopify you can build one with **Online Store** \> **Pages** \> **Add page** and a page template you create in the theme editor ([**Create template**](https://help.shopify.com/en/manual/online-store/themes/theme-structure/templates?ref=productessentials.app)), with a section showing your Black Friday collection. The page doesn't follow the sale: you can schedule it to publish, but you switch the copy at midnight and hide it afterward by hand. Disco resolves this by switching the page on the sale's dates. ### How to create a Black Friday landing page in Disco 1. **Open the Black Friday sale.** Use the Black Friday sale you created above, with its **Active dates**. 2. **Turn on the live page.** In the **Flash sale page** card, turn on **Add flash sale page**. Disco uses the sale's name as the page title. 3. **Add the teaser version.** In the **Coming soon page** card, turn on **Add Coming Soon sale page**. ![Disco's Flash sale page and Coming soon page cards for a Black Friday sale, with Add flash sale page and Add Coming Soon sale page switched on](https://productessentials.app/content/images/2026/10/disco-flash-sale-page-cards-desktop-53a3101b.png) 1. **Save on the day the teaser should start.** The coming soon page goes up as soon as you save. Open the page on your phone once you save, and again a few minutes past 12:00 AM. Right after it is created, it may show original prices for up to 5 minutes. Collected emails land in Shopify **Customers**, tagged `newsletter`, `disco` and the sale's name. See our [teaser and waitlist guide](https://productessentials.app/blog/shopify-flash-sale-page-waitlist-timer/) and the [help doc](https://help.productessentials.app/article/32-flash-sale-page?ref=productessentials.app) for settings. ## How do you add a sale collection to your Shopify menu? In Shopify, go to **Content** \> **Menus**, open your main menu, click **Add menu item**, pick the collection under **Collections** (or paste the sale page's link), then click **Save menu**. Disco's sale page keeps one URL from teaser to live sale, so you can add the menu item the day you save the sale. Disco's [help doc](https://help.productessentials.app/article/29-how-to-add-landing-page-link-to-top-menu?ref=productessentials.app) shows where to copy the sale page's link. 1. **Open the menu.** From your Shopify admin, go to [**Content** \> **Menus**](https://help.shopify.com/en/manual/online-store/menus-and-links/editing-menus?ref=productessentials.app) and click your main menu. 2. **Add the item.** Click **Add menu item** and type a name in **Name**, such as "Black Friday". 3. **Pick the link.** If the Black Friday collection doesn't exist yet, create it first. Click **Search or paste a link**, choose **Collections** and select the Black Friday collection, or paste the URL of the Disco sale page. Click **Add**. 4. **Move it to the front.** Drag it by its handle to where shoppers look first, then click **Save menu**. ## How do you hide or remove the sale page after BFCM? Disco takes the sale page down at 11:59 PM on November 30, restores prices, deletes the collection **Create collection** built and removes the **Autotagging** tag. You remove the menu item, hide a collection you keep, and redirect the old URL so nobody lands on an empty page. ![Checklist for after Cyber Monday: Disco takes the sale page down, deletes the collection, removes the Autotagging tag and restores the prices on its own; you remove the menu item, hide a collection you keep and redirect the old URL.](https://productessentials.app/content/images/2026/10/01-after-cyber-monday-checklist-593e5a1d.png) 1. **Remove the menu item.** In **Content** \> **Menus**, open the menu, hover over the item, click the trash icon, click **Remove**, then **Save menu**. The deleted Black Friday collection's menu item [goes with it](https://help.shopify.com/en/manual/online-store/menus-and-links/editing-menus?ref=productessentials.app). 2. **Hide a collection you keep.** For a collection fed by **Autotagging**, open it in **Products** \> **Collections**, deselect the Online Store in **Sales channels**, and click **Save**. Keep it for next year. 3. **Redirect its URL.** In **Content** \> **Menus**, click [**View URL Redirects**](https://help.shopify.com/en/manual/online-store/menus-and-links/url-redirect?ref=productessentials.app), then **Create URL redirect**. Enter the old collection URL (for example `/collections/black-friday`) in **Redirect from** and your year-round sale collection in **Redirect to**, then click **Save redirect**. 4. **Check it in a private window.** Open the old URL and three products that were on sale. A redirect needs a 404, which a hidden or deleted collection returns. If you make a hidden collection visible again, Shopify deletes the redirect. Your year-round compare-at sale collection stays up. ## FAQ How to create a sale page on Shopify for free? Disco's free Starter plan includes **Create collection** for up to 30 discounted products and 2 campaigns; the flash sale page starts on the Professional plan. A Shopify page or collection costs nothing but changes by hand. How to create Black Friday collection on Shopify without tagging every product? Check **Create collection** in a Disco sale named "Black Friday", or turn on **Autotagging** (Professional plan) to feed an automated collection. Does a Shopify automatic sale collection compare at price include every variant? With the new model's **is set** rule, it matches a product only when all variants have a compare-at price. The older **is not empty** condition includes a product when any variant has one. How to add sale collection to Shopify menu before the sale starts? Go to **Content** \> **Menus** and add a menu item for your collection. Link Disco's sale page, which keeps one URL from the coming soon page to the live sale. ## When should you build your BFCM sale page? Build your Shopify Black Friday landing page this week, well before Friday, November 27, 2026\. [Shopify's own checklist](https://www.shopify.com/blog/bfcm-campaigns?ref=productessentials.app) says to build and publish your BFCM collection pages and landing pages before the weekend. Install Disco, build the Black Friday sale, and save it on the day the coming soon page should go up. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=how-to-create-a-sale-page-on-shopify) --- **Next:** our [teaser and waitlist guide](https://productessentials.app/blog/shopify-flash-sale-page-waitlist-timer/) builds the run-up to the sale, and the [compare-at price guide](https://productessentials.app/blog/shopify-compare-at-price-complete-guide/) explains the two price fields behind every sale page. ### How to schedule a sale on Shopify (starts and ends automatically) URL: https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/ Last updated: 2026-10-18T08:41:36.000Z In Disco, click **Create sale**, choose the products and discount, and set the start and end date and time under **Active dates**. Disco changes prices at the start and restores them at the end, taking down the timer and banners. That's how to schedule a sale on Shopify so shoppers see the sale price before checkout; Shopify's scheduled automatic discounts apply only in the cart and at checkout. In this guide 1. [Can you schedule a sale on Shopify without an app?](#can-you-schedule-a-sale-on-shopify-without-an-app) 2. [How do you schedule price changes on Shopify?](#how-do-you-schedule-price-changes-on-shopify) 3. [How do you schedule a Black Friday sale on Shopify?](#how-do-you-schedule-a-black-friday-sale-on-shopify) 4. [When should a Shopify Black Week sale start and end?](#when-should-a-shopify-black-week-sale-start-and-end) 5. [How do sale prices change when the scheduled sale starts?](#how-do-sale-prices-change-when-the-scheduled-sale-starts) 6. [How do you end a sale automatically on Shopify?](#how-do-you-end-a-sale-automatically-on-shopify) 7. [Checklist before scheduling a Shopify sale](#checklist-before-scheduling-a-shopify-sale) 8. [FAQ](#faq) 9. [Schedule the next one, then go to bed](#schedule-the-next-one-then-go-to-bed) ## Can you schedule a sale on Shopify without an app? Partly. Shopify can schedule an automatic discount with **Active dates**, but shoppers see the saving only in the cart and at checkout. On the Basic plan or higher, a rollout **Event** can switch a catalog's prices on for a set period. Flow has no price action, and Launchpad is Shopify Plus only. The difference is visibility. A scheduled discount applies at checkout, whereas a scheduled price change rewrites what the product page shows. Shopify's Help Center states that [crossed-out prices on product and collection pages need a third-party app](https://help.shopify.com/en/manual/discounts/discounts-faq?ref=productessentials.app). | Native option | What shoppers see | When it ends | | ---------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | Automatic discount (e.g. **Amount off products**) with **Active dates** | The saving in the cart and at checkout | Stops at its end date and time | | Catalog **Price adjustment** \+ rollout **Event** (Basic plan or higher) | Catalog prices | Rolls back to the catalog's current prices; Shopify POS and product feeds can show the sale prices until their next sync | | Shopify Flow: **Scheduled time** \+ **Send Admin API request** (a mutation you write yourself) | Whatever the mutation changes | Only if you build a second workflow | | Launchpad (Shopify Plus only): product prices for an event | Sale prices across sales channels | Prices and compare-at prices go back | If you run a cart-level offer or a discount code, you can schedule a sale on Shopify without an app: set the discount's **Active dates**, which follow your Shopify admin's time zone. For an app comparison, see [our BFCM apps guide](https://productessentials.app/blog/best-shopify-apps-black-friday-cyber-monday-bfcm/). ## How do you schedule price changes on Shopify? In Disco, you schedule the price change itself: a sale's **Active dates** set its exact start and end. Disco writes each product's sale price at the start, keeping the original as the compare-at price to show savings before checkout. When it ends, Disco restores the originals. Several sales can run at once. In Shopify you can change **Price** and **Compare-at price** by hand or with the bulk editor, but neither has a schedule. A rollout **Event** can switch on a catalog's **Price adjustment**, but by default it lowers compare-at prices too, so a crossed-out original means setting compare-at prices manually. Disco resolves this by scheduling the product prices themselves and restoring them when the sale ends. ### How to schedule price changes in Disco 1. **Click Create sale**, then under **Choose discount campaign type** pick **Same discount** or **Different discounts** (a discount per product, from the Professional plan). 2. **Choose the products** on the **Include products** tab: select **All products**, or **Select products, collections, tags or types**. To keep items at full price, use the **Exclude products / collections** tab (from the Lite plan). For a whole store or a collection, see [how to put your entire store on sale](https://productessentials.app/blog/shopify-bulk-discounts/). 3. **Set the discount**: choose **Percentage**, **Amount off** or **New price**, and use **Round to nearest** for clean prices. 4. **Name the sale**: Disco uses the name as the collection name, the sale page title and in the admin. 5. **Set the Active dates**: enter the exact start and end date and time, weeks ahead if you like. Disco reads these times in your browser's time zone, not the store's (**Settings** \> **General**), so if your computer is on another zone, convert them first. 6. **Add the storefront pieces**: pick **Show countdown timer on product page**, and from the Lite plan the announcement bar's **Show while the sale is active** and **Sale badges**. 7. **Save it.** Until the sale starts, you can still change its products and discount. ![Scheduling a sale in Disco: the Create sales campaign screen for a "Black Friday Weekend" sale at 25% off all products, with Active dates from 2026-11-27, 00.00 to 2026-11-30, 23.59. The Summary on the right reads Nov 27, 2026, 12:00 AM to Nov 30, 2026, 11:59 PM.](https://productessentials.app/content/images/2026/10/03-disco-schedule-price-changes-0a3cee08.png) The free Starter plan schedules sales for up to 30 discounted products and 2 campaigns ([compare plans](https://productessentials.app/#pricing)). Help doc: [create a sale on individual products](https://help.productessentials.app/article/13-create-sale-on-individual-products?ref=productessentials.app). ## How do you schedule a Black Friday sale on Shopify? In Disco, create one sale with **Active dates** from Friday, November 27, 2026, 12:00 AM to Monday, November 30, 2026, 11:59 PM. Build it a week early and test it. Until it starts you can still change the products and discount. Disco ends it on time and restores every price. In Shopify you can schedule an automatic discount under **Active dates** for the same window, but shoppers see the Black Friday saving only in the cart and at checkout. Disco resolves this by showing the Black Friday price on product and collection pages from 12:00 AM on November 27. Here is an example schedule for a US store on Eastern Time. | When (Eastern Time) | What happens | Where | | ----------------------------- | ---------------------------------------------------------- | --------------------------------------------------------- | | By Friday, November 20, 2026 | Sale built and saved; a ten-product test sale passed | Disco: **Create sale**, **Active dates** | | Before the start | Teaser bar announces the sale, with an email signup | Disco: **Show before the sale starts** (Lite plan and up) | | Friday, November 27, 12:00 AM | Sale prices go live; timer, bar and badges appear | Disco, automatically | | Friday, November 27, 12:05 AM | Launch email, after you check one product | Your email tool | | Monday, November 30, 11:59 PM | Sale ends; prices restored; timer, bars and badges removed | Disco, automatically | Plan in your store's time zone (Shopify **Settings** \> **General**) and write it in the plan and the email tool. Disco's **Active dates** follow your browser's time zone, so convert them first or use a computer set to the store's zone. Customers in other zones see the sale go live at the same instant, at their own local time. ### How to schedule a Black Friday sale in Disco 1. **Build the sale** with the **Active dates** above. 2. **Tick Block discount codes on sale products** in the **Discount code blocking** card (Business plan) so welcome and influencer codes don't [stack on the Black Friday price](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/). 3. **Turn on the announcement bar** using **Show before the sale starts** with its **Get notified!** email signup (Lite plan and up). ## When should a Shopify Black Week sale start and end? For an EU store, our example Black Week runs from Monday, November 23, 2026, 12:00 AM CET to Monday, November 30, 11:59 PM CET. In Disco that is one sale with those **Active dates**. For a deeper Black Friday price, add a second sale on the same products from November 27: the higher saving applies. In Shopify you can schedule two automatic discounts with **Active dates**, one from November 23 and a deeper one from November 27, but shoppers see either saving only in the cart and at checkout. Disco resolves this by showing the Black Week price, then the deeper Black Friday price, on product and collection pages, with the original struck through. If you sell to customers in the EEA, a price reduction must show [the lowest price you charged in the 30 days before it](https://help.shopify.com/en/manual/compliance/legal/pricing-indication-directive?ref=productessentials.app). For a November 23 start that window opens October 24, so leave those products' prices alone from then. See our [Omnibus Directive on Shopify](https://productessentials.app/blog/shopify-omnibus-directive-lowest-price-30-days/) guide for country rules and deepening sales. ![Timeline of November 23 to 30, 2026: an EU store's Black Week sale runs from Monday, November 23, 12:00 AM to Monday, November 30, 11:59 PM CET, and a US store's Black Friday to Cyber Monday sale runs from Friday, November 27, 12:00 AM to Monday, November 30, 11:59 PM ET; at the end, prices are restored.](https://productessentials.app/content/images/2026/10/01-black-friday-black-week-schedule-43788481.png) The same end, two starts: Black Week for EU stores, Black Friday to Cyber Monday for a US store. ### How to run a Black Week sale in Disco 1. **Create the Black Week sale**, for example 20% off with **Active dates** Monday, November 23, 12:00 AM CET to Monday, November 30, 11:59 PM CET. 2. **Add a Black Friday sale** on the same products, for example 30% off, from Friday, November 27, 12:00 AM CET to the same end. Where two sales cover one product, the discount with the highest saving applies. 3. **Set the timer and bar on the Black Friday sale**: when both sales have widgets on a product, the widgets of the sale that started last apply. Both sales fit the free Starter plan's 2 campaigns. ## How do sale prices change when the scheduled sale starts? At the start time Disco writes the sale prices to every selected product and variant, switches on the timer, bar and badges you chose, and publishes the sale page if you use one. Spend five minutes checking one product, one variant, one excluded product and the checkout. At the scheduled moment, Disco: - writes the new sale price to **Price** and the original price to **Compare-at price** on every selected product and variant, so shoppers see the sale price, with the original struck through, on product and collection pages before checkout; - switches on the storefront elements you chose: badge, countdown, announcement bar; - makes the sale collection available and, on plans that include it, publishes the flash-sale page; and - blocks additional discount codes, if you enabled that. Your job at this point is a five-minute spot-check, ideally in an incognito window so you're not looking at a cached page: 1. **Open one product from the campaign.** Confirm the strikethrough, the sale price, and the badge. 2. **Open a product with several variants.** Check a variant that isn't the default. 3. **Open a product you excluded.** Confirm it's still at full price. 4. **Add a sale item to the cart and go to checkout.** Confirm the price carried through and behaves the way you decided with any live discount code. 5. **If you sell in more than one market, repeat step 1 in a second market.** If everything checks out, close the laptop. That's the point. ## How do you end a sale automatically on Shopify? In Disco, the end date and time under **Active dates** ends the sale for you. Disco restores the prices saved before the sale started. The countdown timer, announcement bar and sale badges disappear, and the sale page comes down. Nobody has to be at the laptop at 11:59 PM. In Shopify, an automatic discount stops at its end time, and a rollout **Event** rolls its catalog back. Prices you lowered by hand or with the bulk editor stay low until someone changes each one back. Disco resolves this by restoring every price it changed, on time. Here is what happens on the storefront. | On the storefront | During the sale | After the end time | | ---------------------------------------------------- | ----------------------------------- | ------------------------------- | | Price | Sale price, original struck through | The price saved before the sale | | Countdown timer | On product pages | Hidden | | Announcement bar (**Show while the sale is active**) | At the top of every page | Gone | | Sale badges | On sale products | Gone | | Flash sale page | Live | Taken down | | Tag from **Autotagging** | Added | Removed | | Discount codes on sale products | Blocked, if you turned it on | Allowed again | ![The same product card during a scheduled sale, at $40 with $50 struck through, a Sale badge and a countdown timer, and after the end time, back at $50 with no badge or timer and a Price restored label.](https://productessentials.app/content/images/2026/10/02-when-the-sale-ends-fa0a828c.png) At the end time, the price, badge and timer change back together. ### How to end a sale automatically in Disco 1. **Set the end in Active dates** before the sale starts. 2. **Move the end of a running sale** with **What do you need to edit?** → **Edit Promotional widgets or End date only**; the sale keeps running. 3. **Leave prices alone while it runs.** Disco restores the price saved before the discount was first applied, so a manual price change made during the sale is overwritten at the end. Make permanent price changes before or after. 4. **Stop it early if you must** with the Stop icon in the Discount overview, and wait until it has fully deactivated; the prices go back then. If a price is wrong after the end, check whether another app wrote to the same price fields after Disco, before you edit anything by hand. Read [why sale prices revert](https://productessentials.app/blog/shopify-sale-price-keeps-reverting/) to investigate. ## Checklist before scheduling a Shopify sale Run through this the day before your first real campaign, and keep it for every one after. - **Run a test campaign first.** Ten products, 30 minutes, tomorrow morning. Watch it start, check the storefront, watch it end. The free plan is enough for this. - **Time zone confirmed.** Store time zone checked in Shopify; start time chosen accordingly. - **Price-syncing apps paused or scheduled around the sale.** ERP, inventory, PIM, supplier or print-on-demand, currency, and CSV/bulk tools can all write to the same price fields. Shopify keeps the most recent write, so an hourly ERP sync will quietly undo your sale an hour in. Disable price sync for the window, exclude the campaign products, or move the sync job to before the start. [Your Shopify sale price keeps reverting? If you use compare-at prices, this is probably why](https://productessentials.app/blog/shopify-sale-price-keeps-reverting/) covers how to find the culprit. - **Exit plan.** You know how to deactivate the campaign, and someone is reachable if a customer reports a wrong price. ## FAQ How to schedule a sale on Shopify for free? Disco's free Starter plan includes scheduled sales, for up to 30 discounted products and 2 campaigns. Can you schedule price changes on Shopify for a single variant? Yes, in Disco with **Different discounts**: clicking **Edit variants** on a product discounts only the variants you select. Different discounts is available on the Professional plan and up. How to end a sale automatically on Shopify before its end date? Change the end date with **Edit Promotional widgets or End date only**, or stop it using the Stop icon in the Discount overview. Disco restores the prices once it has fully deactivated. How to schedule Black Friday sale on Shopify across time zones? Plan in your store's time zone (**Settings** \> **General**). Disco's **Active dates** follow your browser's time zone, so enter them from a computer set to that zone (or convert them); shoppers everywhere see the sale go live at the same instant, at their own local time. Does a Shopify Black Week sale change your "was" price in the EU? If you sell to the EEA, the reduction must show your lowest price from the previous 30 days. For a November 23 start, keep those prices unchanged from October 24. ## Schedule the next one, then go to bed **Give your next sale a start time and an end time you can leave to Disco.** Begin with ten products and a 30-minute test tomorrow morning. Once you've checked the launch and reset, reuse the setup for your next campaign. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=schedule-shopify-sale-starts-ends-automatically) For plan limits and pricing, see our [current plans](https://productessentials.app/#pricing). --- **Next:** [How to put your entire Shopify store on sale (without CSV)](https://productessentials.app/blog/shopify-bulk-discounts/) applies the same scheduled campaign to a large catalog, and [The 2026 BFCM playbook: plan your biggest sale months ahead](https://productessentials.app/blog/bfcm-playbook/) turns it into a full Black Friday plan. ### How to run a flash sale on Shopify (with a 24-hour template) URL: https://productessentials.app/blog/how-to-run-a-flash-sale-on-shopify/ Last updated: 2026-10-18T08:41:35.000Z Here's how to run a flash sale on Shopify: choose a few products, cut them deeper than usual for a short window, tell your list first, and show a countdown until it ends. Disco schedules it as one sale with **Active dates**, changes the prices at the start and restores them at the end. In this guide 1. [Shopify flash sale vs sitewide sale: which should you run?](#shopify-flash-sale-vs-sitewide-sale-which-should-you-run) 2. [How long should a flash sale last?](#how-long-should-a-flash-sale-last) 3. [How do you run a Shopify 24 hour flash sale?](#how-do-you-run-a-shopify-24-hour-flash-sale) 4. [What should you check when the flash sale ends?](#what-should-you-check-when-the-flash-sale-ends) 5. [How do you fit a flash sale into the BFCM weekend?](#how-do-you-fit-a-flash-sale-into-the-bfcm-weekend) 6. [FAQ](#faq) 7. [When should you set up your flash sale?](#when-should-you-set-up-your-flash-sale) ## Shopify flash sale vs sitewide sale: which should you run? The Shopify flash sale vs sitewide sale choice comes down to your goal. Run a flash sale, a deep discount on a few products for hours, to move specific stock or win attention in a quiet week. Run a sitewide sale, a moderate discount across most of the catalog for several days, for volume in a seasonal moment. | | Flash sale | Sitewide sale | | ------------ | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | | **Discount** | Deep | Moderate | | **Products** | A few, or one collection | Most or all of the catalog | | **Length** | Hours, rarely more than a weekend | Several days | | **Goal** | Urgency and attention | Volume and participation | | **Best for** | Clearing a collection, spotlighting a hero product, giving your list a reason to open today | BFCM, end of season, a store anniversary | | **Risk** | Shoppers learn to wait if you run them on a predictable schedule | Margin on every order, including products that would have sold anyway | You can also run both. Build a sitewide seasonal sale with a short flash deal inside it to keep people coming back. Schedule them as separate sales with their own start and end times; where both cover a product, the higher saving applies. We explain this in the BFCM section below. ## How long should a flash sale last? Hours, not days. [Shopify's flash sale guide](https://www.shopify.com/enterprise/blog/flash-sale?ref=productessentials.app) says most flash sales last between 2 and 36 hours and gives a 24-hour sale as an example. Shopify also notes that shoppers need [more than 1 hour](https://www.shopify.com/blog/using-scarcity-urgency-increase-sales?ref=productessentials.app) to discover a deal and act. Start with 24 hours. | Length | When it fits | Watch out for | | ------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | | **A few hours** | One hero product your list already wants; a doorbuster | Shoppers who don't open their email in time miss it | | **24 hours** | The default: a full day and evening, a launch email and a last call | Pick the start hour in the time zone most of your customers live in | | **Up to a weekend** | Clearing a whole collection; customers spread across time zones | Urgency fades, and it starts to look like a regular sale | In the same guide, Greg Merrell of Simplistic notes that there are no best-practice timetables because timing depends on the product and the customer. However, [Shopify's scarcity guide](https://www.shopify.com/blog/using-scarcity-urgency-increase-sales?ref=productessentials.app) warns that people may rebel against a deal if the window is too short. Shopify notes that flash sales [lose urgency if customers come to expect them](https://www.shopify.com/blog/flash-sales-and-drops-for-retail?ref=productessentials.app). Vary the products and the timing instead of running one every Friday, so shoppers do not learn to wait for the next one. ## How do you run a Shopify 24 hour flash sale? To build a Shopify 24 hour flash sale, create one sale in Disco on a few products and set its **Active dates** exactly 24 hours apart. Switch on the countdown timer for every discounted product and email your list before it starts. Disco changes the prices at the start and restores them at the end. In Shopify you can schedule an [automatic discount](https://help.shopify.com/en/manual/discounts/discount-types/percentage-fixed-amount?ref=productessentials.app) (**Discounts** → **Create discount** → **Amount off products**, method **Automatic discount**, with **Active dates**), but Shopify discounts apply only in the cart and at checkout, and crossed-out prices on [product and collection pages](https://help.shopify.com/en/manual/discounts/discounts-faq?ref=productessentials.app) need a third-party app. Disco resolves this by writing the sale price, with the original as the compare-at price, on each product for the 24 hours. ### How to run a flash sale in Disco 1. **Pick the products.** Click **Create sale**, choose **Same discount**, and on the **Include products** tab use **Select products, collections, tags or types**. Select a handful of hero products or one collection you need to clear. Never discount the whole catalog. Leave items out with the **Exclude products / collections** tab (Lite plan and up). 2. **Set the discount depth.** Choose **Percentage**, **Amount off** or **New price**, and **Round to nearest** for clean prices. Go deep: Shopify's flash sale guide says anywhere from 50% to 70% off. Work back from your margin. For example, a $40 product that costs you $16 leaves $8 at 40% off and $4 at 50% off, before shipping and fees. Pick products whose margin can take a deep cut. 3. **Name the sale.** Disco uses the name for the sale collection, the sale page title and the admin. 4. **Set the duration in Active dates.** Enter the exact start and end date and time, for example Thursday 8 PM to Friday 8 PM. Disco starts and ends the sale on its own. Until it starts, you can still change its products and discount. See [our scheduling guide](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) for the details. 5. **Decide on discount codes.** Tick **Block discount codes on sale products** in the **Discount code blocking** card (Business plan) so a code can't land on top of the flash price. Codes another app creates as non-rejectable may still apply, so tick it on the one-product test sale in the template below too, and try a discount code at checkout. Read how [stacking works](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/). 6. **Tease it with the announcement bar.** Turn on **Show before the sale starts**, with the **Get notified!** button to collect emails (Lite plan and up). 7. **Add the urgency.** Turn on **Show countdown timer on product page** for a timer on every discounted product page (free Starter plan). Turn on the bar's **Show while the sale is active** and **Show countdown timer in announcement** (both Lite plan and up) for a timer in the bar. The timer counts down to the sale's real end, so the deadline you show is the one you keep. 8. **Add the sale pages.** Turn on **Add flash sale page** and **Add Coming Soon sale page** (Professional plan and up). The coming soon page goes up when you save the sale. It collects emails until the start, then becomes the live flash sale page on the same URL. Collected emails land in Shopify **Customers**, tagged `newsletter`, `disco` and the sale's name. Follow our [teaser and waitlist guide](https://productessentials.app/blog/shopify-flash-sale-page-waitlist-timer/). 9. **Save it. The ending is automatic.** At the end time Disco puts the prices back and hides the timer and bars. The flash sale page comes down. ![Setting up a 24-hour flash sale in Disco: the Create sales campaign screen for a "24-Hour Flash Sale" at 40% off five selected products, with Round to nearest ticked, Active dates from Thursday 2026-11-19, 20.00 to Friday 2026-11-20, 20.00, and Block discount codes on sale products ticked. The Summary on the right reads Nov 19, 2026, 08:00 PM to Nov 20, 2026, 08:00 PM, and Show timer on product page.](https://productessentials.app/content/images/2026/10/02-disco-24-hour-flash-sale-df2fc830.png) The free Starter plan covers scheduling and the product-page timer for up to 30 discounted products and 2 campaigns. The flash sale page starts on the Professional plan. Check our [pricing](https://productessentials.app/#pricing) or read the help document on [Setting Up a Discount Campaign with Landing Page](https://help.productessentials.app/article/32-flash-sale-page?ref=productessentials.app). ### A 24-hour flash sale template The example runs from Thursday 8 PM to Friday 8 PM in your store's time zone. Shift the hours, but keep the shape. | When | What happens | Who | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | | **7 days before** | Run a one-product test sale that starts in 10 minutes and lasts 30, and watch it start and end. If you block codes, try a discount code at checkout during the test. | You, in Disco | | **3 days before** | Build the sale (steps 1–9) and save it: the teaser bar and coming soon page go up as soon as you save. First email to your list, linking the coming soon page: what, how deep, the start time. | You, in Disco; your email tool | | **The day before** | Reminder email and a social post with the start time. | You | | **Thursday 8 PM** | Sale starts: prices change, a timer appears on every discounted product page, the bar switches to the live message, the flash sale page goes live. | Disco, automatically | | **Thursday 8:05 PM** | Check one product page, then send the launch email: the waitlist first, then everyone. | You | | **Friday 8 AM** | Halfway email: 12 hours left. | You | | **Friday 4 PM** | Last call: "Ends tonight at 8 PM." | You | | **Friday 8 PM** | Sale ends: prices restored; timer, bars and flash sale page gone. | Disco, automatically | | **Friday 9 PM** | Post-sale check (next section). | You | ![Timeline of a 24-hour flash sale: run a test sale 7 days before, build the sale and start the teaser 3 days before, the sale starts Thursday 8 PM, last call Friday 4 PM, and prices are restored Friday 8 PM.](https://productessentials.app/content/images/2026/10/01-24-hour-flash-sale-timeline-79bf8ba2.png) Test early, tease for 3 days, then let the start and end times run the sale. Most stores can run this template as it is. Shopify's Help Center page on [flash sales](https://help.shopify.com/en/manual/promoting-marketing/sales/flash-sales?ref=productessentials.app) keeps special preparation (private mode, a simpler theme, checking that apps and payment providers can take the volume) for sales where tens of thousands of customers start checkout within a few minutes. ## What should you check when the flash sale ends? When the end time passes, Disco restores the prices saved before the sale and hides the countdown timer, announcement bar and sale badges, and the flash sale page comes down. Within the hour, check 3 products, the sale URL and a test checkout, and keep the deadline. Do not extend it. 1. **Open 3 sale products** in a private window: original price, no strikethrough, no timer or badge. 2. **Open the sale page URL**: it should no longer show the live sale. 3. **Try a discount code at checkout** if you blocked codes: codes work again once the sale has ended. 4. **If a price is wrong, check other apps first**: price-syncing apps can rewrite the same fields, so read [why sale prices revert](https://productessentials.app/blog/shopify-sale-price-keeps-reverting/) to check your syncs. Disco restores the price saved before the discount was first applied, overwriting any manual price changes made during the sale. You can move the end of a running sale with **What do you need to edit?** → **Edit Promotional widgets or End date only**, but extending a flash sale teaches shoppers that your deadlines are decoration. ## How do you fit a flash sale into the BFCM weekend? Keep your sitewide sale running from Black Friday, November 27, to Cyber Monday, November 30, 2026, and add short flash sales on a few products inside it. In Disco each one is its own sale. Where two sales cover a product, the one with the higher saving applies. In Shopify you can schedule a second automatic discount for the flash hours, but shoppers again see either saving only in the cart and at checkout. Disco resolves this by showing the deeper flash price on the product page, with the original struck through. ### How to add a flash sale to your BFCM sale in Disco 1. **Build the sitewide sale** with **Active dates** from Friday, November 27, 12:00 AM to Monday, November 30, 11:59 PM. 2. **Create the flash sale** on a few products with a deeper discount and a few hours of **Active dates** inside the weekend. The higher saving applies. When it ends, products go back to the sitewide sale's price and widgets. 3. **Put the countdown timer on the flash sale**: when two sales with widgets cover the same product, the widgets of the sale that started last apply. The free Starter plan allows 2 campaigns and up to 30 discounted products. A sitewide sale on a larger catalog, or more than one flash sale, needs Lite (300 products, 10 campaigns) or higher: see [pricing](https://productessentials.app/#pricing). Doorbuster hours and rolling collection flash sales are in our [Black Friday discount ideas](https://productessentials.app/blog/shopify-black-friday-discount-ideas/). ## FAQ How do you run a flash sale on Shopify for free? Disco's free Starter plan schedules sales and shows the product-page countdown timer for up to 30 discounted products and 2 campaigns. The flash sale page starts on the Professional plan. How long should a flash sale last on Shopify? Hours rather than days: Shopify says most flash sales last between 2 and 36 hours, and 24 hours is a good starting point. Can a Shopify 24 hour flash sale run on a single product? Yes: select just that product on **Include products**, and the timer shows on its product page while the sale runs. Shopify flash sale vs sitewide sale: which is better for clearing stock? Run a flash sale on the collection you need to clear. A sitewide sale also discounts products that would sell anyway. Can customers use a discount code on top of a flash sale price? Not if you tick **Block discount codes on sale products** (Business plan), which stops codes on any cart with a sale product, though codes other apps create as non-rejectable may still apply. Automatic discounts are not blocked, so restrict those to a smart collection with the condition "compare-at price is empty" ([help doc](https://help.productessentials.app/article/22-exclude-products-on-sale-from-shopify-discount-codes?ref=productessentials.app)). ## When should you set up your flash sale? Run a one-product test sale a week before, then build and save the real sale 3 days before it starts, so the teaser runs 3 days. Install Disco now for the test, and let the start and end times change and restore the prices on their own. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=how-to-run-a-flash-sale-on-shopify) --- **Next:** [From teaser to flash sale: build a Shopify sale page with a waitlist, timer, and announcement bar](https://productessentials.app/blog/shopify-flash-sale-page-waitlist-timer/) builds the run-up in detail, and [Shopify Black Friday discount ideas](https://productessentials.app/blog/shopify-black-friday-discount-ideas/) has flash sale ideas for the BFCM weekend. ### Shopify Omnibus Directive & Cookie Consent for Black Friday URL: https://productessentials.app/blog/shopify-omnibus-directive-lowest-price-30-days/ Last updated: 2026-10-18T08:41:45.000Z Before Black Friday, stores selling to EU shoppers need three checks: Shopify cookie consent, prices that meet the Shopify Omnibus Directive, and a sale scheduled on time. The Omnibus rule makes your "was" price the lowest price you charged in the 30 days before the sale, from October 28 for a November 27 sale. Consentmo covers consent, Complimus covers price history, and Disco runs the sale. Cookie consent is a privacy rule, separate from the Omnibus price rule. This is general information, not legal advice. In this guide 1. [How do you set up Shopify cookie consent?](#how-do-you-set-up-shopify-cookie-consent) 2. [How does the Omnibus Directive apply to Shopify sales?](#how-does-the-omnibus-directive-apply-to-shopify-sales) 3. [How should Shopify stores show their lowest price from the last 30 days?](#how-should-shopify-stores-show-their-lowest-price-from-the-last-30-days) 4. [How does the Omnibus Directive affect Black Friday discounts?](#how-does-the-omnibus-directive-affect-black-friday-discounts) 5. [What should you check before launching your sale with Disco?](#what-should-you-check-before-launching-your-sale-with-disco) 6. [FAQ](#faq) 7. [When should you run these checks?](#when-should-you-run-these-checks) ## How do you set up Shopify cookie consent? The easiest way to set up Shopify cookie consent is to use a Built for Shopify consent management app like Consentmo. It lets you configure where your cookie banner appears, control which trackers wait for consent, scan your store for tracking technologies, and test the setup before BFCM traffic arrives. ### Set up cookie consent with Consentmo Consentmo helps Shopify merchants manage cookie consent and privacy requirements from one place. Merchants can configure region-specific cookie banners with Smart Geotargeting, scan their store for cookies and trackers, and control when analytics and marketing technologies load based on the visitor's consent. ![Consentmo cookie consent settings and storefront cookie banner for a Shopify store.](https://productessentials.app/content/images/2026/09/01-consentmo-cookie-consent-936c0fa8.png) #### Three checks before launch 1. **Confirm where your banner should appear:** In Consentmo, review the privacy regions you have enabled and match them against the countries you will target with BFCM campaigns. Enable Smart Geotargeting so you only show the cookie banner where privacy laws require. 2. **View your Compliance Score:** Resolve any issues flagged in Consentmo's Compliance Score. All suggestions are on a per country basis - make sure your store follows all regulations in all the countries you sell in. Guided step by step recommendations! 3. **Scan and verify your campaign trackers:** Run the Tracker Scanner and review the trackers detected on the store, especially Google Analytics, Google Ads, Meta and other BFCM marketing tools. Make sure each tracker is assigned to the correct consent category, then test the storefront to confirm restricted trackers stay blocked until the required consent is given. #### Consentmo's BFCM tip Don't stop at checking whether the cookie banner appears! Test exactly what happens to your analytics and advertising tags after both acceptance and rejection before sending paid BFCM traffic to the store. Or - reach out to support for a free compliance check. [Get Compliant for BFCM with Consentmo](https://www.consentmo.com/cookie-banner-shopify?utm%5Fsource=partner&utm%5Fmedium=disco%5Fproduct%5Fessentials&utm%5Fcampaign=blog) ## How does the Omnibus Directive apply to Shopify sales? If you sell to consumers in the European Economic Area and announce a price reduction, you must show the lowest price you charged for that product in the 30 days before the reduction. That covers percentage and amount-off claims, and was/now prices. National law can require a longer period than 30 days. The rule sits in [Article 6a of the Price Indication Directive](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:01998L0006-20220528&ref=productessentials.app), added by the [Omnibus Directive](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=celex%3A32019L2161&ref=productessentials.app) (applying since May 28, 2022). See the Commission's [guidance](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52021XC1229%2806%29&ref=productessentials.app) and the [Shopify Help Center](https://help.shopify.com/en/manual/compliance/legal/pricing-indication-directive?ref=productessentials.app). The rule doesn't cover personalized codes, loyalty offers or bundle offers. Comparisons with a recommended retail price fall under the EU's unfair-commercial-practices rules. Take a hypothetical wool coat: €120 all autumn, with one promotion week at €108 from November 9 to 15. ## How should Shopify stores show their lowest price from the last 30 days? Show the sale price with the lowest price you charged in the previous 30 days as your "was" price, usually as the struck-through **Compare-at price**. Any saving you advertise must be calculated from it. Shopify doesn't track it; an app can record your prices and show the lowest as its own line. The Shopify Help Center still lists two ways to price the coat's Black Friday sale at €84: | On the product page | From the 30-day lowest | From the regular price (ruled out) | | --------------------------------------- | ---------------------- | ---------------------------------- | | **Price** | €84 | €84 | | **Compare-at price** (struck through) | €108 | €120 | | "Lowest price in the last 30 days" line | Not needed | €108 | | Advertised saving | 22% | 30% | In 2024, the [EU Court of Justice ruled out the second route](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:62023CJ0330&ref=productessentials.app) (Aldi Süd, C-330/23). Aldi had struck through its regular price and printed "Lowest price in the last 30 days" underneath. The Court held that the reduction must be calculated from the 30-day lowest. In the product's **Price** section, click **Compare at** and enter the struck-through price. Use the bulk editor for many products, and a metafield for a separate "Lowest price" line. If your primary market isn't in the EEA, turn off compare-at price hiding in **Markets**. Our [compare-at price guide](https://productessentials.app/blog/shopify-compare-at-price-complete-guide/) walks through each step. ### Track and display prior prices with Complimus **Complimus: Omnibus & EU Rules** saves every price daily. On discounted products, it shows the lowest 30-day price next to the sale price, per Shopify Markets country and in all currencies. Its **Not compliant** status flags a **Compare-at price** that isn't the 30-day lowest. Complimus [starts collecting price history when you install it](https://help.complimus.com/docs/omnibus/omnibus-pricing-app-faq?ref=productessentials.app), so install it before your 30-day window opens (October 28 for a November 27 sale). ![Complimus's demo product page: a tank top at 55,00 € with 80,00 € struck through, and the line "Lowest pre-sale price: 80,00 €" underneath.](https://productessentials.app/content/images/2026/09/03-complimus-lowest-price-7e431354.png) [Explore Complimus](https://apps.shopify.com/omnibus-price?ref=productessentials.app) ## How does the Omnibus Directive affect Black Friday discounts? The Omnibus Directive Black Friday rule makes your "was" price the lowest price of the 30 days before the sale. For a November 27 launch, that window runs October 28 to November 26; for Black Week from November 23, it opens October 24\. Any promotion inside that window lowers it. ![Timeline of a hypothetical coat's price from October to November: €120, a €108 promotion from November 9 to 15, €120 again, then €84 from November 27. The 30 days before the sale, October 28 to November 26, are shaded, and the lowest price inside them, €108, is marked as the "was" price.](https://productessentials.app/content/images/2026/09/02-coat-price-history-bc936190.png) Suppose your Black Week sale starts at 20% off on November 23 and deepens to 30% on Black Friday, with no price rise in between. In all four countries below, your "was" price can then stay the 30-day lowest before November 23 for the whole sale. | Country | Anything extra for a Black Friday sale? | | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Germany](https://www.gesetze-im-internet.de/pangv%5F2022/%5F%5F11.html?ref=productessentials.app) | No. Perishables marked down before they expire are exempt, if you say why. | | [Denmark](https://forbrugerombudsmanden.dk/longreads/retningslinjer-for-prismarkedsfoering?ref=productessentials.app) | Yes: keep the sale short. A sale price can run for 10 days, or longer if you give the end date when the sale starts, but never more than half as long as the regular price ran (15 days after 30 days at full price). A Black Week sale from November 23 to Cyber Monday (8 days) fits. | | [France](https://www.shopify.com/fr/blog/legislation-europeenne-promotions-en-ligne?ref=productessentials.app) | No. Perishable products are exempt. | | [Netherlands](https://www.shopify.com/nl/blog/nieuwe-regels-kortingen-webshop?ref=productessentials.app) | No. Products on the market for less than 30 days, and perishables, are exempt. | **Common mistakes:** - **Raising prices inside the window:** raise a €50 price to €65 two weeks before the sale, sell at €45, and the reference is still €50. - **A storewide banner only:** every product page still needs its own 30-day lowest price. Keep a record of your past prices. Before launch, open three sale products and check that the reference price matches your price history for the last 30 days. ## What should you check before launching your sale with Disco? Disco puts the products on sale in bulk, starts and ends the campaign on schedule, and restores the original prices afterward. Before launch, check which products are in, what each will cost, and when the sale runs. Test a small campaign and check the product page before, during and after. In Shopify you can bulk-edit **Price** and **Compare-at price**, but you change prices by hand at launch and afterward. Disco resolves this by scheduling and restoring them. Disco writes each product's pre-sale price as the **Compare-at price**. Avoid promotions and price increases on Black Friday products inside the 30-day window, and that struck-through price is the 30-day lowest. If a product already has a higher **Compare-at price**, Disco keeps it, so check that it's the 30-day lowest too. Disco doesn't work out the legally required prior price for you. ### Prepare your campaign in Disco 1. **Choose the products and exclusions.** Click **Create sale**. Under **Include products** choose **All products** or **Select products, collections, tags or types**. Set **Exclude products / collections** ([storewide sales](https://productessentials.app/blog/shopify-bulk-discounts/)). 2. **Set the discounts and timing.** Pick **Percentage**, **Amount off** or **New price**. If products already have a compare-at price, decide on **Calculate discount from compare-at price** (when it's off, the discount is calculated from the current price). Set **Active dates** ([scheduling walkthrough](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/)). 3. **Test the complete campaign.** Add `?previewSale=SALE_ID` to your store URL to preview the bar, timer and badges ([Disco FAQ](https://help.productessentials.app/article/46-faq?ref=productessentials.app)). At launch, check a product page's sale price, struck-through price and any prior-price line; after the sale ends, check that the prices are back. ![A Disco campaign named "BFCM Sale": 25% off the products in the "Black Friday Sale" collection, chosen under Include products, with active dates from November 27 to December 1, 2026. The summary on the right lists the collection's products.](https://productessentials.app/content/images/2026/09/04-disco-campaign-setup-bf50f7d7.png) [Plan your Black Friday sale with Disco](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-omnibus-directive-lowest-price-30-days) ## FAQ What does the Shopify Omnibus Directive mean for merchants? When you advertise a reduction to EU consumers, show the lowest price you charged in the 30 days before it. It covers announced reductions of a product's price, including Black Friday deals and storewide banners. Does Shopify show the lowest price from the last 30 days automatically? Not on its own: there is no Shopify lowest price 30 days field that fills itself. You enter the price as the **Compare-at price** or in a metafield, or use an app such as Complimus that saves prices daily. How does the Omnibus Directive affect Black Friday promotions? The Omnibus Directive Black Friday rule is that your "was" price is the lowest price of the 30 days before launch: October 28 to November 26 for a November 27 sale. A promotion inside that window lowers it. How should I test Shopify cookie consent before Black Friday? Open the store in a private window as a visitor from an EU country, reject cookies, and check that analytics and ad tags stay blocked. Accept and check they load; it works the same with Shopify's own cookie banner (**Settings > Customer privacy**) or an app like Consentmo. ## When should you run these checks? Start now, before the 30-day window opens (October 28 for a November 27 sale, October 24 for Black Week from November 23). Test consent choices on the live store, review prior-price information on sale products, and check your campaign's timing in a test run. Check consent. Check your prices. Then let the sale run on schedule. [**Schedule your Black Friday sale with Disco.**](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-omnibus-directive-lowest-price-30-days) --- **Next:** [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) walks through the dates and times. ### How to add a countdown timer to a Shopify product page URL: https://productessentials.app/blog/how-to-add-countdown-timer-to-shopify/ Last updated: 2026-10-18T08:41:33.000Z Here's how to add a countdown timer to a Shopify product page: use your theme's countdown section if it has one, paste a short Liquid snippet into a **Custom liquid** block, or use an app. Disco ties the timer to the sale's real end. It shows on every discounted product page while the sale runs, and at the end Disco restores the prices and hides the timer. No code needed. In this guide 1. [Which way should you add a countdown timer to your product page?](#which-way-should-you-add-a-countdown-timer-to-your-product-page) 2. [How do you add a countdown timer to a Shopify product page in Disco?](#how-do-you-add-a-countdown-timer-to-a-shopify-product-page-in-disco) 3. [Does your Shopify theme have a countdown timer built in?](#does-your-shopify-theme-have-a-countdown-timer-built-in) 4. [Can you add a Shopify countdown timer without an app?](#can-you-add-a-shopify-countdown-timer-without-an-app) 5. [How do you add a Shopify announcement bar with a countdown timer?](#how-do-you-add-a-shopify-announcement-bar-with-a-countdown-timer) 6. [Which Shopify Black Friday countdown timer do you need: pre-launch or sale-ending?](#which-shopify-black-friday-countdown-timer-do-you-need-pre-launch-or-sale-ending) 7. [Why is your Shopify countdown timer not showing?](#why-is-your-shopify-countdown-timer-not-showing) 8. [FAQ](#faq) 9. [When should you set up your Black Friday countdown timers?](#when-should-you-set-up-your-black-friday-countdown-timers) ## Which way should you add a countdown timer to your product page? Use Disco when the timer should match a real sale and the prices should go back on their own when it ends. A theme countdown section or the Liquid snippet is enough for a deadline you manage by hand, because both count down to a date you type and leave prices alone. | | Disco | Theme countdown section | Liquid snippet | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------- | | **Cost** | Free Starter plan includes the product-page timer | Comes with the theme; the two named below are premium | Free | | **Setup** | No code: switch it on in the sale | Theme editor, no code | Paste code, edit the date for every sale | | **Counts down to** | The sale's **Active dates** | A date you type in the section | A date you type in the code | | **At zero** | Sale ends, prices restored, timer gone | Prices don't change | Timer disappears; sale price stays | | **Shows on** | Every product in the sale, plus an announcement bar with a timer (Lite plan and up) | Wherever the theme lets you add it | Products on that template with a compare-at price above the price | | **Limits** | Starter: 30 discounted products, 2 campaigns; announcement bar, badges and styling from Lite; shows only while a Disco sale is active | Only if your theme has one | One date per template; prices unchanged at zero | ## How do you add a countdown timer to a Shopify product page in Disco? Create a sale with **Active dates**, then turn on **Show countdown timer on product page** on the free Starter plan. The timer counts down to the sale's real end on every discounted product page. At the end, Disco automatically restores the prices and hides the timer. In Shopify you can show a timer with a theme section or a Liquid snippet, but both count down to a date you type. At zero, you restore every **Price** and **Compare-at price** by hand. Disco resolves this by scheduling the sale and restoring the prices for you. ### How to add a countdown timer to a product page in Disco 1. **Turn on the app embed.** In Disco's Setup guide, click **Install app embed**, then save the theme. On Online Store 2.0 themes this needs no code ([help doc](https://help.productessentials.app/article/37-install-countdown-timer-and-announcement-bar-app-embed?ref=productessentials.app)). 2. **Create the sale.** Click **Create sale** and choose **Same discount**. 3. **Pick the products.** On the **Include products** tab, choose **All products** or **Select products, collections, tags or types**. 4. **Set the discount.** Choose **Percentage**, **Amount off** or **New price**. 5. **Name the sale.** Disco uses the name for the sale collection, the sale page title and the admin. 6. **Set the end in Active dates.** Enter the exact start and end date and time. The timer counts down to this end. 7. **Turn on the timer.** In the **Countdown timers** card, turn on **Show countdown timer on product page**. 8. **Add badges and match your theme (optional).** Turn on **Sale badges**, and style the timer in **Disco > Widgets** → **Countdown timer settings** (both Lite plan and up). 9. **Save.** At the end time, the timer and badges stop showing. ![Disco's Countdown timers card, with Show countdown timer on product page switched on and outlined, and the Edit countdown timer design button under it.](https://productessentials.app/content/images/2026/10/disco-countdown-timers-card-desktop-3e33da6e.png) You can [move it on the product page](https://help.productessentials.app/article/36-how-to-move-the-countdown-timer-placement-os-2-0?ref=productessentials.app) or [add it to the home or a collection page](https://help.productessentials.app/article/41-how-to-adding-the-countdown-timer-to-home-or-collection-page?ref=productessentials.app). ![A Shopify product page during a Disco sale: the Whitney Pullover at 110,40 DKK with 138,00 DKK struck through and a Sale badge, and Disco's "Offer expires in" countdown timer showing 02 days, 11 hours, 00 minutes and 01 second above the size and quantity pickers and the Add to cart button.](https://productessentials.app/content/images/2026/10/storefront-product-timer-desktop-7323702f.png) ## Does your Shopify theme have a countdown timer built in? Some Shopify themes include a countdown section or block. To check, open the theme editor, click **Add section** and search for "countdown", then search under **Add block** in the product template's **Product information** section. If neither finds one, your theme doesn't have one. A built-in countdown needs no code and matches your theme's design. You can also [search the Shopify Theme Store by feature](https://help.shopify.com/manual/using-themes/choose-themes?ref=productessentials.app). [Shopify's 2026 theme roundup](https://www.shopify.com/blog/shopify-themes?ref=productessentials.app) lists Woodstock and Be Yours as premium themes with a countdown timer. The drawback: it counts down to a date you type and leaves your prices alone. ## Can you add a Shopify countdown timer without an app? Yes, you can add a Shopify countdown timer without an app by pasting a Liquid snippet into a **Custom liquid** block on your product template. This code counts down to a fixed end date you type, but it won't end your sale or restore your prices when it hits zero. ```liquid {%- if product.compare_at_price > product.price -%}

Sale ends November 30 at 11:59 PM ET

{%- endif -%} ``` It shows only on products whose compare-at price is higher than their price, so full-price products get no timer. The `-05:00` is the time-zone offset (US Eastern Time in November), so use your own. Every shopper sees the same deadline wherever they are. Without JavaScript, shoppers see the fallback line "Sale ends November 30 at 11:59 PM ET", so edit it too. It does the countdown in the browser because Shopify can serve a cached page: Liquid's `'now'` reflects the time the page was [last rendered](https://shopify.dev/docs/api/liquid/filters/date?ref=productessentials.app). We tested the countdown on a copy of Dawn and in the browser with four time zones, an expired date, and two timers on one page. ### How to add the snippet to Dawn 1. **Duplicate your theme.** From your Shopify admin, go to **Online Store**, open the theme's actions menu, and click **Duplicate** so you can go back. 2. **Open the product template.** Click **Edit theme** on the copy, then select **Products** \> **Default product**. 3. **Add a Custom liquid block.** Hover over **Product information**, click **Add block** and choose **Custom liquid**. Drag it under the price. 4. **Paste the snippet.** Change the date, the offset, and the fallback line to your sale's end. 5. **Save.** Check a discounted product in the preview, then publish the copy. ![Shopify theme editor on a copy of Dawn, Default product template: the Custom liquid block, outlined, sits under Price in Product information and holds the countdown snippet, and the preview shows "Sale ends in 45d 15h 57m 4s" under the sale price.](https://productessentials.app/content/images/2026/10/theme-editor-custom-liquid-desktop-cd27f947.png) ### What the snippet can't do - It doesn't end the sale or restore prices. At zero the timer disappears, but a $60 product on sale at $45 stays at $45 until you change every **Price** and **Compare-at price** back yourself. - It uses one end date for every product on that template, so a new sale means editing the code again. - If you end the sale early or extend it, the timer shows the old deadline until you edit the code. ![What happens at the end time: when a Liquid snippet reaches zero, the timer is gone but the price is still the $45 sale price; when a Disco sale ends, the timer is gone and the price is back to $60.](https://productessentials.app/content/images/2026/10/01-timer-at-zero-25c2ccfb.png) Disco resolves this: it counts down to the **Active dates** and restores the prices automatically. ## How do you add a Shopify announcement bar with a countdown timer? In Disco, on the Lite plan and up, turn on **Show while the sale is active** and **Show countdown timer in announcement**: a thin banner at the top of every page then counts down to the sale's end and disappears with it. Before the sale, use **Show before the sale starts** to collect emails. In Shopify, your theme's **Announcement bar** section takes announcements with a **Text** field and an optional **Link**. It has no timer and no scheduling settings, so you change it by hand at each phase. Disco resolves this with a bar that switches on and off with the sale's dates and carries the countdown. ### How to add a countdown timer to your announcement bar in Disco 1. **Open the sale.** Create it, or open the one you scheduled, with its **Active dates**. 2. **Turn on the live bar.** Turn on **Show while the sale is active** (Lite plan and up, like the bar settings below). 3. **Add the timer.** Turn on **Show countdown timer in announcement**. 4. **Add a teaser (optional).** Turn on **Show before the sale starts** with the **Get notified!** button to collect emails before the start. 5. **Match your theme.** Style the bar in **Disco > Widgets** → **Announcement bar settings**. 6. **Save.** For ready-made teaser, launch and last-hours lines, see our [Shopify Black Friday discount ideas](https://productessentials.app/blog/shopify-black-friday-discount-ideas/). ## Which Shopify Black Friday countdown timer do you need: pre-launch or sale-ending? Run both. A pre-launch Shopify Black Friday countdown timer in the announcement bar runs from the day you save the sale until Friday, November 27, 2026\. Sale-ending timers on product pages and in the bar count down to the end, like 11:59 PM on Monday, November 30, 2026\. In Disco one sale does both. | | Pre-launch timer | Sale-ending timer | | ------------------ | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | **Counts down to** | The sale's start: 12:00 AM, November 27, 2026 | The sale's end: 11:59 PM, November 30, 2026 | | **Shows in** | The announcement bar; the product-page timer shows only while the sale is active | Product pages and the announcement bar | | **Its job** | Get people back at the start; the **Get notified!** button collects emails | Show how long the sale price lasts | | **Runs from** | The moment you save the sale | The sale's start | | **In Disco** | **Show before the sale starts** with **Show countdown timer in announcement**, Lite plan and up | **Show countdown timer on product page** (Starter) and **Show while the sale is active** with the bar timer (Lite plan and up) | ![Black Friday countdown timers by where they show: from the day you save the sale until 12:00 AM on November 27, the announcement bar counts down to the start and the product page has no timer; from then until 11:59 PM on November 30, both count down to the end; then the prices are restored.](https://productessentials.app/content/images/2026/10/02-black-friday-timers-e31d43cf.png) ### How to set up Black Friday countdown timers in Disco 1. **Schedule the weekend.** Set **Active dates** from Friday, November 27, 2026, 12:00 AM to Monday, November 30, 2026, 11:59 PM. 2. **Turn on the pre-launch bar.** Turn on **Show before the sale starts** with **Get notified!** and **Show countdown timer in announcement** (Lite plan and up). 3. **Turn on the sale-ending timers.** Turn on **Show countdown timer on product page** and, for the bar, **Show while the sale is active** (Lite plan and up). 4. **Save it on the day the teaser should start.** The pre-launch bar goes up as soon as you save, so save a week out for a one-week teaser. 5. **Change the last-hours line without stopping the sale.** Use **What do you need to edit?** → **Edit Promotional widgets or End date only**. Keep the deadline you show and don't extend it: [honest countdown timers](https://productessentials.app/blog/countdown-timers/) are the ones shoppers trust. Run a short [flash sale](https://productessentials.app/blog/how-to-run-a-flash-sale-on-shopify/) inside the weekend as a separate sale in Disco: its timer shows on its products, because the widgets of the sale that started last apply. ## Why is your Shopify countdown timer not showing? Your countdown timer is usually missing because the app embed is turned off, the sale has not started yet, or the product is excluded from the campaign. If all three look right, check for theme conflicts and a cached page next. 1. **Check the app embed.** App embeds are switched on per theme, so click **Install app embed** in Disco's Setup guide, or open **App embeds** in the live theme's editor and turn on the **Disco App Embed**, then click **Save** ([Shopify Help Center](https://help.shopify.com/en/manual/online-store/themes/theme-structure/extend/apps?ref=productessentials.app)). 2. **Check that the sale has started.** The product-page timer shows only while the sale is active, so before the start only the **Show before the sale starts** bar appears. 3. **Check that the product is in the campaign.** Look at the **Include products** and **Exclude products / collections** tabs; products added to a collection after the start aren't discounted until you press [**Synchronize**](https://help.productessentials.app/article/14-why-are-products-i-added-to-collection-not-discounted?ref=productessentials.app). 4. **Check that the timer is on.** Make sure **Show countdown timer on product page** is turned on. 5. **Look for theme conflicts.** On a legacy (non-Online Store 2.0) theme the timer is placed with a [snippet](https://help.productessentials.app/article/42-how-to-setup-custom-placement-for-countdown-timer-and-announcement-bar-in-non-online-store-2-0-compatible-shopify-themes?ref=productessentials.app); on a 2.0 theme you can [move it](https://help.productessentials.app/article/36-how-to-move-the-countdown-timer-placement-os-2-0?ref=productessentials.app). Remove any old timer app or snippet from the same page. 6. **Rule out caching.** Your browser can keep an old copy of the page, so open it in a private window after a change. 7. **Check recent product changes.** A CSV product import can remove the timer, so reactivate the sale ([FAQ](https://help.productessentials.app/article/46-faq?ref=productessentials.app)). For the Liquid snippet, the product needs a **Compare-at price** above its **Price**. ## FAQ How to add countdown timer to Shopify product page for free? Disco's free Starter plan includes **Show countdown timer on product page** for up to 30 discounted products and 2 campaigns. The Liquid snippet is free too but doesn't restore prices. Does a Shopify countdown timer without an app end the sale? No. At zero it disappears, but the sale prices stay until you change them back yourself. When should a Shopify Black Friday countdown timer start? Start the pre-launch bar (Lite plan and up) about a week before Black Friday by saving the sale that day. The product-page timer starts on its own at 12:00 AM on November 27, 2026. Why is my Shopify countdown timer not showing after I saved the sale? The product-page timer shows only once the sale starts. If it's live, check the app embed and that the product is in the campaign. Does a Shopify announcement bar with countdown timer show on every page? Disco's bar is a thin banner at the top of every page while the sale runs. You can hide it on some pages with this [help doc](https://help.productessentials.app/article/38-how-to-hide-the-announcement-bar-on-specific-pages?ref=productessentials.app). ## When should you set up your Black Friday countdown timers? Install Disco now, build your Black Friday sale and save it on the day you want the teaser to start, for example a week before November 27, 2026\. Then open a product page in a private window to check that the pre-launch bar (Lite plan and up) is up. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=how-to-add-countdown-timer-to-shopify) --- **Next:** [How to run a flash sale on Shopify](https://productessentials.app/blog/how-to-run-a-flash-sale-on-shopify/) adds a short flash sale to your weekend, and [Shopify Black Friday discount ideas](https://productessentials.app/blog/shopify-black-friday-discount-ideas/) has bar lines for every phase. ### Best Shopify Apps for Black Friday & Cyber Monday (2026) URL: https://productessentials.app/blog/best-shopify-apps-black-friday-cyber-monday-bfcm/ Last updated: 2026-10-18T08:41:26.000Z The best Shopify apps for Black Friday solve the problems most likely to hold your sale back. That could mean scheduling hundreds of price changes, helping visitors find deals, or keeping up with customer questions. This shortlist covers ten BFCM jobs, with one recommended app for each. Start with your existing tools and use it to identify the gaps worth filling. Our selections reflect documented capabilities and the merchant needs each app serves. The first app covers the sale campaign itself, the other nine cover messaging, conversion, and operations. ## The best Shopify BFCM apps at a glance | BFCM job | Recommended app | Most useful when… | | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | | [Sale campaigns](#1-bfcm-sale-campaigns) | [Disco](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=best-shopify-apps-black-friday-cyber-monday-bfcm) | You need to coordinate sale prices, timing, and storefront promotion | | [Email and SMS](#2-email-sms-marketing) | [Klaviyo](https://apps.shopify.com/klaviyo-email-marketing?ref=productessentials.app) | You need segmented launches, reminders, and recovery messages | | [Post-purchase upsells](#3-post-purchase-upsells) | [Aftersell](https://apps.shopify.com/aftersell?ref=productessentials.app) | You have useful complementary products to offer | | [Product reviews](#4-product-reviews-social-proof) | [Judge.me](https://apps.shopify.com/judgeme?ref=productessentials.app) | Shoppers need customer evidence to help them choose | | [Search and filters](#5-product-search-filters) | [Searchanise](https://apps.shopify.com/searchanise?ref=productessentials.app) | Your sale assortment is difficult to navigate | | [Back-in-stock alerts](#6-back-in-stock-alerts) | [Notify Me!](https://apps.shopify.com/preorder-back-in-stock?ref=productessentials.app) | Popular products sell out and will be replenished | | [Customer support](#7-customer-support) | [Commslayer](https://apps.shopify.com/commslayer?ref=productessentials.app) | You need a shared inbox and AI assistance with room to add support staff | | [Loyalty and repeat purchases](#8-loyalty-repeat-purchases) | [Smile](https://apps.shopify.com/smile-io?ref=productessentials.app) | Your customers have a reason to buy again | | [Mobile shopping apps](#9-mobile-shopping-apps) | [StoreLab](https://apps.shopify.com/storelab?search%5Fid=eaa9d080-6b95-436e-928a-c3838a33d9b6&surface%5Fdetail=storelab&surface%5Finter%5Fposition=1&surface%5Fintra%5Fposition=5&surface%5Ftype=search&utm%5Fsource=Disco&utm%5Fmedium=blog&utm%5Fcampaign=BFCM) | You want a branded app and push notifications for repeat customers | | [Analytics and attribution](#10-marketing-analytics-attribution) | [Lifetimely](https://apps.shopify.com/lifetimely-lifetime-value-and-profit-analytics?ref=productessentials.app) | You need campaign reporting, profit analysis, and customer lifetime value | ## 1\. BFCM Sale Campaigns Coordinate the sale prices, launch timing, shopping destination, and promotional widgets so shoppers see a consistent offer. ### Disco **Rating & Reviews:** 4.8 ★ ([100+ reviews](https://apps.shopify.com/discount-app/reviews?ref=productessentials.app)) ![Disco combines scheduled sale pricing with countdown timers, sale badges, and dedicated sale pages.](https://productessentials.app/content/images/2026/09/disco-app-image-e2d284f1.png) Disco combines scheduled sale pricing with countdown timers, sale badges, and dedicated sale pages. [Disco](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=best-shopify-apps-black-friday-cyber-monday-bfcm) brings bulk sale pricing and storefront promotion into one campaign workflow, with scheduled price changes and automatic restoration. **Key Features** - **Bulk discounts with filters and exclusions:** choose participating products by collection, tag, vendor, and other filters, while keeping selected items at full price. - **Scheduled campaigns and automatic price restoration:** set the start and end times, with prices restored when the promotion finishes. - **Countdown timers, announcement bars, and sale badges:** show shoppers which products are on sale and when the offer ends. - **Dedicated flash-sale pages and sale collections:** give shoppers a clear destination for browsing the promotion. - **Coming-soon pages and email capture:** build interest before launch and collect signups through the scheduled-sale announcement bar. [Sale pricing](https://help.shopify.com/en/manual/products/details/product-pricing/sale-pricing?ref=productessentials.app) also lets shoppers see the reduced price before checkout. Check your theme’s product and collection pages to confirm the price comparison appears as intended. [From teaser to flash sale: build a Shopify sale page with a waitlist, timer, and announcement bar](https://productessentials.app/blog/shopify-flash-sale-page-waitlist-timer/) walks through that setup. **Example: one BFCM campaign from signup to reset** Suppose you are offering 20% off a selected gift collection: 1. **Before Black Friday:** prepare the assortment, configure the coming-soon page, and enable email capture in the scheduled-sale announcement bar. 2. **At launch:** Disco applies the scheduled prices and displays the configured live sale page and promotional widgets. 3. **At the campaign’s end:** prices revert automatically. Check representative products and the storefront to confirm the sale has closed as planned. That workflow has a direct connection to merchants’ Black Friday experience: ★★★★★ Used this app during Black Friday sale. It was very easy to use and had great features! Support was also very helpful. Will definitely use again for bulk discounts on the site. — Gemma Azzurro, [Shopify App Store review](https://apps.shopify.com/discount-app/reviews?ratings%5B%5D=5&ref=productessentials.app), December 6, 2024 ★★★★★ Downloaded the Disco app to run a Black Friday sale. Blown away by the ease of setup, functionality, and customization options. Exactly what I was looking for. Highly recommend! — BlueRidge Co., [Shopify App Store review](https://apps.shopify.com/discount-app/reviews?ratings%5B%5D=5&ref=productessentials.app), November 28, 2023 **Pricing:** Starter is free for up to 30 discounted products. The flash-sale page is included in Professional, currently $17.99/month, and higher tiers. Choose the plan that covers your catalog and campaign features. [Plan and schedule your BFCM sale with Disco.](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=best-shopify-apps-black-friday-cyber-monday-bfcm) ## 2\. Email & SMS Marketing Bring subscribers and previous customers back to the sale with relevant launch messages, reminders, and recovery emails. ### Klaviyo **Rating & Reviews:** 4.7 ★ ([3,200+ reviews](https://apps.shopify.com/klaviyo-email-marketing/reviews?ref=productessentials.app)) ![Klaviyo connects customer segments with email and SMS campaigns for launches, reminders, and recovery.](https://productessentials.app/content/images/2026/09/klaviyo-4e7d2f0d.jpg) Using Shopify data, Klaviyo supports customer segmentation, campaign sends, and automated cart and browse recovery flows. For BFCM, build a simple sequence: announce the launch, remind engaged subscribers who have not purchased, and send a final message before the offer closes. Give each message a purpose and link to the relevant products or sale page. If you collect campaign interest through Disco, confirm those subscribers reach the intended audience in your email platform before sending. **When to add it:** you need more segmentation or automation than your current messaging setup provides. **Pricing:** email plans start at $20/month for 251–500 contacts. SMS is priced separately, and costs increase with usage. [See Klaviyo’s plans.](https://apps.shopify.com/klaviyo-email-marketing?ref=productessentials.app) ## 3\. Post-Purchase Upsells Increase order value with a useful complementary offer after the customer completes their initial purchase. ### Aftersell **Rating & Reviews:** 4.8 ★ ([1,000+ reviews](https://apps.shopify.com/aftersell/reviews?ref=productessentials.app)) ![Aftersell lets shoppers add complementary products after their initial purchase.](https://productessentials.app/content/images/2026/09/aftersell-a272e76e.jpg) [Aftersell](https://www.aftersell.com/shopify-post-purchase-upsell?ref=productessentials.app) lets eligible customers accept a relevant offer in one click after their initial purchase. You can target offers using factors such as the products purchased and customer history. A BFCM example: someone buys a discounted coffee maker, then receives an offer for compatible filters. The second product should make the first purchase more useful and leave enough margin to justify the offer. **When to add it:** your catalog has natural add-ons and you can test whether shoppers want them. Track additional margin alongside average order value. Post-purchase offers are available beyond Shopify Plus; Aftersell’s checkout upsells require Plus. **Pricing:** post-purchase plans start at $34.99/month and scale with total store order volume. [See Aftersell’s pricing.](https://www.aftersell.com/pricing?ref=productessentials.app) ## 4\. Product Reviews & Social Proof Give shoppers customer evidence that helps them judge product quality, fit, and suitability before buying. ### Judge.me **Rating & Reviews:** 5.0 ★ ([46,600+ reviews](https://apps.shopify.com/judgeme/reviews?ref=productessentials.app)) ![Judge.me displays customer reviews, photos, and star ratings on your storefront.](https://productessentials.app/content/images/2026/09/judgeme-121c6d2d.jpg) Judge.me collects written, photo, and video reviews and displays them through star ratings and storefront widgets. Before BFCM, check the products you plan to promote. Make their existing customer feedback easy to find, especially on mobile, and ensure review requests are running for fulfilled orders. **When to add it:** you lack an effective way to collect or display product feedback. Allow time to build that evidence before the sale; a new widget starts with the reviews you actually have. **Pricing:** a free plan includes unlimited reviews; Awesome is $15/month with additional features and integrations. [See Judge.me’s plans.](https://apps.shopify.com/judgeme?ref=productessentials.app) ## 5\. Product Search & Filters Help shoppers narrow a large sale assortment to the products, sizes, and prices that suit them. ### Searchanise **Rating & Reviews:** 4.7 ★ ([1,200+ reviews](https://apps.shopify.com/searchanise/reviews?ref=productessentials.app)) ![Searchanise helps shoppers explore a large sale assortment with product search and filters.](https://productessentials.app/content/images/2026/09/searchanise-8c268f63.jpg) Searchanise combines instant search, collection filters, and merchandising tools to help customers explore your catalog. For a clothing store, useful filters might include size, product type, and price. For a homeware store, room or material could matter more. Choose the attributes customers use to narrow their options. If your promotion uses a sale collection, test its search and filter experience with the campaign active. Confirm that prices, variants, and availability display correctly. **When to add it:** your current navigation leaves shoppers struggling to find suitable products. **Pricing:** Basic is $19/month for up to 1,500 products on non-Plus stores; Shopify Plus pricing differs. [See Searchanise’s plans.](https://apps.shopify.com/searchanise?ref=productessentials.app) ## 6\. Back-in-Stock Alerts Capture demand for sold-out products and let interested shoppers know when they can buy again. ### Notify Me! **Rating & Reviews:** 4.9 ★ ([3,700+ reviews](https://apps.shopify.com/preorder-back-in-stock/reviews?ref=productessentials.app)) ![Notify Me! lets shoppers request an alert when a sold-out product returns.](https://productessentials.app/content/images/2026/09/notifyme-5a2f631d.jpg) Notify Me! adds product signup options and sends restock notifications through email, SMS, or push. If a popular size sells out on Black Friday and returns during Cyber Week, you can contact the people who wanted it. This product-specific interest serves a different purpose from Disco’s pre-sale campaign waitlist. Make the notification clear about the current offer. A restocked product may have a different price if the original BFCM campaign has ended. **When to add it:** replenishment is expected and your existing tools do not cover the restock workflow you need. **Pricing:** the free plan includes 10 restock notifications. Paid plans offer larger allowances; check messaging charges. [See Notify Me!’s plans.](https://apps.shopify.com/preorder-back-in-stock?ref=productessentials.app) ## 7\. Customer Support Keep customer questions organized and give your team a consistent way to handle the extra BFCM enquiries. ### Commslayer **Rating & Reviews:** 4.9 ★ ([200+ reviews](https://apps.shopify.com/commslayer/reviews?ref=productessentials.app)) ![Commslayer brings customer conversations and Shopify order details into one inbox, with AI assistance for replies.](https://productessentials.app/content/images/2026/09/commslayer-684b4e3a.jpg) [Commslayer](https://www.commslayer.com/helpdesk-for-shopify?ref=productessentials.app) brings email, live chat, WhatsApp, and social conversations into a shared helpdesk. For BFCM, prepare reply templates covering offer exclusions, shipping expectations, and order status. Give your team and AI agent the same campaign details, including when discounts end and which products qualify. Test those answers before the sale begins. **When to add it:** customer questions are spread across channels and you need a shared inbox with AI assistance. **Pricing:** the free plan includes 300 conversations, 300 AI agent messages, and 300 AI drafts per month. $39/month for 800 conversations, 1,600 AI agent messages, and 1,600 AI drafts. [See Commslayer’s plans.](https://www.commslayer.com/pricing?ref=productessentials.app) ## 8\. Loyalty & Repeat Purchases Give Black Friday customers a clear reason to return for another purchase after the promotion ends. ### Smile **Rating & Reviews:** 4.9 ★ ([4,500+ reviews](https://apps.shopify.com/smile-io/reviews?ref=productessentials.app)) ![Smile supports loyalty points and rewards that give BFCM customers a reason to return.](https://productessentials.app/content/images/2026/09/smile-b010cf8e.jpg) Smile supports points, rewards, referrals, and VIP tiers, with tools to create and manage a loyalty program. A skincare store, for example, could award points on a Black Friday order and explain how customers can redeem them when replenishing their products. Keep the reward easy to understand and make sure the economics work alongside your sale pricing. **When to add it:** customers have a plausible next purchase and your team will continue running the program after BFCM. Loyalty deserves less priority for products bought very infrequently. **Pricing:** the free plan covers up to 200 monthly orders. Paid plans start at $15/month; bonus events and VIP tiers require higher tiers. [See Smile’s plans.](https://apps.shopify.com/smile-io?ref=productessentials.app) ## 9\. Mobile Shopping Apps Give repeat customers a branded app to shop from, and reach them with push notifications when your offer goes live. ### StoreLab’s No-Code Shopify Mobile App Builder **Rating & Reviews:** 5.0 ★ ([38 reviews](https://apps.shopify.com/storelab/reviews?utm%5Fsource=Disco&utm%5Fmedium=blog&utm%5Fcampaign=BFCM)) ![StoreLab turns a Shopify store into a branded iOS and Android shopping app.](https://productessentials.app/content/images/2026/09/storelab-20bb1b6b.jpg) [StoreLab's Shopify growth service](https://www.storelab-ai.com/?utm%5Fsource=Disco&utm%5Fmedium=blog&utm%5Fcampaign=BFCM) includes using their mobile app builder to grow sales and strengthen customer connections. With its drag-and-drop interface, you can create a branded iOS and Android app without any advanced technical skills. Beyond building your app, StoreLab provides ongoing support, including expert help with push notifications. During Black Friday, these notifications are especially powerful for promoting your deals, alerting shoppers to limited-time offers, abandoned carts, or special discounts to drive urgency and conversions. The app integrated seamlessly with your existing Shopify tools and, when combined with targeted Meta ads, creates a strong Black Friday marketing strategy. Ideal for brands that want to improve sales across the weekend but also retain customers long after the holiday rush. **When to add it:** you want to grow a direct channel to your customers that lasts beyond the holiday rush. Build the app well before BFCM to give customers time to get familiar with it - and make sure your push notification strategy is ready to go. **Pricing:** [Enquire about Shopify growth plans.](https://www.storelab-ai.com/?utm%5Fsource=Disco&utm%5Fmedium=blog&utm%5Fcampaign=BFCM) ## 10\. Marketing Analytics & Attribution Understand which BFCM campaigns bring in orders, what the sale earns after costs, and whether new customers buy again. ### Lifetimely **Rating & Reviews:** 4.9 ★ ([500+ reviews](https://apps.shopify.com/lifetimely-lifetime-value-and-profit-analytics/reviews?ref=productessentials.app)) ![Lifetimely combines campaign reporting with profit and customer lifetime value analytics.](https://productessentials.app/content/images/2026/09/lifetimely-a2603aab.jpg) [Lifetimely](https://apps.shopify.com/lifetimely-lifetime-value-and-profit-analytics?ref=productessentials.app) combines profit and loss reporting, marketing analytics, and customer lifetime value. Its [Drill Down report](https://help.useamp.com/article/1089-drill-down-report?ref=productessentials.app) lets you compare ad spend, revenue, and return on ad spend at campaign, ad group, or ad level across Meta, Google, and TikTok. For BFCM, use consistent campaign names and UTM tags on your ads and emails, then filter your reports to the sale dates. Review campaign results alongside the store's profit report, with product, shipping, and advertising costs configured before launch. After the sale, use customer cohorts to follow whether buyers acquired during BFCM return. The Drill Down report uses figures supplied by the ad platforms, while [UTM Explorer](https://help.useamp.com/article/1050-utm-explorer?ref=productessentials.app) uses Shopify order data and campaign tags. Use the same report and attribution settings when comparing Black Friday with Cyber Monday. **When to add it:** you need to evaluate campaign performance, sale profitability, and repeat purchases together, and your existing reports leave those questions unanswered. **Pricing:** the free plan covers up to 50 monthly orders. Paid plans start at $49/month for up to 500 monthly orders, with higher tiers for larger stores. [See Lifetimely’s plans.](https://apps.shopify.com/lifetimely-lifetime-value-and-profit-analytics?ref=productessentials.app) ## Which BFCM Apps Does Your Store Actually Need? Start by writing down the problem you need to solve. “We spend hours changing prices” points toward campaign automation. “Customers cannot find their size in the sale” points toward navigation. “Nobody knows who is handling each enquiry” points toward support. Then check whether your existing tools already solve it. An effective email platform, review system, or helpdesk can stay in place while you improve another part of the campaign. For every addition, account for setup time and expected November usage. Assign someone to configure it, check the customer experience, and monitor it during the sale. Before launch, test the complete journey on mobile: open the campaign message, browse the sale, add a product, and check out. Test the campaign ending too. Include any additional discount codes in that check; [How to stop discount codes from stacking on items already on sale](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/) explains the pricing issue. Use the [2026 BFCM playbook](https://productessentials.app/blog/bfcm-playbook/) for the broader preparation checklist. ## Shopify Black Friday apps FAQ Do I need an app to run a Black Friday sale on Shopify? No. Shopify supports [discount codes, automatic discounts, and product sale prices](https://help.shopify.com/en/manual/discounts?ref=productessentials.app). You can also [schedule start and end dates for amount-off discounts](https://help.shopify.com/en/manual/discounts/discount-types/percentage-fixed-amount?ref=productessentials.app). A campaign app becomes useful when you want to coordinate bulk product-price changes, restoration, and storefront promotion as part of the same workflow. Which app is best for scheduling a BFCM sale? Disco is our recommendation for merchants who want scheduled catalog sale prices, automatic price restoration, and promotional elements such as timers and sale pages. If you only need a straightforward checkout discount with a start and end date, Shopify’s native discount settings may cover the job. How early should I set up my BFCM apps? We recommend choosing your tools several weeks before your promotion and reserving time for a complete test. Start earlier if you need to collect reviews, configure messaging, or establish analytics. For the 2026 calendar, [Black Friday is November 27 and Cyber Monday is November 30](https://productessentials.app/blog/bfcm-playbook/); work backward from your actual launch date if you start sooner. Do I need all ten apps? No. Choose according to your catalog, order volume, budget, and existing setup. A small store may need help scheduling the sale while already having adequate messaging and support. Add specialist tools when you can name the problem they will solve and the result you will use to judge them. ## Start with the part that needs attention first Choose the part of your BFCM campaign that needs attention first, then give yourself time to prepare it. If that is the sale itself, Disco brings product selection, scheduled pricing, and storefront promotion into one workflow. [**Plan and schedule your BFCM campaign with Disco.**](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=best-shopify-apps-black-friday-cyber-monday-bfcm) --- **Next:** [The 2026 BFCM playbook: plan your biggest sale months ahead](https://productessentials.app/blog/bfcm-playbook/) is the preparation checklist these apps plug into, and [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) shows the campaign setup that Disco handles in this list. ### How to stop discount codes from stacking on items already on sale URL: https://productessentials.app/blog/shopify-stop-discounts-from-stacking/ Last updated: 2026-10-18T08:42:01.000Z You put a product on sale at 20% off. A customer adds it to the cart, types in the 10% welcome code from your popup, and pays 28% less than the regular price. Nothing is broken. That is simply what Shopify does when a code meets a sale price, and during a sale weekend it happens on a large share of orders. ## Why codes stack on sale prices A sale price is not a discount. When you lower `Price` and put the original in `Compare-at price`, whether by hand or with an app, Shopify sees a product that costs $800\. It has no record that it used to cost $1,000. Shopify's discount *combination* settings only govern how discounts combine with each other: product, order, and shipping discounts, codes and automatic ones. A sale price sits outside that system, so those settings can't stop a code from applying to it. Any code the customer is eligible for, welcome, abandoned-cart, loyalty, influencer, affiliate, takes its percentage off the already-reduced price. ![Diagram of how pricing layers reduce one Shopify order: the sale price sits outside Shopify's combination settings, while product, order, and shipping discounts sit inside them](https://productessentials.app/content/images/2026/10/blog-06-promotion-stack-diagram-dea6ce87.svg) The sale price is a catalog price, not a discount. Shopify's combination rules apply to the layers inside the box, not to the sale price underneath them. ## Block discount codes on sale items with Disco If the sale price should be the floor, turn on one setting in the Disco campaign: **Block discount codes on sale products**, on the Business plan. 1. Open the campaign in Disco (or create one: pick the products by collection, tag, type, or vendor, set the discount and the start and end times). 2. Under **Discount code blocking**, tick **Block discount codes on sale products**. 3. Save. The block is active for as long as the campaign is live, and switches off when the campaign ends and prices are restored. ![The Discount code blocking section of a Disco campaign, with "Block discount codes on sale products" ticked. The tooltip reads: when enabled, customers can't apply entered discount codes at checkout if this sale's products are in their cart; other automatic discounts set up elsewhere in Shopify are not affected.](https://productessentials.app/content/images/2026/10/disco-block-discount-codes-setting-a917884e.png) The setting lives in the campaign, next to the active dates. What happens at checkout: 1. The campaign puts the products on sale. 2. A customer adds a sale product to the cart. 3. The customer enters a discount code at checkout. 4. Shopify rejects it. The customer sees: **"Discount codes can't be used with sale items in your cart."** ![Shopify checkout with a sale product in the cart and the discount code field. Below it, the message: Discount codes can't be used with sale items in your cart.](https://productessentials.app/content/images/2026/10/checkout-discount-code-blocked-message-e69a2e2b.png) What the customer sees when they try a code with a sale product in the cart. ### The block applies to the whole cart One sale item in the cart blocks discount codes for the entire order, including full-price items sitting next to it. That is usually what you want during a sale: the code was meant for full-price shopping, and the customer already has the sale. If you'd rather full-price items stay code-eligible, the alternative is to keep those products out of the campaign. ### Test it before the sale Some third-party discount apps create codes Shopify can't reject, and those may still go through. Before launch, place test orders on the live store with: - a Shopify-native discount code, - a code created by any other discount app you use, - a cart with only sale items, - a cart mixing sale and regular-price items. Record the expected and actual totals. If an app-created code slips through, pause that code for the sale window in the app that created it. ### Turning the block off Either untick **Block discount codes on sale products** in the campaign, or end the campaign. Codes work again immediately. ## When you'd rather let a code through Blocking isn't always the answer. One situations where you could leave the toggle off: - **A planned extra for loyalty members.** If members are promised 5% on top of everything, price it into the sale depth (a 25% sale plus 5% is what a 30% sale costs you) and let the code apply. ## FAQ Does Shopify stop discount codes from applying to sale items on its own? No. Discount combination settings control how discounts combine with each other. A sale price is a product price, not a discount, so any eligible code applies on top of it unless something blocks the code. Does the block also stop automatic discounts? No. It blocks codes the customer enters at checkout. Automatic discounts you've set up elsewhere in Shopify are not affected, so pause those for the sale window if they shouldn't apply. Codes created by apps that make them non-rejectable may also get through; test them. Can I block codes on some sale products but not others? The block is set per campaign and applies to the whole cart as soon as one blocked-campaign product is in it. To leave some products code-eligible, run them in a separate campaign without the block, or leave them out of the sale. ## Stop Shopify from stacking discount codes on top of your sale prices Decide before the sale whether codes may stack, run the numbers on your headline products, and if the sale price is the floor, enable the block in the campaign and test it with a real code. **Turn on "Block discount codes on sale products" in your next Disco campaign and place one test order with your welcome code.** Discount code blocking is on the Business plan ([compare plans](https://productessentials.app/#pricing)). [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-stop-discounts-from-stacking) --- **Next:** [How to show sale prices on Shopify product pages before checkout](https://productessentials.app/blog/shopify-sales-vs-discount-codes-show-discount-before-checkout/) explains the two mechanisms a code can stack on, and [The 2026 BFCM playbook: plan your biggest sale months ahead](https://productessentials.app/blog/bfcm-playbook/) puts the codes policy from this guide into a full season plan. ### The 2026 BFCM playbook: plan your biggest sale months ahead URL: https://productessentials.app/blog/bfcm-playbook/ Last updated: 2026-10-18T08:41:31.000Z Black Friday 2026 is **Friday 27 November**; Cyber Monday is **Monday 30 November**. The end of the sale is the same for almost everyone. When it *starts* is your choice: Friday itself, a Black Week from Monday 23 November, or early access for your waitlist from mid-November. This playbook counts back from **T-0, the day your prices go public**, using a 27 November launch as the example. Running Black Week? Shift every window a week earlier. Early access? Two weeks. By launch you'll have: - one goal with a number attached, and three product groups tagged - one headline offer, a codes policy, and every phase dated in one timezone - one sale URL, scheduled campaigns, and emails timed after go-live - a rehearsed reset, so the morning after takes care of itself None of it needs code. The campaign brief and weekly checklist at the end turn the plan into assigned tasks. ![BFCM preparation calendar counted back from T-0, the day prices go public: assortment at T-8 to T-6, offer design T-6 to T-4, destination T-4 to T-2, channels and pre-flight T-2 to T-0, then the sale and the reset. Dates shown for a 27 November launch and for early access from 16 November.](https://productessentials.app/content/images/2026/10/bfcm-01-tminus-calendar-58511a03.svg) The preparation timeline for a Friday 27 November launch. For a Black Week or an early-access start, shift every window earlier by the same amount. Finish selection, margin checks, setup, and testing before launch week; the launch-and-reset timeline appears later. In this guide 1. [Define the BFCM goal first](#define-the-bfcm-goal-first) 2. [8–6 weeks out: choose the products](#8%E2%80%936-weeks-out-choose-the-products) 3. [6–4 weeks out: design the offer](#6%E2%80%934-weeks-out-design-the-offer) 4. [4–2 weeks out: build the sale destination](#4%E2%80%932-weeks-out-build-the-sale-destination) 5. [The final two weeks: pre-flight](#the-final-two-weeks-pre-flight) 6. [Launch day: one clear deadline](#launch-day-one-clear-deadline) 7. [When BFCM ends](#when-bfcm-ends) 8. [BFCM planning template and weekly checklist](#bfcm-planning-template-and-weekly-checklist) 9. [FAQ](#faq) 10. [Build the campaign before the traffic arrives](#build-the-campaign-before-the-traffic-arrives) ## Define the BFCM goal first Choose one primary goal before picking products or discount levels. It should guide both the offer and how you judge the results. | Primary goal | What goes on sale | Typical depth | The one metric that matters | | ----------------------- | ------------------------------------------- | --------------------------------------- | --------------------------------------- | | **Revenue** | Broad range, bestsellers included | Moderate, one memorable headline | Gross sales vs. target | | **Margin** | Selective, high-margin lines and exclusions | Shallow, or bundled value rather than % | Contribution margin, not revenue | | **Inventory clearance** | Aged stock, discontinued ranges, overstock | Deep, tiered by age | Units cleared and cash recovered | | **Acquisition** | Entry products and gift-able items | Strong on a few hero products | New customers and their share of orders | You can have a secondary goal, but decide which takes priority. A deep sitewide discount might increase revenue while leaving less margin and selling stock you didn't need to clear. Write the goal and the target number at the top of your campaign brief. Everything below refers back to it. ## 8–6 weeks out: choose the products For a 27 November launch: roughly 2–16 October. A week earlier for Black Week; two weeks earlier for early access. Checkpoint One goal with a number, three product groups tagged, exclusions listed, hero stock checked. ### Bestsellers vs. overstock Bestsellers can attract shoppers, but some would sell at full price anyway. Older stock may need a deeper offer to move. Split the sale into three groups: - **Headline products.** A small group of hero items with a strong, visible offer. Their job is to earn the click from the email or the ad. - **Volume products.** The broad middle of the catalog at your standard BFCM depth. Their job is to turn the visit into a bigger basket. - **Clearance products.** Aged or discontinued stock at a deeper discount. Their job is to leave the warehouse. Give each group a discount level that matches its role and margin. For each headline product, compare stock on hand with expected demand and decide what happens if it sells out: feature a replacement, offer a waitlist, or direct shoppers to the rest of the collection. ### Decide the exclusions now The products you *don't* discount matter as much as the ones you do. Typical exclusions: - new arrivals and current-season launches, - low-margin lines where 20% off means selling at a loss, - products with a minimum advertised price from the brand, - gift cards, pre-orders, and services, - items that are already reduced (so you don't discount them twice), - hero SKUs you'd rather protect than devalue. Record the exclusions now so they are part of the setup from the start. ### Organize the products with tags or collections Tag the groups (`bfcm26-headline`, `bfcm26-volume`, `bfcm26-clearance`, `bfcm-exclude`) or organize them into collections. Product type and vendor can also work as filters. These groups make the selection easier to review and reuse, whether you apply prices with the bulk editor, a CSV, or an app. Disco selects campaign products by collection, tag, type, or vendor and lets you add exclusions on top, so a tag-based assortment maps directly onto three campaigns with three discount levels. But the tagging discipline is worth doing whichever tool applies the prices. ## 6–4 weeks out: design the offer For a 27 November launch: roughly 16–30 October. Checkpoint Sale shape chosen, one headline number, a mechanism for each offer, every phase dated in one timezone, codes policy written. ### Choose the shape of your sale Cyber Monday is the deadline whichever shape you choose. What changes is when the price drops, and for whom. | Shape | Prices go public | Trade-off | | ----------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- | | **Weekend only** | Fri 27 → Mon 30 Nov | Maximum urgency, but four days to make the number and everything happens at once on launch night | | **Black Week** | Mon 23 → Mon 30 Nov | Matches markets where competitors run all week; urgency fades mid-week and margin is exposed for eight days | | **Early access, then deeper** | Waitlist from \~16 Nov at a lighter discount; everyone from 27 Nov | Grows the list and keeps Friday an event; two prices to communicate, and the early one must be visibly lighter | | **Black November** | From 11 Nov (Singles' Day), with BFCM as the finale | Suits large catalogs; a month-long sale is a price, not an event, and reference-price rules bite hardest | The first two shapes are the campaigns you build anyway, one per product group, sharing a start and an end. The last two add a second, lighter layer on the same products. In Disco a product can sit in several campaigns at once and the highest discount wins, calculated from the *original* price: a 20% campaign from 16 November plus a 30% campaign from 27 November gives a $1,000 product an $800 price for the waitlist and $700 from Friday, with nothing to switch over on the night. The timer always counts down to the end of the campaign currently setting the price. The same mechanism gives you a Cyber Week tail without moving a deadline: let the lighter campaign run to 4 December while the headline campaign ends on Monday night, and prices step from 30% to 20% to regular. ### Pick the headline and how each offer applies Choose a headline that matches what shoppers will find. "30% off selected styles, 50% off last season" sets a clearer expectation than "up to 50% off" above mostly 10% reductions. Make the exclusions easy to find. Then decide the mechanism. A **sale price** (`Price` lowered, `Compare-at price` set to the original) is visible on every product page and collection card from the first click. A **discount** (a code or an automatic discount) leaves the product price alone and shows up at checkout. Use the sale price for the headline and for each product group's depth, one campaign per group; use discounts for the extras. [How to show sale prices on Shopify product pages before checkout](https://productessentials.app/blog/shopify-sales-vs-discount-codes-show-discount-before-checkout/) has the detail. Disco handles the catalog-price layer: bulk sale pricing with compare-at display, scheduled start and end, and the storefront elements around it. Build a Buy X Get Y, gift-with-purchase, or free-shipping offer natively in Shopify's Discounts section and run it *alongside* the campaign; those are cart rules, not price changes. Bundles and upsells are a different tool for a different job. ![Headline, volume, and clearance product groups feed separate campaigns and one sale destination. Email, social, and the homepage all link shoppers to that destination.](https://productessentials.app/content/images/2026/10/bfcm-02-campaign-map-3a678ee3.svg) Separate product groups can have different campaign rules, while one sale destination keeps the customer journey consistent. Point email, social, and homepage links to that destination. ### Fix the dates and phases Give each phase a date, time, and timezone. Confirm which timezone the scheduler uses. Here's an example for 2026 using the early-access shape; for a weekend-only sale, drop the early-access row and move the teaser to 13 November: | Phase | When | What's live | | ----------------- | ----------------- | --------------------------------------------------------------------------------------------- | | Teaser | Mon 2 Nov | Coming-soon page, waitlist, announcement bar | | Early access | Mon 16 Nov, 08:00 | Lighter sale price live (or early-access code); waitlist email; timer counting to 27 Nov | | Public launch | Fri 27 Nov, 00:00 | Headline sale price takes over, sale page, badges, launch email; timer now counting to 30 Nov | | Cyber Monday push | Mon 30 Nov, 08:00 | Last-call messaging | | End | Mon 30 Nov, 23:59 | Prices reset (or step down to the Cyber Week campaign), sale page down, timers off | Decide now whether you'll run a Cyber Week tail. Schedule it from the start as its own, lighter campaign with its own end, so the BFCM deadline you've advertised stays true. ![Example launch sequence for the early-access shape: teaser 2 November, early access at 20% from 16 November, headline 30% from 27 November, last call and headline end on 30 November, optional 20% tail to 4 December, then reset. Two campaigns overlap on the same products; the deeper one sets the price while it is live.](https://productessentials.app/content/images/2026/10/bfcm-03-launch-week-dde19a4a.svg) Example launch-and-reset sequence for the early-access shape, with an optional Cyber Week tail. Two campaigns overlap on the same products; the deeper one sets the price and the timer while it is live. For a weekend-only sale, drop the early-access step and the tail. Use one timezone across prices, timers, messages, and emails; send each launch email after checking the live prices. **Reference prices.** In the EU and several other markets, the "before" price you show must reflect the lowest price you charged in a recent window (commonly 30 days). Two consequences: keep the weeks before your first campaign free of *separate* sales on the same products, and make sure your `Compare-at price` is a price you can evidence. A Black Week or early-access phase that runs into Black Friday as one continuous, progressively deeper sale generally keeps the pre-campaign price as the reference, which is also how Disco calculates overlapping campaigns. Check the rules for the markets you sell in; this is not legal advice. ### Decide which codes can stay active Welcome, abandoned-cart, loyalty, influencer, and affiliate codes all apply to the *reduced* price unless you stop them. A 20% sale plus a 10% code is a 28% discount, and during BFCM every one of those codes finds its way to checkout. Run the numbers before you decide. These examples exclude tax and other costs such as payment fees: | Scenario | Selling price | Cost | Contribution | Contribution % | Units needed to match regular contribution | | ---------------------------- | ------------- | ---- | ------------ | -------------- | ------------------------------------------ | | Regular price | $1,000 | $500 | $500 | 50% | 1.0× | | 20% sale price | $800 | $500 | $300 | 37.5% | 1.7× | | 20% sale + 10% welcome code | $720 | $500 | $220 | 30.6% | 2.3× | | … + free shipping ($40 cost) | $720 | $540 | $180 | 25% | 2.8× | The extra code cuts what's left per unit from $300 to $220, so you need about 2.3 times the volume to earn what one unit earned at regular price. Repeat the calculation for your headline products. ![Contribution per unit falls from $500 at regular price to $300 with a 20 percent sale, $220 with a further 10 percent code, and $180 when $40 shipping cost is added. Matching $500 then needs about 2.8 times the units.](https://productessentials.app/content/images/2026/10/bfcm-04-margin-worksheet-44584e44.svg) Illustrative contribution after the costs in the worksheet: $500 → 300 → 220 → 180\. Tax, payment fees, and other costs are excluded. At $180 per unit, matching $500 takes about 2.8 times the sales volume. Then pick a policy; most campaigns use more than one: 1. **Pause codes that shouldn't apply.** End the welcome code the day before your first campaign and restart it afterwards; change the popup copy so you aren't promising 10% you won't honour. 2. **Use Shopify's combination settings** for how discounts combine with each other. They don't cover a sale price, which isn't a discount object, so on their own they won't stop a code applying to a reduced price. 3. **Block codes during the campaign.** On the Business plan, Disco can block additional discount codes while a campaign is active; test any automatic discounts separately. 4. **Allow a planned extra discount**, say 5% for loyalty members, and put that reduction in the worksheet and the brief. Write the decision in the brief so marketing, support, and the campaign owner give customers the same answer. [How to stop discount codes from stacking on items already on sale](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/) covers the combination rules and the audit in detail. ## 4–2 weeks out: build the sale destination For a 27 November launch: roughly 30 October – 13 November. Checkpoint The sale URL exists and sits in the menu, the waitlist is live, every campaign is scheduled with a start and an end. ### Give the sale one destination URL Point your emails, ads, social posts, and homepage banner to one sale URL. A collection can work well because you can keep it available after the campaign and reuse it next year. You can build the collection manually or as an automated collection driven by a tag. Disco can generate the sale collection from a campaign's products, and on higher plans auto-tag them so an automated "On sale" collection fills when the campaign starts and empties when it ends. Either way, the collection should exist and be linked in navigation *before* launch, even if it shows "coming soon" until the prices change. ### A coming-soon page and a waitlist A coming-soon page gives interested shoppers somewhere to sign up before launch. Keep the teaser short and explain what joining the waitlist gets them. Disco supports this lifecycle directly: a coming-soon page before the campaign, a scheduled announcement bar that collects email addresses, and a flash-sale page that publishes when the campaign starts and comes down when it ends. Addresses land in your Shopify customer list with tags, so the early-access segment is ready without exporting anything. You can also use a Shopify page, your existing newsletter form, and a customer tag or segment. Have the signup flow ready before you start promoting the waitlist. ![One BFCM sale destination in three states: before the sale, a coming-soon page and waitlist; during the sale, sale prices and a real deadline; after the sale, an ended message with a route back to shopping.](https://productessentials.app/content/images/2026/10/bfcm-06-destination-states-21f6b488.svg) Plan the destination before, during, and after the sale. Use one stable URL or deliberate redirects; verify how your chosen collection or sale page behaves when the campaign ends. ### Homepage and navigation - Add a "Black Friday" link to the main menu pointing at the collection or coming-soon page. - Prepare the homepage hero, but don't rely on publishing theme changes by hand at midnight. Point the hero at the sale collection URL; let the announcement bar and sale page carry the "it's live" state, since those can be scheduled. - Check that your search results and any "recommended products" blocks won't surface excluded products with sale styling by accident. ## The final two weeks: pre-flight For a 27 November launch: roughly 13–27 November. Checkpoint Emails scheduled after go-live, price syncs paused, dress rehearsal and checkout matrix passed, freeze rules communicated. ### Schedule the emails and social Plan messages for each phase. Adapt this sequence to your audience and usual sending frequency; you don't need every send. | Send | Timing | Purpose | | ------------ | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | | Teaser | T-14 days | "Something's coming." Drive waitlist signups. | | Preview | T-7 days | Show 3–5 hero products; restate the waitlist benefit. | | Early access | When the early price goes live (T-1 evening for a weekend sale; around T-11 for early access from 16 Nov) | Waitlist only. First look, early-access code if you're using one. | | Launch | T-0, shortly after go-live | Everyone. Headline offer, deadline, link to the collection. | | Mid-sale | T+1 or T+2; one mid-week send for a Black Week | Bestsellers from the first 24 hours, restocks, social proof. | | Cyber Monday | Monday morning | Last call, with the real end time. | | Final hours | Monday, \~6 hours before end | Short. Deadline only. | A longer sale doesn't earn more emails. For a Black Week, add one mid-week send and keep the rest of the sequence; for early access, the price change on Friday is a second launch and deserves its own send. The last-call emails do more work than the launch email. Three things to settle before you schedule: - **One deadline, everywhere.** Timer, announcement bar, email footer, and Instagram story must show the same end time, or you've created a support ticket. - **When email prices update.** Some tools pull prices at send time, others cache them. Schedule the launch email after the price change and check a test send once the sale is live. - **Support replies.** Do codes work, when does it end, what if a price looks wrong, what if it sells out. Share them with whoever handles social comments. ### Find every system that writes prices Other integrations write to the same price fields as your campaign: ERP or inventory systems, supplier apps, marketplace connectors, pricing tools, scheduled imports. If one syncs the regular price after the sale starts, it overwrites the offer, and reapplying the discount won't fix a conflict that repeats on every sync. Fill this table in for your store: | System | Writes prices? | How often | Owner | Action for BFCM | Tested? | | -------------------------- | -------------- | --------- | --------- | ----------------------------------------------------------------- | ------- | | e.g. ERP price sync | Yes | Hourly | Ops | Pause price sync from T-1 to the day after the last campaign ends | ☐ | | e.g. Google Shopping feed | Reads only | Daily | Marketing | Confirm refresh timing after go-live | ☐ | | e.g. Marketplace connector | Yes | On change | Ops | Exclude BFCM products from sync | ☐ | Three fixes, in order of preference: pause the other system's price sync for the sale window; exclude the campaign products from it; or run its sync *before* the campaign starts so the sale price is the last write. Our help article on [why Disco discounts appear, then disappear later](https://help.productessentials.app/article/54-why-disco-discounts-appear-then-disappear-later?ref=productessentials.app) covers the fix, and [Your Shopify sale price keeps reverting? If you use compare-at prices, this is probably why](https://productessentials.app/blog/shopify-sale-price-keeps-reverting/) walks through finding the culprit. ![An example price conflict: Disco sets an $800 sale price at midnight; an ERP sync writes $1,000 at 01:00; the shopper then sees $1,000. The latest price write wins.](https://productessentials.app/content/images/2026/10/bfcm-05-last-write-wins-95995fad.svg) Example of a price-sync conflict. Coordinate every system that writes prices: pause the relevant sync, exclude the sale products, or schedule the sync before launch. Three smaller checks while you're at it: - **Shopify Markets.** Market-specific pricing may not follow a base-price change identically; check one product per market in the rehearsal and at go-live. - **Product feeds and ads.** A feed that refreshed at 22:00 on Thursday advertises full price until it runs again, and ad/landing-page mismatches get products disapproved. Trigger a refresh after go-live. - **Theme and cache.** Confirm compare-at prices and badges show on collection cards and product pages; after launch, check in a private window before blaming the cache. ### Rehearse the launch and the reset A week before, run a real campaign on three to five test products for thirty minutes. Watch the start (prices, badges, timer, bar, sale page), then watch the end (prices restored to the exact original values, compare-at cleared, page unpublished). This is when you discover a missed variant, a wrong timezone, or a plan product limit lower than your assortment. If you use overlapping campaigns, rehearse the overlap too: start the lighter campaign, let the deeper one take over, and watch the price step back down when the deeper one ends. Then run the checkout matrix on the live store with real cart values, and record expected and actual totals: | # | Scenario | Expected result | | - | --------------------------------------- | -------------------------------------------------------- | | 1 | Headline product, no code | Sale price only | | 2 | Headline product + welcome code | Per policy: blocked, or stacked at known cost | | 3 | Excluded product + welcome code | Full price, code applies (or not) per policy | | 4 | Clearance product + abandoned-cart code | Per policy | | 5 | Cart over free-shipping threshold | Shipping discount applies; check it combines as intended | | 6 | Buy X Get Y offer + sale product | Native discount behaves as configured | | 7 | Product in a second market/currency | Sale price and strikethrough render correctly | | 8 | Mobile checkout, any of the above | Same totals as desktop | ### Freeze rules for the sale window - No manual price edits on campaign products while a campaign is scheduled or live. If a price must change, change it through the campaign or after the reset. - No CSV imports touching price columns during the sale window. - Don't uninstall or reinstall pricing apps mid-campaign. - One person owns the campaign; everyone else asks before touching prices. ## Launch day: one clear deadline Checkpoint One deadline everywhere, and a 15-minute check before the launch email goes out. A useful countdown answers a practical question: how long do I have to buy? Set it to the campaign's real end time, and use stock messages only when they reflect actual inventory. What real urgency looks like in a Shopify storefront: - **Countdown timer** on the product page (and the sale collection, if your theme supports it), counting to the *actual* campaign end. Disco's timer is tied to the campaign schedule, so it can't disagree with the end time; with overlapping campaigns it counts to the end of the one currently setting the price. - **Sale badges** on product cards showing the real saving ("Save 30%" or "Save $200"), driven by the compare-at price rather than typed by hand. - **Announcement bar** with the headline and the deadline, linking to the collection. - **Inventory-driven scarcity only when it's true.** If a hero product is down to its last units, say so; if it isn't, don't. Keep the deadline prominent and easy to read. One well-placed timer is enough. ### Go-live check (the first 15 minutes) 1. Open a headline product in an incognito window: sale price, strikethrough, badge. 2. Open the sale collection: every card shows sale styling; excluded products are absent. 3. Timer shows the correct remaining time; announcement bar links to the right URL. 4. Coming-soon page has been replaced by the sale page (or redirects). 5. Place a test order with no code, then one with your welcome code, and confirm the totals match your codes policy. 6. Send the launch email to yourself and check that prices render as sale prices. 7. Check one product in each market you sell to, if you use Shopify Markets. ## When BFCM ends Checkpoint Reset verified, codes restored, sale URL still alive, results measured against the goal. ### How to restore regular prices after your Black Friday sale At the end time, the campaign restores prices and removes the sale elements you enabled. Check the price display, page, timer, badges, announcement bar, and any collection using campaign tags during your rehearsal so you know what to expect after Cyber Monday. If a lighter campaign is still running when the headline campaign ends (the Cyber Week tail), the price steps down to that campaign's sale price, not to the regular price. That is the design, not a failed reset; the original price returns when the last campaign ends. Tell whoever runs the spot checks which state to expect on which morning. ### Spot checks (the morning after a campaign ends) - Ten products across the three groups: price restored, or stepped down to the tail campaign's price if you scheduled one; headline sale styling removed. - Every variant on two multi-variant products. - One product per market. - Search results and recommended-product blocks show no stale sale styling. - Product feed has picked up the restored prices. - Welcome code is active again and the popup copy is back to normal. - The BFCM URL still resolves. It's in every email you sent, so don't let it 404: keep the collection live with a "sale ended, here's what's next" message, or redirect it to your December offer, and update the navigation link. ### Measure the result against your goal Start with the one metric you chose at the top: revenue against target, contribution after product and shipping costs, units cleared, or new customers and their share of orders. Then the diagnostics: units sold per product group, average order value, discount-code usage during the sale (your stacking leak, in $), support tickets by type, stockouts and when they happened, and anything that went wrong with prices, timers, or syncs. Then write down three things to change. Keep the tags, the brief, and the test matrix. Next year starts from here, not from a blank page. ## BFCM planning template and weekly checklist Copy both of these into your planning doc. The brief is one row per decision made above; the checklist is the same plan as dated tasks. Campaign brief | Field | Your answer | | ---------------------------------------------------------------------------------------- | ----------- | | Primary goal and target number | | | Secondary goal | | | Sale shape (weekend / Black Week / early access + deeper / Cyber Week tail) and T-0 date | | | Phases, dates, times, timezone | | | Headline offer (the one number) | | | Group 1: tag / collection → discount | | | Group 2: tag / collection → discount | | | Group 3: tag / collection → discount | | | Exclusions (tag or list) | | | Native Shopify discounts running alongside (BXGY, shipping) | | | Codes policy (which codes apply, which are blocked/paused) | | | Destination URL | | | Email schedule and owner | | | Social and paid schedule and owner | | | Systems that write prices, and the action for each | | | Rollback plan and who verifies it | | | Test campaign date | | | Campaign owner (single name) | | ### Your weekly checklist **T-8 to T-6 weeks** - ☐ Primary goal and target number agreed and written down - ☐ Products sorted into headline / volume / clearance groups - ☐ Exclusions decided and tagged - ☐ Groups organized with tags or collections in Shopify - ☐ Inventory depth checked for headline products; sell-out plan agreed **T-6 to T-4 weeks** - ☐ Sale shape chosen and T-0 date set; planning calendar shifted to match - ☐ Headline number chosen - ☐ Mechanism decided for each offer element (sale price vs. native discount) - ☐ Dates, times, timezone fixed; Cyber Week tail scheduled or ruled out - ☐ Reference-price rules checked for your markets - ☐ Codes policy written **T-4 to T-2 weeks** - ☐ Sale collection created and linked in navigation - ☐ Coming-soon page and waitlist live - ☐ Announcement bar scheduled - ☐ Homepage hero prepared - ☐ Campaigns built and scheduled (one per group, plus the overlapping early-access or tail campaign if you use one) with start and end times **T-2 weeks to launch** - ☐ Email sequence written and scheduled (launch email timed *after* go-live) - ☐ Social and paid assets ready, all pointing to one URL - ☐ Support macros written - ☐ Price-writing systems table completed; syncs paused, excluded, or re-timed - ☐ Feed refresh timing confirmed - ☐ Dress-rehearsal campaign run and reset verified (including the overlap, if you use one) - ☐ Checkout test matrix completed on the live store - ☐ Freeze rules communicated to the team **Launch and during** - ☐ 15-minute go-live check completed - ☐ Mid-sale email sent; restocks and sell-outs handled - ☐ Last-call sends timed to the real end **After** - ☐ Reset verified with spot checks - ☐ Codes and popup restored - ☐ Landing-page state updated - ☐ Analysis completed against the primary goal - ☐ Three changes for next year written down ## FAQ When should I start planning Black Friday on Shopify? Eight weeks out is comfortable; six is workable; four means skipping the waitlist phase and accepting some risk on the technical side. Whatever you skip, don't skip the dress rehearsal and the checkout test matrix. Should I use a sale price or a discount code for the headline offer? Sale price. The headline has to be visible on product and collection pages, and only a change to `Price` and `Compare-at price` does that. Use codes for what codes are good at: early access, loyalty, influencers, and anything you want the customer to unlock rather than see. Can I run different discounts on different products at the same time? Yes. Give each product group its own campaign, selection, discount, and schedule. Disco supports campaigns running at the same time, and the same product can sit in more than one; the highest discount applies. With the bulk editor or CSV, you'd apply and restore each group's prices separately. What if I want to extend the sale? Decide before launch. If you want a Cyber Week tail, schedule it as a separate, lighter campaign from the start; in Disco it can overlap the headline campaign and simply outlast it, so prices step down rather than snapping back. Moving a deadline you've already counted down damages the credibility of every future timer. Do I need an app for Black Friday? If you have a small catalog, one discount level, and someone happy to change prices at midnight and again on Tuesday, Shopify's bulk editor and a CSV backup will do. An app earns its place when there are more products than you want to edit and reverse by hand, more than one discount level, a hard start and end time, storefront elements like timers and badges, or a codes policy you need enforced rather than hoped for. ## Build the campaign before the traffic arrives Give yourself a launch day spent checking a finished campaign. Tag the products, agree the offer and the shape of the sale, schedule the start and end, and test the reset while there's still time to change things. Start with the brief above and assign an owner to each task. **Install Disco, create the sale collection, and schedule the start and end well in advance.** The free plan is enough to build and test a small campaign today; for larger plans, see our current plans page. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=bfcm-playbook) --- **Next:** [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) walks through the scheduling and reset this playbook relies on, and [Bulk discounts in Shopify: put hundreds of products on sale without CSV](https://productessentials.app/blog/shopify-bulk-discounts/) covers applying the three discount levels to a large catalog. ### From teaser to flash sale: build a Shopify sale page with a waitlist, timer, and announcement bar URL: https://productessentials.app/blog/shopify-flash-sale-page-waitlist-timer/ Last updated: 2026-10-18T08:41:43.000Z Most flash sales on Shopify are launched the same way. Someone lowers a few hundred prices, sends an email, and hopes. Two days later, someone raises the prices again. Ideally the right ones, ideally at the right time. That treats a flash sale as a price change. The sales that move the needle treat it as a launch: a run-up where customers learn it's coming, a live window where every touchpoint points at the same offer, and a clean ending where the deadline is honored and the store returns to normal without anyone staying up until midnight. This guide walks through that sequence and ends with a day-by-day timeline you can copy. Each step notes what Shopify can do on its own and where automation pays off. We built [Disco](https://productessentials.app/#features) for exactly this sequence, so it's the app in the examples. ## A flash sale has three phases Before touching a single price, name the three states your store will be in. | Phase | What the customer sees | What has to happen in the store | | -------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | **Pre-launch** | "Something is coming Thursday. Want early access?" | Coming-soon page live, announcement bar teasing the date, waitlist capturing emails, prices still normal | | **Live** | Sale prices with the original struck through, a timer, a badge, and one obvious place to shop | Prices switched, sale page published, sale collection populated, announcement bar updated, discount-code rules decided | | **Expired** | Normal prices, no timer, no stale "SALE" badges | Prices reset, sale page removed, widgets off, waitlist segment ready for next time | The price change is one item in that table. The rest is timing, and the two transitions (normal → live, live → normal) are where flash sales go wrong: a timer still counting after prices reset, a "SALE" badge on a product back at full price, a coming-soon page still in the menu on launch day. Those aren't pricing mistakes. They're sequencing mistakes. ![The three phases of a flash sale, with the storefront state in each and the two switch points at start and end time](https://productessentials.app/content/images/2026/10/flash-sale-three-phases-01c0b883.png) ## Pre-launch: build a coming-soon destination A teaser only works if it has somewhere to send people: a single page that says what's coming, when, and why someone should hand over their email. **Say three things.** The *when* (date and start time, in your customers' time zone), the *what* (which collection, roughly how deep the discount goes), and the *why join* (early access, first pick before popular sizes sell out). You don't have to reveal exact prices. "Up to 40% off the autumn collection, Thursday at 8 PM" is specific enough to be credible and vague enough to keep the launch interesting. **Tease heroes, not leftovers.** Three to six bestsellers people already want. Clearance items sell on the strength of the sale; the heroes are what make people sign up. **Keep the form to one field.** Email only, a line on what they'll get ("one email when it goes live, one before it ends"), and a confirmation that they're on the list. **In Shopify:** create a page, add your theme's newsletter section, and remember to hide or swap it at launch. **In Disco:** the flash-sale page has a coming-soon state that runs before the campaign, and every email it collects lands in your Shopify customer list with campaign tags, ready to use in Shopify Email, Klaviyo, or whatever you already send from. At the start time, the live sale page publishes on its own. Setup is in the [flash-sale page help doc](https://help.productessentials.app/article/32-flash-sale-page?ref=productessentials.app). ## Announcement bar before launch The page is the destination; the bar is the signpost every visitor sees, whichever page they land on. That's why it needs discipline: one message, one date, one action. *Autumn flash sale starts Thursday 8 PM → Join the waitlist.* Not "Free shipping over $50 | New arrivals | Sale coming Thursday | Follow us." If the bar already carries a free-shipping message, decide which matters more for the next seven days. Date first, offer second, action last. **In Shopify:** most themes have an announcement bar section that can link to your page; you edit it by hand at launch and again at the end. **In Disco:** the announcement bar follows the campaign dates and can capture emails right in the bar, so a visitor on any product page can join the waitlist without leaving. Set the pre-launch message to collect emails and the live message to point at the sale; both switch off with the campaign. Widget availability varies by plan, so check the [current plans](https://productessentials.app/#pricing). ![The same announcement bar before launch, collecting waitlist emails, and during the sale, showing the countdown and a link to the sale](https://productessentials.app/content/images/2026/10/announcement-bar-two-states-ca507630.png) ## Launch: switch the destination to the sale page Launch should be one coordinated switch, not six manual edits. At the start time, four things need to be true at once: 1. **Prices are switched.** Each sale product shows the new price with the original as the compare-at price, so the saving is visible on the product and collection page, not just at checkout. If that distinction is new, [Shopify sales vs. discount codes](https://productessentials.app/blog/shopify-sales-vs-discount-codes-show-discount-before-checkout/) explains it. 2. **The sale page is live**, ideally at the same URL you've been sending people to all week. 3. **Navigation points to it.** A "Sale" item in the menu, the homepage hero, the announcement bar link. One click from anywhere. 4. **Discount-code rules are decided.** A 10% welcome code on top of a 30% sale price means the sale price was never your floor. Decide whether codes stack, and if not, block them for the window. The [discount stacking article](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/) has the math. **In Shopify:** bulk-edit prices and compare-at prices (or import a CSV), publish the page, edit the menu, update the bar, all at the same moment. Fine for a small catalog during working hours. Hard at 8 PM on a Thursday with 400 variants. **In Disco:** the campaign carries the start time, the product selection (by collection, tag, vendor, or type, with exclusions), the discount, and the widgets. At the start time it writes the prices, publishes the page, turns on the timer, badges, and bar, and can auto-tag the sale products so a collection picks them up. The [scheduling guide](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) covers what happens at each moment. **Test it first.** Run a one-product campaign that starts ten minutes from now. Watch the price change, the compare-at price appear, the page publish, the badge show. Let it end and confirm everything reverts. Ten minutes of testing beats a support ticket at 8:07 PM. ## Countdown timer and badges Urgency is why a flash sale outperforms a regular sale. It's also the easiest place to lose trust. **Put the timer where the decision happens:** on the sale page, on product pages near the price, and in the announcement bar so it follows the visitor. The customer who clicks through from the homepage should see the same deadline where they add to cart. **Make the deadline real.** The timer must count down to the actual campaign end, the same moment prices reset. Timers that restart on every visit and sales "extended by popular demand" every time teach customers that your deadlines are decoration (and can count as a misleading practice in some markets). The safeguard: timer, price change, and page state driven by one end time. Separate settings maintained by hand drift. **Badges** make sale products findable in a mixed collection and reinforce the compare-at price. Keep them consistent with the actual discount (no "up to 50%" on a product that's 20% off) and make sure they disappear when the campaign ends. A stale sale badge on a full-price product is the most visible post-sale mistake there is. In Disco, the timer and badges are tied to the campaign's start and end, which is what keeps them honest; the timer is on the free plan, badges on paid tiers ([current plans](https://productessentials.app/#pricing)). ![Product page with a sale badge, the sale price next to the struck-through original price, and the countdown directly under the price](https://productessentials.app/content/images/2026/10/product-page-timer-badge-7d07bf6c.png) ## Use the sale collection as the channel hub Every channel during the live window needs one link, and it should be the sale collection: the URL stays the same from campaign to campaign, products and badges are right there, customers can filter by size without leaving, and when the sale ends the URL can carry a "next sale" waitlist rather than a dead end. **Keep it populated automatically.** The failure mode is a collection missing the products you added last-minute. The fix: Disco auto-tags every product in the campaign, and a Shopify automated collection with the condition "product tag is equal to *flash-sale*" picks them up the moment they're tagged and drops them when the tag goes. Setup is in the [sale-collection article](https://productessentials.app/blog/sale-collection-everywhere/) and the [auto-tagging help doc](https://help.productessentials.app/article/6-add-products-on-sale-to-existing-collection?ref=productessentials.app). | Channel | Message | Link | | ------------------------ | --------------------------------------------------------------------------------------------------- | --------------- | | Email, waitlist first | "You're in. The sale is live for 48 hours." At the start time, 10 minutes before the general blast. | Sale collection | | Email, everyone | "Autumn flash sale: 48 hours, up to 40% off." | Sale collection | | Paid social | Hero product, the discount, the deadline. Nothing else. | Sale collection | | Organic social / stories | Countdown sticker matching the real end time; link in bio. | Sale collection | | Homepage hero | Same headline as the email; timer if your theme supports one. | Sale collection | Give the waitlist a real head start: their email at the start time, the general blast ten minutes later. Never send "live now" before prices have switched. That's the first broken promise of the sale. ## After the deadline This is where the promise is kept. Whoever bought at 7:50 PM needs to see the sale really ended at 8; whoever arrives at 8:10 PM needs normal prices and no timer. **Stop the campaign.** Prices revert, compare-at prices clear, badges and timer disappear, the sale page unpublishes or switches to an ended state, the bar returns to normal. In Disco that's the scheduled end time doing its job. In Shopify it's the launch edits again, in reverse. **Check within the hour:** three sale products back to normal price; the sale collection empty or as intended; the sale URL not showing a live timer; the announcement bar and homepage hero; any blocked discount codes active again if they should be; and, if you use a feed, marketplace, or price-sync app, that it hasn't re-applied stale prices ([help doc](https://help.productessentials.app/article/54-why-disco-discounts-appear-then-disappear-later?ref=productessentials.app)). **Don't leave a dead URL.** Point it to a "sale has ended, join the list for the next one" page, redirect it to bestsellers, or let it become the next coming-soon page. The waitlist is now a tagged segment in Shopify, the best starting point for the next launch. ## Mini example: a 48-hour flash sale, from first teaser to close Autumn flash sale, live from Thursday 8 PM to Saturday 8 PM. Adjust the dates and discount; keep the shape. | When | What happens | Message | | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | **Thursday, one week before** | Campaign built and scheduled: products by collection with exclusions, 30% off, Thu 8 PM to Sat 8 PM, discount codes blocked. One-product test run and reverted. | — | | **Saturday, 5 days before** | Coming-soon page goes live. Announcement bar switches to the teaser. First organic post. | "Autumn flash sale: Thursday 8 PM. Join the waitlist for early access." | | **Monday, 3 days before** | Email to the full list. Paid social teaser starts. | "Three days. Up to 40% off the autumn collection. The list gets in first." | | **Wednesday, the day before** | Reminder to non-openers. Story with a countdown sticker set to Thursday 8 PM. | "Tomorrow at 8 PM. The list hears first." | | **Thursday 8:00 PM — launch** | Campaign starts: prices switch, sale page publishes, timer, badges, and bar go live, collection fills via auto-tagging. Waitlist email goes out the same minute. | Waitlist: "You're in. Live now, 48 hours only." Bar: "Ends in 47:59:12 → Shop the sale" | | **Thursday 8:10 PM** | General email. Paid social switches to live creative. | "The autumn flash sale is live. 48 hours, up to 40% off." | | **Friday 8 PM — halfway** | Email to non-purchasers. Low-stock note only if it's true. | "24 hours left. Popular sizes are going." | | **Saturday noon — 8 hours left** | Last-chance email. | "Final 8 hours. Ends tonight at 8 PM." | | **Saturday 8 PM — end** | Campaign ends: prices reset, page unpublished, widgets off. Post-sale check. | Bar returns to its everyday message. | | **Tuesday, 3 days after** | Thank-you to buyers; next-sale teaser to the waitlist. | "Thanks for shopping. Want first access next time? You're already on the list." | Every message names the deadline, and every link goes to the same collection. That's the whole method. ## Two common questions **Do I need a paid plan for the sale page?** At the time of writing, the flash-sale page and auto-tagging start at the Professional plan; scheduling, the countdown timer, and the sale collection are on the free plan. See [current plans](https://productessentials.app/#pricing). **Does this work for Black Friday?** Yes. Same three phases, bigger scale, more competition for attention, which makes the waitlist and the single-hub link more valuable, not less. The [BFCM playbook](https://productessentials.app/blog/bfcm-playbook/) covers the seasonal specifics. --- **Create your next flash sale as a campaign, not just a price change.** Build the coming-soon page, waitlist, announcement bar, timer, and sale page on a plan that supports them, and let the start and end times do the work. [See current plans](https://productessentials.app/#pricing) · [Install Disco from the Shopify App Store](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-flash-sale-page-waitlist-timer) --- **Next:** [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) is the campaign schedule every phase above hangs off, and [The 2026 BFCM playbook: plan your biggest sale months ahead](https://productessentials.app/blog/bfcm-playbook/) runs this same three-phase flow at Black Friday scale. ### Shopify Black Friday discount ideas: 12 offers and how to set them up URL: https://productessentials.app/blog/shopify-black-friday-discount-ideas/ Last updated: 2026-10-18T08:41:37.000Z Good Shopify Black Friday discount ideas fit your margins and stock, not the loudest number on the street. Seven of the 12 cut the price: a storewide sale, collection tiers, a kit, price points, doorbusters, rolling flash sales and a Cyber Monday-only collection. Four apply in the cart: Buy X Get Y, spend tiers, free shipping and a gift with purchase. Early access lets your list shop first. Black Friday 2026 is November 27\. We make [Disco](https://productessentials.app/#features), the sale app in the how-to steps. ![Diagram sorting Shopify Black Friday discount ideas into two groups: price offers shown on the product page (storewide, collection tiers, kit collection, price points, flash sales) and cart offers applied in the cart and at checkout (Buy X Get Y, spend tiers, free shipping, gift with purchase).](https://productessentials.app/content/images/2026/09/01-price-vs-cart-offers-6f06b4b3.png) Price offers show on the product page. Cart offers appear only in the cart and at checkout. In this guide 1. [Which storewide and collection sales work for Black Friday?](#which-storewide-and-collection-sales-work-for-black-friday) 2. [What are good Shopify Black Friday flash sale ideas?](#what-are-good-shopify-black-friday-flash-sale-ideas) 3. [What should a Shopify Cyber Monday flash sale offer?](#what-should-a-shopify-cyber-monday-flash-sale-offer) 4. [Which Black Friday offers raise order value?](#which-black-friday-offers-raise-order-value) 5. [Which Black Friday offer fits your store type?](#which-black-friday-offer-fits-your-store-type) 6. [When is a sale app better than Shopify discounts?](#when-is-a-sale-app-better-than-shopify-discounts) 7. [What are good Shopify Black Friday announcement bar examples?](#what-are-good-shopify-black-friday-announcement-bar-examples) 8. [Shopify Black Friday discount ideas FAQ](#shopify-black-friday-discount-ideas-faq) 9. [When should you set up your Black Friday offers?](#when-should-you-set-up-your-black-friday-offers) ## Which storewide and collection sales work for Black Friday? Start with a storewide percentage, tiered collections, a discounted kit or fixed price points. Disco schedules these as sale prices on product and collection pages without a code, then restores the original prices when the sale ends. To let your email list shop first, give subscribers a code instead. ### 1\. Storewide percentage off A storewide "20% off everything" fits when margins are healthy. The margin risk is high, because bestsellers get discounted too. At 20% off, a $40 product that costs $20 drops from $20 profit to $12. In Shopify you can use an automatic [Amount off orders](https://help.shopify.com/en/manual/discounts/discount-types/percentage-fixed-amount?ref=productessentials.app) discount, but it shows savings only in the cart. Disco resolves this by displaying the sale price, with the original struck through, on product and collection pages. #### How to set up 20% off everything in Disco 1. **Click Create sale**, then choose **Same discount** and **Percentage**: 20. 2. **Choose All products** under **Include products**, then set the **Active dates**. 3. **Exclude bestsellers** under **Exclude products / collections** (Lite and up). ### 2\. Tiered discounts across 2–3 collections When margins differ by collection or stock age, tier the sale: 15% off new arrivals, 25% off core lines and 40% off last season. The margin risk is low to medium, because deep cuts go where stock must move. In Shopify you can set one automatic discount per collection to [combine](https://help.shopify.com/en/manual/discounts/discount-combinations?ref=productessentials.app) with other **Product discounts**, but the savings show only in the cart. Disco resolves this by displaying each collection's tier as a struck-through price. #### How to tier discounts across collections in Disco 1. **Create one Same discount campaign per collection** (three need Lite). 2. **Give each campaign its collection** and percentage. 3. **Give all three the same Active dates.** ### 3\. A discounted kit collection If products sell together, such as a grinder and beans, make them a discounted kit collection. The margin risk is medium, because shoppers can still buy the cheapest piece alone. A true bundle, one product at one price, needs an app such as [Shopify Bundles](https://help.shopify.com/en/manual/products/bundles/shopify-bundles?ref=productessentials.app). In Shopify you can give the kit collection an automatic discount, but the saving shows only in the cart. Disco resolves this by showing sale prices on product pages and building the collection for you. #### How to build a discounted kit collection in Disco 1. **Click Create sale** and select the kit's products. 2. **Enter the kit name** as the **Title**. 3. **Use Create collection** to build the kit collection under that name. ### 4\. Fixed price points Gift shoppers often think in budgets, so try one price such as "everything $25" for accessories with similar costs. The margin risk is uneven, because one price can push some products below cost. In Shopify you can bulk-edit **Price** and **Compare-at price** ([sale pricing](https://help.shopify.com/en/manual/products/details/product-pricing/sale-pricing?ref=productessentials.app)), but you change them back by hand. Disco resolves this by restoring the original prices when the sale ends. #### How to set a fixed price point in Disco 1. **Click Create sale**, choose **New price** and enter 25. 2. **Select the accessories** and set the **Active dates**. 3. **Exclude products where $25 is below cost** under **Exclude products / collections** (Lite and up). ### 5\. Early access for your list If you have an email list, or time to grow one, let subscribers shop a few days early. The margin risk is low if the early offer is lighter than the public one. Shopify and Disco do different jobs here. The early offer is a Shopify discount code limited to **Customer segments**, with active dates, because Disco's sale prices show to everyone. Disco builds the list before the sale. #### How to collect an early-access list in Disco 1. **Create the public sale** with its **Active dates**. 2. **Turn on Show before the sale starts** (Lite and up). The bar collects email addresses. ## What are good Shopify Black Friday flash sale ideas? Good Shopify Black Friday flash sale ideas are short, deep offers on a few products with a real end time. Two work well: doorbuster hours on hero products, and rolling sales across collections. Schedule each in Disco with exact **Active dates** and a countdown timer on the product page. Where two Disco sales cover a product, the higher discount applies. A Shopify [automatic discount](https://help.shopify.com/en/manual/discounts/discount-methods/automatic-discounts?ref=productessentials.app) still applies on top of a Disco price. ### 6\. Doorbuster hours If you hold deep stock of 3–5 hero products, cut them hard for a few hours, such as 8 AM to 11 AM on Friday. The margin risk is high per unit, but the stock and hours cap it. In Shopify you can schedule an **Amount off products** discount, but its settings have no countdown timer. Disco resolves this with a timer shown only while the sale runs, and prices go back at 11 AM on their own. #### How to run doorbuster hours in Disco 1. **Set the Active dates** from 8 AM to 11 AM on Friday. 2. **Turn on Show countdown timer on product page.** ### 7\. Rolling collection flash sales If your catalog is broad, put one collection on sale after another, so shoppers keep checking back. The margin risk is lower than storewide, because each collection is discounted briefly. In Shopify you can create one automatic discount per window, but each shows savings only in the cart. Disco resolves this by showing the sale price and a countdown on the product page. #### How to rotate collection flash sales in Disco 1. **Create one campaign per collection** (more than two need Lite). 2. **Set back-to-back Active dates** for each. 3. **Turn on Show countdown timer on product page.** ## What should a Shopify Cyber Monday flash sale offer? A Shopify Cyber Monday flash sale should offer something new, not a repeat of Friday. Put a held-back collection on sale for Monday only as its own Disco campaign, and say so in the bar. Friday's buyers then don't see their purchase undercut. ### 8\. A Cyber Monday-only collection Choose that collection, such as accessories or a gift range, before Friday. The margin risk is medium if you keep the depth at or below Friday's. In Shopify you can put an **Amount off products** discount on that collection, but the savings appear only in the cart. Disco resolves this by showing Monday's sale prices on product pages until the campaign ends. #### How to set up a Cyber Monday-only collection in Disco 1. **Create a separate campaign** for the collection. 2. **Set Monday-only Active dates**, as the [scheduling guide](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) shows. 3. **Turn on Show countdown timer on product page.** ## Which Black Friday offers raise order value? Buy X Get Y, spend tiers, free shipping and gifts with purchase raise order value. They apply in the cart, so pair them with a price offer. Cart offers stack on sale prices. Two Shopify discounts add up only when [set to combine](https://help.shopify.com/en/manual/discounts/discount-combinations?ref=productessentials.app). ### 9\. Buy X Get Y Buy X Get Y suits consumables and multiples, such as "buy 2 candles, get a third free." The margin risk is medium: buy one, get one free is half off both items. **Set it up in Shopify:** a [Buy X get Y](https://help.shopify.com/en/manual/discounts/discount-types/buy-x-get-y?ref=productessentials.app) discount. Set **Customer buys** and **Customer gets**, with the value at **Free** or a percentage. ### 10\. Spend more, save more If average orders sit just under a round number, tiers such as "$10 off $75, $25 off $150" give shoppers a reason to add more. The margin risk is medium, because the cut applies on top of any sale prices. **Set it up in Shopify:** one **Amount off orders** automatic discount per tier, each with a **Minimum purchase amount**. With combinations off, the [best tier applies](https://help.shopify.com/en/manual/discounts/discount-combinations?ref=productessentials.app). ### 11\. Free shipping over a threshold If shipping costs put shoppers off at checkout, offer free shipping over a threshold. The margin risk is the shipping you pay, so set the threshold above your average order value. **Set it up in Shopify:** an automatic [Free shipping](https://help.shopify.com/en/manual/discounts/discount-types/free-shipping?ref=productessentials.app) discount with a **Minimum purchase amount**. ### 12\. Gift with purchase If you'd rather not cut prices, offer a low-cost gift shoppers value, such as samples or a tote, "free with orders over $100." The margin risk is low if the gift is cheap. **Set it up in Shopify:** a **Buy X get Y** discount with the gift at **Free**. Shoppers must add the gift to the cart themselves; adding it automatically needs a gift-with-purchase app. ## Which Black Friday offer fits your store type? Match the offer to what you sell and its margin. Consumables suit Buy X Get Y and kits. Seasonal fashion fits collection tiers. Thin-margin electronics suit free shipping or a few doorbusters. Small-batch stores can skip deep cuts and offer early access. | Store type | Start with | Why | | --------------------------- | -------------------------------------------------------- | ------------------------------------------------------- | | Fashion and apparel | Tiered collections (2), rolling flash sales (7) | Last season can go deep while new arrivals stay shallow | | Beauty and skincare | Buy X Get Y (9), gift with purchase (12) | Refills and samples cost little and bring shoppers back | | Coffee, food and drink | Kit collection (3), spend more, save more (10) | Products go together, so baskets grow easily | | Home and gifts | Fixed price points (4), Cyber Monday-only collection (8) | Gift shoppers browse by budget | | Electronics and accessories | Doorbuster hours (6), free shipping threshold (11) | Thin margins, so keep deep cuts to a few products | | Handmade or small batch | Early access (5), gift with purchase (12) | Limited stock goes to loyal buyers without deep cuts | | Large catalog, many brands | Storewide (1) with exclusions, rolling flash sales (7) | One message, with low-margin lines left out | ## When is a sale app better than Shopify discounts? A sale app is better when shoppers should see the sale price, with the original struck through, on product and collection pages. Disco writes that price and restores the original when the sale ends. For cart offers, or savings shown only in the cart, Shopify's discounts are enough. | Need | Shopify on its own | Disco | | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | | Sale price with the original struck through on product and collection pages | Bulk-edit **Price** and **Compare-at price**, then change them back after the sale. A discount needs [a third-party app](https://help.shopify.com/en/manual/discounts/discounts-faq?ref=productessentials.app) for this | Writes both at the start date and puts them back at the end | | Start and end on a schedule | Automatic discounts have active dates, but show only in the cart and at checkout | Starts and ends the sale on its own at the **Active dates** | | Countdown timer on the product page | Not part of Shopify's discount settings | **Show countdown timer on product page** | | Announcement bar | Theme bar, changed by hand at each phase | **Show before the sale starts** and **Show while the sale is active** (Lite and up) follow the campaign dates | | Discount codes on sale items | A code applies on top of a sale price | **Block discount codes on sale products** (Business plan) | ## What are good Shopify Black Friday announcement bar examples? Good Shopify Black Friday announcement bar examples fit a phone screen and state the offer or a real deadline. This one does both: "Doorbusters until 11 AM ET: 40% off five bestsellers." Write a line for each phase: a teaser, the launch, the last hours and Cyber Monday. Disco's bar updates automatically on the campaign's dates. **Teaser** - Black Friday starts Friday, November 27\. Get notified first. - Our biggest sale of the year opens in 3 days. - Black Friday preview: 25% off outerwear from November 27. **Launch** - Black Friday is live: 25% off everything, no code needed. - 20% off coffee, 30% off brewing gear. Prices already reduced. - Doorbusters until 11 AM ET: 40% off five bestsellers. **Last hours** - Last hours: Black Friday prices end tonight at 11:59 PM ET. - Final day of our Black Friday sale. Ends 11:59 PM ET. - 6 hours left at 25% off. Then prices go back. **Cyber Monday** - Cyber Monday only: 30% off accessories until 11:59 PM ET. - New for Cyber Monday: the gift shop at 20% off, today only. - Last day of Cyber Week deals. Everything ends at 11:59 PM ET. In Shopify you can edit the theme's [Announcement bar](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/common-customizations/add-announcement-banner?ref=productessentials.app), but only by hand in the theme editor, at each phase. Disco resolves this with two bar states that follow the campaign's dates. ### How to schedule your announcement bar in Disco 1. **Turn on Show before the sale starts** (Lite and up) for the teaser. 2. **Turn on Show while the sale is active** for the launch, with **Show countdown timer in announcement** (Lite and up). 3. **Change the line for the last hours** with **Edit Promotional widgets or End date only**, which keeps the sale running. Checkpoint Every deadline in the bar matches the timer, the emails and the real end of the sale. ## Shopify Black Friday discount ideas FAQ What are the best Shopify Black Friday discount ideas for a small store? Offers that protect margin: a few doorbusters, a kit collection or a gift with purchase. These Shopify Black Friday discount ideas keep deep cuts to the products you choose instead of the whole catalog. How deep should a Shopify Black Friday flash sale go? Only as deep as each product's cost allows. At 40% off, a $40 product that costs $20 still makes $4 a unit; at 50% off, it makes nothing. How do I set up a Shopify Cyber Monday flash sale? Run a separate Disco campaign on one collection with **Active dates** from 12:00 AM to 11:59 PM on November 30\. A Shopify automatic discount with the same dates also works, but shows the saving only in the cart. Can I copy these Shopify Black Friday announcement bar examples as they are? Yes, once you change the offer, dates and time zone to match your campaign. Can a sale price and a discount code apply to the same product? Yes. A sale price isn't a discount, so Shopify's combination settings won't stop a code applying on top; pause those codes or turn on Disco's **Block discount codes on sale products** on the Business plan ([how it works](https://help.productessentials.app/article/53-how-disco-discount-code-blocking-works?ref=productessentials.app)). ## When should you set up your Black Friday offers? Before November, so there's time to test. Pick two or three of these ideas, work out the margin on each, and set them up. Disco schedules the price offers and puts every price back when they end. [The setup guide](https://help.productessentials.app/article/45-creating-a-sale-with-widgets-and-landing-page?ref=productessentials.app) walks through it. [**Schedule your Black Friday sale with Disco.**](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-black-friday-discount-ideas) --- **Next:** [The 2026 BFCM playbook](https://productessentials.app/blog/bfcm-playbook/) turns your offer into a dated plan, and [our stacking guide](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/) keeps a sale price and a code from adding up. ### How to show sale prices on Shopify product pages before checkout URL: https://productessentials.app/blog/shopify-sales-vs-discount-codes-show-discount-before-checkout/ Last updated: 2026-10-18T08:41:58.000Z You've set up a 20% discount in Shopify. The campaign email is out, the social posts are live, and then the first customer message arrives: *"Your site says 20% off, but the product still shows full price?"* Nothing is broken. The discount is real. The customer just can't see it yet, because Shopify discounts and Shopify sale prices are two different mechanisms that show up in two different places. Understanding that difference is the single most useful thing you can learn before your next sale, so that's where this guide starts. By the end you'll know: - why a discount code or automatic discount usually only appears at checkout, - what `Price` and `Compare-at price` actually do, - three ways to run an offer in Shopify and what each one looks like to the customer, - how to set a sale price manually, and - how to automate the whole thing, including putting prices back, when you're running a timed campaign across many products. ## Why don't Shopify discounts show on product pages? ### Product price vs. checkout discount Shopify stores a price for each product variant. Your theme uses it on product pages, collection cards, search results, and in the cart. A code or automatic discount applies a rule to the cart without changing that stored price. The saving appears when the rule applies, usually at checkout and sometimes in the cart, depending on your setup. Product and collection pages generally keep showing the regular price. [Shopify's sale-pricing documentation](https://help.shopify.com/en/manual/products/details/product-pricing/sale-pricing?ref=productessentials.app) makes the same distinction: if you want a sale price to be visible on product and collection pages, you use the product's compare-at price. If you want strikethrough savings to appear earlier in the journey for a code or automatic discount, Shopify points you toward a third-party app or a custom solution. For a storewide offer that shoppers should see immediately, start with sale pricing. ![Two $500 jackets: sale pricing shows $500 crossed out beside $400 on the product page; a 20 percent code leaves the product price at $500 and reduces it to $400 when applied.](https://productessentials.app/content/images/2026/10/01-where-discount-appears-0cb3cff9.svg) Sale pricing makes the offer visible on product and collection pages where your theme supports it. Codes and automatic discounts show savings when applied in the cart or checkout; an app or custom solution is needed to show those savings earlier. ### What `Price` and `Compare-at price` mean Open any product in Shopify admin and you'll see two fields in the Pricing section: - **Price** — what the customer pays right now. This is the number used at checkout. - **Compare-at price** — the original or reference price. When this field is *higher* than `Price`, most themes treat the product as on sale: they show the compare-at price struck through, the current price next to it, and often a "Sale" badge or a "Save 20%" label. The basic rule is `Compare-at price` \> `Price`. A higher compare-at value tells a supporting theme to display the product as on sale. That puts the saving beside the product, **where shoppers are deciding whether to buy**. ![Price $400 and Compare-at price $500 show a jacket at $400 with $500 crossed out: a 20 percent saving.](https://productessentials.app/content/images/2026/10/02-price-vs-compare-at-9fe8a250.svg) For a 20% sale on a $500 jacket, set Price to 400 and Compare-at price to 500\. Check that your theme displays the saving. ## Shopify sale prices vs. discount codes: what's the difference? Each option suits a different kind of campaign. You may use all three at different times. ![Choose manual sale pricing for a few products, a code or automatic discount for a conditional offer, or a scheduled sale-pricing app for timed product price changes and an automatic reset.](https://productessentials.app/content/images/2026/10/03-three-ways-0eacca06.svg) Choose the method by the offer and the work involved: manual prices, a checkout discount, or a scheduled price change and reset. ### 1\. Manual sale price You edit `Price` and `Compare-at price` on each product or variant, either one at a time or with Shopify's bulk editor. **What the customer sees:** The reduced price throughout the purchase, with the original price struck through wherever your theme supports it. **Best for:** Small catalogs, a handful of products, or a permanent price change. **What to plan for:** Someone must change the prices at the start and restore them at the end. Keep a record of the originals and check every variant so no discount lingers after the deadline. ### 2\. Automatic discount or discount code You create a discount in Shopify's Discounts section: a code (`WELCOME10`) or an automatic discount (20% off everything in the "Summer" collection). Shopify lets you set start and end dates on discounts, and you can control how discounts combine with one another. **What the customer sees:** Full price on product and collection pages. The saving appears once the discount is applied, typically at checkout. **Best for:** Welcome offers, VIP and influencer codes, loyalty rewards, and other discounts customers unlock. Shopify also supports Buy X Get Y offers. **What to plan for:** Explain when the saving applies. A "20% off this weekend" banner above full-price products can leave shoppers unsure whether the offer works. ### 3\. Scheduled sale pricing with an app An app writes to the same `Price` and `Compare-at price` fields you'd edit manually, but does it for all the products you select, at the exact time you choose, and reverses it automatically when the campaign ends. It can also add the storefront elements that manual editing can't: sale badges, countdown timers, announcement bars, and a sale collection or landing page. **What the customer sees:** The same sale pricing as a manual edit, plus any badges, timers, or banners you enable. **Best for:** Flash sales, weekend sales, sitewide sales, clearance, and Black Friday—especially when there are more products than you want to edit by hand. **What to plan for:** Test the app with your theme and any integrations that update prices. A scheduled sync from another system can overwrite the sale. ## How to show sale prices on Shopify product and collection pages For a few products, you can set the offer directly in Shopify admin. ### Example: $500 → $400 Say you sell a jacket at $500 and want to run it at 20% off. 1. In Shopify admin, go to **Products** and open the jacket. 2. In the **Pricing** section, set **Price** to `400`. 3. Set **Compare-at price** to `500`. 4. Save. Your storefront will now show $500 **$400**, and most themes will add a sale badge automatically. When this sale ends, set **Price** back to `500` and clear **Compare-at price**. Then check the product page and collection card to confirm the sale styling has gone. ### Variant and collection pitfalls - **Variants have their own prices.** A jacket in five sizes has five sets of price fields. Editing one size leaves the other four unchanged. Check every row in the variant table or bulk editor. - **Collections don't hold prices.** Putting products into a "Sale" collection doesn't change anything about their price. The collection is a display container; the sale status still comes from the compare-at field on each product. - **Each price needs its own calculation.** Across 300 products, calculating and entering a 20% reduction takes time. A spreadsheet or campaign tool can handle the arithmetic. - **Rollback is entirely on you.** Shopify won't remember the old price. Export a CSV before you start, or keep a spreadsheet of original prices, so you can restore them accurately. ### How your theme displays sale prices and sale badges The compare-at field tells the theme "this is on sale." What the theme does with that information is up to the theme: - whether it shows a strikethrough at all, - whether it displays a "Sale" badge and what it says, - whether it shows the saving as a percentage, an amount, or both, - whether the sale styling appears on collection cards or only on the product page. If you've set a compare-at price and see nothing, check your theme settings before assuming the data is wrong. Some themes have sale badges turned off by default, and a few older or heavily customized themes don't render compare-at prices on collection pages. ## How to automate Shopify sale prices with Disco Disco automates timed sales across a group of products. It updates the same Shopify price fields you'd edit by hand, then restores prices when the campaign ends. Here's the workflow for the same 20% jacket sale, extended to the whole outerwear range. ![A Disco sale in three steps: select the products and schedule; the sale prices go live at the start time; original prices return when the campaign ends.](https://productessentials.app/content/images/2026/10/04-disco-campaign-timeline-41b8749a.svg) Configure the products, offer, and schedule once. Disco changes the prices at the start and restores them at the end; check both transitions. ### Select products via collection, tag, vendor, or type Instead of opening products one by one, you pick them by filter: the "Outerwear" collection, everything tagged `aw26`, everything from a specific vendor, or a product type. You can exclude products you don't want touched, for example new arrivals or items already reduced, so a sitewide sale doesn't accidentally discount your bestsellers twice. ### Set the discount Choose a percentage or a fixed amount. Disco calculates the new `Price` for every selected product and variant and records the original price as the `Compare-at price`, so the strikethrough and sale styling appear automatically in your theme. ### Schedule the start and end Set a start date and time and an end date and time. Nobody needs to be online when the sale goes live at 00:00 or ends at 23:59\. Multiple campaigns can be scheduled in parallel, so your weekend sale and your month-end clearance can run on different product groups without stepping on each other. ### Show the sale price, badge, and timer Because the price is on the product, it shows everywhere your theme shows prices. On top of that, Disco can add: - a **sale badge** on product cards, - a **countdown timer** on the product page, - an **announcement bar** across the store, including a scheduled version that can capture emails before the sale opens, - an auto-generated **sale collection** so customers can browse everything on offer in one place, and - on higher plans, a dedicated **flash-sale page** that publishes when the campaign starts and comes down when it ends. ### Revert to the original price after the campaign When the end time arrives, Disco restores every product to its pre-campaign price and clears the compare-at value. No spreadsheet, no Monday-morning cleanup, and no accidental permanent discount on the jacket that was supposed to go back to $500. On the Business plan, Disco can also block discount codes during a sale. Check this before launch: a 20% sale price plus a 10% welcome code gives the customer 28% off the original price. ## When should you use sale prices, automatic discounts, or discount codes? Match the method to the offer. If you combine sale prices with codes, calculate the total saving first. Use this as a starting point, not a rulebook. Plenty of stores run a sale price *and* keep a small welcome code live at the same time; the point is to do it deliberately. | Campaign | Best mechanism | Why | | ------------------------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------- | | Always-on welcome code (e.g. 10% for newsletter signup) | Discount code | You want the offer to be unlocked, not advertised on every product. | | VIP, influencer, or partner codes | Discount code | Targeted, trackable, and shouldn't change catalog prices. | | Buy X Get Y / free gift with purchase | Shopify's native Buy X Get Y discount | It's a cart rule, not a price change. | | Permanent price reduction | Manual price edit | No end date means no rollback problem. | | One-off sale on a handful of products | Manual compare-at price | Fast enough by hand; just remember to reverse it. | | Flash sale (hours) | Scheduled sale pricing (Disco) | Precise start/end, visible urgency, automatic reset. | | Weekend or sitewide sale | Scheduled sale pricing (Disco) | Hundreds of products, visible everywhere, no manual rollback. | | Black Friday / Cyber Monday | Scheduled sale pricing + selective codes | Sale price for the headline offer; block or limit stacking codes to protect margin. | | Clearance | Scheduled sale pricing with exclusions | Filter by tag or vendor, protect current-season stock, revert what doesn't sell. | A useful rule of thumb: **if the customer should see the offer on the product page, change the price. If the customer should unlock the offer, use a discount.** ## Common questions before you launch ### Why isn't the compare-at price showing? Work through these in order: 1. **Is `Compare-at price` actually higher than `Price`?** Equal or lower values don't trigger sale styling. 2. **Did you set it on every variant?** Check the variant table, not just the first row. 3. **Is your theme configured to show it?** Look for sale badge and "show compare-at price" settings in the theme editor, especially for collection cards. 4. **Is another system overwriting the price?** If the sale price appears and then disappears minutes or hours later, something else is writing to the product (see the next question). 5. **Are you looking at a cached page?** Hard-refresh or check in an incognito window. ### Can a coupon stack on top of the sale price? By default, yes. A discount code applies to whatever the current price is, and a sale price is just the current price. So a 20% sale plus a 10% code gives the customer 28% off, and Shopify has no way of knowing that wasn't your intention. You have two levers. Within Shopify, you can review which discounts are active during the sale and adjust their combination settings or pause them. Within Disco, you can block **discount codes for the duration of the campaign**. For high-traffic sales like BFCM, do both and test with a real code before launch. ![A $500 product becomes $400 after a 20 percent sale, then $360 after an eligible 10 percent code: 28 percent off the original price, not 30 percent.](https://productessentials.app/content/images/2026/10/05-stacking-44ef32b5.svg) An eligible 10% code applies to the reduced $400 price, taking it to $360\. That is 28% off the original $500. How to audit every active code and block the ones that shouldn't stack is covered in [How to stop discount codes from stacking on items already on sale](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/). ### What about Shopify Markets? If you sell in multiple markets with market-specific pricing or price adjustments, a sale price change on the base product may not behave the way you expect in every market. Before any campaign, check one product in each active market and confirm the price and strikethrough render correctly. If you use a currency or markets app that also writes prices, treat it like any other price-syncing system and test it against a small campaign first. ### The sale price appeared and then disappeared. What happened? Disco and manual edits both write to Shopify's product price fields. So do ERPs, inventory systems, product feeds, marketplace connectors, dropshipping apps, and CSV imports. When two systems write to the same field, the most recent write wins. If your ERP syncs prices every hour, it can quietly reset your sale an hour after it starts. Pause that system's price sync for the sale window, exclude the campaign products, or schedule the sync before launch. Otherwise, it can overwrite the sale again on its next run. Our help article on [why Disco discounts appear, then disappear later](https://help.productessentials.app/article/54-why-disco-discounts-appear-then-disappear-later?ref=productessentials.app) covers the fix; [Your Shopify sale price keeps reverting? If you use compare-at prices, this is probably why](https://productessentials.app/blog/shopify-sale-price-keeps-reverting/) walks through finding the culprit. ### Do I need an app for this at all? Not always. If you have 15 products and run two sales a year, Shopify's bulk editor plus a CSV backup is a perfectly good workflow. An app earns its place when campaigns are frequent, time-sensitive, or larger than you're comfortable editing and reversing by hand, or when you want badges, timers, and a sale page without custom theme work. ## Start with a small test campaign **Try a small campaign with Disco's free plan.** Pick ten products and schedule a one-hour sale for tomorrow morning. Check how the offer looks on your product pages, test the cart, and watch the original prices return when it ends. You'll have a repeatable setup for your next sale. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-sales-vs-discount-codes-show-discount-before-checkout) For plan limits and pricing, see our current plans page. --- **Next:** [Shopify compare-at price: how to show strikethrough pricing](https://productessentials.app/blog/shopify-compare-at-price-complete-guide/) is the field-by-field guide to the sale-price mechanism, and [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) shows how to set it, time it, and reset it without touching prices by hand. ### How to put your entire Shopify store on sale (without CSV) URL: https://productessentials.app/blog/shopify-bulk-discounts/ Last updated: 2026-10-18T08:41:38.000Z To put your entire Shopify store on sale in Disco, click **Create sale**, choose **All products**, and set the discount and **Active dates**. Then exclude what must stay at full price. Shoppers see the sale price with the original struck through before checkout. Every price goes back when the sale ends. In this guide 1. [How do you put your entire Shopify store on sale at once?](#how-do-you-put-your-entire-shopify-store-on-sale-at-once) 2. [How do you put a collection on sale in Shopify?](#how-do-you-put-a-collection-on-sale-in-shopify) 3. [How do you exclude products from a sale on Shopify?](#how-do-you-exclude-products-from-a-sale-on-shopify) 4. [Method 1: change sale prices with Shopify's bulk editor](#method-1-change-sale-prices-with-shopifys-bulk-editor) 5. [Method 2: bulk change Shopify prices with a CSV file](#method-2-bulk-change-shopify-prices-with-a-csv-file) 6. [Check these before changing hundreds of prices](#check-these-before-changing-hundreds-of-prices) 7. [Which method should you use to put your store on sale?](#which-method-should-you-use-to-put-your-store-on-sale) 8. [Frequently asked questions](#frequently-asked-questions) 9. [Get the next bulk sale off your to-do list](#get-the-next-bulk-sale-off-your-to-do-list) ## How do you put your entire Shopify store on sale at once? In Disco, one sale covers the whole store: click **Create sale**, **Same discount**, **All products**, then the discount and **Active dates**. Disco writes each product's sale price and keeps the original in the compare-at price. Shoppers see the saving before checkout, and Disco restores every price when the sale ends. In Shopify you can use an automatic **Amount off orders** discount or bulk-edit **Price** and **Compare-at price**. The discount applies [in the cart and at checkout](https://help.shopify.com/en/manual/discounts/discount-methods/automatic-discounts?ref=productessentials.app); [crossed-out prices on product pages](https://help.shopify.com/en/manual/discounts/discounts-faq?ref=productessentials.app) need a third-party app. The bulk edit lacks an end date, leaving you to reset prices manually. Disco resolves this by showing the sale price on product and collection pages and restoring every price when the sale ends. Read our guide on [how to show sale prices on Shopify product pages before checkout](https://productessentials.app/blog/shopify-sales-vs-discount-codes-show-discount-before-checkout/). Here's how the three options compare, from browsing to the end of the sale: | | Disco | Automatic discount | Bulk edit or CSV | | ---------------------------- | --------------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------- | | Product and collection pages | Sale price, original struck through | Full price | Sale price, original struck through | | Cart and checkout | Sale price | Discount applied | Sale price | | Discount codes on top | **Block discount codes on sale products** (Business plan) | Follow your combination settings | Can still apply ([stop stacking](https://productessentials.app/blog/shopify-stop-discounts-from-stacking/)) | | When the sale ends | Prices restored automatically | Stops on its end date | You reset every price | ![Two product cards for the same $50 mug. With an automatic discount, the product page shows $50 and the $10 saving appears only in the cart. With a sale price, the product page shows $40 next to a struck-through $50 and a Sale badge, and the cart shows $40.](https://productessentials.app/content/images/2026/09/01-what-shoppers-see-bdc29171.png) The same offer, seen at two different moments: in the cart, or while browsing. ### How to put your entire store on sale in Disco Before you start, check your plan's discounted-product limit: Starter covers 30 products, Lite 300, Professional 1,500, Business 7,500 and Unlimited has no limit ([compare plans](https://productessentials.app/#pricing)). 1. **Click Create sale**, then choose **Same discount**. 2. **Pick the discount type**: choose **Percentage**, **Amount off** or **New price**. Turn on **Round to nearest** for clean prices. 3. **Choose All products** on the **Include products** tab. 4. **Name it in Title**: Disco uses this in the admin and on the sale page. 5. **Set the Active dates**: the exact start and end date and time ([how scheduling works](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/)). 6. **Add the storefront pieces**: **Show countdown timer on product page**, the announcement bar's **Show while the sale is active** (Lite plan and up), or **Create collection** for a sale collection. Fixed international prices are not discounted. Help doc: [storewide sale](https://help.productessentials.app/article/7-how-to-create-storewide-sale?ref=productessentials.app). ## How do you put a collection on sale in Shopify? In Disco, choose **Select products, collections, tags or types** on the **Include products** tab, pick the collection, then set the discount and **Active dates**. Each product in it shows the sale price before checkout and goes back to full price when the sale ends. Products added to the collection after launch need **Synchronize**. In Shopify you can create an automatic **Amount off products** discount for **Specific collections**, or filter the collection in **Products** and bulk-edit prices. The discount shows savings only in the cart and at checkout. The bulk edit has no end date. Disco resolves this by showing the sale price on product pages and restoring the original price when the sale ends. ### How to put a collection on sale in Disco 1. **Click Create sale** and choose **Same discount**. 2. **Pick the collection**: on **Include products**, choose **Select products, collections, tags or types**. To select by product data instead, use **Add product(s) by tag, type, title or vendor**. 3. **Set the discount**: choose **Percentage**, **Amount off** or **New price**. 4. **Set the Active dates** and save. 5. **Press Synchronize** if you add products to the collection while the sale runs. A different discount per collection means one sale per collection. Starter includes 2 sales, Lite 10\. A different discount per product within one sale requires **Different discounts**, available from Professional. Help doc: [sale on a collection](https://help.productessentials.app/article/8-create-sale-on-specific-collection?ref=productessentials.app). ## How do you exclude products from a sale on Shopify? In Disco, open the **Exclude products / collections** tab and add the products or whole collections that must keep full price. The sale skips them even when they match **All products** or a filter. Tick **Exclude draft and archived products** too. Exclusion rules come with the Lite plan and up. In Shopify you build a [smart collection](https://help.shopify.com/en/manual/products/collections/automated-collections/auto-select?ref=productessentials.app) with the condition **Tag** **does not include** `no-sale`, then apply an automatic **Amount off products** discount to it. The saving shows only in the cart and at checkout. With the bulk editor you leave products unselected, but reset every other price by hand. Disco resolves this by skipping excluded products, showing sale prices on product pages and restoring prices when the sale ends. ### How to exclude products from a sale in Disco 1. **Set what's included first**: choose **All products** or a collection. 2. **Open Exclude products / collections** and add the items to keep at full price, such as new arrivals or low-margin lines. 3. **Tick Exclude draft and archived products**. 4. **Set the Active dates** and save. Set exclusions before launch: changing products on a running sale needs **Edit entire sale**, which causes a brief sale downtime. On Starter, narrow the selection with a collection or filter instead. Help docs: [exclude products](https://help.productessentials.app/article/9-exclude-products-from-sale?ref=productessentials.app), [exclude a collection](https://help.productessentials.app/article/28-how-to-exclude-collection-from-sale?ref=productessentials.app). ## Method 1: change sale prices with Shopify's bulk editor The bulk editor is the tool most merchants reach for first, and for small sales it's the right call. To use it: 1. In **Products**, filter and select the products for your sale. 2. Click **Bulk edit** to open the table of products and variants. 3. Open **Columns** and add **Compare-at price** beside **Price**. 4. Enter the original and sale prices for each variant, then save. **Where it's good:** - It's free and built in, so there's nothing to install and nothing new to learn. - Changes are live the moment you save. - A small collection is easy to review in one table. **Where it starts to hurt:** - Large selections take more checking. If you work in batches, keep track of which products you've updated and include all their variants. - Prepare the new prices first. For a percentage sale, calculate the values in a spreadsheet before pasting them into the editor. - Rollback is entirely manual. When the sale ends, someone has to put every `Price` back and clear every `Compare-at price`, by hand, from a record of the original prices that you had to remember to keep. - There's no clock. The sale starts when you click save and ends when you click save again. **Use the bulk editor when:** you have fewer than about 50 products, the sale is a one-off, the end time doesn't need to be exact, and you're happy to do the rollback yourself. ## Method 2: bulk change Shopify prices with a CSV file CSV works well when you already manage product data in spreadsheets. It gives you room to calculate and review many prices, but the import needs careful checking. The workflow is: 1. Export the products and keep an untouched backup. 2. In a working copy, copy the current prices into the compare-at column. 3. Calculate the sale prices and check the results. 4. Test a small import before updating the full selection. 5. At the end of the sale, restore prices from the backup, accounting for any other changes made since the export. **Where CSV makes sense:** - Permanent repricing, where there is no "end" to roll back to. - Catalog restructures where you're changing many fields at once, not just price. - Teams that already manage the catalog in spreadsheets and have a clear owner for the file. **The risks you need to manage:** - **Check every included column.** An import can overwrite more than prices. Accidental blanks or misplaced formulas can affect other product data. - **Matching is unforgiving.** A changed handle or a variant that doesn't line up creates duplicates or silently skips products. - **Formatting breaks prices.** Decimal commas versus decimal points, currency symbols, or a spreadsheet "helpfully" reformatting a column can turn 249.00 into something Shopify rejects, or worse, accepts. - **Allow time for processing.** Someone must start both imports, and a large import may continue running after your intended launch time. - **Rollback is a second import.** If you restore by re-importing the original file, any price you legitimately changed *during* the sale gets reverted too. If you use CSV, keep the untouched export as your rollback file, and always test the import on a filtered export of ten products before you run it on the full catalog. **Use CSV when:** the change is permanent or structural, you have a data owner, and precise start and end timing doesn't matter. ## Check these before changing hundreds of prices Run this check before the sale, whichever method you choose. - **Test on ten products first.** Every method, every time. Check the product page, the collection page, and the cart, then end the test and verify the reset. - **Check every variant, not just the parent product.** Sizes and colors sometimes carry their own prices. Make sure the sale applied to all of them and that `Compare-at price` is higher than `Price` on each; Shopify won't show a strikethrough otherwise. - **Find everything that writes prices.** ERP, inventory sync, PIM or product feed apps, marketplace connectors, supplier and print-on-demand apps, dynamic-pricing tools, currency apps, and other bulk editors. Shopify keeps the latest write to the price fields, so any of these can put your prices back mid-sale. Pause the sync, exclude the sale products, or move the sync job to before the campaign starts. ProductEssentials has a [dedicated help doc on price-sync conflicts](https://help.productessentials.app/article/54-why-disco-discounts-appear-then-disappear-later?ref=productessentials.app) with the exact steps. ## Which method should you use to put your store on sale? Use Disco for a timed storewide or collection sale that shows the saving on product pages, skips specific products and resets itself. Use the bulk editor for small sales you reset by hand. Choose CSV for permanent repricing. Pick an automatic discount when a cart-only saving is enough. | Your sale | Use | | --------------------------------------------------------------------------------------------------------- | -------------------------- | | A few products, one-off, you'll reset prices yourself | Shopify bulk editor | | A permanent price change or catalog restructure | CSV import | | A storewide or collection offer where a saving shown only in the cart is fine | Shopify automatic discount | | A timed storewide or collection sale with sale prices on product pages, exclusions and an automatic reset | Disco | ## Frequently asked questions Does Disco replace Shopify's bulk editor? Use the bulk editor or CSV for permanent price changes. Disco suits temporary sales that need a scheduled start, storefront promotion, and an automatic reset. Can I run a percentage on one group and a fixed amount on another? Yes. Each campaign has its own discount rule, and you can run multiple campaigns at the same time, so "25% off Autumn" and "$100 off all boots" can run side by side with different products, different timing, and different exclusions. How to put a collection on sale in Shopify and add products later? In a Disco sale, choose the collection under **Select products, collections, tags or types**. Products added to the collection after the sale starts are only discounted once you press **Synchronize**. How to exclude products from a sale on Shopify after it has started? In Disco, use **Edit entire sale** and add them on the **Exclude products / collections** tab. The sale is deactivated and reactivated with the new settings, so expect a brief sale downtime. How to put entire Shopify store on sale for Black Friday? Run a short ten-product test sale first, then set up one Disco sale with **All products** and **Active dates** from Black Friday, November 27, 2026, through Cyber Monday, November 30, 2026\. Every price goes back when the sale ends. ## Get the next bulk sale off your to-do list Choose the method that fits the whole job: setting prices, checking the offer, and restoring the originals. For a timed campaign, [create a free Disco campaign](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-bulk-discounts) and test it on ten products. Once the launch and reset work as expected, use that setup for the larger sale. **Next:** [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) covers the timing and the reset for the campaign you just built, and [The 2026 BFCM playbook: plan your biggest sale months ahead](https://productessentials.app/blog/bfcm-playbook/) is where a bulk sale becomes a season plan. ### Shopify compare-at price: how to show strikethrough pricing URL: https://productessentials.app/blog/shopify-compare-at-price-complete-guide/ Last updated: 2026-09-09T07:27:50.000Z Two fields decide whether a Shopify product looks like it's on sale: `Price` and `Compare-at price`. There is no "on sale" checkbox, no sale status, and no separate sale-price field. When the compare-at value is higher than the price, your theme draws a strikethrough and, usually, a badge. When it isn't, nothing happens. That one relationship sits behind most of the sale-related questions merchants ask: "the original price isn't showing," "the product still looks on sale after I changed the price back," "the discount disappeared an hour after launch," and "customers are getting my sale price *and* a coupon on top." Every one of them comes back to how these two fields work, who writes to them, and what the theme does with them. This is the reference guide we link to whenever another article mentions original price, sale price, or strikethrough pricing. By the end you'll know: - exactly what `Compare-at price` is and isn't, - what gets stored and what gets charged during a sale, with a worked $1,000 → $750 example, - how compare-at pricing differs from a discount code, - how to change one product, and how to change hundreds, - a step-by-step checklist for when the original price refuses to show, - what happens when customers use discount codes on top of a sale price, and - how to automate both the change and the reset so compare-at prices only exist while the campaign is live. In this guide 1. [What is compare-at price in Shopify?](#what-is-compare-at-price-in-shopify) 2. [A 25% sale, from setup to reset](#a-25-sale-from-setup-to-reset) 3. [Compare-at price vs. discount code](#compare-at-price-vs-discount-code) 4. [How to show strikethrough pricing in Shopify](#how-to-show-strikethrough-pricing-in-shopify) 5. [How to bulk edit compare-at prices in Shopify](#how-to-bulk-edit-compare-at-prices-in-shopify) 6. [Why is my Shopify compare-at price not showing?](#why-is-my-shopify-compare-at-price-not-showing) 7. [Can shoppers use a code on top of the sale price?](#can-shoppers-use-a-code-on-top-of-the-sale-price) 8. [How to automate compare-at price changes in Shopify](#how-to-automate-compare-at-price-changes-in-shopify) 9. [FAQ](#faq) 10. [Make the saving clear—and the reset automatic](#make-the-saving-clearand-the-reset-automatic) ## What is compare-at price in Shopify? ### What is the difference between price and compare-at price? Open any product in Shopify admin and look at the Pricing section. You'll find two fields that matter for sales: - **Price** is what the customer pays. It's the number Shopify uses in the cart, at checkout, on the order, and in your sales reports. Every variant has one. - **Compare-at price** is the reference price displayed beside the current price. It helps shoppers see the saving; it doesn't determine what they pay. Most themes use the same basic rule: when `Compare-at price` is higher than `Price`, show sale styling. That usually means a struck-through reference price beside the current price, and may include a badge. The details depend on your theme and its settings, as explained in [Shopify's sale-pricing documentation](https://help.shopify.com/en/manual/products/details/product-pricing/sale-pricing?ref=productessentials.app). ![Shopify pricing example: Price $750 and Compare-at price $1,000 produce a product card showing $1,000 crossed out beside $750. Sale styling depends on the theme.](https://productessentials.app/content/images/2026/09/05-01-two-fields-one-rule-3.svg) Set Price to $750 and Compare-at price to $1,000\. A supporting theme shows the original price crossed out beside the sale price; the badge and styling depend on the theme. Keep three things in mind: 1. **The two values control sale styling.** Lower `Price` and set an appropriate higher reference price to display the offer. Restore the original setup when the sale ends. 2. **Each variant has its own values.** A jacket in five sizes has five sets of price fields. Changing one size leaves the others unchanged. 3. **Other systems can overwrite your edits.** Check any app or integration that updates prices if an offer disappears unexpectedly. ## A 25% sale, from setup to reset Take a wool jacket that normally sells for $1,000\. At 25% off, its sale price is $750\. With no additional discounts or charges, the two fields work like this: | | Before the sale | During the sale | After the sale | | ---------------------------- | --------------- | --------------------------------- | -------------- | | **Price** | 1,000 | **750** | 1,000 | | **Compare-at price** | *(empty)* | **1,000** | *(empty)* | | What the customer sees | $1,000 | ~~$1,000~~ **$750** \+ "Save 25%" | $1,000 | | What the customer is charged | $1,000 | $750 | $1,000 | | What lands in reports | 1,000 | 750 | 1,000 | During the sale, `Price` drops to 750 and `Compare-at price` shows 1,000\. Afterward, `Price` returns to 1,000 and the compare-at field is cleared. ### What reaches the cart and your reports It helps to picture the four places a price passes through: - **The variant** holds the price and compare-at values. - **The theme** reads them to display the offer and calculate any savings badge. - **The cart and checkout** use the current price, with any applicable discounts, shipping, and taxes. The compare-at value doesn't set the amount charged. - **Orders and reports** reflect the sale transaction. Product cost comes from the separate `Cost per item` field. ![Compare-at price supplies the reference for strikethrough display. Price supplies the current selling amount; eligible discounts, taxes, and shipping determine the final checkout total.](https://productessentials.app/content/images/2026/09/05-02-what-is-stored-where-3.svg) Compare-at price is a reference for the display, not an extra charge. Price supplies the selling amount; eligible discounts, taxes, and shipping affect the final checkout total. Decide how to handle rounding before changing many prices: 25% off $999 is $749.25\. Also keep `Cost per item` separate from `Compare-at price`. One records your product cost; the other displays a reference price to shoppers. ## Compare-at price vs. discount code ### Where and when the customer sees the savings A sale price and a code can produce the same final price, but shoppers see them at different stages. A **sale price** changes the product's current price. Supporting themes show the struck-through original on product and collection pages, and the reduced price carries through to checkout. A **discount code or automatic discount** is a rule Shopify applies to the cart. The product's stored price never changes. The customer sees full price on the collection and product pages, and the saving appears once the discount is applied, which is typically at checkout. | Where the customer is | Sale price (compare-at) | Discount code / automatic discount | | --------------------- | ----------------------------------------- | ------------------------------------------- | | Collection page | Strikethrough + sale price | Full price | | Product page | Strikethrough + sale price | Full price | | Cart | Sale price (strikethrough on many themes) | Full price, or a discount line once applied | | Checkout | Sale price | Discount line and reduced total | | Order confirmation | Sale price | Original price minus discount | Use sale prices for offers shoppers should see while browsing, such as weekend sales or clearance. Use codes for offers customers unlock, such as welcome or VIP discounts. Shopify's native discounts also cover offers such as Buy X Get Y. ![If shoppers should see the sale on the product page, use Price and Compare-at price. If the offer depends on a code or cart condition, use a Shopify discount rule.](https://productessentials.app/content/images/2026/09/05-03-sale-price-or-discount-3.svg) Use sale pricing for a visible product-page offer, or a discount rule for code-based and conditional offers. An app or custom solution can display discount-rule savings earlier in the shopping journey. For a comparison by campaign type, see *How to show sale prices on Shopify product pages before checkout*. ## How to show strikethrough pricing in Shopify For a single product or a handful, admin is the fastest tool. 1. Go to **Products** and open the product. 2. If the product has variants, open the variant you want to change, or use the variant table at the bottom of the product page. If it has no variants, the Pricing section is on the product itself. 3. In **Pricing**, set **Price** to the sale price, for example `750`. 4. Set **Compare-at price** to the original price, for example `1000`. 5. Repeat for every variant that should be on sale. 6. Save, then open the product in the storefront and check both the product page and its collection card. To end this sale, set **Price** back to `1000` and clear the compare-at field. Check the storefront afterward to confirm the product looks as it did before the offer. If you're going to edit more than a few products by hand, write the original prices down first. Shopify doesn't keep a price history you can restore from. ## How to bulk edit compare-at prices in Shopify Choose a method based on how many prices you're changing and whether you need a scheduled reset. ### Shopify bulk editor From the Products list, select the products, choose **Edit**, and add the **Compare-at price** column if it's hidden. You can then type or paste values across many rows at once. Variants appear as separate rows, so a 40-product sale can easily become 200 rows. The bulk editor suits small selections and occasional changes. Calculate the sale prices first and keep a record of the originals. You'll need to restore them when the sale ends. ### CSV export and import Export your products, change the `Variant Price` and `Variant Compare At Price` columns in a spreadsheet, and import the file back. This scales to thousands of variants and lets you use formulas for the discount math. Check product matching, columns, and number formatting carefully before importing. Keep the original export, test a small file first, and coordinate with anyone else editing the catalog. Allow time for the import to finish at both the start and end of the sale. ### Scheduled campaigns with an app Disco lets you select products by collection, tag, vendor, or type, calculate the discount, and schedule the price change and reset. It can also manage campaign elements such as badges, a countdown, an announcement bar, and a sale collection. | | Bulk editor | CSV | Scheduled campaign | | --------------------------------------------- | --------------------------- | ---------------------------------- | ------------------------------------- | | Sweet spot | 5–50 products, one-off | Hundreds to thousands, one-off | Any size, recurring or time-boxed | | Discount math | Manual | Spreadsheet formulas | Automatic | | Starts at a set time | No | No | Yes | | Automatic reset | No | No (re-import your backup) | Yes | | Storefront extras (badges, timers, sale page) | No | No | Yes | | Main risk | Slow; easy to miss variants | One bad file overwrites everything | Other apps writing prices; test first | For examples by catalog size, see *Bulk discounts in Shopify: put hundreds of products on sale without CSV*. For the scheduling steps, see *How to schedule a Shopify sale that starts and ends automatically*. ## Why is my Shopify compare-at price not showing? Start with the affected variant, then check how your theme and other integrations use its prices. ### 1\. Check that the reference price is higher `Compare-at price` must be strictly higher than `Price`. Equal values, a lower value, or an empty field all mean "not on sale." Check the specific variant you're looking at, and check for import artefacts: a compare-at price of "1.000" read as one krone, a stray currency symbol, or a decimal comma where Shopify expected a point. ### 2\. Check every variant in the sale The product page shows the selected variant's price. The collection card usually shows the first available variant, or the lowest price with a "From" prefix. If you put size M on sale and the card shows size S, you'll see full price. Open the variant table and confirm every row that should be on sale has both values. ### 3\. Check theme settings for missing strikethrough prices or sale badges The compare-at field only tells the theme the product is on sale. Whether the theme draws anything is a theme setting. In the theme editor, look for options such as "Show sale badge," "Show compare-at price," or "Sale price display" (the names vary by theme). Some themes show the strikethrough on the product page but not on collection cards by default, and some page-builder sections don't read compare-at prices at all. If the product page looks right but the collection card doesn't, check the collection's theme settings and how it handles mixed variant prices. ### 4\. Check variant pricing when compare-at prices are missing on collection pages If only some variants are reduced, many themes show the collection card as regular-priced, or show "From $750" without a strikethrough. That's expected behavior. If the whole product should read as on sale, reduce every variant. ### 5\. Check market-specific prices If you sell in several markets, check how prices are set for each one. Percentage-based market adjustments generally follow the base price, but market-specific fixed prices set through a price list override the base price and won't change just because you edited the default variant. Before any campaign, open one product in each active market and confirm the strikethrough renders. If you use a currency or markets app that writes prices, treat it as one of the systems in the next step. ### 6\. Check for another app updating prices If the offer appeared and then vanished, look for a scheduled price update. Inventory and ERP systems, supplier apps, marketplace connectors, pricing tools, and CSV imports can all update the same fields. Check which jobs ran around the time the price changed. Pause the conflicting price sync for the sale, exclude campaign products, or move the job to before launch. Otherwise, the next sync can undo the offer again. [When a Shopify discount disappears: troubleshooting price sync](https://productessentials.app/blog/shopify-discount-disappeared-price-sync/) walks through the diagnosis. ### 7\. Rule out a cached page Hard-refresh, or open the page in an incognito window. If you have a CDN or a caching app in front of the store, purge it. If everything above checks out and the storefront still shows full price, this is the last thing to rule out before contacting your theme's support. ![If Shopify compare-at pricing is missing, check the selected variant's prices first, then variant consistency and theme display, followed by market-specific prices and integrations overwriting the values.](https://productessentials.app/content/images/2026/09/05-04-troubleshooting-tree-3.svg) Work through three groups of checks: price data, storefront display, and overrides. Mixed variant prices can affect collection cards; also check the theme. Use the detailed troubleshooting steps below. ## Can shoppers use a code on top of the sale price? Yes, if the code's conditions are met and you haven't blocked it. With the jacket priced at $750, an eligible `WELCOME10` code takes another 10% off that amount. Shopify's combination settings govern how discounts combine with each other; a reduced catalog price sits outside those rules. Here's what that does to the jacket: | | Regular price | Sale only | Sale + 10% code | | ------------------------------- | ------------- | --------- | --------------- | | Customer pays | $1,000 | $750 | $675 | | Discount vs. original | 0% | 25% | 32.5% | | Contribution margin (cost $500) | $500 | $250 | $175 | The total discount rises from 25% to 32.5%, while the amount left after product cost falls from $250 to $175—a 30% drop. Account for shipping, fees, and other costs before deciding whether to allow the code. To manage extra discounts: - **Pause or restrict the codes** in Shopify Discounts for the sale window. - **Adjust combination settings** so, for example, order-level codes can't combine with product discounts. This helps if you're using native discounts alongside sale prices, but again, it doesn't see the sale price itself. - **Block additional discount codes during the campaign** in Disco, then test any automatic discounts separately. An extra loyalty discount may be part of the offer. Calculate it in advance and test checkout with a live code before launch. [Stop discount stacking and protect margin](https://productessentials.app/blog/stop-discount-stacking-shopify/) covers the full audit. ## How to automate compare-at price changes in Shopify For a timed sale, Disco handles the updates to `Price` and `Compare-at price`, then restores prices at the end. Your theme displays the offer using the same fields as a manual edit. ### 1\. Select products in bulk Choose products by collection, tag, product type, or vendor, and add exclusions for anything that shouldn't move: new arrivals, low-margin lines, items already reduced. The free Starter plan covers a small campaign; larger catalogs and more simultaneous campaigns sit on the paid plans (see current plans for the limits). ### 2\. Set the discount Pick a percentage or a fixed amount. Disco calculates the new `Price` for every selected variant and records the pre-campaign price as the `Compare-at price`, so the strikethrough and the "Save 25%" label appear automatically in your theme. ### 3\. Schedule the start and end Set the start date and time and the end date and time, and confirm the timezone. The campaign goes live at 00:00 on Friday whether or not anyone is awake, and ends at 23:59 on Sunday the same way. Multiple campaigns can run in parallel on different product groups. ### 4\. Add the storefront elements Turn on a sale badge, a countdown timer on the product page, and an announcement bar. Disco can also generate a sale collection so every discounted product is browsable in one place, and, on higher plans, a dedicated flash-sale page that publishes when the campaign starts and comes down when it ends. ### 5\. Let the reset happen At the end time, Disco restores every variant's original `Price` and clears the `Compare-at price`. The jacket goes back to $1,000, the badge disappears, and nothing is left for Monday morning. ![Example campaign starting with an empty compare-at field: before, Price $1,000; live, Price $750 and Compare-at price $1,000; after, Price $1,000 and Compare-at price empty again.](https://productessentials.app/content/images/2026/09/05-05-campaign-lifecycle-3.svg) Example with no compare-at value before the sale. Verify both fields after the reset. If a product already has a compare-at price, record it and test how the campaign handles that value. Before the first full sale, test a few products for an hour. Include a product with several variants and one with an existing compare-at price. Record their original values and check the full start-to-reset cycle across your theme and markets. ## FAQ Is compare-at price the same as MSRP or RRP? Not technically. It's a free-form reference field, and Shopify doesn't check what you put in it. Many merchants use it permanently for a recommended retail price, which makes every product look on sale all the time. That works against you twice: your actual sales don't stand out, and, depending on where you sell, a reference price that never reflected a real selling price can create legal exposure. Use compare-at for genuine prior prices, and keep it empty the rest of the time. Are there rules about what I can show as the original price? Often, yes. In the EU, including Denmark, when you announce a price reduction, the "before" price you show generally has to be the lowest price you applied in the 30 days before the reduction, and other jurisdictions have their own reference-pricing rules. This isn't legal advice, but it's a good reason to keep a record of what each product actually sold for before a sale, and to think twice about running back-to-back campaigns on the same products. Does compare-at price affect checkout? The compare-at value doesn't set the amount charged. Checkout uses the current product price and applies any eligible discounts, taxes, and shipping charges. Can I schedule a compare-at price change natively in Shopify? Shopify lets you schedule *discounts* with start and end dates. The standard product editor has no scheduler for price fields. Shopify Plus stores can use Shopify's [Launchpad app](https://help.shopify.com/en/manual/promoting-marketing/create-marketing/launchpad?ref=productessentials.app) for timed product price changes. Other stores can use a sale-pricing app or custom automation to handle the start, end, and reset. What if another app changes prices during my sale? The most recent write wins, so whichever system runs last sets the price the customer sees. Identify the app (the timing of the reversal usually points to a sync schedule), then disable its price sync for the sale, exclude the affected products, or move its sync to run before the campaign starts. If you're a Disco user and the price still reverts after those changes, send the product URL, the timestamp, and the list of apps that write prices to support. How do I remove a compare-at price after a sale? If the field was empty before the sale, clear it when you restore the regular price. If it already held a reference price, record that value before launch and verify how your campaign handles it at reset. Does compare-at price show up in Google Shopping and other feeds? Typically, yes. Shopify's Google & YouTube channel and most feed apps map the compare-at price to the feed's regular price and `Price` to its sale price whenever a compare-at value is present. Check your feed's field mapping so a permanent RRP in the compare-at field doesn't advertise a permanent sale in your ads. ## Make the saving clear—and the reset automatic Set the two price fields, check every selected variant, and confirm that shoppers can see the offer. **Use Disco to schedule the changes and the reset** when you're ready to run a timed campaign. Start with a small group so you can check both ends of the sale before expanding it. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-compare-at-price-complete-guide) For plan limits and pricing, see our current plans page. --- **Next:** [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) sets and clears the compare-at price on a timer, and [Bulk discounts in Shopify: put hundreds of products on sale without CSV](https://productessentials.app/blog/shopify-bulk-discounts/) does it for the whole catalog at once. ### Your Shopify sale price keeps reverting? If you use compare-at prices, this is probably why URL: https://productessentials.app/blog/shopify-sale-price-keeps-reverting/ Last updated: 2026-10-18T08:41:51.000Z You set the sale up. You opened a product page to check: strikethrough price, sale badge, all there. Then a customer emails, or you spot it yourself the next morning: full price again, no compare-at, no badge. You re-apply the discount. A few hours later it's gone again. If you run sales by changing the product's **Price** and **Compare-at price**, whether by hand, with the bulk editor, through a CSV, or with a sale app like Disco, this is almost always the same issue: another system in your stack writes to those same two fields, and Shopify keeps whatever was written last. This post covers why it happens, which apps to suspect, how to find the culprit in about twenty minutes, and how to make sure it doesn't come back. ## The short version: last write wins ![Timeline showing a sale price set at 08:00 (Price 400, Compare-at 500) being overwritten by a product feed sync at 08:45 that writes Price 500 and clears the compare-at field](https://productessentials.app/content/images/2026/10/01-last-write-wins-7cc84892.svg) A sale price set with compare-at isn't a rule that sits on top of your catalog. It *is* your catalog. Shopify stores exactly one Price and one Compare-at price per variant, and any app with permission to edit products can change them. There's no merging and no "this one is on sale, leave it alone" flag. The most recent write is what's stored, and what shoppers see. So when your ERP pushes its nightly catalog at 02:00, it has no idea a sale is running. It sees a Price of 400 where its own master data says 500, "corrects" it, and blanks the compare-at field because its own record doesn't have one. As far as the storefront is concerned, the sale never happened. Two things follow from this: - **How you set the sale price doesn't matter.** Manual edit, bulk editor, CSV, Disco: the sync can't tell the difference and doesn't care. This isn't a bug in the sale app or in Shopify. It's two systems disagreeing about who owns the price. - **Re-applying the discount only resets the clock.** Next sync run, same result. That's why the usual "just apply it again" advice feels like it works for a day and then doesn't. One thing that is *not* on this list: discount codes and automatic discounts. Those live in Shopify's discount system and never touch the product's price fields. If a code stopped working, you have a different problem, and the [sales vs. discount codes](https://productessentials.app/blog/shopify-sales-vs-discount-codes-show-discount-before-checkout/) post is the better place to start. ## The usual suspects ![Diagram of a Shopify product variant's Price and Compare-at fields with arrows from manual edits, bulk editor and sale apps on one side, and ERP, inventory sync, product feed, marketplace connector, supplier app, repricer and currency tool on the other](https://productessentials.app/content/images/2026/10/02-who-writes-prices-5101cee6.svg) Work through your app list with this question: *does it have permission to edit products, and does it ever push prices?* The usual answers, roughly in order of how often they turn out to be the cause: - **ERP or accounting system.** Usually the "source of truth" for the business, and therefore the system most likely to overwrite Shopify on a schedule. - **Inventory sync apps.** Many sync price alongside stock levels by default, even if you only ever wanted the stock part. - **PIM or product feed tools.** They push the whole product record, price included. - **Marketplace connectors.** Some are two-way and copy the marketplace price back into Shopify. - **Supplier, dropshipping and print-on-demand apps.** They recalculate your retail price whenever the supplier's cost changes. - **Repricers and dynamic-pricing tools.** Changing prices is their whole job. They'll "fix" yours. - **Currency and Shopify Markets pricing tools.** Can rewrite base or per-market prices. - **CSV imports and the bulk editor.** The human version. A colleague re-uploading last week's spreadsheet overwrites every price in it. A useful tell: if the price flips back at the same time every day, or on a round hour, you're looking at a scheduled sync. If it flips back within minutes of you saving a product, you're looking at an app that reacts to product updates. ## Find the culprit in about twenty minutes ![Flowchart: note the time it changed, list every app that writes prices, pick one test product and re-apply the sale price, pause price sync in one app, then check whether the sale price held. Yes means you found the culprit; no means turn that sync back on and pause the next app. If none are left, contact support](https://productessentials.app/content/images/2026/10/03-find-the-culprit-9dd8462f.svg) 1. **Note the exact time the price changed.** Compare it with when you applied the sale. The gap is your first clue about which schedule you're colliding with. 2. **List every app that can write product prices.** In your Shopify admin, each installed app shows what it has access to. Anything that can edit products is a candidate. Don't skip the ones you "only use for inventory"; that's where this usually hides. 3. **Pick one test product.** Re-apply the sale price on that product only. You don't need to touch the whole campaign to diagnose this. 4. **Pause price sync in one app.** Most sync tools let you turn off price sync while keeping stock sync. If yours doesn't, pause it for the test product, or pause the app briefly. 5. **Wait through the next sync window.** If the sale price is still there afterwards, you've found it. If not, turn that sync back on and pause the next app. Resist the urge to pause everything at once. If you do that and the price holds, you've learned nothing you can act on, and you'll be guessing again the moment you switch things back on. ## Four ways to stop it for good Once you know which system is doing the writing, pick one of these. In most stores the first or second option is enough. **1\. Turn off price sync in the other app.** Keep stock sync, drop price sync. This is the cleanest fix whenever that system doesn't actually need to own your retail prices, which is more often than people assume. **2\. Exclude the sale products from the sync.** Many ERP, feed and inventory tools can skip products by tag or collection. If your sale app tags campaign products automatically, that tag doubles as the exclusion rule. If it doesn't, one manual tag on the sale products does the job. **3\. Move the sync schedule.** If the other system must push prices, make it run *before* the campaign starts, not during it. ![Two timelines: in the first, a nightly sync at 02:00 overwrites a campaign that started at 00:00, so the sale is gone until someone notices. In the second, the sync is moved to 22:00, runs before the campaign, and the products stay on sale for the whole window](https://productessentials.app/content/images/2026/10/04-move-the-sync-9eadd5de.svg) The same rule applies at the end: let the campaign restore the original prices first, then let the sync run again. If the sync fires in between, it can overwrite the reset with whatever it had cached. **4\. Pause the sync for the campaign window.** For a four-hour flash sale, simply pausing the other app is fine. Set a reminder to switch it back on; forgotten pauses cause their own problems. If your ERP is the real source of truth for pricing, there's a fifth option: put the sale price in the ERP and let it flow down. You'll lose scheduling, automatic reset and storefront elements from the sale app, but you'll have exactly one system writing prices, which is the only configuration where this can never happen. ## Before you deactivate and reactivate the campaign A sale app restores your original prices at the end of a campaign by using what it recorded at the start. That works as long as nothing else writes to the price fields in between. If another system has been rewriting prices mid-campaign, and you deactivate and reactivate the campaign a few times to "fix" it, the recorded originals and the live prices can drift apart. You can end up discounting from the wrong base, or restoring a price that isn't the one you meant. The safe sequence is: 1. Find and fix the sync first. 2. Re-apply the campaign once. 3. Spot-check a handful of products, including the end-of-campaign reset on a test product with a short schedule. And while a campaign is live, don't make manual price edits on the products in it. Every manual edit is one more write competing for the same field. ## A pre-launch checklist for your next sale Fill this in once, before a big campaign, and you'll rarely see this problem again. | System | Writes prices? | When does it run? | Owner | Tested with a sale product? | | ------------------------ | --------------------------- | ----------------- | ----------- | --------------------------- | | ERP / accounting | Yes | Nightly 02:00 | Finance | Moved to 22:00, tested | | Inventory sync | Stock only (price sync off) | Every 15 min | Ops | Tested | | Product feed / PIM | Yes | Hourly | Marketing | Sale tag excluded | | Marketplace connector | No (one-way) | Continuous | Ops | Not needed | | Supplier / POD app | On cost change | Event-based | Ops | Sale products excluded | | Currency / Markets tool | | | | | | CSV imports / bulk edits | Anyone with product access | Ad hoc | Store owner | Freeze during campaign | The rows above are examples; the point is that every system with product access appears on the list, with a named owner and a yes or no in the last column. ## When to bring in support If you've tested every price-writing app and prices still revert, it's time for a support ticket. Send: - the product URL (or a few), - the exact time or times the price changed, - the list of apps that have product access, and which ones you've already paused. That's the information Product Essentials support asks for, and it's what turns a week of back-and-forth into one reply. If you're running your sale with Disco, the [help article on why another app can overwrite your prices](https://help.productessentials.app/article/54-why-disco-discounts-appear-then-disappear-later?ref=productessentials.app) walks through the same steps from inside the app, including the recommended fixes for the most common integrations. Disco records the original prices when a campaign starts and restores them when it ends, so as long as nothing else writes to those fields in between, you won't need to do any of this by hand. If you'd like scheduled sale prices that start, stop and reset on their own, [see the current plans](https://productessentials.app/#pricing) and test it on a small group of products first. [Install Disco from the Shopify App Store →](https://apps.shopify.com/discount-app?referrer=pe&utm%5Fsource=productessentials.app&utm%5Fmedium=blog&utm%5Fcampaign=shopify-sale-price-keeps-reverting) --- **Next:** [Shopify compare-at price: how to show strikethrough pricing](https://productessentials.app/blog/shopify-compare-at-price-complete-guide/) covers the two price fields every sync in this post fights over, and [How to schedule a Shopify sale that starts and ends automatically](https://productessentials.app/blog/schedule-shopify-sale-starts-ends-automatically/) shows how Disco records and restores prices so the reset isn't a manual job. ### How countdown timers actually increase conversions URL: https://productessentials.app/blog/countdown-timers/ Last updated: 2026-06-22T13:31:01.000Z Countdown timers have a reputation. Used badly, they feel like a cheap pressure tactic. Used well, they do something genuinely useful: they remove ambiguity. A shopper who knows a price ends Sunday at midnight can make a decision. A shopper who isn't sure when - or whether - the deal expires will simply leave and 'think about it.' ## Why a deadline converts Most abandoned carts aren't rejections - they're deferrals. People intend to come back, then life happens. A visible, honest deadline reframes the decision from 'someday' to 'now or never,' which is exactly the nudge an interested-but-hesitant buyer needs. ## Put the timer where the decision happens A timer buried in the footer does nothing. The moment that matters is on the product page, right beside the price, where the shopper is weighing the purchase. Showing the time left on each discounted product keeps the deadline in view at the point of decision. > Urgency only works when it's true. A countdown that resets every time someone reloads the page trains shoppers to ignore you. ## Keep it honest The fastest way to burn trust is a fake timer. If the sale ends Sunday, the timer should end Sunday - and the price should actually go back up afterwards. When your urgency is real, the timer becomes a credibility signal instead of a gimmick. ## Match it to your brand A timer that clashes with your storefront reads as spam. Style it to match your theme's colors and type so it looks like a native part of your store, not a banner ad bolted on top. Subtlety converts better than flashing red numbers. Done right, a countdown timer isn't pressure - it's clarity. And clarity is what turns browsers into buyers. ### Flash sales vs. sitewide sales: which fits your store? URL: https://productessentials.app/blog/flash-vs-sitewide/ Last updated: 2026-06-22T13:31:02.000Z Not every sale should look the same. A flash sale and a sitewide sale solve different problems, and reaching for the wrong one can either underwhelm your audience or quietly wreck your margins. Here's how to tell them apart. ## The flash sale: deep, narrow, short A flash sale is a sharp discount on a focused selection for a short window - a weekend, a day, sometimes hours. It's built for urgency and attention. Use it to clear a specific collection, spotlight a hero product, or give your email list a reason to open today rather than next week. ## The sitewide sale: broad, moderate, longer A sitewide sale applies a more modest discount across most or all of your catalog, usually over several days. It's the right tool for seasonal moments - BFCM, end of season, an anniversary - when the goal is volume and you want every visitor to feel included. > Flash sales create urgency. Sitewide sales create participation. Pick the one that matches what you actually need this month. ## How to choose Ask what you're optimizing for. If you need to move specific stock or spike attention on a quiet week, go flash. If you're riding a seasonal wave and want broad reach, go sitewide. And if you run frequent flash sales, vary the products and cadence so shoppers don't simply learn to wait for the next one. ## You can run both Mature stores often layer the two: a sitewide seasonal sale with a daily flash deal inside it to keep people coming back. The key is scheduling them as distinct campaigns with clear start and end times so the offers never collide. Whichever you choose, the mechanics are the same - select products, set the discount, add urgency, schedule. The strategy is just deciding how deep and how wide. ### Stop discount stacking and protect your margins URL: https://productessentials.app/blog/stop-stacking/ Last updated: 2026-06-22T13:31:02.000Z You set a 30% sitewide sale. A shopper applies a 'WELCOME10' code at checkout. Now they're getting 40% off, your margin is thinner than you planned, and you may not even notice until you reconcile the month. Multiply that across a busy weekend and discount stacking becomes a real, invisible cost. ## Why it happens Most stores accumulate discount codes over time - welcome offers, influencer codes, win-back campaigns. They're easy to forget about, and they don't automatically switch off when you launch a sale. So during your biggest promotions, when traffic is highest, they quietly combine with your sale prices. ## The real cost The damage isn't just the extra percentage. It's that your advertised price is no longer your floor, which makes forecasting unreliable and can turn a 'successful' sale into a barely-profitable one. Worse, savvy shoppers share stackable combinations, and the leak spreads. > Your sale price should be the lowest price. If a code can go underneath it, you've lost control of your own promotion. ## The fix Block other discount codes from applying while a sale is running. With stacking turned off, your sale price holds as the genuine floor - shoppers still get the deal you advertised, and you keep the margin you planned for. When the sale ends, your codes can resume as normal. It's a small setting with an outsized effect: predictable margins, honest pricing, and no end-of-month surprises. ### Launch your first storewide sale: a no-code guide URL: https://productessentials.app/blog/first-storewide-sale/ Last updated: 2026-06-22T13:31:03.000Z If you've never run a proper storewide sale, the idea can feel daunting - editing hundreds of prices, remembering to change them back, hoping nothing breaks. It doesn't have to be. Here's how to launch your first one start to finish, without writing any code. ## Step 1: Decide the offer Keep your first sale simple. A single, clear discount - say 20% off everything - is easier to communicate and easier to manage than a tangle of tiered offers. You can get fancier once you've run a few. ## Step 2: Select your products Rather than ticking products one by one, filter by collection, tag, type or vendor to bulk-select. If there are items you never want discounted - new arrivals, thin-margin lines - add them as exclusions now. ## Step 3: Add your storefront elements Turn on sale badges so discounted products are obvious, an announcement bar so visitors know a sale is on, and a countdown timer to give it a deadline. These are added through the storefront widget - no theme editing, no developer. > The first sale is the hardest. After that it's a repeatable checklist you can run in minutes. ## Step 4: Schedule it Set a start and end time. The sale will switch on and off by itself, and - importantly - every price reverts to normal automatically when it ends. No frantic Sunday-night price resets. ## Step 5: Tell people A sale nobody knows about doesn't convert. Email your list, post on social, and point everyone at your sale collection. Then let the automation do the rest. That's it. Five steps, no code, and a sale that runs itself. ### Set it and forget it: the case for scheduling sales URL: https://productessentials.app/blog/schedule-sales/ Last updated: 2026-06-22T13:31:03.000Z There's a particular kind of stress that comes from launching a sale manually: staying up to flip prices at midnight, setting phone alarms to turn the sale off, praying you didn't fat-finger a discount. Scheduling removes all of it. ## Plan when you're calm, not when you're busy The best time to set up a sale is days or weeks before it runs, when you have time to think clearly. Scheduling lets you do exactly that - configure everything in advance, then trust it to launch on the date you chose. ## No manual start, no manual stop A scheduled sale switches on at its start time and off at its end time. Prices revert automatically, so there's no window where you're accidentally still discounting on Monday morning because you forgot to end it Sunday night. > If your sale depends on you being awake to start it, it isn't really planned - it's just hoped for. ## Run several at once Scheduling also lets you line up multiple campaigns without conflict - a weekend flash sale, a month-end clearance, a holiday push - each with its own dates. You can see the whole quarter laid out instead of improvising week to week. ## Build a rhythm Once sales are scheduled rather than scrambled, you can establish a predictable promotional calendar. That consistency is good for your team's sanity and good for training customers to anticipate your sales rather than wait for random ones. Set it up once, schedule it, and get your evenings back. ### Daily deals that don't cannibalize full-price sales URL: https://productessentials.app/blog/daily-deals/ Last updated: 2026-06-22T13:31:04.000Z A daily deal is a fantastic traffic driver - a fresh reason to visit every day. But run carelessly, it teaches your most loyal customers a dangerous lesson: never pay full price, just wait for the rotation. Here's how to get the traffic without the training. ## Rotate the spotlight, not the whole store Feature a different product or small collection each day rather than blanket-discounting everything. The deal feels special and scarce, and the rest of your catalog keeps selling at full price alongside it. ## Vary the products that go on deal If the same hero product is on sale every Friday, regulars will simply buy it on Fridays. Mix in seasonal items, overstock, and lower-stakes products so there's no predictable pattern to game. > A good daily deal feels like a discovery. A bad one feels like a coupon your customers learn to wait for. ## Give each deal a hard deadline The whole point of a daily deal is that it's gone tomorrow. A countdown timer makes that real and pushes the decision into today. Without a visible deadline, 'deal of the day' is just a permanent discount with extra steps. ## Protect your margins Keep new arrivals and core full-price lines out of the rotation with exclusions, and don't let other codes stack on top of the daily price. The deal should be a controlled, deliberate offer - not an open door. Done well, daily deals build a daily habit. Done poorly, they build a discount expectation. The difference is discipline. ### Building urgency without being pushy URL: https://productessentials.app/blog/urgency-without-pushy/ Last updated: 2026-06-22T13:31:04.000Z Urgency is one of the most effective tools in commerce and one of the easiest to overdo. The line between 'helpful nudge' and 'aggressive pressure' is real, and crossing it costs you trust. Here's how to stay on the right side of it. ## Lead with information, not manipulation Honest urgency simply tells shoppers something true and useful: this price ends Sunday, this is the last weekend, stock is limited. You're giving them the facts they need to decide. Manufactured urgency - fake timers, invented scarcity - does the opposite and erodes credibility. ## One clear signal beats five loud ones A page screaming with banners, popups, blinking timers and 'ONLY 2 LEFT' badges doesn't feel urgent - it feels desperate. Pick the strongest, truest signal for the moment and let it stand on its own. > Trust is the thing that makes urgency work. Spend it carefully. ## Design urgency to match your brand Urgency cues should look like they belong in your store. A countdown timer and sale badge styled to your theme read as a thoughtful, time-limited offer. The same elements in clashing colors read as a scam. Restraint signals confidence. ## Respect the shopper's intelligence Your customers have seen every dark pattern. Treating them as smart - real deadlines, real stock, clear copy - is not only more ethical, it converts better over time because they come back. Pushy tactics win one sale and lose the relationship. The best urgency doesn't feel like pressure at all. It feels like clarity, delivered at the right moment. ### Make your sale collection work in email and on-site URL: https://productessentials.app/blog/sale-collection-everywhere/ Last updated: 2026-06-22T13:31:05.000Z Setting up a great sale is only half the job. If the only people who find it are the ones already browsing your store, you're leaving most of the upside on the table. The trick is to make one sale collection do the work across every channel you have. ## Start with a single source of truth When your sale auto-generates a dedicated collection, you get one URL that always reflects exactly what's on offer. That link becomes the anchor for everything else - no rebuilding product lists per channel, no broken links when items sell out. ## On-site: make it impossible to miss Feature the sale collection in your main navigation, link the announcement bar straight to it, and add it to your homepage hero. Every visitor, regardless of where they land, should be one tap from the deals. > Build the collection once, then point every channel at the same link. Consistency is what makes a sale feel coordinated. ## Email: lead with the link Your sale email should send people straight to the collection, not a generic homepage. Pull a few hero products into the email as a teaser, then let the collection page carry the full range. One clear call to action beats five competing ones. ## Social and beyond Drop the same collection link in your social bios, stories and posts, and in any paid traffic you're running for the sale. Because it's one maintained page, everything stays accurate even as the sale evolves. - Collection linked in main nav - Announcement bar points to it - Homepage hero features it - Email CTA sends straight to it - Social bios and posts use the same link One collection, every channel, zero busywork. That's how a sale reaches everyone it should. ### 4 Tips to Upsell through Flash Sales URL: https://productessentials.app/blog/4-tips-to-upsell-through-flash-sales/ Last updated: 2020-01-06T20:26:39.000Z ## 1\. Discount Your Hard-to-Sell & Out-of-Season Items. Some stores run sales by adding a flat discount rate to the entire store. If you do this, you miss an obvious opportunity to upsell. Instead, you should take advantage of the increased traffic in your store to upsell your hottest items at retail price. Specifically, you should primarily discount the products you want to clear out, such as: - last-season items - hard-to-sell items (e.g. items with a high shelftime) By doing this, you leave the customer the option of adding one of your full-priced items and increase your profit by customer. ## 2\. Announce Your Sale & Collect Emails In the period before your sale starts, announce the sale on your store and offer your customers the option of getting notified when the sale starts. This helps you create a connection to your customers and build your email list. One way you can do this is by using [Disco](https://apps.shopify.com/discount-app?referrer=blog-4-tips-1&ref=productessentials.app) to create a sale announcement in your announcement bar as seen in the image below. ![](https://productessentials.app/content/images/2026/02/disco-announcement-prior.png) Collect emails through a sale announcement on your online store running up to the sale. Then, when the sale is scheduled to start, you notify people on your e-mail list that the sale is now running and encourage them to check it out before it ends. ## 3\. Split Your Sale into Multiple Offers Increase your potential visitors and upsales by splitting your sale into multiple smaller sales scattered over a time period. For example, instead of having one sale for a week on a product group, split the product group in two and run two separate sales in separate weeks. This has a range of benefits: - You can introduce your e-mail list with offers multiple times, which drives more traffic to your site. - You can create a higher sense of scarcity and urgency around each offer. - The increased exposure raises the probability of upselling. ## 4\. Urge Customers to Act with Time-Limited Offer Urge interested customers to engage with your Call-to-Action by speaking to their fear of missing out. You can do this by time-limiting your sale in a way that is visible to the customer. This will nudge potential customers into acting now rather than later. One way to add urgency is by creating a specific time limit for your sale and making this visible to the customers with a clear message to act before it expires. This naturally gives the customer a feeling of being in a hurry to act on the offer. ![](https://productessentials.app/content/images/2026/02/blue-countdown-timer.png) Create urgency with a visible time limit on your offer and speak to your customer's fear of missing out. Some stores use what is called dark patterns to create scarcity and urgency. This means they deceive the customer by showing fake stock numbers and time limits. **We do not recommend this.** It is misleading and ultimately, it will result in a loss of credibility in your store among your customers. **We recommend** that you run real time-limited offers that deactivate when they expire which creates real urgency in your sales. In Shopify you can do this by using our app [Disco](https://apps.shopify.com/discount-app?referrer=blog-4-tips-2&ref=productessentials.app), which handles flash sale scheduling, price editing and urgency creation all-in-one. It is even possible to show your active sales in the top announcement bar on your store as seen on the image below. To read more, visit our [Shopify app store listing](https://apps.shopify.com/discount-app?referrer=blog-4-tips-2&ref=productessentials.app). ![](https://productessentials.app/content/images/2026/02/announcement-bar.png) Announcement bar with countdown timer and visible call to action. Disco automatically creates this for flash sales you create with the app. [Try Disco](https://apps.shopify.com/discount-app?referrer=pe&ref=productessentials.app) ### Getting started with Disco URL: https://productessentials.app/blog/getting-started-with-disco/ Last updated: 2020-01-02T21:59:22.000Z The Disco app runs sales by reducing prices on the products in your store. To create urgency and awareness of the sale you can add a **Sale Announcement Bar** displaying each sale and a **Countdown Timer** on the product page. ## Creating your first sale To create your first sale, open the app and click **Create discount**. You will be met with the following page: ![](https://productessentials.app/content/images/2026/02/image-1.png) Fill out the following information about the sale: - **Title** Input your sale title. - **Create collection** Check, if you want to create a collection for the sale. - **Discount** Input a percentage or fixed amount discount. - **Round to nearest** Check, if you want the price rounded to a certain decimal. - **Select products** Based on title, product type, tag, vendor or collection. - **Active dates** Select when the discount should start and end. ## Add Announcement Bar and Countdown Timer Now you are ready to specify the sale announcement and countdown timer settings for the sale. Scroll down until you see the following: ![](https://productessentials.app/content/images/2026/02/image-3.png) If you want to enable the countdown timer for each discounted product, check the **Create countdown timer** box. Now, go ahead and fill out the **Announcement** to specify how you want to announce the specific sale: - **Show in announcement bar** Check, if you want to show this sale in the announcement bar. - **Show countdown timer in announcement** Check, if the announcement should include a countdown timer. - **Text left** Input text to be shown on left side of countdown timer. - **Text right** Input text to be shown on right side of countdown timer. - **Show announcement before sale starts** Check, if you want to announce sale prior to its scheduled start. *Use this to collect e-mails.* - **Button text** Input text to be shown on your Call-To-Action button. - **Button link** Input the link your Call-To-Action button should redirect to. The inputs from above will result in the following announcement bar: ![](https://productessentials.app/content/images/2026/02/image-4.png) Finally, when you are done, hit the **Create discount** button in the upper right corner. ## Customize colors and layout You can customize the layout of the announcement bar and countdown timer to fit perfectly into your store theme by going to **Settings** from the app front page. ![](https://productessentials.app/content/images/2026/02/image-6.png) Here, you have the option of changing colors, text, font, font size and much more while getting a live preview. Look below to see our Black Friday theme. ![](https://productessentials.app/content/images/2026/02/image-7.png) When you are done with adjusting the layout to your store theme, hit the **Save** button. And do not worry - you can always go back to Settings and modify it.