A seller using a third-party logistics provider, or a mix of Amazon FBA and a 3PL for other channels, typically receives one invoice a month covering storage, receiving, pick-and-pack, and shipping. Booking the whole invoice to a single “fulfillment expense” line is the fastest way to lose visibility into which part of that cost belongs in the cost of the product and which part is closer to a fixed operating overhead. The two behave differently, and mixing them distorts both per-unit margin and monthly profit.
Two Different Kinds of Fulfillment Cost
A 3PL or FBA invoice bundles fees that answer two different questions: what did it cost to get this specific unit ready to ship, and what did it cost to hold inventory in general during the period.
Per-unit, transaction-based fees move with each sale and belong in cost of goods sold, folded into the landed cost of the unit sold, the same way freight-in and duties are, as covered in Landed Cost for Canadian E-Commerce Sellers. These include pick-and-pack fees, per-order packaging materials, and outbound shipping charged per shipment.
Storage and holding fees accrue against inventory sitting in the warehouse regardless of whether anything sold that month. These behave more like rent: a period cost tied to how much inventory is on hand and how long it stays there, rather than to a specific unit sold. Monthly storage fees, long-term storage surcharges, and receiving or inbound processing fees fall into this category.
Treating both as one lump operating expense understates COGS on slow-moving inventory and overstates it on fast-moving inventory, since the storage cost accumulates the longer a unit sits unsold, but a single blended rate assigns the same cost regardless of how long each unit actually stayed on the shelf.
Building the Per-Unit Fulfillment Cost
Pick-and-pack and per-shipment fees are usually stated per unit or per order on the 3PL invoice already, which makes folding them into landed cost straightforward: add the average per-unit pick-and-pack fee to the unit’s landed cost at the point of sale, alongside the purchase cost, freight-in, and duties already covered in the landed cost calculation.
Inbound receiving fees are less direct. A 3PL that charges per pallet or per carton to receive a shipment is charging against the inventory batch as a whole, not against individual units at the point of sale. Add the total receiving cost for a shipment to that shipment’s landed cost, spread across the units in it, the same way freight-in is allocated. A shipment of 2,000 units with a CAD $400 receiving fee adds CAD $0.20 per unit to that batch’s landed cost, applied consistently with whichever costing method (FIFO or weighted average, see Inventory Costing Methods: FIFO vs Weighted Average) the seller already uses.
Storage Fees as a Period Cost, With One Exception
Ongoing monthly storage fees, charged on inventory volume or cube regardless of sales activity, are typically booked as an operating expense in the period incurred rather than allocated into per-unit COGS. Trying to allocate a monthly storage charge back onto specific units retroactively adds complexity that rarely changes a business decision, since the fee reflects general holding cost, not a cost directly traceable to a specific unit’s eventual sale.
The exception is long-term storage surcharges, which most 3PLs and Amazon FBA specifically apply to slow-moving inventory that has aged past a threshold (commonly 271 or 365 days for Amazon FBA). These surcharges are a direct, visible signal of a specific batch’s carrying cost and are worth tracking against the SKU or batch that triggered them, even if the accounting entry still books to a period expense account. That tracking is a useful early signal for a future write-down or reorder decision: a SKU accumulating repeated long-term storage surcharges is telling the seller something about sell-through, independent of how the fee itself is booked.
Chart of Accounts Setup
Within the fulfillment cost category of the chart of accounts described in Chart of Accounts Setup for E-Commerce Sellers, separate the transaction-based and period-based fees into distinct accounts rather than one combined “3PL fees” line:
- Inbound receiving fees (COGS, allocated into landed cost by shipment)
- Pick-and-pack and outbound shipping fees (COGS, per unit or per order)
- Storage fees, standard (operating expense, period cost)
- Long-term storage surcharges (operating expense, but tracked by SKU for the write-down review)
- Other 3PL fees (returns processing, disposal, relabeling, kitting, as their own line if material)
This split is what makes the monthly income statement’s gross margin figure reflect actual per-unit economics rather than a number that moves with how much inventory happened to sit in the warehouse that month.
Multiple Fulfillment Locations and Providers
A seller splitting inventory between Amazon FBA and a separate 3PL, or running product through more than one 3PL, needs each provider’s fee schedule tracked separately, since per-unit pick-and-pack and storage rates commonly differ between providers. Allocating a blended average fulfillment cost across all channels understates true margin on the channel using the more expensive provider and overstates it on the cheaper one. This matters directly for multi-channel reconciliation: the same SKU sold through Amazon FBA and through a Shopify order fulfilled by a separate 3PL can carry two different true landed costs, even before accounting for platform fees.
For FBA-specific inventory sitting across US and Canadian fulfillment centres, the location and physical custody questions covered in Amazon FBA US Inventory and State Nexus Exposure apply on top of the fee-tracking question here: both the cost allocation and the inventory location need to be reconciled from the same underlying data.
GST/HST on Fulfillment Fees
Fees charged by a Canadian-registered 3PL are generally subject to GST/HST like any other service invoice, and the ITC follows the normal documentation and registration verification rules. Fees from a US-based 3PL or from Amazon’s US fulfillment network are typically not subject to Canadian GST/HST at the point of invoicing, though self-assessment questions can arise depending on the specific service and how it is structured. Verify each provider’s invoice shows GST/HST separately when applicable, rather than assuming a flat percentage applies across every fulfillment fee line, since receiving, storage, and pick-and-pack can occasionally be billed by different entities within the same provider group.
Reconciling 3PL Invoices to Inventory Movement
A 3PL invoice should be checked against actual inventory activity for the period, not paid and booked on faith. At minimum, confirm the units received on the invoice match what was actually shipped in, the units picked and packed match units sold or shipped out for the period, and the storage fee’s stated inventory volume roughly matches what the seller’s own records show on hand. A mismatch, more units billed for storage than the seller’s records show in stock, or receiving fees for a shipment that never appears in inventory, is either a 3PL billing error or a sign the seller’s own inventory records have drifted from reality. Either way, it is worth catching before it repeats for several months. This reconciliation sits alongside the checks covered in Inventory Reconciliation for Marketplace Sellers.
Common Mistakes
Booking the entire 3PL invoice to one operating expense account. This buries per-unit fulfillment cost inside a lump period expense and understates COGS, making gross margin look better than it actually is.
Ignoring long-term storage surcharges as just another fee. They are a direct signal of slow-moving inventory and should feed the write-down and reorder decision, not disappear into a generic fees account.
Using one blended fulfillment rate across multiple providers or fulfillment locations. True per-unit cost varies by provider and location; a blended average misstates margin on whichever channel is actually more expensive to fulfill.
Never reconciling the 3PL invoice to actual inventory activity. Billing errors and inventory record drift both hide inside an unreviewed monthly invoice.
Related Guides
- Landed Cost for Canadian E-Commerce Sellers covers the full per-unit cost build that inbound and pick-and-pack fees feed into.
- Chart of Accounts Setup for E-Commerce Sellers covers where fulfillment fee accounts sit within the broader chart structure.
- Inventory Reconciliation for Marketplace Sellers covers reconciling recorded quantities to actual on-hand and in-transit stock, the check this guide’s invoice reconciliation depends on.
Scope of This Guide
This guide covers how to classify and allocate 3PL and fulfillment-related fees between cost of goods sold and operating expense, and how to reconcile fulfillment invoices to actual inventory activity. It does not cover:
- choosing between Amazon FBA, a third-party 3PL, or self-fulfillment as a business decision
- negotiating 3PL contract rates
- inventory write-down accounting for obsolete or aged stock beyond the storage-surcharge signal noted above
The goal is for a seller to look at a 3PL invoice and know which lines belong in per-unit product cost, which belong in period operating expense, and how to catch a billing or inventory-record mismatch before it repeats.