3PL storage fees: how they are calculated and where they go wrong
Storage4 min read
Storage is the one fee on a 3PL invoice that is not tied to an event. Picks and packs happen when an order happens. Storage is billed for time, measured by a system that takes a reading on a schedule, and the reading is what you pay for.
The three units, and why the unit matters more than the rate
| Unit | Typical use | What drives the bill |
|---|---|---|
| Bin or tote | Small SKUs, low volume per SKU | Number of distinct SKUs, not total units |
| Shelf | Medium volume, hand-pickable | Linear or cubic space assigned |
| Pallet | Bulk, reserve stock, inbound overflow | Pallet positions occupied, rounded up |
The first line in that table is the one that surprises people. Bin storage is billed per bin, and a bin holds one SKU. Two hundred units of one SKU can occupy one bin. Two hundred SKUs at one unit each occupy two hundred bins. Adding shades of a product multiplies your bin count without moving your inventory value at all.
How occupancy is actually measured
There are three common methods and they produce different bills from the same physical inventory.
- 1Snapshot on a fixed day. The warehouse records occupancy on the first of the month, or the last, and bills that number for the whole month. Simple, and brutal if you happen to receive a large inbound the day before the snapshot.
- 2Daily average. Occupancy is sampled every day and averaged. Fairest of the three, most common at larger 3PLs, and the one that makes mid-month consolidation actually save you money.
- 3Peak within the period. The highest occupancy recorded during the month is billed for the whole month. Rare, and worth checking your contract for, because a single overflow week sets the price of the whole month.
Your contract names one of these. Most brands do not know which one applies to them, and the method is the single biggest lever on the number.
Where storage overbilling comes from
Stale occupancy records
A pallet is consolidated on the 8th. The physical position is released, but the warehouse management system is updated on the next cycle count, which is at the end of the month. You are billed for a full month on a position that was empty for three weeks. Nobody did anything wrong and the money is still yours.
Rounding applied twice
Pallet positions round up: a pallet at 30% capacity is a full position. That is normal and it is in your contract. What is not normal is the same rounding being applied at both the SKU level and the position level, so eleven partial pallets of eleven SKUs bill as eleven positions when the goods physically fit on four.
Overflow that never went back
Inbound arrives, does not fit in your assigned zone, and is placed in overflow at a higher rate. Overflow is meant to be temporary. Check whether it silently became permanent: an overflow line that has appeared every month since November is not overflow, it is your storage arrangement.
Storage on inventory that is not sellable
Damaged units awaiting disposition, returns not yet processed, and discontinued stock all take positions and are all billed. This is legitimate billing for illegitimate inventory. It is the fastest storage saving available to most brands and it does not require talking to anyone: dispose of it.
The check to run every month
Take your own inventory snapshot for the billed period and reduce it to the same unit the invoice uses. Then compare, per storage type:
- billed units against units you can account for
- this month billed units against last month, and against your unit count trend
- storage cost per unit shipped, which should be roughly flat unless your mix changed
A few percent of difference is measurement noise and not worth an email. A consistent gap in the same direction, month after month, is a stale record and worth one.
What a defensible storage claim looks like
On invoice 2026-07-118, line 4412, Pallet Storage was billed at 34 positions for July. Our end-of-period inventory shows 22 positions, and the consolidation completed on 8 July is recorded in WRO 88214. Please credit the 12 positions at the contracted rate, $18.00 each, for a total of $216.00.
That paragraph gets processed because everything in it is checkable by the person reading it. The version that starts with a complaint about storage being expensive gets a call to discuss your account.
WareAudit runs the storage reconciliation against every invoice automatically, along with twelve other checks. If you want to see the format of the output first, there is a sample report.