featured article

3PL Billing and Storage Fees: Getting Them Into COGS Correctly

Colleen Quattlebaum

August 22, 2026

The short answer

A third-party logistics invoice contains three different kinds of cost, and they belong in three different places. Receiving and inbound handling attach to unit cost. Storage is a period expense in most cases and a capitalized cost in some. Pick, pack, and outbound shipping are cost to serve, which sits below the gross margin line and varies by channel.

Coding the whole invoice to one expense account is the default behavior of most bookkeeping setups, and it produces a gross margin that is too high and a fulfillment expense that tells you nothing about which channel is expensive.

What is actually on the invoice

A typical monthly statement from a third-party warehouse has six to twelve line types. Sorted by where they belong:

Attaches to unit cost. Container unloading and devanning. Receiving and putaway. Inbound inspection. Case breaking and relabeling done at receipt. These are costs of bringing goods to their present condition and location, which is the standard for inventory cost.

Period expense or capitalized, depending. Monthly storage by pallet, bin, or cubic foot. Long-term storage surcharges. Minimum monthly fees.

Cost to serve. Pick fees. Pack fees. Carton and dunnage. Outbound label and shipping. Kitting done at the time of an order. Returns processing and inspection.

Neither. Account management fees, technology or portal fees, and integration charges. Operating expense, full stop.

The storage question

Storage is where the treatment gets genuinely unsettled, and it is worth being precise because the amounts are not small for a seller carrying a month of stock.

Under U.S. tax rules, the uniform capitalization requirements of Section 263A treat storage differently depending on where it happens. The IRS's own Large Business and International practice unit on examining a reseller's Section 263A computation describes the distinction: costs attributable to an off-site storage or warehouse facility must be capitalized, while costs attributable to an on-site storage facility may generally be expensed as incurred. A third-party warehouse holding your goods is not an on-site facility.

A gross receipts exception exists for smaller taxpayers, and the threshold is indexed for inflation, so whether it applies to you in a given year is a question for your CPA rather than an article. What matters here is that the treatment is a real decision with a rule behind it, not a coin flip, and that book treatment and tax treatment can legitimately differ.

For book purposes, most sellers expense routine storage in the period incurred and capitalize storage only where it is clearly part of a production or staging process. Pick a treatment, document why, and apply it consistently. A treatment that changes when the margin looks bad is not a policy.

A worked example: one month, one invoice

A seller receives a $38,412 monthly statement from a third-party warehouse. Volume for the month was 11,860 outbound orders across Shopify and eBay, and one container of 9,400 units arrived.

The invoice, line by line

  • Container devanning and receiving: 9,400 units at $0.14 equals $1,316
  • Putaway: $840
  • Relabeling at receipt, 3,200 units at $0.09: $288
  • Pallet storage, 214 pallets at $22: $4,708
  • Long-term storage surcharge: $1,190
  • Pick fees, 18,240 lines at $0.38: $6,931
  • Pack fees, 11,860 orders at $0.72: $8,539
  • Cartons and dunnage: $2,847
  • Outbound shipping billed through: $11,204
  • Account and technology fee: $549

Where each piece goes

Unit cost additions: devanning, putaway, and relabeling total $2,444. Spread across the 9,400 units received, that is $0.26 per unit added to the landed cost of that receipt. It does not touch the units already in stock.

Storage: $5,898 combined. Under a policy of expensing routine storage, this is a period cost. Note that the long-term surcharge of $1,190 is a signal, not just a cost. Something has been sitting long enough to trigger it, and that SKU list is worth pulling.

Cost to serve: pick, pack, cartons, and outbound shipping total $29,521. Divided across 11,860 orders that is $2.49 per order, and it needs splitting by channel, because Shopify orders in this business average 1.9 lines and eBay orders average 1.2.

Operating expense: $549.

What changes if you code it all to one account

Gross margin is overstated, because $2,444 that belongs in inventory was expensed immediately. Fulfillment cost per order looks like $3.24 rather than $2.49, which is a 30 percent overstatement of the number you use to decide whether to raise free shipping thresholds. And the $5,898 of storage is invisible as a driver, so nobody notices when it grows 40 percent because a slow SKU is occupying 60 pallets.

The allocation problem nobody warns you about

Cost to serve has to be split across channels, and the splits people reach for first are wrong.

Splitting by revenue overcharges the high-price channel. A $58 order and a $19 order cost about the same to pick and pack.

Splitting by order count is better and still misses line count. A one-line order and a five-line order cost different amounts to pick.

The workable approach: allocate pick fees by line count, pack fees and cartons by order count, and outbound shipping by actual billed weight or zone where the data exists. That takes an hour to set up and it is the difference between a per-channel cost you can act on and a blended figure you cannot.

For a seller running direct sales alongside marketplaces, the direct channel is usually where warehouse cost concentrates, since marketplace fulfillment programs move that cost into the marketplace fee. Getting Shopify accounting posted so those fulfillment costs land against the right channel is what makes the comparison honest.

What to fix first

Separate the invoice into at least four accounts. Inbound handling to a cost account that flows into inventory, storage to its own expense account, fulfillment to its own, and administrative fees to overhead. Four accounts costs nothing and makes every subsequent analysis possible.

Attach inbound handling to the receipt, not the month. The $0.26 per unit from the example belongs in the cost layer for those 9,400 units. Expensing it in the month it was billed disconnects it from the goods it relates to.

Track storage per SKU where you can. Most third-party warehouses will provide pallet or bin counts by SKU on request. This is the input to the aging conversation and to the decision about which slow movers to liquidate.

Reconcile billed units to your own records. Warehouses bill from their systems. Receiving discrepancies, double-billed pallets, and pick fees on cancelled orders are common and rarely caught, because nobody compares the invoice to their own transaction counts.

Watch the minimums. A monthly minimum on a shrinking volume account is a fixed cost pretending to be variable, and it distorts unit economics at low volume.

What the system has to support

Allocating landed cost at receipt, tracking stock by warehouse including third-party locations, holding transfers as in transit until received, and carrying channel identity through to the ledger so cost to serve reports by channel. That is the shape of what ConnectBooks does for multichannel sellers, with FIFO valuation, landed cost allocation, and inventory reports by warehouse, value, and aging.

The payoff is on the reporting side. Profit by SKU and channel with fulfillment cost allocated correctly usually reorders a seller's priority list within an hour of first seeing it. If you want to run your own invoice through that exercise, book a demo and bring last month's statement.

The rule

Ask one question of every line on the invoice: did this cost help bring goods to their present condition and location, or did it help get a specific order to a specific customer. The first belongs in the unit. The second belongs below the margin line, split by channel. Storage sits in between and needs a documented policy rather than a habit.

Take Control of Your E-Commerce Business with ConnectBooks

Running an e-commerce business comes with plenty of challenges, but ConnectBooks is here to make your life easier. With real-time insights, seamless integrations, and detailed tracking of your profitability and inventory, you can stay ahead of the game. Whether you’re selling on Amazon, Shopify, Walmart, TikTok or eBay, ConnectBooks helps you manage your finances with 100% accuracy and confidence, so you can focus on growing your business.

Ready to level up? Start making smarter, data-driven decisions every step of the way. Try ConnectBooks Free Today or Schedule a Demo