Buy 2 get 1 free looks like a clean 33% discount, and on revenue it is — a shopper pays for three units but only gets charged for two, so you collect two-thirds of the retail total. But that headline number is not what the offer costs your business. The free unit does not cost you its retail price; it costs you its COGS and fulfillment. So the real hit to your margin depends entirely on how profitable each unit is, and whether the third unit is a sale you would have lost anyway. Get that wrong and a “33% off” promotion can quietly sell at a loss.
The headline vs the real cost
Two different numbers get confused constantly:
- Discount on revenue: 33.3%. Three units go out the door, two are paid for. That is a fixed fact of the offer geometry, and it is what most merchants fixate on.
- Cost to you: the free unit’s COGS + fulfillment. You do not “lose” the retail price of the free unit — you never had that money. You lose what it cost you to source, pick, pack and ship that one extra item.
Those two numbers are only similar on a low-margin product. On a high-margin product they are worlds apart. That gap is the entire reason two stores can run the identical offer and one prints profit while the other bleeds.
Why it matters: same offer, opposite outcomes
Margin percentage decides whether the same headline discount is a growth lever or a leak. Consider two products, both selling at $30 retail (illustrative example numbers, not our data):
- Product A — high margin. COGS $8, fulfillment $3 → per-unit contribution $19.
- Product B — low margin. COGS $18, fulfillment $3 → per-unit contribution $9.
The free unit in a buy-2-get-1 offer costs Product A $11 (8 + 3) and Product B $21. On Product B, the cost of giving one away ($21) is more than the contribution you earn on a normal single sale ($9). That is the difference between an offer that can compound and one that structurally cannot.
The margin math: contribution with vs without
The only honest way to judge a promotion is to compare total contribution — revenue minus variable cost — with and without the offer, not the headline discount. Here is the full comparison using the illustrative numbers above.
| Scenario | Units shipped | Revenue | COGS + fulfillment | Contribution |
|---|---|---|---|---|
| A (high margin), no offer — buys 2 | 2 | $60 | $22 | $38 |
| A (high margin), B2G1 — pays 2, gets 3 | 3 | $60 | $33 | $27 |
| B (low margin), no offer — buys 2 | 2 | $60 | $42 | $18 |
| B (low margin), B2G1 — pays 2, gets 3 | 3 | $60 | $63 | −$3 |
Read the table carefully. If the shopper would have bought 2 anyway, the offer simply hands them a third unit. Product A still clears $27 — a lower per-order margin, but real profit. Product B goes negative: the free unit costs more than the two paid units earn. Same “33% off” headline, opposite economics, driven only by margin %.
That is the trap. The discount percentage is identical; the contribution outcome is not. This is exactly the failure mode behind a Shopify bundle that isn’t increasing AOV — the offer moves units without moving profit.
The incrementality question
The table above assumed the worst case: the shopper would have bought two regardless, so the third unit is pure give-away. Reality is usually somewhere in between, and the single variable that decides everything is incrementality:
- Truly incremental — the shopper came for one unit, and the offer pulled them up to a three-pack they would never have bought otherwise. Now you are comparing “buy 1” against “pay for 2, ship 3.” For Product A that is a jump from $19 contribution to $27. The offer created profit.
- Not incremental — the shopper was always going to buy two. The third unit is a gift funded entirely out of your margin, and you are back in the negative-Product-B column.
Most real promotions are a blend: some buyers trade up (incremental, profitable), some would have bought two anyway (cannibalized, costly). Your blended result is the weighted average. The headline discount tells you nothing about where on that spectrum you land — only the unit economics and your actual buyer mix do.
How to model it before launching
You can estimate the outcome before spending a cent. Model, don’t guess:
- Get your true per-unit contribution. Retail − COGS − fulfillment (and payment fees if you want to be precise). Not gross margin off a spreadsheet guess — the real landed cost.
- Estimate the incrementality rate. What share of B2G1 orders are shoppers trading up from fewer units vs shoppers who’d have bought two anyway? Use past order data on how often people already buy multiples.
- Compute blended contribution.
(incremental orders × incremental contribution) + (cannibalized orders × the loss on the free unit). If the sum beats what those same shoppers contributed before the offer, it works. - Set a breakeven incrementality threshold. Solve for the incremental share at which contribution matches the no-offer baseline. If you can’t realistically hit it, don’t run it. Broader AOV modeling lives in how to increase average order value on Shopify.
How to protect margin
If the math is close, structure protects you:
- Pick the right products. Run buy-2-get-1 on high-margin items where the free unit’s cost is a fraction of its price. Keep low-margin SKUs out of it.
- Use thresholds, not blanket freebies. A “buy 2 get 1” that only triggers at a qualifying spend, or a discounted third unit instead of fully free, preserves more contribution while keeping the psychological pull.
- Consider a smaller give. A 3-for-2 that’s really a partial discount on the third unit can capture most of the conversion lift at a fraction of the margin cost — the “3 for 2 discount math” is just this same table with a non-zero price on unit three.
- Enforce it checkout-safe. A promo that displays one thing on the product page but charges another at checkout destroys trust and refunds your margin gains anyway. The offer the shopper sees must be exactly what they’re charged. This is the whole point of Profit Flow AOV Bundle — the discount is enforced by Shopify at checkout, not faked with theme JavaScript. Setup walkthrough: how to set up BOGO on Shopify.
Common mistakes
- Assuming “33% off” is the cost. It’s the revenue discount, not the margin cost. The margin cost is the free unit’s COGS + fulfillment — usually much lower, sometimes higher than a paid unit’s contribution.
- Ignoring fulfillment. The free unit still gets picked, packed and shipped. On heavy or bulky products that per-unit fulfillment can swamp a thin margin.
- Ignoring incrementality. Giving a third unit to someone who’d have bought two is pure margin donation. Without an incrementality estimate you’re flying blind.
- Running it on low-margin hero products because they’re your best sellers — exactly the SKUs where the free unit can cost more than a normal sale earns.
How to test
Model first, then validate with real orders. Launch the offer on a defined product set for a fixed window, and compare total contribution (not units, not revenue) against the same period without it — ideally against a control set of similar products that don’t run the promo. Watch units-per-order to confirm shoppers are actually trading up rather than just collecting a freebie they’d have earned anyway. If contribution rises, the incrementality is real; if units rise but contribution flattens or falls, you’re funding gifts. For hands-on help wiring the analysis and the offer, see our CRO & AOV services.
Want to run a BOGO that actually makes money? Model the margin first, then launch it checkout-safe with Profit Flow AOV Bundle so the offer shoppers see is exactly what they’re charged. Not sure your promos are profitable? Get a free profit audit.