Product Bundle Pricing: Set a Discount That Still Clears Your Margin

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Product Bundle Pricing: Set a Discount That Still Clears Your Margin.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Product Bundle Pricing: Set a Discount That Still Clears Your Margin.

Work backwards from a margin floor, not forwards from a discount you like the look of. Add the item costs, card fees, packaging and shipping, decide the lowest profit you will accept per order, and solve for the bundle price. Whatever sits between that price and the sum of the single prices is your maximum discount.

Most small stores do it the other way round: take 10 per cent off, check that the bundle still "looks profitable" and launch. The trouble is that a bundle changes more than the price. It changes the card fee, the shipping cost per order, the packing time and, most of all, who is buying it. A discount only pays when enough bundle buyers are people who would not otherwise have bought the whole set.

Follow me on Instagram@sagnikteaches

The six-item kit we will price

Take a craft brewery supplier that sells home-brewing equipment online. It wants a starter kit built from six items it already stocks. Everything below is an illustration, so swap in your own figures, but the shape of the sheet works for any set of products.

Connect on LinkedInSagnik Bhattacharya
ItemSingle priceLanded costSingle margin
25-litre fermenting bucket with lid$19.00$9.4050.5%
Airlock and bung$3.50$1.1068.6%
Hydrometer and test jar$9.50$4.2055.8%
Sanitiser, 500 g$12.00$5.6053.3%
Ale yeast sachet$4.50$1.6064.4%
Malt extract ale kit$29.00$14.8049.0%
Total$77.50$36.7052.6%

"Landed cost" means what the item costs you once it is on your shelf: the supplier price plus inbound freight and any duty, divided by the units. If you only have the invoice price, your margins are flattering you. The ordering of the work matters, so build the sheet in the sequence below.

Subscribe on YouTube@sagnikteaches

Building the margin sheet column by column

One row per scenario, one column per cost. Keep it in a spreadsheet, not in a chat window, so every figure is visible and you can change one assumption without redoing the lot. If you already track product margins in a sheet, reuse that layout; the tutorial on checking margins product by product shows how to get the item costs in cleanly.

  1. Item costs. The landed costs above, summed: $36.70.
  2. Payment fee. Shopify's Basic plan lists 2.9% + 30 cents as its standard online card rate, so the fee is 2.9% of the bundle price plus a flat 30 cents. Premium cards cost more on the same plan (3.5% + 30 cents) and the higher plans charge less, so check your own plan and the mix of cards your customers use. Because the fee is a percentage of the discounted price, it shrinks a little as the discount grows.
  3. Packaging. One carton, filler and a printed leaflet: $1.80 in this example.
  4. Outbound shipping you pay. The kit weighs about 6 kg and the carrier charges the shop $9.20. If the shop offers free shipping above a threshold, that $9.20 is a cost, not a pass-through.
  5. Pick and pack time. Leave this at zero if the same person is paid anyway and the time is the same as for single orders; add a figure if the kit takes noticeably longer to assemble.
  6. Returns allowance. A flat per cent of price for breakages and returns. This example uses none to keep the arithmetic readable, but a real sheet should carry one.

The "profit after everything" column is the bundle price minus all of those. The "margin" column is that profit divided by the bundle price. Then add a third column the owners forget: profit compared with the same customer buying all six items at full price.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

A discount ladder with the arithmetic shown

Here is the ladder for the kit, with the fixed costs the same in every row ($36.70 items, $1.80 packaging, $9.20 shipping, so $47.70 before the card fee).

DiscountBundle priceCard feeProfitMargin
0% (sum of singles)$77.50$2.55$27.2535.2%
10%$69.75$2.32$19.7328.3%
15%$65.88$2.21$15.9724.2%
20%$62.00$2.10$12.2019.7%

The pattern is worth noticing. Each step of 5 percentage points costs roughly $3.76 of profit per order, because the discount comes straight out of profit while the costs barely move. Going from 10 to 20 per cent does not trim the profit by a tenth; it cuts it by 38 per cent ($19.73 down to $12.20).

