Shipping charges for mixed carts: why summing item weights overcharges your customers

Adding up product weights at checkout overcharges mixed carts. Set one shipping weight per order from the box you pack, then test it on 20 real orders.

A customer adds three mugs and a candle to the cart. Your store adds up four shipping weights, as if four parcels were leaving your warehouse.

The courier picks up one carton.

Here is the short answer. A courier bills each parcel once, on the packed carton. So your checkout should charge one shipping weight per order, worked out from the box that order will actually go in. Adding up item weights usually charges a mixed cart for several boxes, several lots of padding and several roundings that the courier never bills you for.

I make packaging, not checkout software. We make tapes, films, mailers and paper cushioning in Jaipur, and our own ecommerce company, JPPL Innovation, sells packaging online. Our customers pack their orders with what we make, and the courier bills them on the carton they close. So I see this question from both sides of the carton.

Below, we look at why the sum goes wrong, what Shopify and WooCommerce actually add up, the opposite risk, a simple box rule and a 20-order test. It ends with a calculation you can repeat with your own figures.

Why does adding up item weights overcharge a mixed cart?

Let us start with the courier. It does not see your cart. It sees one carton on its scale and under its measuring tape. It bills the higher of the actual weight and the volumetric weight, rounded up to its slab. Our guide on volumetric weight explains that formula, so I will not repeat it here.

Many stores set a shipping weight on each product by imagining that product going out alone. That number is fine for a single-item order. In a mixed cart, it goes wrong in three ways.

  1. Each product's weight carries its own carton, fill and tape. In a three-item cart, the store counts three cartons. Only one carton travels.
  2. If you entered the volumetric weight of each product's own box, each figure carries its own air and padding. Put three items in one carton and they share the padding, so the combined box is much smaller than three boxes added together.
  3. If each item is rounded up to a slab before it is added, your customer pays for the rounding three times. The courier rounds once.

Think of a family of four going to the railway station. They take one auto-rickshaw and pay one fare.

Nobody asks them for four fares, yet that is what a summed cart asks of your customer.

The gap also grows with every item you add. So your most valuable customers, the ones who buy the most from you, see the worst shipping fee at checkout. Those are exactly the carts I would least like to see abandoned.

What do Shopify and WooCommerce add up at checkout?

I read both platforms' own help pages on 22 October 2026. Here is what they say, in plain words.

Shopify

The Shopify Help Center page on packages says the store default package is used to work out the checkout rate for weight-based and carrier-calculated rates. The weight of that package is added to the weight of the products. Shopify's own example shows 4.9 kg of products plus a 0.1825 kg package crossing into a higher rate tier that starts at 5 kg.

The same page says a package assigned to a single product variant is used only in one case: "This override works only for single item orders." Shopify's page on shipping rates adds that weight-based rates go by the combined weight of the items shipping from the same location with the same shipping option.

Two things follow from that.

  1. If your product weights already include a carton, Shopify counts a carton for every item and then adds the default package on top.
  2. A weight-based rate looks at weight only. A light, bulky cart looks light to it.

Shopify does have a box option. If you give products a packed product size and use carrier-calculated rates, the packages page says Shopify packs the items "into the smallest of your saved boxes that fits them". It falls back to the default package when a product has no packed size, when no saved box fits, or when the order has many items. It also works only with box-type packages.

WooCommerce

Core WooCommerce's flat rate, as its Flat Rate Shipping documentation describes it, prices by item count, by a percentage of the cart value or by shipping class. It does not price by weight. Weight rules come from extensions, such as WooCommerce's own Table Rate Shipping.

The Table Rate Shipping documentation describes its weight condition as "the weight of the items". In per order mode it calculates shipping for the entire cart. In per item mode it checks each item against the rate table, which prices every item like a parcel of its own. I found nothing on that page about adding the weight of the box, so you have to put it in yourself.

WooCommerce's guide to box packing calculations explains that some premium shipping extensions include a box packer. It tries to fit the order into the fewest boxes, respects the maximum weight of each box, and needs the packaged size and weight of every product.

Setting What it adds up What it misses
Shopify, weight-based rate Product weights plus one default package Size, and the bigger box a bigger cart needs
Shopify, carrier-calculated rate with packed product sizes Items packed into your smallest saved box that fits Falls back to the default package in the cases above
WooCommerce Table Rate, per order The weight of the items in the cart The box, unless you add it
WooCommerce Table Rate, per item Each item priced on its own That the items share one box
WooCommerce box-packing extension The boxes the packer chooses Packing tricks it cannot know, such as nesting one item inside another

