How to verify 3PL storage charges against inventory snapshots
Why storage counts are worth checking#
Storage is worth checking because it bills every month whether or not you ship, and a wrong count repeats until someone catches it. Among those recurring charges, storage is one of the largest and a common place for billing errors: rates that drift above contract, counts that don't match your inventory, and inflated product dimensions.
Count errors can come from system set-up and process rather than intent, such as stale product dims or a status code that leaves quarantined stock in the general count. For where this quantity check fits in a full audit, see How to audit a 3PL invoice, step by step.
What you need before you start#
You need the contract's storage terms and three reports from the 3PL.
- Storage detail: the quantity behind the invoice line, by location, with location type and rate.
- Inventory snapshot: on-hand by SKU and storage location on the count date, with location ID and type, quantity and unit of measure, status, and lot or expiry. An averaged or peak count needs every day's snapshot. A location report run after the count date shows later stock, so ask for the one the bill used.
- Receipts and adjustments for the period.
For pallet, bin or location billing, a SKU-level on-hand report, including your own ERP's, can't verify storage because it has no locations. See The supporting detail files you should always request.
If your 3PL bills storage per location or per pallet position, its system already knows which locations it counted, so asking for that list is a reasonable request. Public companies file some of their contracts with the U.S. Securities and Exchange Commission (SEC), which publishes them, so a few 3PL contracts can be read in full. One of them, a 2016 warehouse contract, gives the brand view-only access to the 3PL's order management system7. Other 3PLs send the report on request, and some billing systems can't break storage down below the invoice line; then agree in writing which detail comes with each invoice. See also Audit rights: your right to inspect billing and inventory records.
Which count feeds which invoice#
Match the snapshot date to the invoice period before comparing anything, because the same month's storage line can come from different count dates. As of October 2026, one warehouse management system (WMS), per its documentation, counts inventory at the end of each billing period and bills the period ahead1. Pallets in stock on January 31 are invoiced for February1. One 3PL, per its help center, counts pallets on the first business day of each month and bills that month5. IWLA's standard terms for merchandise warehouses (2026 revision) charge a full month for goods in storage on the 1st6.
So a February invoice can rest on a January 31 count or a February count. Read the invoice period, find the count date in the contract, and pull that date's snapshot. Other methods need other data:
- Daily average or peak: a snapshot for each day, averaged or the highest taken.
- Any-point occupancy: one WMS bills a location for a day, week or month if it held stock at any point in it4, so you need location movement history.
- Receipt-date schedules: one WMS can bill from each receipt's own date3, so work from the receipts report.
See How storage is measured: snapshot, average, peak or billing-day count and Billing cycles: weekly, semi-monthly and monthly, and what's billed when.
How to rebuild the billed quantity, unit by unit#
Rebuild the quantity with the rule for your contract's unit, then compare it with the invoice line by line. If the contract bills more than one unit, such as pallets for reserve and bins for pick faces, rebuild each separately.
Per pallet position#
Under a snapshot, count the pallet locations holding stock on the count date:
Pallet positions = pallet locations with quantity above zero on the count date
Where one location ID holds several pallets, such as a floor-stacked lane, count pallets rather than location IDs. A pallet position, one pallet-sized slot, bills in full however full the pallet is, unless the contract has a half-pallet rate (see Partial pallets and rounding: how 3PLs count a "pallet"). An over-height pallet can bill as two positions7, at a tall-pallet rate or per cubic foot8.
Under a snapshot of occupied locations, a location with nothing in it on the count date shouldn't be billed. Two contract terms change that: a method that bills any location that held stock at some point in the period, and locations reserved for you, such as dedicated pick faces, that bill whether or not they hold stock. If neither applies, list the empty locations for your 3PL. See Storage billed on pallets or bins that don't exist.
Per bin or shelf#
Count occupied bins and shelves on the count date, by size tier where the rate card prices tiers separately. A bin billed as large that the snapshot shows as medium belongs in the rate check; see Rate verification: checking every billed rate against your rate card.
Per cubic foot#
Cubic-foot storage almost always bills WMS dims times quantity on hand, not location size:
Cubic feet = Σ over SKUs (WMS cubic feet per unit or carton × quantity on hand in that unit)
Cubic feet per unit = length × width × height (in inches) ÷ 1,728
Apply any per-SKU minimum: each SKU bills the greater of its cubic charge or the minimum. Check that the snapshot's unit of measure (each or case) matches the unit the dims describe. WMS dims are more often too large than too small, and a wrong dim bills every month until fixed. Ask for the dims your 3PL bills on; see Why accurate product weights and dims drive everything downstream.
Per square foot or per location#
Square-foot storage bills an allocated area, full or not, so check the billed area against the contracted area, not a snapshot; quoted square footage often includes aisles. For per-location pricing, count occupied locations by type and multiply each count by that type's rate4.
Daily average, peak, occupancy, proration and receipt charges#
Time-based methods need daily data or the receipts report:
Daily average = sum of each day's count ÷ days in the period
Peak = the highest day's count in the period
One 2016 contract sets storage locations at "the average number of storage locations utilized during a given month"7. Under any-point occupancy, the charge is the rate × occupied days, weeks or months4. Price each prorated or initial (receipt) charge at quantity × rate × the fraction the contract uses. That can be days in stock, from receipt to departure7, receipt week5, half month1,6 or a full period8. Aged-inventory surcharges also need receipt dates; see Long-term storage surcharges and aged-inventory fees.
Initial storage covers a receipt's first period, and recurring storage starts with the next one. If the same pallets appear on both lines for the same period, ask your 3PL why, unless your contract says the receipt charge is added on top of that period's count. Check how the contract treats stock received on the count day itself.
Why a correct bill can still exceed what your inventory needs#
A correct storage bill can show more locations than your units seem to need, because stock is stored and billed by location, not by volume alone. Check for these first:
- Pick plus reserve. A SKU can hold stock in a pick location and in reserve at once, and each occupied location bills. Each occupied location bills at its own location type's rate, so a bin pick face appears on the bin line, not as a pallet position.
- Lots and expiry dates. Where each lot or expiry date gets its own pick location, one SKU with three live lots can take three locations.
- One SKU per location. Many ecommerce 3PLs require it, so a mixed pallet is broken down or billed per SKU.
- Partial pallets from separate receipts stay separate unless consolidated, which is often negotiable and sometimes carries a labor charge.
- Status storage. About 30% of Implentio customers' 3PL contracts with storage charges also bill quarantine, returns, dock overstay or overflow storage separately; such stock shouldn't also be in the general count (see Damaged, quarantined, on-hold and non-sellable inventory).
Then run a sanity check on your on-hand by SKU:
Expected positions ≈ Σ over SKUs of (on hand ÷ units per full position), rounded up for each SKU
Add the extra locations the rules above explain. A remaining gap is a question for your 3PL, not a confirmed overcharge; undercharges happen too (Not every variance is an overcharge: undercharges, manual items and special projects).
Worked example (illustrative)#
In this illustrative month, a brand finds $240 of disputable storage on a $3,040 pallet line, plus 10 extra positions that are correct. Its contract bills pallet positions at $20 per position per month, counted on the 1st for that same month.
-
Invoice: 152 positions × $20 = $3,040.
-
Snapshot for the 1st: 152 pallet locations assigned to the brand, of which 12 shouldn't bill:
Locations Reason Positions Amount R-04-01 to R-04-06 Zero quantity on the count date 6 $120 R-11-07, R-11-08 Another client's SKU 2 $40 Q-01 to Q-04 Quarantine pallets also billed on the quarantine line for the same month 4 $80 Total 12 $240 -
Rebuilt quantity: 152 − 12 = 140 positions, or $2,800. The gap is 12 × $20 = $240.
-
Sanity check:
SKU group On hand per SKU ÷ units per position Rounded up Expected positions 6 fast movers 2,300 ÷ 240 = 9.58 10 each 60 3 lot-controlled SKUs 1,400 ÷ 300 = 4.67 5 each 15 11 other SKUs 950 ÷ 200 = 4.75 5 each 55 Total 130 -
Explained difference: each fast mover has a pallet pick face as well as reserve pallets (6 positions), and the lot-controlled SKUs keep 4 extra lots in their own locations (4 positions). 130 + 10 = 140, which ties to the rebuilt count.
The brand disputes the 12 positions in the first table by location ID and leaves the 10 explained positions alone. The zero-quantity exclusions hold because the contract counts occupied locations on one day and reserves none for the brand; under any-point occupancy, a location emptied mid-month could bill correctly. The quarantine pallets are excluded only because they were billed twice for the month; the quarantine line itself isn't in dispute. These numbers are the example's own and say nothing about how many extra positions are normal.
What good looks like#
Good storage billing lets you rebuild the line from the 3PL's own reports:
- The storage detail adds up to the invoice quantity, by location and location type.
- Every billed location appears in the snapshot for the stated count date.
- The contract states the unit, count method, count day, and which period each count bills.
- Status storage appears on its own labeled line.
- The 3PL answers count questions with location IDs.
Common mistakes and red flags#
- Comparing the bill with your ERP unit count instead of a location-level snapshot.
- Using the wrong snapshot date, such as a February 1 count for an invoice that bills February from January 31.
- Zero-quantity locations billed under a single count day, unless the contract bills occupancy at any point in the period or reserved locations.
- The same stock on the initial and recurring lines for the same period, unless the contract adds the receipt charge on top of that period's count.
- Storage rising while on-hand is flat, with no change in SKUs, lots or dims to explain it.
- Storage lines with a dollar amount and no quantity or unit. About a quarter of Implentio customers' 3PL contracts with storage charges have at least one; ask for the count behind it.
Questions to ask your 3PL#
- Which date's inventory does each storage invoice use, and which period does it bill?
- Can you send the storage detail by location, with location type and rate, with each invoice?
- Can you send the location-level snapshot for that date, or give us access to run it?
- Do locations that were emptied before the count, or reserved for us but empty, still bill?
- How do you bill SKUs held in both pick and reserve, and SKUs with several live lots?
- Which dims drive cubic billing, and how do we correct them?
- How are quarantine, returns and damaged stock billed, and are they excluded from the general count?
- Was any storage quantity changed after the count, and why? (One WMS lets the 3PL edit a recurring storage quantity before invoicing2.)
Checklist: verifying one month's storage line#
Run it whenever the storage line moves without a matching change in your inventory; for a regular schedule, see How often to audit: every invoice, sampling or quarterly?
FAQ#
Why is my storage bill going up when my inventory is flat?
Locations or billed volume can rise while units hold steady. New SKUs or lots each take a location, stock sells down without moving to smaller locations (few 3PLs re-slot on their own), stock moves to a larger bin tier, or dims change. Also check the billed rate (Rate verification: checking every billed rate against your rate card), status lines, receipt charges after heavy inbound, and stored packaging.
My inventory count doesn't match my 3PL's. Does that mean storage is wrong?
Not necessarily. A unit variance (units the 3PL holds versus your records) changes storage only where it changes the number of occupied locations, or the cube under cubic billing. Settle the units first, using How to reconcile 3PL inventory to your ERP, step by step, then rebuild storage on the agreed count.
What evidence settles a storage dispute, and who pays for a count?
The strongest evidence is the 3PL's own snapshot: a list of location IDs, each with the reason it shouldn't bill. If the snapshot itself is in doubt, ask for a cycle count of the disputed locations or observe one (Observing or auditing a count yourself). IWLA's standard terms (2026 revision) put counts the customer requests at the customer's expense6. Ask beforehand whether the 3PL will waive the charge if the count shows the bill was wrong.
How far back can I dispute storage charges?
As far as your contract's dispute window allows. A 30-day window is common and 14 days is short; IWLA's standard terms (2026 revision) require disputes in writing within 30 days of the invoice date6. See Recovering historical overcharges: how far back can you go?
Sources#
8 sources cited
- Extensiv, "Understanding Recurring Storage Charges," Sept 11, 2025. https://help.extensiv.com/en_US/understanding-recurring-storage-charges
- Extensiv, "Reviewing Recurring Storage Charges," Sept 11, 2025. https://help.extensiv.com/en_US/reviewing-recurring-storage-charges
- Infor, "Recurring storage billing," WMS 2026.x user and administration library, page dated Apr 6, 2026. https://docs.infor.com/wms/2026.x/en-us/useradminlib/sce3plbug/nmm1612894155852.html
- ShipHero, "Storage by location fees," updated Jun 12, 2026. https://software-help.shiphero.com/hc/en-us/articles/46569980581901
- DCL Logistics, "Pallet Storage Counting Process and Pallet Storage Billing Explained," Jul 18, 2024. https://support.dclcorp.com/en/articles/9218265-pallet-storage-counting-process-and-pallet-storage-billing-explained
- International Warehouse Logistics Association (IWLA), "Standard Contract Terms and Conditions for Merchandise Warehouses" (rev. January 2026; accessed Oct 15, 2026), Secs. 4(c), 4(e), 8(e), 9(a). https://iwla.com/wp-content/uploads/2026/01/2026-IWLA-Standard-Contract-Terms-and-Conditions-Final-1-6-26-1.pdf
- Warehouse & Fulfillment Services Agreement (Northeast 3PL), SEC exhibit, executed Dec 27, 2016. https://www.sec.gov/Archives/edgar/data/1895249/000110465923127816/mcac-20230930xex10d18.htm
- Warehouse Storage Contract (Humble Warehouse), SEC exhibit, Aug 20, 2020. https://www.sec.gov/Archives/edgar/data/0001826827/000110465920110524/filename6.htm