Write the bundle as cash and costs
For identical items at regular price p and variable cost c, a buy-X-get-Y-free bundle collects X × p and incurs (X + Y) × c. Its contribution is the difference. The effective average discount is Y / (X + Y), but the bundle's customer behavior can differ from a percentage reduction on a single unit.
For mixed products, calculate the paid items' realized revenue and every item's separate cost. A free sample costing €2 is economically different from giving away another €20-cost main item, even if both are described as a free gift.
Worked example: buy two, get one free
An identical product sells for €30 and costs €12. A three-unit full-price basket contributes €54. Buy two, get one free collects €60, costs €36 and contributes €24 per bundle. The effective average price is €20 per delivered unit.
| Measure | Full-price three units | Buy two, get one free |
|---|---|---|
| Revenue | €90 | €60 |
| Variable cost | €36 | €36 |
| Contribution | €54 | €24 |
| Contribution per delivered unit | €18 | €8 |
Compare against a stated counterfactual
Suppose the relevant baseline is 600 full-price units, contributing €10,800. Matching that contribution requires 450 promotional bundles: 1,350 delivered units at €24 contribution per bundle. That is 125% more units than the baseline, before additional campaign or order costs.
Do not call this a forecast of 450 orders. Some orders can contain multiple bundles, and existing customers may substitute the offer for purchases they would have made anyway. A unit target cannot identify incremental customers.
Map the bundle worksheet correctly
The bogo-volume-threshold template represents identical delivered items at their realized average unit price. Every paid and free delivered unit belongs in promo_units. The variable cost remains the cost of one delivered unit.
| Worksheet item | CSV field | Example |
|---|---|---|
| Delivered units: 450 bundles × 3 | promo_units | 1350 |
| Average realized price: €60 / 3 | promo_price | 20 |
| Regular unit price | regular_price | 30 |
| Cost of one delivered item | unit_cost | 12 |
| Full-price unit comparison | baseline_units | 600 |
Include basket costs and eligibility
Shipping, packaging and payment fees may vary by order rather than by item. Allocate them using the expected basket structure, then disclose that allocation. Dividing a fixed order fee by an unchanged number of units can be wrong when the offer changes basket size.
The commerce platform's eligibility and combination rules also affect the realized offer. Shopify's Buy X get Y documentation describes customer-added qualifying items and discount conditions. Test those rules separately from the economic calculation; a profitable theoretical bundle does not confirm correct checkout behavior.
Frequently asked questions
Is a positive bundle contribution enough to approve BOGO? No. Compare it with what those customers and that inventory would have earned without the offer.
Can I use the average-price mapping for different products? Only with a defensible cost and revenue allocation. Prefer separate SKU rows, and retain the bundle calculation that explains the allocation.
Put it to work
Source context
Guide text and examples were prepared independently for MarginTrial. Sources provide the stated methodological or product context. They do not validate the hypothetical commercial outcomes.