If you price checkout through a shipping app or an aggregator, we suggest asking them three questions. Which weights do you add up? Do you add the box? Do you look at size at all?

When does the sum undercharge instead?

Fixing the overcharge can push us into the opposite mistake. Suppose we follow the platform logic correctly, with product weights that leave out the packaging and a small default package. Now three things can make the checkout charge less than the courier bills.

  1. A light, bulky product. A cane basket weighs little, but it needs a big carton, and the big carton's volumetric weight is what the courier bills. A weight-only rate never sees it.
  2. A big cart in a big carton, while the default package is your smallest carton. The extra tare and the extra volume both go missing.
  3. Items that cannot share a box. A glass jar should not travel loose next to a heavy item, and some products are simply too long for your cartons. Two parcels each pay their own first slab.

Undercharging feels generous to the customer. But you pay the difference on every such order, and it hides inside the courier invoice where nobody looks for it.

How do you set one shipping weight per order?

This is the method I would use. We need a scale, a measuring tape and the last three months of orders.

Step 1: Choose a few standard cartons

List the carts you shipped most often in the last three months. Then choose the fewest carton sizes that hold most of them well. I would start with three, and add a fourth only when the test below shows a group of carts landing badly. Every additional size costs you storage space and picking errors, a point our packaging specification review covers.

Step 2: Write down four numbers for each carton

  1. Outside dimensions: length, breadth and height in cm.
  2. Its volumetric weight at your courier's divisor.
  3. Its tare, i.e. the empty carton with its usual fill and tape. Weigh five and take the heaviest.
  4. What it holds, found by actually packing it.

Step 3: Work out the shipping weight of an order

Shipping weight is the larger of two numbers: the carton's volumetric weight, or the products' own weight plus the tare. Round it up to the courier's slab.

This gives us one useful shortcut. For a given carton, the volumetric weight never changes. So for light products, every order in the medium carton carries the same shipping weight, whatever mix of items is inside.

For light products, the box sets the price.

Step 4: Write the rule for which box a cart uses

Keep the rule short enough that a packer and a spreadsheet follow it the same way. We can write it in two ways.

  1. A count rule, for a small catalogue of similar items. For example, 1 small item goes in carton S, 2 to 4 go in M, and any cart with a bulky item, such as the cane basket, goes in L.
  2. A volume rule, for a larger catalogue. Add up the packed volume of the items and divide by a fill factor. Then pick the smallest carton with that much inside volume and an inside length longer than the longest item.

Measure the fill factor yourself from 20 real packs. It is the volume of the items divided by the inside volume of the carton they went in.

Then add one line for the items that never share a box, and price each of those parcels on its own.

Ask your most experienced packer to check the rule before you use it. The person who packs every day knows that a mug can travel inside a cane basket. No software knows that.

How do you put the rule into your store?

It depends on what your platform can see.

If it can choose a box, as Shopify's packed product sizes and the WooCommerce box packers do, enter your real cartons with outside size, tare and maximum weight. Enter each product's packed dimensions too.

Then run the test below anyway.

If it can only add up weights, we suggest four changes.

  1. Enter each product's own weight, not its weight when shipped alone.
  2. Count the carton once. In Shopify, set the default package to your most used carton. In Table Rate, build the tare into your weight bands.
  3. Draw the weight bands from your box rule. Find the range of product weights that lands in each carton, and charge that carton's shipping weight for the whole range.
  4. Treat bulky products separately. When a cart has mixed shipping classes, Table Rate's per order mode goes by "the shipping class with the highest priority", so a bulky class can set the rate for the whole cart. In Shopify weight-based rates, you can enter a bulky product's weight as its shipping weight when sent alone, minus the default package. Small items that ride along then add only their own weight.

One caution here. The weight at checkout is a pricing number. The weight on the shipping label must be the real packed weight and the real outside size. A parcel declared lighter than it is comes back later as a weight dispute, so check what your shipping app prints on the label.

How do you test the rule on 20 real orders?

A rule on paper means little until we hold it against a courier invoice. The test needs only your order list and your courier invoices.

  1. Pick 20 delivered orders from last month whose courier billing is final, after any weight reconciliation. Take 8 single-item orders, 8 mixed carts and your 4 biggest or bulkiest carts.
  2. For each order, note the weight your checkout charged on and the chargeable weight the courier billed.
  3. Work out the gap in slabs: (checkout weight − billed weight) ÷ slab. A plus means you overcharged the customer. A minus means you paid the difference yourself.