Solving for the maximum discount

Suppose the shop's rule is "no bundle below a 25 per cent margin after fees and shipping". The sum is a single line. Let P be the bundle price. P minus the card fee (0.029P + $0.30) minus the $47.70 of costs must be at least 0.25P.

P - 0.029P - 0.30 - 47.70 >= 0.25P
P x (1 - 0.029 - 0.25) >= 48.00
P x 0.721 >= 48.00
P >= 66.57

So the lowest allowed price is $66.57, a discount of 14.1 per cent off $77.50. The shop settles on a clean 14 per cent off, $66.65, which keeps a 25.1 per cent margin. Round up to a price, never down: "$66 for the full kit" looks almost the same on the page but slips to 24.4 per cent, under the rule, while $67 (a fixed saving of $10.50, which some customers read more easily than a percentage) lands at 25.5 per cent.

How many bundle buyers must be new?

This is the part most bundle advice leaves out. A bundle does two things at once. Some buyers would have purchased all six items anyway and now pay less: you lose money on them. Others would have bought two items, or none, and the bundle pulled them in: you gain on them. The discount is only worth it if the gain outweighs the loss.

At the 10 per cent level the profit per bundle order is $19.73 and the profit lost on each customer who would have bought all six anyway is $27.25 minus $19.73, which is $7.52. The break-even share of genuinely new bundle orders is then 7.52 divided by (19.73 + 7.52), or 27.6 per cent. Run the same sum for the others.

DiscountProfit lost per "would have bought anyway"Profit per bundle orderShare of bundle orders that must be new
10%$7.52$19.7327.6%
15%$11.28$15.9741.4%
20%$15.05$12.2055.2%

A kit of equipment bought as a starter set is a decent candidate for a new-buyer share above 40 per cent, because people who are new to brewing do not usually buy six separate items. A set of consumables that regulars reorder is the opposite: nearly all bundle buyers would have bought the lot anyway, and a 20 per cent discount is just a price cut. That is the single most useful thing to ask of any bundle idea.

Asking AI to do the sheet, and checking its sums

An assistant such as ChatGPT, Claude or Gemini is good at laying out the table and doing the repetitive arithmetic across a ladder. It is poor at knowing your costs, so you supply them and you check its output. Paste your own table (item, price, landed cost) and give it the rules.

I sell home-brewing equipment online. Here are the six items in a proposed starter kit
(single price, landed cost):
Bucket 19.00 / 9.40; Airlock 3.50 / 1.10; Hydrometer 9.50 / 4.20;
Sanitiser 12.00 / 5.60; Yeast 4.50 / 1.60; Malt kit 29.00 / 14.80.
Other costs per order: packaging 1.80, shipping I pay 9.20.
Card fee: 2.9% of the price plus 0.30.

Build a table for discounts of 0, 5, 10, 15 and 20 per cent showing bundle price,
card fee, profit and margin. Then work out the lowest bundle price that gives a
25% margin after all of those costs, and the discount that price represents.
Show the formula for every column so I can check it in a spreadsheet.
List any assumption you made that I did not give you.

A realistic reply (illustrative) returns the same ladder as above, plus a line such as "Maximum discount at 25% margin: about 14.1%, bundle price $66.57". It will often add a note that it has assumed no returns allowance. What you would fix: ask it to round the price to the nearest sensible figure and re-run the margin at that price, and ask it to state whether shipping was treated as free to the customer. Then copy the formulas into your own sheet and confirm that three or four cells match. If two cells disagree by more than a few cents, find out why before you trust the rest.

Testing the bundle against singles with your own order data

You cannot know the new-buyer share in advance, so you measure it. The measurement needs two things from the order history: how often these items are already bought together, and, once the bundle is live, what happened to singles and to profit per order.

