Your margin is not leaking from linehaul
It leaves through accessorials and unrecovered exceptions, one plausible invoice at a time.
At one LTL broker processing around 12,000 carrier invoices a month across eight carriers (C06), a rule nobody had ever approved decided the margin line: any invoice variance under fifty dollars went unchallenged.
It was not a policy. It was arithmetic. Building one dispute — pulling the rate confirmation, finding the contracted accessorial schedule, locating the operational event behind the line, writing the letter — took forty-five minutes. At forty-five minutes a dispute, a thirty-eight dollar reweigh is not worth contesting, so it was not contested. At 12,000 invoices a month, thousands of small variances were never challenged.
We dropped the threshold from $50 to $5 and monthly recovery went from $8,000 to $67,000 (C06). No rate was renegotiated. No lane changed. The freight was the same freight. What changed is that exceptions became cheap to see and cheap to contest.
That is the whole argument of this piece, and it applies in both directions — money you never recovered from a carrier, and money you never billed a customer. The linehaul number is watched by everyone in your building. The margin leaves somewhere else.
Linehaul is the number everybody watches
Linehaul is quoted, compared, benchmarked and argued over. It appears on the rate confirmation before the truck moves. Three people know what it should be, and if it is wrong, somebody catches it that week.
Accessorials have none of those properties. They arrive after the fact, on a different document, in a different cycle, keyed to an event that may or may not exist anywhere in your system. Detention, layover, TONU, lumper, driver assist, reconsignment, redelivery, inside delivery, limited access, liftgate, sort and segregate, a reweigh that moves the shipment into a different NMFC class, a fuel surcharge computed off an index date nobody re-checked. Each one is small. Each one is defensible on its own. In aggregate they are the difference between the margin you modeled and the margin you booked.
And they are structurally invisible, because the entity you are billing for is not a thing. It is a duration.
You cannot bill a duration you did not observe
Detention is the clock that starts when the driver arrives and the free time expires. Demurrage is a different clock with a different counterparty — the one running while a container sits inside the terminal past its free days, with per diem taking over once the box leaves the gate. Deadhead, if you run dedicated or asset capacity, is a third: empty miles that the telematics unit records faithfully and that nobody prices.
All three are derived from timestamps. Which means every one of them is an engineering problem before it is a finance problem.
Here is what usually exists instead of a timestamp. The driver texts dispatch that he has been sitting at the dock since nine. Dispatch remembers, or does not. The facility’s dock scheduling system holds an appointment time that is not the arrival time. The telematics platform holds a geofence enter event, a geofence exit event, and a gap in the middle where the truck was in a dead zone and the pings backfilled out of order twenty minutes later. The carrier’s EDI 214 says AF at 09:14 and X1 at 14:52, on the carrier’s clock, which is not your clock.
Four sources, four timestamps, no arbiter. So the accessorial gets billed if someone remembers, at a number someone estimates, against a rule someone looks up. That is not a control. That is a habit.
The position I will defend: detention should be derived from geofence dwell, reconciled against the dock appointment, and cross-checked against the 214 — with an explicit rule for which source wins and an explicit tolerance for clock skew. Not asked for. Derived. A charge that depends on a human remembering to raise it is a charge you have already decided to lose most of the time.
The four ways a charge disappears
In the reconciliation work behind C01 and C06, leakage fell into the same four buckets, and each needs a different fix.
The event never became a record. The truck waited, the pallet was restacked, the second stop happened. Nothing wrote it down in a place the billing run can read. This is the largest bucket and the only one you cannot detect from your invoices, because there is nothing to detect — the money was never in the system to begin with.
The record exists but has no price. The event landed in the TMS as a note, a status, a free-text field. No rule maps it to the customer’s rate agreement, so it never becomes a line. Every operations team has a field like this, and every one of them believes it is temporary.
It was paid but never rebilled. You accepted the carrier’s detention charge and did not pass it through, because the pass-through rule lives in a contract PDF rather than in the rating engine. This one is pure margin, straight out.
It was billed and then conceded. The customer or the carrier pushed back, and there was no evidence package — no contracted rate, no billed amount, no variance, no clause. So it went away. That is the forty-five-minute problem from the top of this piece, and it is the cheapest of the four to fix.
Only the aggregate tells you
The reason this survives audits is that every individual invoice looks plausible. That is not a figure of speech, it is the mechanism. A fuel surcharge two points off looks like a fuel surcharge. A reclass from class 70 to class 85 looks like a reclass. A missing detention charge looks like a shipment where the driver was not detained.
You cannot find this by sampling, because the leak lives in the tail. Pull twenty invoices at random and they will all be fine — they are supposed to be. The signal is in the distribution: what share of your shipments generate zero accessorials, and does that share differ by carrier, by lane, by customer, by the shift that keyed the load. When one carrier’s detention frequency is a third of another’s on the same lane profile, you have not found a better carrier. You have found a carrier whose events you are not capturing.
At the non-asset 3PL in C01 — LTL, FTL, parcel and international, East Coast and Midwest — the aggregate came to $45,000 a month in combined write-offs and unbilled charges. Freight audit ran in Excel after the fact. Nobody in that building was careless. The number was simply not visible from any single desk.
What the fix looks like in code
Two moves, and they are independent — you can do either first.
Make the billable record a construction, not a decision. In C01 we rebuilt it so that every tariff-bearing operational event creates a billable record by construction. The event stream is the source of truth; a canonical event model sits behind the carrier adapters; the billing side subscribes to it. A delivered service cannot go unbilled because there is no code path in which it can. This is the part that argues for event-driven architecture on the merits rather than as a preference: you are not choosing a message bus for throughput, you are choosing it because the thing you are trying to bill for is an event, and a nightly job over table state cannot reconstruct an event it never saw. Monthly losses went $45,000 → $3,800 (C01), and freight audit now covers 87% of invoice volume with no manual touch.
Make disputing cheap enough to do at $5. In C06 the audit engine checks every line against the contracted rate card — base rate, fuel surcharge formula, the full accessorial schedule — and flags variances with the evidence already assembled: contracted rate, billed amount, variance, and the clause it violates. Invoices arrive as PDFs from some carriers and EDI 210 from others; both normalize into one canonical invoice object, and every line traces back to the shipment event behind it. Manual normalization went from three hours a day to zero, and the four-person AP team absorbed 40% volume growth with no added headcount (C06).
The second move funds the first. Recovery tends to show up first; the event-capture rebuild takes longer and pays more.
Three numbers you can compute this week
You do not need us to find out whether you have this problem. You need ninety days of your own data and an afternoon.
Accessorial capture rate. What percentage of shipments carry at least one accessorial line, split by carrier and by customer? Then ask your operations lead what they think it should be. The gap between those two numbers, priced at your average accessorial, is the annualized size of bucket one.
Traceability rate. What percentage of carrier invoice lines can be joined programmatically to an operational event — not found by a human, joined by a key? If you cannot run that query at all, that is the answer.
Dispute win rate by carrier. If you do not measure it, your disputes are running blind, which is the condition C06 started in. If you do measure it and one carrier is an outlier, you are either being billed differently or contesting differently, and both are worth knowing.
If all three come back clean, your leak is process rather than code — an unenforced pass-through policy, a rate table nobody versioned, a customer contract that was never loaded. Fix that instead. It is cheaper and we would only confirm it.
Start where the money is leaking
A two-week reconciliation pass against ninety days of your own invoice data. $7,500, fixed scope. We tell you the size of the leak in dollars, with the evidence, and the findings document is yours whether or not we build anything together.