A packaging manufacturer in Ontario shipped roughly the same orders to the same twelve customers in August and again in September. Same lanes, same carriers, same cartons. The September freight bill landed 14 percent higher. When the controller asked which customers had absorbed that increase and which had quietly stopped being profitable, nobody in the room could answer. They had one number to work with, average cost per shipment, and it had gone up. That was the whole story it could tell.
Three cost inputs moved inside two weeks
That average moved because three separate cost inputs moved at once, for three unrelated reasons.
Diesel set a record. The U.S. Energy Information Administration's weekly on-highway average reached $5.967 a gallon on September 7, passing the previous high set in June 2022, and pushed past $6 in the days that followed. Fuel surcharge tables are indexed to that benchmark, so every truckload and LTL move on your network repriced itself without a single rate negotiation.
Duty changed twice. A further round of 50 percent U.S. tariffs took effect on September 15, covering roughly 110 additional Canadian product lines including furniture, building materials and machinery inputs, layered on top of the measures from late August. Canada's counter-tariffs on more than 700 U.S. products had started the week before. If your bill of materials crosses that border, the duty line on your landed cost moved twice inside a month. We looked at how operations absorbs that kind of shift in what a tariff deadline does to landed costs.
Ocean firmed. Carriers withdrew close to a fifth of Asia to North America capacity through blank sailings and carried a second general rate increase through mid-September, which is what tends to happen when capacity discipline meets peak season. The individual charges that show up on the resulting invoice are broken down in ocean freight surcharges explained.
Any one of those is a rate conversation. All three inside a fortnight is a margin problem, and a margin problem is invisible in an average.
Why average cost per shipment lies
Averages hide dispersion, and in freight the dispersion is enormous. Two customers can generate identical revenue while one costs you three times as much to serve. The drivers are mundane and they compound: order size and frequency, delivery geography, dock and appointment behaviour, service level, packaging, returns rate, and how often someone expedites to protect a promise.
Averages also hide direction. A 14 percent rise in average cost per shipment is rarely 14 percent everywhere. It is more often two percent across most of the book and sixty percent on a handful of orders that happen to be small, remote, expedited, or newly dutiable. Those are the orders repricing decisions should start from, and they are exactly the ones an average dissolves.
This is the same failure mode that makes most cost reporting arrive too late to act on. A monthly variance report tells you the quarter went badly. It does not tell you which customer to call. Moving that cadence from monthly variance to weekly exposure is the shift we argued for in supply chain analytics for cost control, and cost to serve is the unit that shift needs. The distinction between a metric that renders a verdict and a metric that changes a decision is worth being strict about, and it is the test we applied in which supply chain KPIs matter most for end-to-end reporting.
The five buckets a defensible model needs
Cost to serve is not one number you look up. It is five buckets you allocate down to the order.
Line-haul freight. The actual charge on the actual invoice, not the rate you negotiated and not the planned cost in the order record. The gap between contracted and invoiced is where a surprising amount of margin goes.
Accessorials and surcharges. Fuel, detention, demurrage, liftgate, redelivery, reweigh, residential, appointment fees. This bucket routinely runs 15 to 30 percent of a freight bill and is almost never allocated to anything. It sits in a lump at the account level, which means the customers generating it look exactly like the customers who do not. Detention and demurrage alone are worth separating properly, because the two charges have different owners and different fixes. Cost to serve is a P&L question, and it has a balance-sheet twin worth running alongside it: the capital locked up in goods still in transit on the same lanes.
Duty and clearance. Duty by HS code, brokerage fees, and the cost of any reclassification. With tariff schedules changing on dated deadlines, this bucket needs a date dimension, not a static rate.
Warehouse handling. Pick and pack labour minutes, packaging materials, storage days, and rework. A customer who orders six units eleven times a month costs materially more to handle than one who orders sixty-six once.
Service recovery. Expedites, reships, returns, and credits issued. Finance tends to book these as one-offs. Operations knows they are weekly. If you leave this bucket out, your most demanding customer will always look cheaper than they are.
The discipline that makes the model hold up is granularity of attribution: allocate each charge to a shipment or order identifier, never to a month. If you can tie a charge to a shipment ID, tie it there, even when it is easier not to.
Getting the numbers into one place
This is the step where most cost-to-serve projects quietly die, and the reason is structural rather than analytical.
The five buckets live in five places. Line-haul and accessorials sit in carrier invoices and the TMS. Duty sits with the broker. Handling sits in the WMS. Order value and customer sit in the ERP. None of those systems shares a key with the others. The same physical shipment carries three different identifiers, and the same charge code means two different things at two different carriers. So the first real task is not analysis, it is normalization: one shipment identity, one charge taxonomy, one currency and date convention across the whole set.
That reconciliation work is what a command center like Orkestra exists to do. It sits above ERP, TMS and WMS rather than replacing any of them, and its 200-plus pre-built connectors feed a normalized data layer, so a charge raised by one carrier and the equivalent charge from another land in the same field with the same meaning. Connecting the systems without an ERP replacement project is a solved problem now, which we covered in how to connect your supply chain systems. Until that layer exists, cost to serve stays a quarterly spreadsheet that is stale before it is finished, and a stale cost-to-serve number cannot support a pricing conversation.
What the number changes once you have it
A cost-to-serve figure that is per order and refreshed weekly changes four decisions rather than one. It tells you where surcharge pass-through is justified and where it would cost you an account. It sets real minimum order quantities and shows which orders are worth consolidating. It changes channel and lane mix. And it tells you which customers need a service conversation instead of a discount.
The gains are usually unglamorous and repeatable rather than dramatic. Bridgestone found $11.6K in weekly savings across 22 shipments through data normalization, production planning and customizable alerts, which is what this looks like when the underlying data is trustworthy: not one large renegotiation, but a steady stream of small corrections that used to be invisible.
Start with one lane and one customer
You do not need a full model to start. Pick your highest-volume lane and your most demanding customer. Pull ninety days of actual invoices for both. Allocate the five buckets to shipment IDs, then set the result against the revenue on those same orders. That is a week of work and it produces a number you can defend in a room.
You will almost certainly find one customer whose cost to serve moved considerably more than your average did, and that customer is where the conversation should start. From there the question stops being whether to build the model and becomes how often you can afford to refresh it, which is a question about how your cost data is wired rather than a question about analytics. See how Orkestra's analytics turns normalized operational data into cost intelligence you can act on in the same week the invoice arrives.
