3PL Pick-Pack And Storage Fees: In COGS Or Fulfillment OpEx

Metricuno
July 8, 2026
5 min read
3PL Pick-Pack And Storage Fees: In COGS Or Fulfillment OpEx — How to split 3PL fees between COGS and fulfillment OpEx: per-unit pick-pack is COGS, monthly storage is OpEx. Line-by-line mapping for ShipBob, Huboo, Bezos.
Quick answer

Per-unit pick-pack fees belong in COGS; monthly storage sits in fulfillment OpEx. Here's the line-by-line invoice mapping that keeps your contribution margin honest.

Quick answer

Per-unit pick-pack, packaging consumables, and outbound postage from your 3PL are variable order costs — book them in COGS. Monthly storage (per bin, pallet, or cubic metre) is a fixed-ish fulfillment OpEx line and does not belong in COGS. Split the invoice this way and gross margin stops moving every time your inventory footprint changes.

Definition
Finance & unit economics

3PL pick-pack and storage fees: COGS or fulfillment OpEx

Per-unit pick-pack goes in COGS; monthly storage is a fulfillment OpEx line. The split protects contribution margin from stock-level noise.

A 3PL invoice from ShipBob, Huboo, or Bezos bundles two very different cost types. Pick-pack, packaging materials, and shipping labels scale one-for-one with orders shipped — they behave like variable cost of goods sold and should be booked in COGS so gross margin reflects true unit economics.

Storage fees behave differently. They scale with how much inventory you're holding, not how many orders you ship this month. Treating them as COGS makes gross margin fluctuate every time you receive a container or clear seasonal stock. The clean answer is to move storage into a fulfillment OpEx line below gross profit.

Also known as
3PL fee classification
warehouse invoice mapping
fulfillment cost accounting

This page is the operator's cheat sheet for the split. It tells you which lines on your next 3PL invoice hit COGS, which hit OpEx, and how to spot the misclassifications that are quietly distorting your contribution margin today.

Why the split matters

Gross margin is supposed to answer one question: what does one incremental order cost me to fulfill? If you dump storage into COGS, that number moves every time your warehouse footprint changes — even in months where nothing about the underlying unit economics shifted.

The opposite failure mode is worse. If you book pick-pack as fulfillment OpEx, gross margin looks 6-12 points better than reality and every scaling decision — media spend, discount depth, free-shipping thresholds — gets made on a lie. That's the mechanism behind pick-pack as OpEx silently overstating gross margin.

The most common mistake

Booking the entire 3PL invoice as a single 'fulfillment' line in OpEx. It's convenient in Xero or QuickBooks, but it inflates gross margin, hides per-order cost creep, and makes your contribution margin per SKU untrustworthy for pricing decisions.

The line-by-line mapping

Here's how the typical 3PL invoice splits. Per-order pick fee, per-additional-unit pick fee, standard packaging, and outbound carrier charge all go in COGS — they scale with orders and are unavoidable to ship a unit. Custom inserts and branded mailers also belong in COGS if they ship in every box.

Monthly storage (per bin, shelf, pallet, or cubic metre), long-term storage surcharges, and account/software fees go into a fulfillment OpEx line below gross profit. Receiving and inbound fees are a separate question — depending on your policy, you either capitalise them into inventory or expense them, which we cover in receiving and inbound fees: capitalize or expense.

How to detect misclassification on your current P&L

Pull the last six months of gross margin percentage and lay it next to units shipped and average inventory on hand. If gross margin swings by more than 2 points month-over-month while AOV and product mix are stable, storage is almost certainly sitting in COGS.

The second tell: compute 3PL cost per order shipped. If that number is suspiciously flat across months where you received a big inbound container, storage costs are landing in the wrong bucket — likely OpEx when they should be visible, or bundled into a single fulfillment line that hides the mix. The ShipBob invoice line-by-line mapping guide walks the reconciliation for that specific 3PL.

Rule of thumb for a €1M–€5M store

For a store in this revenue band, pick-pack + packaging + outbound shipping typically lands at 8–14% of net revenue and belongs in COGS. Storage typically lands at 1.5–3.5% of net revenue and belongs in fulfillment OpEx. See the typical 3PL fee split benchmark for the full breakdown by category.

How to fix it without redoing your whole chart of accounts

Add two new sub-accounts under COGS: '3PL pick-pack' and '3PL packaging & outbound shipping'. Add one new line in OpEx: 'Fulfillment — storage & warehouse fees'. When the next 3PL invoice comes in, split it across those three buckets instead of coding it to a single account. Most bookkeepers can set up a recurring split template in one afternoon.

For historical months, a reclassification journal for the trailing 12 is enough to make comparisons meaningful. Don't restate further back than that — the noise isn't worth the audit trail. After the reclass, rebuild contribution margin from the new COGS base so your unit-economics dashboards reflect reality going forward.

Frequently asked

Frequently asked questions

Pick-and-pack is COGS. It's a variable, per-order cost that you cannot avoid to ship a unit, which is the textbook definition of cost of goods sold for a physical-product business. Booking it in OpEx overstates gross margin.

Storage fees belong in a fulfillment OpEx line below gross profit. They scale with inventory held, not orders shipped, so putting them in COGS makes gross margin move around every time your stock level changes.

If you charge customers for shipping, net the paid-shipping revenue against the outbound carrier cost in COGS. If shipping is free, the full carrier cost is a COGS line. Dim-weight and zone surcharges follow the same rule as the base label.

No. The account/platform fee is a fixed OpEx cost — you pay it whether you ship 100 or 10,000 orders. Book it in the same fulfillment OpEx line as storage.

Huboo's per-SKU pricing is still storage — it scales with SKUs held, not orders shipped — so it goes in fulfillment OpEx. The Huboo storage fees on a UK DTC P&L guide covers the exact line-item setup.

Peak surcharges follow the same logic as base storage: they scale with inventory footprint during a specific window, so they belong in fulfillment OpEx. See where peak-season storage surcharges belong for the seasonality handling.

It's a policy choice. You can capitalise them into inventory cost (they hit COGS when the unit sells) or expense them in the month incurred as fulfillment OpEx. Capitalising is more accurate for annualised gross margin; expensing is simpler.

If kitting happens per order (build-to-order subscription box), it's per-unit COGS. If kitting is done in batches ahead of demand, it's closer to a manufacturing-style OpEx or should be capitalised into the kitted SKU's inventory cost.

Returns fees can sit as contra-revenue, COGS, or OpEx depending on how you report net revenue. Most DTC operators treat the 3PL return-handling fee as COGS and the refunded product revenue as contra-revenue — see returns processing fees for the full mapping.

No. Moving costs between COGS and OpEx changes gross margin and operating margin optics, but total expenses — and therefore taxable profit — are unchanged. It's a management-reporting improvement, not a tax event.

See Metricuno on your data

Bring your stack — Google Analytics, Stripe, a CRM, anything — and we'll walk through the metric tree that turns your funnel into one number.