BOGO without the empty shelf: the inventory math of buy-one-get-one
The inventory math of buy-one-get-one: how paired velocity changes reorder points, how to size each leg, and how to plan the demand dip after the promo ends.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
BOGO gets planned as a pricing decision — pick the discount, set the banner, watch margin. Run the arithmetic and it's an inventory decision disguised as a pricing decision: buy-one-get-one roughly doubles unit consumption on one SKU, exposes a second SKU you never sized for, and borrows demand from the weeks after the promo ends. Stores get hurt by BOGO less through the discount cost than through the shelf going dry mid-promo — the promo you can't fulfill is the one customers remember. This guide walks the three demand effects, a full sizing example, and the post-promo dip, so the promo ends when you decide it ends.
(If you're running a percentage-off sale rather than buy-one-get-one, the sizing logic differs enough to have its own guide — flash sale inventory planning covers that case.)
Why BOGO breaks inventory plans
Three mechanisms, and each one is invisible in a margin spreadsheet:
- Consumption doubles per order on the paid leg. Every redemption moves two units of the promoted SKU. A 14-bags-a-day coffee SKU becomes a 28-plus-bags-a-day SKU overnight, and every reorder point set for normal velocity is wrong the hour the promo starts.
- The free leg has its own depth. Cross-SKU BOGO ("buy beans, get socks free") moves the giveaway burden to the partner SKU, which may hold a fraction of the units the promo will demand. The paid leg being deep proves nothing.
- Demand is pulled forward, not created. A household that collects two bags of beans during the promo doesn't buy beans the following week. Part of the lift is next month's sales arriving early — and a reorder placed against promo velocity arrives into a demand trough.
Shopify handles the price mechanics natively: automatic discounts support buy-one-get-one structures, and the units still sell as ordinary inventory against each variant (Shopify Help Center, accessed November 2026). The pairing intelligence — sizing both legs, watching the trough — is entirely yours.
A worked example: sizing a coffee-bean BOGO
All numbers illustrative — substitute your own before deciding anything.
Your bag BEAN-ETH-250 (Ethiopia, 250g) sells at $18, costs you $9, and moves 14 bags/day at baseline. Supplier lead time is 30 days. On hand today: 200 bags. You want a 10-day same-SKU BOGO (buy one bag, get one free).
Step 1 — promo consumption. BOGO forces two bags per order, and the deal lifts order count. A planning assumption of a 1.3× order lift is a placeholder, not a benchmark — set it from your own data. Per-day consumption:
14 baseline × 1.3 order lift × 2 bags/order = 36 bags/day
Step 2 — runway. On hand divided by promo consumption:
200 ÷ 36 ≈ 5.6 days
The shelf runs dry on day 6 of a 10-day promo. A purchase order placed today lands on day 30 — after the promo is over — so inbound can't rescue the window. The promo must be sized to what you hold plus what arrives inside the window:
Promo length = on-hand depth ÷ promo consumption = 200 ÷ 36 → a 5-day promo (180 bags, 20 spare), or a 10-day promo with a redemption cap around 90 orders
Step 3 — what the promo actually earns. At 90 orders: 90 paid bags revenue = 90 × $18 = $1,620; 90 free bags = 90 × $9 = $810 estimated cost of goods given away. Baseline over the same 5 days would have sold 70 paid bags = $1,260. Incremental revenue: $360 (illustrative) against $810 of giveaway. On the promo window alone, BOGO loses money on paper — which is the real reason to run one: customer acquisition, list growth, moving marginal buyers into repeat cycles. If the inventory math doesn't support deep enough participation for those goals to pay back, run a shallower promo or take 50% off instead.
Same-SKU or cross-SKU: choosing the pair
The pairing decision is an inventory decision first, a marketing decision second:
| Pairing | Inventory effect | Fits when | Watch for |
|---|---|---|---|
| Same SKU (buy 1 get 1 free) | Doubles that SKU's consumption | Deep stock you want to move fast, or acquisition on a hero product | Depth per the worked example; a sharp post-promo trough |
| Cross-SKU (buy X, get Y free) | Shifts giveaway depth to the partner SKU | Partner has excess depth; introducing a new line | The partner becomes the binding constraint — size it first |
| Buy X, get Y at 50% off | Halves the giveaway; softer demand lift | Margin-protected promos, mid-depth stock | Weaker urgency; sizing still needs the order-lift assumption |
Cross-SKU is where pairing shines operationally: the free leg can be a slow mover you'd love to put in more hands — with the obvious caveat that a slow mover is slow partly because demand is thin, so the partner's depth matters more than its appeal. If the partner SKU is one you're actively trying to retire, the endgame belongs to the playbook for getting rid of dead stock, not to a BOGO.
Sizing each leg: the ledger
Cross-SKU promos need a two-row ledger before the banner goes up. Continuing the example, 10-day promo, "buy a bag of beans, get a pair of trail socks free" (SOCK-TR-M-03), order count lifting to ~18 orders/day (14 × 1.3 = 18.2, illustrative — the ledger carries the 18.2):
| SKU | Role | Baseline/day | Promo demand/day | 10-day need | On hand | Verdict |
|---|---|---|---|---|---|---|
| BEAN-ETH-250 | Paid leg | 14 | 18 | 182 | 200 | Covers it, 18 spare |
| SOCK-TR-M-03 | Free leg | 6 | 18 | 182 | 40 | Short 142 pairs — binding constraint |
The socks, not the beans, decide the promo. With 40 pairs on hand and no inbound inside the window, the realistic options: cut the promo to 2 days (18 × 2 = 36 pairs), pick a deeper partner, or restructure as "beans + 50% off socks," which keeps the banner and halves the sock exposure. The discipline is the point: the leg with the least depth sets the promo's length, and it's rarely the leg on the banner.
The trough: what happens after the promo ends
Pull-forward is the least discussed part of BOGO and the one that burns the following month. Two displacement effects stack:
- Paid displacement. 90 paid bags sold in 5 days equals 90 ÷ 14 ≈ 6.4 baseline-days of demand pulled forward.
- Free displacement. 90 households holding a free bag won't buy beans for their normal cycle — up to another 90 bags, roughly 6.4 baseline-days, suppressed in the weeks after.
Combined, expect demand to run well below baseline for roughly two weeks post-promo (illustrative, scaled to the promo's size). The operational rules follow directly:
- Reorder against trough demand, not promo velocity. If the promo's burn rate triggers your reorder instinct, the PO arrives into two quiet weeks and doubles your shelf. Recompute how many days of cover you're holding the day the promo ends and order to that number.
- Rebuild the reorder point from normal velocity. The promo's 36 bags/day is not the SKU's velocity; if you update the reorder point formula inputs, feed it pre-promo baseline — in-stock, non-promo days only.
- Tell the list when the free leg is nearly gone. If socks hit zero mid-promo, the discount breaks awkwardly for customers mid-checkout. Disable the discount proactively, and hand the disappointed traffic to the waitlist play in the back-in-stock playbook.
Guardrails before you flip the switch
- Depth on both legs, confirmed. Ledger both SKUs against promo demand before scheduling; the thinner leg wins.
- A redemption cap, not just an end date. Caps keep a viral day from outrunning your depth; set one if your discount setup supports usage limits (Shopify Help Center, accessed November 2026).
- A disable plan for the free leg. Know the exact on-hand number at which you'll turn the discount off, and check it daily during the promo.
- The post-promo PO decision made in advance. Write down today what you'll do on the last day — most stores reorder emotionally after a strong promo and land the surplus into the trough.
- Margin math for the giveaway, in units. Free bags at cost, not at retail — the $810 estimated giveaway above is a COGS number, and it's the one that belongs in the decision.
Common questions
Does BOGO double your sales? It roughly doubles unit consumption on the promoted SKU, but not revenue: half the units are free, and order count lifts far less than unit count. Plan inventory on doubled consumption and margin on the giveaway at cost — revenue projections that assume 2× are the most common BOGO sizing error.
How much inventory do you need for a BOGO promotion? Enough to cover promo demand on both legs for the full window: baseline daily velocity × order lift × units per order × promo days, per SKU. The leg with the least depth sets the maximum promo length — size the free unit's stock first, because it's usually the constraint.
Is buy-one-get-one free better than 50% off? For inventory, they're opposites: BOGO moves two units per order and demands double depth, while 50% off moves one unit per order at reduced margin. Choose BOGO when depth is abundant and acquisition matters; choose 50% off when depth is thin, since it's far easier to stop.
What happens to demand after a BOGO ends? A trough: customers who bought two units, including a free one, delay their next purchase, so post-promo demand runs below baseline for a period roughly proportional to the units moved. Reorder against trough demand, not the promo's burn rate, or the replenishment lands on top of a quiet shelf.
Can you run a BOGO on Shopify without an app? Yes — native automatic discounts support buy-one-get-one structures, including free-item mechanics, though redemption caps and combinations vary by discount type (Shopify Help Center, accessed November 2026). The discount setup is the easy part; sizing both legs and planning the trough is the work this guide covers.
Next step
Take the SKU you'd most like to promote and fill in the four inputs from your own data — baseline velocity, lead time, on-hand depth, and an order-lift guess you'll revise after the first promo. Divide depth by promo consumption and see how many days the banner is actually entitled to. If the arithmetic says your fast movers are all too shallow for a BOGO, that's a reorder-depth problem to fix first, and the reorder-point math is where the fix starts.