How to Calculate Fulfillment Cost per Order by SKU and Channel
A blended fulfillment average hides expensive order profiles. Use this cost stack and hypothetical example to measure by SKU and channel.
Direct answer: Calculate fulfillment cost per order by assigning every variable warehouse and shipping charge to the order that caused it, then allocating shared monthly costs with a stated driver. Report the result by SKU profile and sales channel. A single blended average hides the orders that consume margin.
Start with the decision, not the spreadsheet
“What is our fulfillment cost?” is too broad. The useful questions are more specific: Is a wholesale carton profitable? Does a marketplace order cost more than a direct-to-consumer order? Which SKU creates handling surcharges? Would a free-shipping threshold improve or weaken contribution margin?
Define one consistent measurement unit first. For most brands, that unit is a shipped order. Keep product cost and marketing spend in the broader contribution-margin model, but make the fulfillment view detailed enough to explain:
- receiving and storage;
- pick, pack and order-level fees;
- packaging materials and special inserts;
- postage, fuel, demand and accessorial charges;
- returns processing and reshipments;
- shared platform, account and minimum charges.
Build the cost stack
Use five buckets so the arithmetic remains auditable.
| Bucket | Typical contents | Best allocation driver |
|---|---|---|
| Order activity | base order, first pick, additional picks, kitting | actual order lines or billed events |
| Materials | carton, mailer, tape, void fill, inserts | actual packout/BOM used |
| Transportation | postage, fuel, residential, remote, demand fees | carrier invoice or shipment rating |
| Inventory activity | receiving, storage, cycle counts, disposal | units, pallets, bins, cubic volume or days held |
| Shared costs | platform fee, account minimum, reporting | orders, revenue, or another declared driver |
Do not allocate a charge merely because it is convenient. A large-package fee belongs to the shipment that triggered it. A monthly platform fee can be allocated across orders because no single order caused it. A storage charge may be better assigned to SKUs using cubic volume and time rather than unit count.
Hypothetical worked example
Assume a Canadian brand ships 1,000 orders in a month. All figures below are hypothetical CAD and exclude product cost, marketing, tax and returns.
| Channel/profile | Orders | Pick/pack | Materials | Postage and accessorials | Allocated shared cost | Total per order |
|---|---|---|---|---|---|---|
| DTC, one small SKU | 600 | $2.60 | $0.65 | $10.20 | $0.40 | $13.85 |
| DTC, three-item bundle | 250 | $3.70 | $1.10 | $12.80 | $0.40 | $18.00 |
| Wholesale case | 150 | $5.40 | $2.20 | $24.00 | $0.40 | $32.00 |
The $0.40 shared allocation comes from a hypothetical $400 monthly platform charge divided by 1,000 orders. Total monthly fulfillment cost is:
(600 × $13.85) + (250 × $18.00) + (150 × $32.00) = $8,310 + $4,500 + $4,800 = $17,610 CAD. The blended average is $17.61 per order.
That blended average is mathematically correct and operationally dangerous. Pricing every channel as though it costs $17.61 would overstate the small DTC order by $3.76 and understate the wholesale case by $14.39. The recommendation changes if wholesale freight is customer-paid or if cases move on pallets; that is why channel terms must sit beside the cost.
Turn the result into unit economics
For each profile, add net product revenue and subtract product cost, discounts, payment fees and fulfillment cost. A hypothetical small-SKU order with $42.00 CAD net revenue, $13.00 product cost, $1.30 payment fee and $13.85 fulfillment cost has a pre-marketing contribution of $13.85:
$42.00 − $13.00 − $1.30 − $13.85 = $13.85 CAD.
If the same order attracts a $7.70 additional-handling fee because a poorly selected carton changes the package profile, contribution falls to $6.15. That is not a warehouse-average problem; it is a SKU-and-packout problem.
Monthly worksheet
- Export shipped orders with order ID, channel, SKU, quantity, package, weight, dimensions and carrier service.
- Join the 3PL invoice at the billed-event level.
- Join the carrier invoice at the tracking-number level.
- Map packaging from the approved packout or actual material scan.
- Allocate only genuinely shared charges and document the driver.
- Group orders into decision-useful profiles: one-item, multi-item, oversized, subscription, wholesale or marketplace.
- Investigate the ten highest-cost orders and the five largest month-over-month changes.
- Reconcile the total back to invoices so the analysis is complete.
Common mistakes
Do not divide the entire logistics invoice by order count when the invoice also contains storage, projects or inbound work. Do not use the quoted base transportation rate when the invoice contains fuel and accessorials. Do not allocate returns to every sale if the purpose is to compare fulfillment execution; instead report return cost and return rate beside the outbound cost. And do not assume negotiated rates automatically produce lower total cost if packaging, zones or address quality change.
A good cost model complements a 3PL invoice audit and a dimensional-weight shipping audit. If you need order-level data structured around those decisions, 247 Fulfillment can help define the exports, allocation logic and exception review before the next pricing cycle.