How to calculate shipping cost per SKU
Split each label across the items inside.
To calculate shipping cost per SKU, split each label's price across the SKU lines in the parcel by units, weight, declared value or an equal share, then total each SKU over the month. GoatLabels shows an allocated figure on the Pro plan, and any per-SKU number is an estimate.
One label price to split across SKUs
A parcel has one label price, and that is the number every split starts from. GoatLabels shows one all-in number per rate before you buy.
A prepaid wallet, a dated line per label
Top up a prepaid wallet and each label debits its own dated ledger line. A carrier adjustment after shipping, such as a re-weigh, posts to the same wallet.
How do you split one label across the SKUs in a parcel?
Choose a rule that gives each SKU line a measure, then give each line its share of the label price in proportion to that measure. A carrier prices the whole parcel, so the label has one price and the SKUs have none, and any per-SKU figure comes from the rule you choose. Add up a SKU's shares over a month, divide by the units of that SKU shipped, and you have a shipping cost per unit.
This page covers the splitting step. The wider question of what an order costs once packaging, adjustments and time are included sits in what shipping really costs per order.
The formula, in four lines
- For each parcel, list the SKU lines with their quantity, weight and declared value.
- Choose one measure: units, weight, declared value or an equal share.
- Each line's share of the label = label price x (line measure / total of all line measures).
- For a month, add each SKU's shares, then divide by the units of that SKU shipped.
The shares always add back to the label price, so the SKU rows tie to your label spend. If they do not, a line is missing or a label is counted twice.
What are the four ways to split a label?
You can split by units, by weight, by declared value or equally across lines. Each one answers a slightly different question, and each one has a catalog it misreads.
| Method | How it divides the label | Fits when | Misleads when |
|---|---|---|---|
| By units | Label price x (units of this SKU / units in the parcel). Every unit carries the same share. | Items of similar size and weight, such as a shop that sells one kind of product in different colors. | A small light item packed with a heavy one takes the same share as the heavy one. |
| By weight | Label price x (weight of this SKU line / weight of all lines). Uses the weight you recorded for each product. | Catalogs where weight varies a lot and weight drives the carrier price, such as mixed heavy and light goods. | Needs a weight on every product. Bulky light items cost more to ship than their weight suggests. |
| By declared value | Label price x (value of this SKU line / value of all lines). Uses the price you declared on each line. | Items of similar size with very different prices, such as small jewelry or art prints. | An expensive light item soaks up cost it did not cause, and a cheap heavy one escapes it. |
| Equal split | Label price / number of SKU lines. Each line takes the same share, whatever the quantity. | A rough first pass when you have no weights or values, or when lines are close to identical. | A line of ten units takes the same share as a line of one. Avoid it for reporting. |
What does the split look like in a worked example?
Example, with invented numbers: one parcel with a label price of $12.40 holds four items on three SKU lines. Two mugs weigh 13 oz each, one candle weighs 19 oz, and one art print weighs 5 oz. The declared values are $18.00 for a mug, $24.00 for the candle and $30.00 for the print.
| SKU line | Units | Weight of the line | Declared value of the line |
|---|---|---|---|
| MUG-01 | 2 | 26 oz | $36.00 |
| CANDLE-02 | 1 | 19 oz | $24.00 |
| PRINT-03 | 1 | 5 oz | $30.00 |
| Parcel total | 4 | 50 oz | $90.00 |
Now split the $12.40 four ways. The same label gives a different answer for each SKU, and the art print swings the most.
| SKU line | By units | By weight | By declared value | Equal split |
|---|---|---|---|---|
| MUG-01 | $6.20 | $6.45 | $4.96 | $4.14 |
| CANDLE-02 | $3.10 | $4.71 | $3.31 | $4.13 |
| PRINT-03 | $3.10 | $1.24 | $4.13 | $4.13 |
| Total, equals the label | $12.40 | $12.40 | $12.40 | $12.40 |
Example only. Every number on this page is invented to show the arithmetic, and none is a GoatLabels price or a carrier rate. Amounts are rounded to whole cents, with any spare cent going to the line with the largest remainder.
Read the table across. The art print weighs 5 oz and carries the highest value per unit, so it takes $1.24 by weight and $4.13 by declared value. Neither figure is wrong. They answer different questions, which is why you pick one method and keep it for every month you compare.
How do you turn parcel splits into a monthly figure?
Run the split on every parcel in the month, add each SKU's shares, and divide by its units shipped. Below is an invented month, using one method throughout.
| SKU | Units shipped | Allocated shipping | Allocated per unit | Unit price |
|---|---|---|---|---|
| MUG-01 | 300 | $540.00 | $1.80 | $18.00 |
| CANDLE-02 | 150 | $585.00 | $3.90 | $24.00 |
| STICKER-04 | 400 | $1,640.00 | $4.10 | $6.00 |
Example only, invented numbers.
STICKER-04 stands out: its allocated shipping per unit is about two thirds of its price. Treat that as a prompt to look. If the allocation is by units, stickers inherit the same share as the heavier items they ship beside, and the figure may be an artifact of the method. Recheck it with the weight method. If it still stands out, the SKU may need a higher price, a minimum quantity, or a different mailer.
Which method suits which catalog?
Pick the measure that best matches what drives your label prices, and the one you can fill in for every line without guessing.
- Mostly one SKU per parcel: the method hardly matters, because a one-line parcel has nothing to split.
- Similar items in different variants: split by units. It is simple and needs no weights.
- Heavy and light goods mixed together: split by weight, using the packed weight of each product.
- Similar sizes, very different prices: split by declared value, which follows the price tag and is easy to fill in.
- No weights and no values yet: an equal split gets you a first look. Replace it as soon as you can.
If you cannot decide, run two methods on one month and look by hand at any SKU where they disagree.
What errors skew the number?
Five input errors can skew the number: voids left in, returns mixed in, carrier adjustments posted later, lines with no SKU and mismatched spellings. Check these before you trust a result.
- Voids left in. A label you bought and then voided is not a shipment. If its cost stays in the month, every SKU on it carries cost for a parcel that never left. Remove voided labels before you split.
- Returns mixed in. A return label has a price but no outbound units. Splitting it across SKUs inflates their outbound cost, and counting its items as units shipped drags the per-unit figure down. Keep return spend in its own line.
- Carrier adjustments posted later. After a parcel is scanned, the carrier can re-bill the weight or size. That charge can land in a later month than the label. If you split only the label price, you understate the SKUs in that parcel. If you add the adjustment in the month it posts, it can sit in the wrong month. Pick one rule and keep it.
- Lines with no SKU. A line with a blank SKU still ships and still takes a share of the label under any of the four methods. If the sheet drops it, the other SKUs look cheaper than they were, or the SKU rows stop adding up to the label spend. Count blank lines as their own row so the totals tie out.
- Mismatched spellings. MUG-01, mug-01 and MUG 01 can count as three SKUs, depending on the tool. Clean the spelling before you total, or one product can show up as three thin rows.
Two related pages go deeper on the first and third: how voiding a label works and carrier billing adjustments.
What is a per-SKU shipping number good for?
It is an estimate that helps with pricing, free-shipping thresholds and spotting a SKU with bad data. It is weak evidence for anything else.
- Pricing: compare a SKU's allocated shipping per unit with its price and margin. A SKU with a large shipping share may need a price change or a smaller package.
- Free-shipping thresholds: add up the allocated shipping for the SKUs that travel together, and set the threshold where the basket margin covers it. See free shipping economics for who pays.
- Spotting a bad SKU: a SKU whose figure sits far from similar products may have a wrong weight, an oversized box or frequent carrier adjustments.
What it is not: an invoice, a carrier rate for the item, or proof that one product causes shipping cost. Do not use a per-SKU figure to say a product loses money until you have checked it with a second method and read the parcels behind it.
What does GoatLabels show for shipping per SKU?
On the Pro plan, the month-end statement in the Operations hub totals one calendar month of purchased labels. It shows units shipped, shipping paid and product cost by SKU, sales channel and warehouse, and shipping paid by carrier. Shipping paid by SKU is allocated: by declared value when every line has one, otherwise by units. You can download the statement as a PDF or as CSV views for your bookkeeper.
What GoatLabels does and does not do. The statement is part of the Operations hub, which is included on the Pro plan at $40 a month (checked ) and is not on Free. See the plans and pricing page. The figure is an allocation of the label price. It is not a measurement of any one item, and it does not replace the method above.
- Lines with no SKU count in units shipped but have no SKU row, zero product cost, and no warning.
- Bulk CSV import labels carry no SKU, so an account that relies on them gets totals with no SKU detail.
- Only purchased labels count. Drafts, held labels and voided labels are left out. Return labels count in shipping spend, not in units.
- SKUs match a product by exact spelling, including case. A SKU that does not match keeps its row, is listed as unmatched, and carries zero product cost.
- Product cost uses your own current unit cost. If you change a cost and reopen a past month, that month shows a different figure, so do not treat a past statement as fixed.
- A carrier adjustment that posts in the same month as the label is allocated with it. One that posts in a later month lands in that month's summary total. The SKU rows come from labels bought in the month, so they and the total can differ.
If your orders reach GoatLabels without SKUs, add them at the source first. A statement can only allocate to a SKU that is on the label line. The statement shows what you paid, and it does not show GoatLabels' own costs.
Shipping cost per SKU: FAQ
- How do I calculate shipping cost per SKU?
- Divide each label's price across the SKU lines in the parcel by units, weight, declared value or an equal share, then add up each SKU's shares for the month. Divide by the units of that SKU shipped for a per-unit figure. Leave out voided labels and keep return labels separate.
- Which split method should I use?
- Use units when your items are similar in size and weight, weight when weights vary and drive the carrier price, and declared value when prices vary but sizes do not. Use an equal split only as a rough first pass.
- Does GoatLabels show shipping cost per SKU?
- On the Pro plan, the month-end statement shows shipping allocated to each SKU. GoatLabels allocates by declared value when every line has one, and by units otherwise. It is an allocation of the label price, and it does not measure what any single item cost to ship. The statement is part of the Operations hub, which is included on the Pro plan and not on Free.
- Why is a SKU missing from the month-end statement?
- The statement, on the Pro plan, has no row for a label line with no SKU. Those lines still count in units shipped, carry zero product cost, and raise no warning. A SKU that does not match a product exactly still gets a row, marked as not in your catalog, with zero product cost. Labels bought through bulk CSV import carry no SKU, so an account that relies on them gets totals with no SKU detail.
- Can I use a per-SKU shipping figure to set a free-shipping threshold?
- It is a useful input. Compare the allocated shipping for the SKUs that usually travel together against the margin on a typical basket. Treat the figure as an estimate and test the threshold against real orders before you advertise it.
Related reading: what shipping really costs per order, free shipping economics, carrier billing adjustments, how to void a shipping label, bookkeeping for shipping costs, GoatLabels plans and pricing, the GoatLabels Operations hub, how to calculate landed cost per order, how to record shipping costs in QuickBooks and Xero, how to set low-stock alerts, how to calculate a reorder point, how to sync stock to Shopify and WooCommerce, how to set up scan-to-pack, how to make a pick list, how to run purchase orders for an online store.
Know what each label cost,
then split it your way.
GoatLabels debits a prepaid wallet with a dated ledger line per label, so the price you split is on record. On the Pro plan, the month-end statement also shows shipping allocated by SKU.
Label prices are the same on the Free and Pro plans.