Storage by Location fees in 3PL Billing charge a flat rate per occupied bin (storage location) for each time unit — day, week, or month — that the bin holds stock. ShipHero uses inventory movement history to determine occupancy, so charges reflect actual usage across the full billing period, not just the current inventory state.
For setup steps and field reference, see How to Set Up Storage Fees by Location in 3PL Billing.
Table of Contents
- How Storage by Location Fees Determine Bin Occupancy
- Storage by Location Time Unit Options
- Monthly Storage Fees on Weekly or Shorter Billing Cycles
- How Storage by Location Charges Are Calculated
- Storage by Location Edge Cases and Conflict Rules
How Storage by Location Fees Determine Bin Occupancy
When ShipHero generates a bill, it inspects inventory movement history to decide whether each qualifying bin held stock during each time unit of the billing period. A bin is considered occupied for a time unit when any of the following are true:
- Inventory changes were recorded in that time unit.
- Inventory changes before the billing period left a non-zero on-hand quantity — the bin was already occupied going into the period.
- Changes during the time unit brought on-hand quantity to zero — the bin held stock at some point during that period and is still charged.
A bin counts as occupied for a time unit when any product in it had inventory during that period. When one product goes to zero but another remains, ShipHero still charges the bin for that time unit.
How Storage by Location Identifies Billing Candidate Locations
ShipHero identifies candidate locations by looking across the full billing period's date range — not just the current inventory state. A location qualifies as a billing candidate when either of the following are true at the time of billing:
- The location has a quantity greater than zero at any point up to the period end time.
- An inventory movement was recorded on or after the billing period start time — the location had activity during the period, even if it is now empty.
A location that was occupied earlier in the billing period but is now empty is still identified as a candidate and evaluated for charges.
Missing Movement History Raises an Error
When a bin has inventory but no movement history entries, ShipHero raises an error during billing. Verify that inventory movements are being recorded correctly for all locations used in 3PL client accounts.
Storage by Location Time Unit Options
| Time Unit | How It Is Counted |
|---|---|
| Day | Each calendar day the bin is occupied counts as one period. A bin occupied for 6 days generates 6 periods. |
| Week | Each 7-day week the bin is occupied counts as one period. |
| Month | Each calendar month the bin is occupied counts as one period. The charge fires on the bill whose billing window contains the last day of the calendar month. |
The billing period's timezone is respected. A bin emptied within a timezone-offset period will not be charged for that period.
Monthly Storage Fees on Weekly or Shorter Billing Cycles
When a Storage by Location fee is set to charge monthly but the client's billing frequency is weekly, the monthly charge fires on the weekly bill whose billing window contains the last day of the calendar month. ShipHero does not limit its occupancy check to the 7-day billing window — it looks back across the entire preceding calendar month.
Storage by Location Pre-Period Lookback Logic
For each time unit being evaluated, the fee engine checks two contexts:
- Pre-period inventory state: What was in this location before the bill's period began?
- In-period changes: What inventory activity happened within the current time unit's date range?
| Condition | ShipHero Result |
|---|---|
| Inventory changes exist within the date range | ShipHero charges the bin. |
| No changes within the range, but a non-zero on-hand quantity existed before the period began | ShipHero charges the bin — it was occupied going into the period and remained occupied throughout. |
| No changes and no prior inventory | ShipHero does not charge the bin. |
Practical Scenarios — Monthly Storage Fee on a Weekly Bill
| Scenario | Is the Location Charged? |
|---|---|
| Location occupied Jan 1–31 (full month). Weekly bill covers Jan 25–31. | Yes — occupied throughout the month. |
| Location occupied Jan 1–20, empty Jan 21–31. Weekly bill covers Jan 25–31. | Yes — pre-period occupancy is detected. The location was occupied during the month even though it is empty at month-end. |
| Location empty throughout all of January. Weekly bill covers Jan 25–31. | No — no prior changes and no in-period changes. |
| Location received stock Jan 28, still occupied Jan 31. Weekly bill covers Jan 25–31. | Yes — in-period change detected within the billing window. |
Monthly Storage Charges Look Back Beyond the Weekly Billing Window
A weekly bill that triggers a monthly Storage by Location fee will charge for any location that was occupied at any point during that calendar month — not only locations holding stock within the 7-day billing window. Clients should be aware that a location vacated mid-month will still appear as a charge on the end-of-month weekly bill.
How Storage by Location Charges Are Calculated
The charge for each qualifying bin is:
Charge = Rate × Number of occupied time units
Example: A bin occupied for 6 days at a rate of $2.40/day generates a charge of $2.40 × 6 = $14.40.
The charge description on exported bills reads: "Location [bin name] of type [location type] occupied for [n] [time unit](s)."
Storage by Location Edge Cases and Conflict Rules
Multi-Product Bins Are Charged Once Per Time Unit in Storage by Location
A bin that holds multiple products is charged once per occupied time unit — not once per product. The bin itself is the unit being billed, not the SKUs inside it.
Storage by Location Conflict Detection
Each Storage by Location fee is tied to specific location types. Two fees targeting the same location type on the same billing profile will conflict and be blocked with the error: "Invalid fee, conflicts with existing fee(s) '[fee name].'"
To charge different rates for the same location type across different billing configurations, use separate billing profiles rather than adding multiple fees targeting the same location type to the same profile.
Bins Without a Location Type Are Skipped
When a bin has no location type assigned and the fee is not configured with Applies to locations without a type, ShipHero does not charge the bin and raises no error. Audit warehouse locations regularly to confirm all bins have the correct location type assigned — particularly after adding new locations.