Revenue was up 40% over the weekend. Everyone said well done. Then finance ran the numbers in December, and the margin line looked worse than a normal November.
That's the BFCM story most brands don't put in the recap deck. The discount worked exactly as designed. The design was the problem.
A flat percentage off everything is the easiest offer to build and the most expensive one to run. It rewards the customer who was already going to buy one item, gives nothing extra to the customer who might have bought four, and hands away the same margin percentage on your highest-ticket SKU as on your cheapest.
This is a playbook for the other approach: offers with structure. Same promotional budget, aimed at basket size instead of price.
Quick List - 9 Margin-Safe BFCM Offers
1. Capped percentage discounts
2. Spend-threshold tiers
3. Fixed-price bundles
4. Every Nth item offers
5. Free gift above a threshold
6. Cross-category pairing
7. Volume breaks
8. Segment-gated depth
9. Market-specific offers
Why "30% Off Sitewide" Is the Expensive Option
Take a $400 cart. A flat 30% hands over $120 and the customer pays $280. Nothing about that offer encourages a fifth item, because the discount rate is identical whether they buy one thing or ten.
Now structure it. "Spend $400, get $80 off." You give away $80 instead of $120, and the threshold gives the shopper a reason to add one more item to reach it. Lower discount, larger basket, better margin on both sides of the equation.

The customer doesn't experience the second offer as stingier. They experience it as a goal. That difference is most of what separates a promotion that builds a season from one that just discounts it.
Where BFCM Margin Actually Leaks
Before choosing offers, it's worth knowing where the money usually goes. In our experience auditing promotional setups, the damage is rarely the headline rate. It's the mechanics underneath it.

Uncapped percentage discounts. A 30% discount on a $200 order costs $60. The same discount on a $2,000 order costs $600. Most brands set the rate thinking about their average order and never model the tail.
Unintended stacking. Two discounts both configured to combine, both landing on the same cart. Shopify's rules here are stricter than most merchants expect, but a permissive setup on both sides will do exactly what you told it to.
Tiers counting the wrong products. A volume tier counts every item matching its eligibility, not just the ones you had in mind. Add a loosely defined collection and a customer reaches your top tier with products you never intended to discount.
Codes landing on already-marked-down stock. You mark a line down 30% for clearance, then a sitewide code takes another 25% off the reduced price. The tidiest fix is a tag such as "no-code" on marked-down products and an exclusion rule on the code.
Offers with no end date. The Cyber Monday deal that was still live on the 15th of December. It happens more than anyone admits, and it's entirely preventable at setup.
Nine Offers That Protect Margin
None of the following is possible with Shopify's native discount engine on its own. All of them are possible on any Shopify plan through an app built on Shopify Functions.

