Leak 08 · Freight & Cost-to-Serve - Freight recovery leakage

You pay the carrier $100 and bill the customer $60, or nothing. Across every shipment in a year, the gap is often a six-figure line that never appears on any report.

What is it?

Every shipment has two freight numbers: what the carrier charged you, and what you charged the customer. They are recorded in different places, by different people, at different times. The carrier invoice arrives weeks after the order was invoiced. Nobody compares the two.

The gap comes from many small decisions. A CSR waives freight to close an order. A customer’s “free freight over $500” term is applied to a $300 order. The ERP freight table has not been updated since the last carrier rate increase. A rush shipment goes out at next-day rates and is billed at ground. Residential, liftgate, and fuel surcharges are paid but never passed through.

None of these look like a leak on the day. Together they mean the distributor is quietly paying to deliver its own products.

Where does it occur?

At order entry, where the freight charge is set or waived; in shipping, where the actual service level is chosen; and in accounts payable, where the carrier invoice is approved without being matched to the order it belongs to.

Family
Freight & Cost-to-Serve
Primary owner
Operations Manager / CFO
Secondary owners
Customer Service Manager, Sales Managers, Shipping
Primary impact
Gross margin
Typical data source
Carrier invoices, ERP order freight charges, customer terms
Detection difficulty
30-day measurability

Ask yourself

What percentage of the outbound freight you pay carriers do you bill back to customers?

Yes, partially, no, or don’t know. “Don’t know” is the most useful answer, because it points at the test below.

What does it look like?

Warning signs. None of these proves the leak exists. They tell you where to look.

  • Freight expense growing faster than shipments or revenue.
  • Freight revenue on the P&L well below freight expense, with no policy that explains the gap.
  • Freight charged as a flat estimate that has not been reviewed in years.
  • CSRs able to zero the freight field without approval.
  • Carrier surcharges (fuel, residential, liftgate, address correction) approved in AP but absent from customer invoices.
  • Free-freight thresholds applied inconsistently or to customers who never agreed to them.

What data do I need?

The minimum viable set. Most of it is already in your ERP.

FieldExample
Order or invoice numberSO-44120
CustomerAcme Manufacturing
Ship date5/2/2026
Freight charged to customer$18.00
Freight terms on the orderPrepaid & add / Free over $500 / Collect
Carrier and service levelUPS Ground
Carrier invoice amount, including surcharges$31.40
Tracking or PRO number, to match the two1Z…
Order value$412.00

The initial check

Start with a small sample. Gathering the exports, agreements, or observations is separate from running the check; agree that work with the person who owns the records.

  1. 1Pull last month’s total outbound carrier spend from AP, and last month’s total freight billed to customers from the sales ledger.
  2. 2Divide the second by the first. That is your freight recovery rate.
  3. 3Now take one week of shipments and match each carrier charge to the order it shipped. Sort by the difference between what you paid and what you billed.
  4. 4Look at the top twenty gaps. Note the freight term on the order and who set the charge.
Freight recovery rate = freight billed to customers ÷ freight paid to carriers

Then ask one question: Of the twenty largest gaps, how many were a deliberate commercial decision, and how many were nobody’s decision?

The 30-day test

Match a full month of carrier invoices to orders at the shipment level using tracking numbers. For each shipment, record what was paid, what was billed, the freight term, the service level, and any surcharges. Then classify each gap.

Cause of gapShipmentsPaidBilledGap
Term honored correctly (free freight earned)640$9,800$0$9,800
Free freight below the threshold210$3,900$0$3,900
Flat charge below actual cost1,150$21,300$13,100$8,200
Surcharges not passed through380$2,700$0$2,700
Expedited service billed as ground55$2,900$600$2,300
Waived by CSR, no reason recorded140$2,400$0$2,400

Hypothetical distributor, one month. Fictional numbers.

The first row is not a leak. It is a commercial term you chose, and it belongs in the price. Every row below it is a candidate. In this example, about $19,500 a month is leaking for reasons that range from a stale rate table to nobody being asked.

Look separately at which customers and which CSRs account for the waived and below-threshold rows. The distribution is rarely even.

How much could it be costing us?

A conservative range, not a headline. The goal is a number management can trust enough to investigate.

Annual carrier spend × (target recovery rate − current recovery rate) × realistic recovery rate

Worked example

  • $520,000 annual outbound carrier spend
  • Current recovery rate of 48%
  • A realistic target of 70%, after honoring genuine free-freight terms
  • Assume 60% of the gap can be closed without losing orders

$520,000 × (70% − 48%) × 60% ≈ $68,600 per year

The target rate depends on your market. Some distributors run at 90% recovery, some at 40% by design. The leak is the difference between what you decided and what is happening.

Common root causes

Fixes fall into three layers. Not every problem needs software, and almost none needs AI first.

Process
No freight policy, or one that is not written down, so every order is a judgment call. Nobody reconciles carrier invoices to orders.
Data
Freight paid and freight billed live in different systems with no shared key. The ERP freight table reflects rates from two carrier increases ago.
Technology
Order entry cannot calculate the actual freight cost at the moment the charge is set, and nothing flags a waived charge for review.

What should we do?

Start with the simplest intervention that could solve it. Move down the list only if the one above is not enough.

  1. Level 1

    Visibility

    A monthly freight recovery rate, and a report of waived and below-cost freight by customer and CSR.

  2. Level 2

    Policy and guardrails

    A written freight policy: who gets free freight, at what threshold, and who can waive it. Waivers require a reason code.

  3. Level 3

    Rate table maintenance

    Update the ERP freight estimate each time a carrier rate changes, and add surcharge pass-through rules.

  4. Level 4

    Workflow intervention

    Show the estimated actual freight cost in the order-entry screen and warn when the charge is below it.

  5. Level 5

    Automated reconciliation

    Match every carrier invoice line to its shipment automatically, flag gaps by cause, and queue disputes and rebills for review.

Where AI helps

  • Reading carrier invoices and surcharge detail in whatever format they arrive.
  • Matching shipments to orders when tracking numbers are missing or mistyped.
  • Classifying the cause of each gap for the review queue.

Where AI probably doesn’t

If your recovery rate is 45% because there is no freight policy, write the policy. The rate table and the reconciliation report will do more than any model.

Before you call it a leak

  • Free freight that a customer earned under an agreed term is a cost of the price, not a leak. Separate it before measuring.
  • Inbound freight, transfers, and drop-ship freight follow different rules. Keep the test to outbound customer shipments.
  • Carrier invoices contain errors too. A gap may be a carrier overcharge worth disputing rather than a customer undercharge.

ERP note. Most ERPs store the freight charged on the order. The carrier’s actual charge usually lives only in AP or the carrier’s portal. The match key is the tracking number, which many ERPs store in a shipment record if the shipping system writes it back.

Think this might be happening in your business?

Turn the finding into a next step.

If the numbers say there is something there, send us what you found and we will help you decide whether it is worth a full investigation. No transaction files needed for that conversation.

Let’s start with one thing.

What would better performance look like?

Bring a result you want to improve, a symptom, or a workflow you already understand. You do not need to know the bottleneck yet. We’ll help choose what to investigate first.

No transaction files needed for the first conversation.