Attributing Bundle Margin Back To Component SKUs

When a hero SKU only sells inside a bundle, its standalone contribution margin lies. Here's how to allocate bundle margin back to components so subsidised underperformers stop hiding.
Quick answer
Allocate bundle contribution margin to component SKUs using either proportional allocation (by standalone price) or Shapley allocation (by marginal contribution to the basket). Never report a bundle-only SKU's standalone CM without also reporting its bundle-weighted CM — the gap is the subsidy you're hiding.
Attributing bundle margin back to component SKUs
The allocation method that splits a bundle's total contribution margin across its component SKUs so each item carries a fair share of the discount.
Bundle margin attribution is the accounting step that takes the total contribution margin generated by a bundle sale and distributes it back to the individual SKUs inside that bundle. Without it, merchandising sees each component's standalone CM (which never actually happened at that price) and misses the subsidy the bundle discount imposed.
The two mainstream methods are proportional allocation (split by standalone list price) and Shapley allocation (split by marginal contribution to attach rate). The output is a bundle-weighted CM per SKU that you can compare against the SKU's standalone CM to see which items are carried by the bundle and which items carry it.
Most Shopify bundle apps ship the bundle as a single line item or a parent-child SKU with a flat discount applied at parent level. Your P&L sees revenue and COGS at bundle level, and the component SKUs inherit a per-unit price that's mathematically arbitrary.
Why bundle accounting hides underperformers
Take a skincare brand selling a €90 "morning routine" bundle: cleanser (€25 list), serum (€45 list), moisturiser (€35 list). List sum is €105; the bundle discount is €15, or 14.3%.
If the serum only sells inside the bundle — attach rate 4% standalone, 92% in-bundle — its standalone CM report looks healthy because the handful of standalone units clear €45. But 92% of its volume ships at a discounted, allocated price that's often below its landed COGS plus fulfilment. Merchandising keeps the serum in the catalogue because "the CM is fine." The CM is not fine.
The tell
If a SKU's standalone unit velocity is under 10% of its total unit velocity, its standalone CM is statistically meaningless as a profitability signal. You need the bundle-weighted CM to make any real decision about that SKU.
How to detect the problem in your data
Pull unit velocity by SKU, split into standalone units and in-bundle units. Any SKU where in-bundle share exceeds 60% is a candidate for allocation review. Any SKU above 85% is bundle-dependent and should not be evaluated on standalone CM at all — see diagnosing a hero SKU that only sells inside the bundle for the full checklist.
The second signal is a divergence between reported gross margin and cash margin at the bundle level. If your Shopify bundle app is silently reallocating the discount to whichever line item it processes last, your per-SKU margin numbers are noise. This is covered in why Shopify bundle apps hide component-level margin.
The two allocation methods that actually work
Proportional allocation splits the bundle discount across components in proportion to standalone list price. In the skincare example, the serum absorbs €45/€105 = 42.9% of the €15 discount (€6.43), so its allocated bundle price is €38.57. Simple, defensible, and works for bundles where components have comparable standalone demand.
Shapley allocation splits margin by each SKU's marginal contribution to the bundle's attach rate — effectively, how much less the bundle would sell without that component. It's the honest method when one SKU is the anchor and others are fillers, and it's the one to reach for when proportional allocation obviously overstates a filler's contribution. Full method comparison in Shapley vs proportional allocation for bundle SKU margin.
Before you allocate, classify
Run anchor SKU vs filler SKU classification first. Proportional allocation on a bundle where one SKU drives 80% of demand will systematically over-credit the fillers. Shapley on a bundle of three comparable SKUs is overkill and adds noise. Method should follow role.
What to do once allocation reveals a subsidised SKU
Three moves, in order of reversibility. First, reprice the bundle — if the serum's allocated CM is negative, raise the bundle price by 5-8% and see whether attach rate holds; often it does. Second, swap the underperforming component for a lower-COGS alternative that preserves the bundle narrative. Third, kill the SKU — covered in deciding to kill a bundle-only SKU after allocation reveals subsidy.
Report both numbers to merchandising every month: standalone CM and bundle-weighted CM, side by side. The gap between them is the conversation. See bundle-weighted CM vs standalone CM: which to report to merchandising for the reporting template. Don't forget to split shipping and payment fees across components too — those swing per-SKU CM by 3-8 points on low-AOV bundles.
Frequently asked questions
Proportional allocation splits the bundle discount by standalone list price ratio — simple and works when components have similar demand. Shapley allocation splits by each SKU's marginal contribution to the bundle's attach rate — more accurate when one SKU is the clear anchor. Use proportional as the default, Shapley when roles are asymmetric.
Most Shopify bundle apps store the bundle as a single line item with a parent SKU. You'll need to export order-level data and reconstruct component units downstream — either in a warehouse or a spreadsheet — then apply your allocation method. The app itself won't do this; it's an analytics layer, not a reporting one.
Above 60% in-bundle share, standalone CM becomes unreliable as a decision signal. Above 85%, it's meaningless — the standalone units are statistical noise. Report bundle-weighted CM as the primary metric for these SKUs and treat standalone CM as diagnostic only.
Yes. Once you know each component's allocated CM, you can size the discount so no component slips below its variable cost floor. A flat 20% off often destroys the CM on your lowest-margin component while barely denting the anchor — allocation exposes that asymmetry.
Two options: by weight/volume ratio (fair for shipping) or by allocated revenue ratio (fair for payment fees). Payment fees are the smaller effect but on a €40 bundle they can move per-SKU CM by 2-3 percentage points, so don't skip them.
No — that hides the same problem in a different place. Average COGS smooths over the fact that one SKU has 60% margin and another has 15%. You'll ship the low-margin one at a subsidy forever without knowing.
Monthly for active bundles, and immediately after any COGS change, price change, or shipping-carrier renegotiation. Attach rates drift too, so a bundle that was 70/30 anchor-to-filler last quarter may be 55/45 this quarter — which changes Shapley outputs materially.
That's the exact scenario allocation is designed to reveal. The SKU is being carried by the bundle. Options: raise the bundle price, reduce the component's COGS, swap the component, or kill the SKU. Don't leave it running on the strength of standalone numbers.
Bundle attribution is a sub-discipline of SKU-level profitability — it's how you make component-level CM honest when most volume flows through bundles. Without it, your SKU profitability report is fiction for any SKU with meaningful in-bundle share.
Yes, and this is often broken in practice. Finance closes on bundle-level margin (correct for the P&L), merchandising decides on standalone CM (wrong for the catalogue). Both teams need the bundle-weighted CM view — it's the only number that supports SKU-level decisions on a bundle-heavy assortment.
Get an AI expert review of your site
Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.