Allocating Inbound Receiving Fees To Landed COGS vs Per-Order Fulfillment

Metricuno
September 20, 2026
6 min read
Allocating Inbound Receiving Fees To Landed COGS vs Per-Order Fulfillment — Should 3PL inbound receiving fees hit COGS or per-order fulfillment? The right classification, why it matters, and how to fix mis-booked handling costs.
Quick answer

Inbound receiving and unloading fees belong in landed COGS, amortized across units in the container — not in per-order fulfillment. Here's why, and how to fix a mis-booked P&L.

Quick answer

3PL inbound receiving, unloading, and pallet-handling fees belong in landed COGS — amortized across the units in that container or shipment. Only per-shipment pick, pack, and outbound handling should sit in variable fulfillment cost. Booking receiving into fulfillment inflates your per-order cost and understates contribution margin on high-turn SKUs.

Definition
Unit economics & COGS

Allocating inbound receiving fees to landed COGS vs per-order fulfillment

The accounting choice of whether 3PL inbound receiving fees are amortized into unit COGS or expensed as per-order fulfillment cost.

When a container or LTL shipment arrives at your 3PL, the warehouse charges for unloading, palletizing, counting, and putaway — typically per container, per pallet, or per carton. These are inbound handling costs tied to the inventory event, not to any specific customer order. The correct treatment is to capitalize them into landed COGS, dividing the total inbound fee by units received so every unit carries its share. Per-order fulfillment cost should only include outbound activity: pick, pack, ship-label, and any order-specific surcharges.

Also known as
Inbound handling capitalization
Receiving fee allocation

This looks like a bookkeeping nit. It isn't. Where you park receiving fees changes reported contribution margin per order, and it changes it most on the SKUs you sell the most of.

Why the mis-booking happens

Most 3PLs send one monthly invoice bundling receiving, storage, pick, pack, and shipping. Finance teams often route the whole line to a single "3PL fees" or "fulfillment" account in the P&L.

That single-bucket habit collapses inbound and outbound costs together. Receiving — a one-time inventory event — then gets divided by monthly orders instead of by units received, and shows up as a per-order variable cost it never was.

The high-turn SKU trap

Because receiving fees are amortized per unit received, high-velocity SKUs absorb the smallest per-unit share. Book those same fees into per-order fulfillment instead and the cost gets spread by orders — which punishes your bestsellers with a cost their velocity would have diluted. Your winners look weaker than they are.

How to detect it in your P&L

Pull your last three 3PL invoices and split the line items into two columns: inbound (receiving, unloading, palletizing, putaway, container fees) and outbound (pick, pack, postage, packaging, insert handling). If the inbound column is more than 5–10% of the total and your P&L only shows a single fulfillment line, you're almost certainly mis-booked.

The second signal is a suspicious per-order fulfillment number. If your reported per-order 3PL cost spikes in months you received a container and dips in months you didn't, you're expensing an inventory event as an order event.

Benchmark

Contribution margin distortion when a €4,200 container receiving fee is mis-booked into fulfillment (SKU sold at €35, 40% gross margin, 6,000 units received)

SKU velocityCorrect: fee in landed COGSMis-booked: fee in per-order fulfillmentCM per order distortion
High-turn (4,000 orders/mo)€0.70 / unit€1.05 / order-€0.35
Mid-turn (1,500 orders/mo)€0.70 / unit€2.80 / order-€2.10
Slow-turn (400 orders/mo)€0.70 / unit€10.50 / order-€9.80

How to fix it

Create two separate GL accounts: "Inbound handling — capitalized to inventory" and "Outbound fulfillment — per order." When the 3PL invoice arrives, split the line items between them before posting. Receiving, unloading, container-level surcharges, and putaway go to the first; pick, pack, and outbound labels go to the second.

For landed COGS, take the total inbound handling fee for a shipment and divide by units received. Add that per-unit figure to product cost, freight, duty, and inbound insurance to get true landed cost. That's the number that should flow into gross margin and — downstream — into any per-order contribution margin you calculate.

If you already run per-order profitability inside a tool like Metricuno or a BI stack, update the fulfillment cost field to exclude receiving. Historic reports will shift, but they'll shift toward accuracy — your bestselling SKUs will suddenly look as profitable as they actually are.

Rule of thumb

If the fee is charged because inventory arrived, it belongs in landed COGS. If the fee is charged because an order shipped, it belongs in per-order fulfillment. Storage sits in a third bucket — period cost, allocated to inventory carrying, never to individual orders.

Experiment ideas once your CM is clean

Re-rank your SKUs by true contribution margin per order after the fix. The reshuffle is usually significant enough to change which products deserve paid-media budget, homepage real estate, and email placement. Rerun your MER and ROAS thresholds against the corrected CM before locking next quarter's targets.

Then run experiments where accurate CM actually matters: free-shipping thresholds, bundle pricing, and subscribe-and-save discount depth. Each of these is a CM-per-order decision, and mis-booked receiving fees will push you to the wrong answer on all three.

Frequently asked

Frequently asked questions

They're COGS — specifically, part of landed cost. Receiving fees are incurred to bring inventory into a sellable state, which meets the capitalization test under both GAAP and IFRS. They should be amortized across the units received in that inbound shipment.

Inbound handling is triggered by inventory arriving: unloading a container, palletizing, counting, and putaway. Outbound fulfillment is triggered by a customer order: pick, pack, label, and ship. The trigger event determines which bucket the fee belongs in.

Ask your 3PL for a line-item breakdown by activity code — every reputable 3PL can produce one. Then map each activity to inbound (capitalize to inventory) or outbound (per-order fulfillment). Storage fees sit in a third bucket as an inventory carrying cost.

Yes, in opposite directions. If receiving sits in per-order fulfillment, gross margin looks artificially high (COGS is understated) while contribution margin looks artificially low. Fixing the classification lowers gross margin slightly and raises CM per order — often materially on high-turn SKUs.

Divide the total inbound handling fee for that container by the units received in it. Add that per-unit amount to product cost, freight, duty, and inbound insurance to get landed unit cost. Every unit sold from that receipt carries the same per-unit receiving cost until the inventory is depleted.

Neither. Storage is a period cost tied to holding inventory, not to receiving it or shipping it. Most DTC brands book storage to an inventory-carrying-cost line inside COGS or to warehousing OpEx, but never per-order — orders don't cause storage, time does.

Usually no — restate the classification going forward and add a note. For unit-economics reporting inside your analytics stack, though, recalculate historical CM per SKU so trend comparisons remain apples-to-apples. Otherwise the fix will look like a one-time margin jump.

Per-order 3PL allocation is the broader exercise of assigning outbound activity costs to individual orders for CM analysis. Handling inbound receiving fees is a specific sub-decision within that: keep them OUT of the per-order calculation and IN landed COGS so per-order fulfillment reflects only shipment-triggered work.

FBA inbound placement and receiving fees follow the same principle: capitalize to landed COGS. FBA fulfillment fees (pick/pack/ship) are per-order and belong in fulfillment. Drop-ship is different — there's no receiving event, so the entire per-order fee is outbound fulfillment.

Often yes. A correctly cleaned per-order fulfillment number is usually lower than the mis-booked version, which means your true break-even AOV for free shipping is lower too. Many brands discover they can afford a more aggressive threshold once receiving fees are moved out of the per-order line.

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.