September 28, 2026

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.

2
247 Fulfillment 247 Fulfillment
How to Calculate Fulfillment Cost per Order 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

  1. Export shipped orders with order ID, channel, SKU, quantity, package, weight, dimensions and carrier service.
  2. Join the 3PL invoice at the billed-event level.
  3. Join the carrier invoice at the tracking-number level.
  4. Map packaging from the approved packout or actual material scan.
  5. Allocate only genuinely shared charges and document the driver.
  6. Group orders into decision-useful profiles: one-item, multi-item, oversized, subscription, wholesale or marketplace.
  7. Investigate the ten highest-cost orders and the five largest month-over-month changes.
  8. 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.