Order Items Carton used Checkout weight (kg) Billed weight (kg) Gap in slabs
1
2
... up to 20

My rule of thumb is simple. If 3 or more of the 20 miss by a slab or more in the same direction, for the same kind of cart, fix the rule for that kind of cart.

One odd miss is not worth a change. Aim for a checkout within one slab of the bill, not for a zero gap.

Repeat the test whenever you change a carton, add a product range or change courier.

We would also repeat it before a big sale season.

Honestly, no box rule is right for every cart. Some carts will land one slab off. I would accept that before I built a rule with forty lines that nobody in dispatch follows.

Your calculation

Let us run the whole method once. Every number below is an ILLUSTRATION chosen to show the arithmetic. None of them is a courier's term, a measured product or our data. Put your own figures in their place.

Assume a divisor of 5000 and a slab of 0.5 kg. The store sells three products: a mug (0.40 kg in its retail box), a candle jar (0.50 kg) and a cane basket (0.50 kg, but bulky).

Carton (illustrative) Outside size (cm) Volumetric weight Tare Holds
S 20 × 15 × 15 0.90 kg 0.15 kg 1 mug or candle
M 30 × 25 × 15 2.25 kg 0.25 kg 2 to 4 mugs or candles
L 35 × 35 × 30 7.35 kg 0.60 kg The basket, with up to 2 small items inside it

Now we compare three ways of pricing three carts.

  1. Method A adds up single-parcel weights. Each product carries its billed weight when shipped alone: mug 1.0 kg, candle 1.0 kg, basket 7.5 kg. The default package is set to zero.
  2. Method B adds up the products' own weights plus one default package (carton S, 0.15 kg), then rounds up to the slab.
  3. Method C is the box rule we built above.
Cart A: summed single parcels B: own weights + one package C: box rule Billed by courier
1 mug 1.0 kg 1.0 kg 1.0 kg 1.0 kg
3 mugs + 1 candle 4.0 kg 2.0 kg 2.5 kg 2.5 kg
Basket + 1 mug 8.5 kg 1.5 kg 7.5 kg 7.5 kg

In this illustration we let the courier measure the same carton, so its bill matches the box rule. In real life, that match is exactly what your 20-order test checks.

Let us look at the single mug first. All three methods agree. This is why the problem hides, because we all tend to test a checkout with one item in the cart.

Now the mixed carts tell us a different story. Method A charges the second cart 3 slabs too many and the third cart 2 too many. Method B charges the second cart 1 slab too few and the basket cart 12 slabs too few.

Now let us put a month on it. Assume 600 single-item orders, 300 carts like the second one and 100 like the third (all illustrative).

  1. Method A: 300 × 3 + 100 × 2 = 1,100 slabs a month charged to customers that the courier never billed.
  2. Method B: 300 × 1 + 100 × 12 = 1,500 slabs a month billed by the courier that customers never paid.
  3. Method C: no gap, in this illustration.

We leave the rupees out on purpose, because your rate card is not ours to guess.

Multiply those slabs by your own charge per slab to see the money.

To repeat it in a spreadsheet:

  1. Carton volumetric weight: = L × B × H ÷ divisor, one row per carton.
  2. Order shipping weight: = CEILING(MAX(carton volumetric weight, product weights + tare), slab)
  3. Gap in slabs: = (checkout weight − billed weight) ÷ slab
  4. Monthly gap: = SUM(gap in slabs × orders of that cart type), across your cart types.

Start with your 20 orders this week. Trust me, the mixed carts will tell you more than the single ones.

If you want a second look, send us your three most common carts through the contact page. We will suggest carton sizes and cushioning for them, and we will tell you if the boxes you already have do the job.

Questions buyers ask

Is a flat shipping fee simpler than all this?

It is simpler for the customer, and for many stores it is the right choice. I would still work out the billed weight of your typical carts first, because that number tells you what flat fee to set and what it costs you. The 20-order test in this guide gives you that number.

Does this matter if I offer free shipping?

Yes. The customer stops seeing the gap, but you still pay the courier for every slab. The box rule tells you what free shipping costs you on each type of cart, and that is the number you need before you set a free-shipping threshold.

What if a cart needs two cartons?

Price it as two parcels. Each carton has its own shipping weight and pays its own first slab, so add the two. Write down which items never share a box, so the checkout and the packer split the order the same way.

Want a second look at your packaging costs?

Send us your current packaging list and monthly order volume. We will show where the cost per order can come down, with the maths.

Ask for a cost review