Heavy And Bulky Goods: When Shipping Eats The Gross-Contribution Gap

Bulky SKUs can post 55% gross margin and still hit 30% contribution once freight-out lands. Here's the mechanism, the benchmarks by category, and the operator playbook to close the gap.
Quick answer
For furniture, mattresses, and bulk supplements, freight-out typically eats 15-25 margin points between gross and contribution margin. A sofa brand posting 55% gross margin often lands at 30-35% contribution after outbound freight, packaging, and reverse-logistics reserves. Your calculator default has to include freight-out — otherwise every pricing and promo decision runs on a number that doesn't exist.
Heavy and bulky goods contribution gap
The 15-25 margin-point gap between gross and contribution margin on furniture, mattress, and bulk-supplement SKUs, driven by outbound freight, dim-weight, and returns.
The heavy-and-bulky contribution gap is the structural distance between the gross margin a bulky-goods brand reports on its P&L and the true per-order contribution margin after freight-out, dim-weight surcharges, packaging, and reverse-logistics reserves are subtracted. On parcel-shipped SKUs above ~15 kg or with high volumetric weight, the gap is routinely 15-25 points and can exceed 30 on zone-4+ deliveries.
The scenario matters because most Shopify and Magento back-ends surface gross margin by default. Operators who set free-shipping thresholds, promo discounts, or ROAS targets against that number are unknowingly pricing below contribution on a meaningful share of orders.
This page is for operators at furniture, mattress, large-format home-goods, and bulk-supplement brands doing €1M-€15M. If your average parcel weighs more than 8 kg or ships in a box longer than 100 cm on any side, the numbers below apply to you.
The fix is not "charge for shipping." The fix is putting freight-out inside the calculator that every downstream decision reads from — pricing, discount ceilings, paid-media caps, subscription cadence. Everything else is downstream of that one change.
Why the gap opens (mechanism)
Gross margin subtracts COGS from revenue. On a €499 bookshelf that costs €220 to make, that's a clean 56%. It's also a number that has nothing to do with whether the order made you money.
Contribution margin subtracts everything variable — including outbound freight, dim-weight surcharges, residential-delivery fees, and the reserve you should be booking against returns. On that same bookshelf, freight-out to a zone-5 residential address with a liftgate can run €85-€120. Suddenly the 56% is 32%, and that's before your 8% return rate takes another 4 points off. See the sibling explainer on why freight-out sits below the line for the accounting nuance.
The dim-weight trap
UPS and FedFx bill parcels on whichever is greater: actual weight or volumetric weight (L×W×H / dim-divisor). A 6 kg pillow-top mattress topper in a 120×70×25 cm box bills as a 35 kg parcel. Furniture brands routinely lose 18 margin points to volumetric rules they never priced in.
Where the money actually goes
Break the gap into four buckets. First, base parcel or LTL rate — the biggest line, scaling with weight, zone, and dimensions. Second, accessorial fees: residential delivery, liftgate, inside delivery, oversized surcharge. These stack fast on furniture.
Third, packaging — a mattress-in-a-box needs €12-€18 of compression bag, corner protectors, and double-wall carton. Fourth, returns reserve: bulky returns are almost always contribution-negative even when the unit is restocked, because you pay outbound freight, return freight, inspection labor, and repackaging on one sale.
Add all four and a bulky order carries €40-€180 of variable cost beyond COGS. On a €250 AOV that's the whole ballgame.
Benchmarks: freight-out as % of AOV by category
Typical freight-out % of AOV and resulting gross-to-contribution gap, by bulky category
| Category | Avg parcel weight | Freight-out % of AOV | Gross margin | Contribution margin | Gap (points) |
|---|---|---|---|---|---|
| Upholstered furniture (sofas, chairs) | 35-90 kg | 18-28% | 52-58% | 28-34% | 20-25 |
| Mattress-in-a-box (queen) | 30-45 kg | 12-18% | 55-62% | 35-42% | 18-22 |
| Flat-pack furniture (shelves, desks) | 15-40 kg | 14-22% | 48-55% | 28-35% | 18-22 |
| Home fitness (bikes, benches) | 25-70 kg | 16-24% | 45-52% | 24-30% | 20-22 |
| Bulk supplements (5-15 lb tubs) | 3-8 kg | 8-14% | 62-70% | 48-56% | 12-16 |
| Large kitchen appliances | 12-25 kg | 10-16% | 38-45% | 24-30% | 13-16 |
The pattern: heavier and more volumetric categories carry bigger gaps, but every bulky segment sits at least 12 points below its gross number. For deeper category cuts, see the freight-out-percentage-of-AOV benchmarks page.
Operator playbook: closing the gap
Move one: reset the free-shipping threshold against contribution, not revenue. Raising AOV from €150 to €220 by pushing a threshold sounds like a win — but if the second SKU is another 20 kg item, the threshold trap actively destroys contribution because freight scales faster than basket. Model the threshold at the SKU-mix level, not the order level.
Move two: pick the right mode. Above roughly 68 kg per shipment or 3+ boxes, LTL beats parcel — the LTL-vs-parcel break-even math for mattress brands is a canonical example. Move three, for brands past €5M: zone-skipping into regional 3PLs collapses zone-4/5 rates by injecting freight directly into destination zones. Move four, for consumables: use subscription cadence to amortize freight across reorders rather than paying it every single delivery.
Experiments that actually move contribution
Test 1: dynamic free-shipping threshold by SKU category — €99 threshold on supplements, €399 on furniture. Measure contribution per session, not conversion rate. Test 2: paid-shipping tier at cost + 10% surfaced as "white-glove delivery" — a surprising share of furniture buyers self-select into it, converting freight from a cost line to a modest revenue line.
Test 3: PDP-level dim-weight optimization — smaller shipping cartons for flat-pack SKUs where volumetric weight dominates. A 10 cm reduction on the longest dimension can drop the billable weight two tiers. Test 4: return-fee opt-in for one bulky category to gauge elasticity before rolling it out. Prioritize any test that lets you re-price freight-out into the customer-visible flow without tanking conversion.
Bulky-goods contribution margin: frequently asked
Accounting rules give you latitude — many bulky brands park freight-out in SG&A, which inflates gross margin. For decision-making it must be inside contribution margin. Otherwise your Shopify gross-margin number is misleading you on every pricing choice.
25-35% is normal, 35-40% is strong, above 40% usually means you're on flat-pack, have negotiated zone-skipping, or run a paid-shipping model. Below 20% is a warning zone — one bad quarter of return spikes turns you contribution-negative.
Take a sample of 50 recent shipments. Divide L×W×H (cm) by 5000 for domestic UPS/FedEx dim-divisors. If the volumetric weight exceeds actual weight on more than 30% of parcels, you're paying dim-weight rates on most of your book — see the dim-weight furniture playbook for the fix.
No. On bulky goods, higher AOV often means heavier baskets, which means freight scales with basket size and can wipe out the incremental margin. The free-shipping threshold trap is a real pattern — model contribution per order, not revenue per order, before you move the threshold.
Rule of thumb: above 68 kg per shipment, or 3+ oversized boxes to one address, or any inside-delivery requirement. Below that, parcel wins on speed and cost. The mattress-in-a-box break-even page walks through the exact crossover math.
Almost always yes. Outbound freight + return freight + inspection + repackaging typically runs €60-€180 on a bulky return. Even a fully restockable unit sold once at full price rarely covers that on the next sale, especially after the second-round freight-out. The reverse-logistics write-off page has the math.
You palletize orders to a destination-zone 3PL via LTL, then inject them into local parcel or last-mile networks. That converts a zone-5 rate (€35+ per parcel) into a zone-2 rate (~€12) plus a fractional LTL cost. Works cleanly above ~500 orders/week per destination region.
Yes — a 12 lb creatine tub or 15 lb protein bucket ships at 5-8 kg actual weight and carries 8-14% of AOV in freight. It's less severe than furniture but enough that subscription cadence and freight-amortized bundles are the standard fix.
Contribution margin per order, with freight-out, dim-weight surcharges, packaging, and a returns reserve baked in as defaults. Gross margin is a reporting metric; contribution is the operating metric. The gross-vs-contribution calculator-output page covers the wiring.
6-12 months is realistic if you sequence: freight audit → carton redesign → threshold reset → LTL rate re-bid → zone-skipping (if you have the volume). Expect 8-12 points recovered in the first two quarters, with the remainder from mode-shift and 3PL restructuring.
See Metricuno on your data
Bring your stack — Google Analytics, Stripe, a CRM, anything — and we'll walk through the metric tree that turns your funnel into one number.