1. Capped percentage discounts
"20% off, up to a maximum of $50." The single highest-leverage change most brands can make. It keeps the headline number attractive while putting a hard floor under what any one order can cost you. Essential if your catalogue spans a wide price range.
2. Spend-threshold tiers
"Spend $150 get $25 off, spend $300 get $60." Rewards for reaching a level rather than a rate applied to everything. Set the first threshold slightly above your current AOV so it pulls rather than simply pays out.
3. Fixed-price bundles
"Buy 3 for $99." Sells units instead of advertising a discount rate, and it's much harder for shoppers to comparison-shop against a competitor's percentage. It also sets a hard floor: you know exactly what three units earn you.
4. Every Nth item offers
"Every 3rd item free." The discount only arrives once the customer has already bought two at full price, and the pattern repeats through the cart. Depth is rewarded; entry isn't.
5. Free gift above a threshold
"Spend $200, get a free gift." Costs you the gift's COGS rather than a percentage of the whole basket, which is usually far cheaper than the equivalent discount. Pick something with high perceived value and low landed cost.
One practical note: most Functions-based discount apps discount the gift once the shopper adds it, but don't place it in the cart for them. Check whether your app auto-adds, and if it doesn't, say so clearly on the product page and in your announcement bar.
6. Cross-category pairing
"Buy any pair of shoes, get socks 50% off." Attaches slow-moving stock to your bestsellers instead of discounting the bestsellers themselves. One of the most underused offers in the BFCM toolkit.
7. Volume breaks
Better per-unit pricing at 5, 10 and 20 units. Natural for consumables, refills and anything with a replenishment cycle. It brings forward revenue you'd otherwise earn in January anyway, which is a fair trade during a high-intent weekend.
8. Segment-gated depth
Your deepest offer, restricted to a customer tag or segment. Repeat buyers and email subscribers get the strong number; the open web gets the standard one. You buy loyalty without broadcasting your floor price to everyone, including your competitors.
9. Market-specific offers
Different depth in different regions. If your margin in one market is thinner because of shipping or duties, there's no reason it should carry the same discount as your strongest market. Requires an app that respects Shopify Markets properly.
Setting Thresholds From Your Own Numbers
Round numbers are the enemy here. A $100 free-shipping threshold is meaningless if your AOV is already $140, and punishing if it's $45.
Pull your last ninety days of order values and find the median, not the mean, so a handful of very large orders don't distort it. Set your first threshold roughly 20–25% above that figure. It should feel reachable with one more item, not with three.
For the second tier, look at where your order distribution actually thins out and place it just beyond. If almost nobody currently orders above $400, a $500 tier is decoration rather than an incentive.
The Pre-BFCM Calendar
Most of the margin damage is decided long before the weekend itself.
The stress-test in October is the step brands skip and regret. Build a test cart for every offer and deliberately try to break it: add the same product three times where you meant three different ones, add a low-value item to see whether it triggers a tier, apply the code alongside an automatic discount, and check what happens at the boundary of every threshold.
Two Constraints Worth Knowing Before November
Shopify caps automatic discounts at 25 active at once. This is a platform limit, not an app limit, and brands running many parallel offers hit it at the worst possible moment. Audit and deactivate old automatic discounts in October, and lean on code-based offers where you need more breadth.
Shopify Scripts is gone. Scripts stopped executing on 30 June 2026, with editing and publishing having ended on 15 April 2026. Any promotional logic still assuming Scripts needs rebuilding on Shopify Functions. If your last complex BFCM setup was script-based, that work belongs in September, not November. Brands working with Top Shopify Plus Partners in India for Growth have largely completed this migration already.
Building These Offers
Every structure above needs conditional logic that Shopify's native discount panel doesn't expose. That used to mean Shopify Plus and Scripts. Since Functions became available to all merchants, it doesn't.
Seventh Triangle built Every Possible Discount for exactly this: capped percentages, spend tiers, fixed-price bundles, Nth-item patterns, cross-collection pairing, customer-tag gating and market-specific offers, on any Shopify plan, at a flat $19/month with every feature in one plan. If you're weighing it against the alternatives, our breakdown of the Top 7 Best Shopify Discount Apps covers where each one is genuinely strongest, including the cases where something else fits better.
| Explore App - Every Possible Discount |
Final Thoughts
The brands that come out of BFCM in good shape aren't the ones that discounted least. They're the ones whose offers had a shape to them: a cap, a threshold, a bundle, a reason for the shopper to add one more thing.
Flat percentage discounts are a blunt instrument aimed at a weekend when intent is already at its highest of the year. You rarely need to buy demand in late November. You need to shape it.
Decide your structure in September, test it properly in October, and give every offer an end date before it goes live.
Frequently Asked Questions
1. What is the best discount strategy for BFCM?
The most margin-efficient BFCM strategy uses structured offers rather than a flat percentage: capped percentage discounts, spend thresholds, and fixed-price bundles. These give the shopper a reason to increase basket size instead of applying the same discount rate to every order regardless of value. A flat sitewide percentage is the simplest offer to build and typically the most expensive to run.
2. How do I stop a discount code from applying to already discounted products?
Tag marked-down products with something like "no-code" and exclude that tag from the discount's product eligibility. Shopify's native discounts cannot filter out products that simply have a compare-at price set, so tagging is the reliable method. Set the tagging convention up before the campaign so it's applied consistently as items go on sale.
3. Can I cap a percentage discount on Shopify?
Not with Shopify's native discount engine, which applies a percentage without any ceiling. Capping a percentage — "20% off, maximum $50" — requires a discount app built on Shopify Functions. Check whether the cap applies per product or per order, because the two behave very differently on a multi-item cart.
4. How many automatic discounts can I run at once on Shopify?
Shopify allows a maximum of 25 active automatic discounts at any time across all apps. This is a platform limit rather than an app restriction. Code-based discounts are not constrained in the same way, so brands running many parallel promotions during BFCM often use codes for breadth and reserve automatic discounts for their headline offers.
5. Where should I set my free shipping or free gift threshold?
Set it roughly 20–25% above your median order value from the last ninety days. Use the median rather than the average so a few unusually large orders don't skew the figure. The threshold should be reachable by adding one more item; if it needs three, most shoppers disengage instead of stretching.
6. Do free gift discounts add the product to the cart automatically?
It depends on the app. Discount apps built purely on Shopify Functions apply the discount at the cart and checkout level, and many cannot place products into the cart, so the shopper adds the gift themselves and the app makes it free. Apps with a storefront widget can auto-add. Confirm which behaviour yours has before launch and signpost the offer clearly if the customer needs to add the gift.
7. What happened to Shopify Scripts and does it affect BFCM promotions?
Shopify Scripts stopped executing on 30 June 2026, after editing and publishing ended on 15 April 2026. Any discount, shipping or payment logic that relied on Scripts no longer runs. Stores that previously used Scripts for complex BFCM promotions need those rules rebuilt on Shopify Functions, either through a Functions-native discount app or a custom Function.