Export your orders as a CSV. In Shopify, the order export downloads up to 50 orders directly and emails the file for anything larger or for an export by date, so for a proper look at the past year expect an email. Strip customer names and addresses before you paste anything into an AI tool; you need only order number, date, line items, quantities and prices. For finding which items are already ordered together, the tutorial on finding bundle pairs in your orders has the prompts.

Here are the line items from 1,200 anonymised orders placed in the last 12 months
(order id, date, product, quantity, price paid).
1. How many orders contained all six kit items, and how many contained four or five?
2. For orders that contained two or three of the six, which items were missing?
3. How many first-time buyers' orders (I have added a column new_customer = yes/no) included the bucket?
Give counts and percentages, and say which counts are small enough to be unreliable.

Say it answers that 31 orders held all six items (2.6 per cent of orders), and 142 held four or five. You now know the "would have bought anyway" group is small, around 31 orders a year, so the discount's cannibalisation cost is modest, and the people holding four or five items are the real prize: the bundle might tip them into buying the other one or two. That reading is illustrative; yours will be different, which is why you check.

Running the test and reading it

Keep it simple. Launch the bundle on its own page and in the navigation, change nothing else about pricing, and watch for four to six weeks or until you have a few dozen bundle orders, whichever is longer. Shopify's free Bundles app lists fixed bundles and multipacks; it is a sensible first step because it keeps stock levels for the components in step. Check the app's listing for what it supports before you commit, since mix-and-match is not described on it.

At the end compare these numbers against the same weeks a year earlier, or the weeks before launch if the season is flat:

  • Profit per order across the whole shop, not only bundle orders.
  • Orders per hundred visitors for the product pages involved.
  • Singles of the six items sold, to see whether the bundle ate them.
  • Share of bundle buyers who were first-time customers.

If profit per order rose or held while orders per visitor climbed, keep it. If the singles fell by roughly the number of bundles sold and first-time buyers did not rise, you have run an expensive price cut and should raise the bundle price towards the break-even you calculated.

Other bundles, other answers

A kitchen fitter's fit-ready pack

A kitchen fitter sells a pack of 20 soft-close hinges, 20 handles and a bag of plinth clips to trade customers. Landed cost totals $64 and the pack sells for $118 as singles. Here the bulk of the cost is the hinges and shipping is cheap because it goes in the van, so the fee and packaging are the only extras. A 12 per cent discount ($103.84) still leaves roughly a 35 per cent margin after a 2.9 per cent card fee. The real question is whether trade buyers already buy those items together; if so, the discount is a thank-you rather than a lever.

A childcare nursery's uniform bundle

A nursery that sells its own uniform to parents might bundle two T-shirts, a hoodie and a book bag at $54 against $62 as singles. The cost is $27, but stock is bought in advance by size. The risk is not the discount; it is that parents who need only the hoodie and bag in July cannot buy the bundle and the unsold stock sits. The fix is a bundle by age band, tested on one band first.

A care agency's starter packs

A care agency selling mobility aids to families, such as a bed rail, a grab rail and a non-slip mat, faces a different issue: purchases are rarely planned together. Bundle only if enquiry logs show people ask for the three at once. Otherwise "complete the set" prompts at the basket are better than a pre-built bundle.

Cost side: lowering it before you discount

A better margin often comes more cheaply from the cost column than from a smaller discount. Before launch, ask the two or three suppliers behind the biggest costs whether a bundle's volume earns a better price. A kit that sells 40 a month commits you to 40 buckets and 40 malt kits a month, and that is worth saying out loud in a negotiation. If you hold quotes from more than one supplier, comparing them side by side shows whether the landed cost, not just the unit price, falls.

Take the malt extract kit at $14.80. If a second supplier quotes $13.90 landed at a higher minimum order, the kit's profit rises by $0.90 and the margin floor moves from a 14.1 per cent maximum discount to about 15.7 per cent. A 90 cent improvement in one cost buys about one and a half percentage points of discount room, which is why the cost column deserves an hour before the price does. Rerun the formula after each change, because the answer shifts every time any cell does.

