If you sell wholesale, your margin is not usually lost on price. It is lost on shipping, on the orders you already won, quietly, one consignment at a time. And the reason is a piece of arithmetic that most price lists do not contain a column for.
The number that starts the argument
A pack of bubble wrap, 125 cm wide, is light and enormous. On the scale it is 4.2 kg. Its box is 125 x 30 x 30 cm.
At a Jabodetabek rate of Rp 9.000 per kg, that single shipment costs Rp 846.000 instead of the Rp 189.000 a weight-based estimate would have predicted. The gap is Rp 657.000. On one order.
Fifty shipments a month like that is Rp 32.850.000. That is not a leak, and it is not something a discount negotiation with the courier fixes, because the courier is not overcharging you. It is charging correctly, for space.
What the courier is actually selling you
A truck runs out of room long before it runs out of weight capacity. So couriers bill on chargeable weight, which is the greater of the two numbers: what the parcel weighs, and what the parcel would weigh if it were of average density.
Volumetric weight is length x width x height in centimetres, divided by a fixed divisor. For Indonesian road freight that divisor is typically 6000. Then the result is rounded up to the next whole kilogram.
Only some of your SKUs are affected, and you cannot eyeball which
This is where the intuition usually fails. It is tempting to conclude that everything is billed on volume, or that a rule of thumb like “bulky things cost more” is enough. Here is the same catalogue, eight real SKUs, run through both calculations:
Red = billed on volume. Kilograms.
Volume wins on 2 of the 8. And the two are nothing alike. Bubble wrap is billed at 4.5x its real weight, which is a catastrophe. The 30 x 40 plastic seal is billed at 1.07x, which is a rounding error you would never notice and should not care about.
That spread is the actual lesson. There is no rule of thumb that separates them. Two products that both feel light and boxy sit on opposite ends of the outcome, and the only way to know which is which is to hold the dimensions and do the division. Which means the dimensions have to exist as data, per SKU, and in most wholesale businesses they simply do not.
The part that surprises people: it is per consignment, not per product
Here is the thing that quietly invalidates the fix most people reach for first, which is adding a shipping-cost column to the price list.
The comparison between actual and volumetric weight happens once, on the whole consignment. Not per line, not per product. So dense goods in the same box absorb the empty space that bulky goods bring with them. Watch one pack of bubble wrap as boxes of flat-packed kardus are added next to it:
1 bubble wrap + 0 kardus
Actual4.2 kg
Volumetric18.8 kg
billed on volume19 kg
1 bubble wrap + 2 kardus
Actual26.2 kg
Volumetric34.4 kg
billed on volume35 kg
1 bubble wrap + 4 kardus
Actual48.2 kg
Volumetric50 kg
billed on volume50 kg
1 bubble wrap + 5 kardus
Actual59.2 kg
Volumetric57.8 kg
billed on weight60 kg
1 bubble wrap + 6 kardus
Actual70.2 kg
Volumetric65.6 kg
billed on weight71 kg
Somewhere between the fourth and the fifth box of kardus, the entire consignment flips from being billed on volume to being billed on weight. Nothing about the bubble wrap changed. What changed is what it was travelling with.
So the honest conclusion is uncomfortable for a price list: shipping cost is not a property of a product. It is a property of a basket. A per-SKU shipping figure is not merely imprecise, it is answering a question that has no per-SKU answer. Which is why the fix is not a better spreadsheet column. It has to be computed at the moment the cart is assembled, because that is the first moment the answer exists.
What to actually do
Concretely, and in the order that pays off fastest:
- Store three more numbers per SKU. Length, width, height of the shipping unit. This is the missing data, and it is a morning with a tape measure, not a project.
- Compute chargeable weight on the cart, not the line. Sum actual, sum volumetric, take the larger, round up once at the end. Rounding each line separately overcharges your own customer.
- Show the buyer which side won.“Billed on volume” on the checkout page turns a surprise into an explanation, and it is the cheapest trust-building sentence in B2B.
- Then use it to sell. Once the number is live you can tell a customer that adding two more boxes costs almost nothing in freight, because the empty space is already paid for. That is a genuine reason to raise order size, and it is true rather than a promotion.
What I built
I built a wholesale storefront where this is not a slide, it runs. It has quantity-tiered pricing, a minimum order that genuinely blocks checkout rather than warning about it, and volumetric shipping computed across the whole cart per destination zone, plus an admin panel with the chargeable-weight basis shown per order.
Every figure in this article comes out of that codebase rather than being typed in beside it, so if the catalogue changes the article stops agreeing with itself and I have to fix it. The 94 kg above is the number the demo will quote you if you put 5 packs of bubble wrap in the basket.
It is a demo I built and own, with a fictional supplier and fictional stock. It is not a client project and it does not take real orders. I would rather say that here than have it come up later.