Guide · pallet storage
How to bill pallet storage, per day or per month
A storage charge comes down to two things: how many pallets were in the building, and for how many days. Everything else is a rule for turning those days into dollars. This guide works through each rule with numbers you can check.
Every figure on this page was calculated by Tallybay's billing engine and is checked by an automated test, so the arithmetic is exact, not illustrative.
Updated October 3, 2026
Which days count
Count calendar days in the warehouse's own time zone. The day a pallet arrives counts. The day it leaves does not. A pallet that arrives and leaves on the same day still counts as one day, because it used the space.
A pallet-day is one pallet in the building for one day. Ten pallets for seven days is 70 pallet-days.
In this June example, at $0.45 per pallet per day, the 10 pallets received on Jun 3 are billed up to Jun 9, the day before they shipped. The 6 pallets that came and went on Jun 12 count once. That is 76 pallet-days, or $34.20.
When some of a client's pallets leave, the oldest go first. That matters as soon as pallets arrive on different days: it decides which receipts keep counting, which free days still apply and which rate they were received under.
| Date | What | Pallets |
|---|---|---|
| Jun 3 | Received | 10 |
| Jun 10 | Shipped | −10 |
| Jun 12 | Received | 6 |
| Jun 12 | Shipped, same day | −6 |
| 10 pallets, Jun 3 to Jun 9 | 70 pallet-days |
|---|---|
| 6 pallets, Jun 12 | 6 pallet-days |
| Storage | $34.20 |
| Invoice subtotal | $34.20 |
Per pallet per day, or per pallet per month
Warehouses quote storage one of three ways. The same June activity below gives three different invoices, because each method treats a partial month differently.
| Date | What | Pallets |
|---|---|---|
| May 31 | On hand from May | 20 |
| Jun 16 | Received | 40 |
| Jun 24 | Shipped | −20 |
| Method | Working | Storage |
|---|---|---|
| Per pallet per day, $0.60 | 1,060 pallet-days × $0.60 | $636.00 |
| Per pallet per month, $16.00, prorated by day | 1,060 pallet-days × $16.00 ÷ 30 days | $565.33 |
| Per pallet per month, $16.00, charged in full | 60 pallets × $16.00 | $960.00 |
Per pallet per day multiplies pallet-days by the daily rate. It is the most exact, and the easiest to explain to a client line by line.
Per pallet per month, prorated by day, uses the same pallet-days but divides the monthly rate by the number of days in that month. A pallet costs a little more per day in February than in July, and the result is rounded once, to the cent, at the end.
Per pallet per month, charged in full, charges every pallet on hand on the 1st, and every pallet received during the month, a whole month. Here that is the 20 pallets already on hand plus the 40 received on Jun 16, even though those 40 were in for half the month. It rewards the warehouse for short stays, is simple to check, and matches how the IWLA standard terms charge goods already in storage on the 1st.
None of the three is wrong. The right one is whatever your contract with that client says.
Pallets that cross the month end
Forty pallets arrive on Jan 28 and ship on Feb 3. Handling in and out is $4.00 a pallet. The storage belongs to two invoices, and each handling charge belongs to the month the pallets moved.
Per day at $0.50: January bills 160 pallet-days (Jan 28 to Jan 31) plus inbound handling, $240.00 in all. February bills 80 pallet-days (Feb 1 and Feb 2) plus outbound handling, $200.00.
Per month at $15.00, charged in full: the pallets were in the building in both months, so each month charges them a whole month: $600.00 of storage in January and $600.00 again in February, for six nights.
This is where spreadsheets go wrong most often. A formula that looks only at the current month drops the four January days, or a copied row bills the February days twice. Build each month from the dated movements rather than from last month's sheet.
| Date | What | Pallets |
|---|---|---|
| Jan 28 | Received | 40 |
| Feb 3 | Shipped | −40 |
| 40 pallets, Jan 28 to Jan 31 | 160 pallet-days |
|---|---|
| Storage | $80.00 |
| Inbound handling | $160.00 |
| Invoice subtotal | $240.00 |
| 40 pallets, Feb 1 to Feb 2 | 80 pallet-days |
|---|---|
| Storage | $40.00 |
| Outbound handling | $160.00 |
| Invoice subtotal | $200.00 |
Free days
Some contracts give each receipt a number of free days before storage starts, often to cover cross-docking or quick turns. With 5 free days, a pallet received on the 10th is first billed on the 15th.
In this March example the 30 pallets received on Mar 10 ship on Mar 13, inside their free days, so they cost nothing to store. The 25 pallets received on Mar 20 are billed from Mar 25: 175 pallet-days at $0.50, or $87.50.
Two details are worth writing into the contract. Free days usually apply to new receipts, not to pallets already on hand when billing started (Tallybay applies none to an opening balance). And when rates change, the free days that apply are the ones in force on the day the pallets arrived.
| Date | What | Pallets |
|---|---|---|
| Mar 10 | Received | 30 |
| Mar 13 | Shipped | −30 |
| Mar 20 | Received | 25 |
| 25 pallets, Mar 25 to Mar 31 | 175 pallet-days |
|---|---|
| Storage | $87.50 |
| Invoice subtotal | $87.50 |
Minimum monthly charges
A minimum keeps a small or seasonal client worth the space. When storage for the month comes to less than the minimum, the invoice adds the difference as a line of its own, so the client can see both numbers.
Here 8 pallets arrive on Apr 20: 88 pallet-days at $0.40 is $35.20. The minimum is $75.00, so the top-up is $39.80. Inbound handling of $32.00 is charged on top: a storage minimum is met by storage, not by handling.
If a rate change starts mid-month, the minimum for that month is the one that applied on the 1st.
| Date | What | Pallets |
|---|---|---|
| Apr 20 | Received | 8 |
| 8 pallets, Apr 20 to Apr 30 | 88 pallet-days |
|---|---|
| Storage | $35.20 |
| Minimum top-up | $39.80 |
| Inbound handling | $32.00 |
| Invoice subtotal | $107.00 |
Half-month billing, the IWLA default
The International Warehouse Logistics Association (IWLA) publishes standard contract terms, and warehouses reuse them in their own agreements. In the 2026 IWLA Standard Contract Terms and Conditions, section 4(c) sets the default when nothing else is agreed in writing: goods received from the 1st to the 15th of a month are charged a full month, goods received from the 16th to the end are charged half a month, and after that a full month falls due on the 1st of each month for everything still in storage. Section 4(d) allows an anniversary month instead, if both sides agree in writing.
Tallybay does not bill half months or anniversary months yet. If your contracts use either, its storage figure for pallets received after the 15th will not match them. Per day, per month prorated and per month in full, as above, are what it bills today. If half-month terms are what your clients sign, tell us at hello@tallybay.com; we would like to hear about it.
The IWLA terms are published by IWLA; read the document itself before relying on any summary, including this one.
When a rate changes mid-month
Put the new rate on a dated version of the rate card instead of overwriting the old one, and the arithmetic follows from the method:
- Per day, and per month prorated: each day is priced at the rate in force that day, so the invoice shows one storage line before the change and one after.
- Per month in full: a month's charge falls due on a single day (the 1st for pallets on hand, the receipt day for new ones) and uses the rate in force that day. Pallets already in storage move to the new rate on the next 1st.
- A change of method, from per day or prorated to per month in full or back: the method in force on a pallet's charge day holds for the rest of that month, and the new one applies to it from the next 1st. Pallets received after the change take the new method straight away. Nothing is billed twice and no days are left out.
The month-end billing checklist has a line for this, because a rate change agreed by email is the easiest thing to miss.