The same logic applies to shipping. Many carriers price by size as well as weight, so the carton matters as much as the contents. Packing the airlock, hydrometer, yeast and sanitiser inside the fermenting bucket, rather than around it, can drop the kit into a smaller carton. If that carton costs, say, $1.50 less to send, that is another $1.50 of profit on every order, more than the malt-kit saving above. Ask for a rate card and test a real packed parcel; do not rely on a guess made when the products were first listed.

Four launch failures that turn a bundle into a loss

These are the four failures I would check before launch; most show up in a test order or a rate quote, not in a plan.

  • The stacked code. The kit above carries 14 per cent off. A customer arrives from an email with a 10 per cent welcome code and the checkout applies it as well. The combined price is about $59.99, which leaves $10.25 of profit and a 17.1 per cent margin, well under the 25 per cent floor. Exclude bundles from site-wide codes, then place a test order with a code to confirm it.
  • The heavy item hiding in the box. Adding one 3 kg item can jump a parcel into a higher carrier band. Re-quote the shipping for the full weight; the $9.20 in this example would be wrong if the bucket and the extract kit were swapped for heavier versions.
  • Stock that sells out in pieces. If the hydrometer is the constrained item, the bundle shows as available while the singles page says sold out, or the reverse. Check that the bundle draws down component stock.
  • A moved supplier price. The sheet is true on the day you build it. When any supplier cost changes by more than 3 to 4 per cent, rerun the maximum discount. Put a reminder in the sheet itself, next to the date of the costs.

A short rule set you can keep next to the sheet

When a new bundle is proposed, ask the same questions in the same order.

  1. What is the margin floor, and what is the highest discount that respects it?
  2. What share of likely bundle buyers would have bought all of it anyway?
  3. Is the saving shown as a clear dollar figure against the sum of the singles?
  4. Can any site-wide code stack on it?
  5. When will it be reviewed, and with which four measures?

The answer to the first question comes from the sheet. The answer to the second comes from your orders. The rest are checkout checks that take about ten minutes. If you want help building the sheet around your own range, my AI implementation consultation covers exactly that kind of job: get in touch to talk it through.

Once the first bundle is working, price the next from the same sheet instead of starting again. Copy the tab, replace the items, and the costs, fees and floor reappear. The mistakes tend to come from rebuilding the arithmetic every time. They rarely come from the idea itself.

Bundle discount questions owners ask

Should a bundle discount be a percentage or a fixed amount?

Work in a fixed amount off the total, then show the percentage. A percentage discount grows with the basket and quietly eats margin when buyers add expensive items, whereas a fixed saving keeps the maths stable. Whichever you show, calculate it from the margin floor first, not from what looks attractive on the page.

Can I use a discount code on top of a bundle?

Only if you have checked the stacked price against the margin floor. Most stores should exclude bundles from site-wide codes. A bundle already carrying 15 per cent off plus a 10 per cent welcome code has a combined discount of about 23.5 per cent, which can turn a healthy bundle into a loss on the first order.

How long should I run a bundle test before judging it?

Run it for at least two full buying cycles of your usual customer, and until you have a few dozen bundle orders. A quiet fortnight proves nothing. Compare profit per order and orders per visitor, not revenue alone, and note any email or advertising push that ran during the test.

Does AI need my cost data to price a bundle?

Yes. AI cannot guess your landed cost, card fees or packing time. Give it your own figures in a table and ask it to do the arithmetic and flag assumptions. Then recalculate its answer in the spreadsheet yourself before any price goes live.

Further reads

Sources: Shopify pricing page (online card rate), Shopify Bundles app listing, Shopify help centre order export page.

Want your bundle prices checked against real margins?

On a 1:1 call we can look at your cost, fee and shipping figures, build the margin sheet around your own products, and decide which bundle is worth testing first.

Book a 1:1 call with me