Redefining Technology

LogisticsAI Implementation & Best Practices

Machine learning freight matching in logistics: the models that pair loads with carriers

Machine learning freight matching is the use of predictive models to pair a load with the carrier most likely to move it well, at a price both sides accept. In logistics it is not one model but a stack: matching, rate prediction, acceptance probability, carrier reliability and cold-start — each trained on a different label.

Freight network operations scene with loads, carriers and lane pricing signals matched across a live board
Logistics · AI Implementation & Best Practices

Key takeaways

  1. Freight matching is not one model. It is a stack of at least seven: assignment, spot rate prediction, contract bid pricing, carrier acceptance, reliability scoring, cold-start for new carriers, and sequential matching for the next load. Each trains on a different label and fails in a different way, so treating them as one project is the most common architectural mistake in the domain.
  2. The offer log is the asset, not the model. An acceptance model can only learn from offers you actually recorded — including the rejected ones. Brokerages that log covers but not rejections have no training data for the single most valuable prediction in the business, and no amount of model work substitutes for the two years of logging they skipped.
  3. Rank by expected margin, not by lowest quoted rate. A carrier who quotes cheapest and accepts one offer in six is more expensive than a carrier who quotes higher and accepts four in five, once you price re-tender time, routing-guide depth and the cost of falling to spot.
  4. A freight marketplace is a closed feedback loop: your own prices generate the data your next price model learns from. Without a budgeted, monitored exploration share and off-policy evaluation, the price band narrows onto your current policy and the model becomes confidently wrong everywhere else.
  5. Matching quality does not fix brokerage unit economics. Convoy — well funded, technically strong, and further up this ladder than almost anyone — ceased core operations in October 2023. The lesson is structural: matching models move gross margin per load and cost to serve, and they move nothing else on the P&L. Report a unit-economics ledger next to every matching metric or the programme will be judged on the wrong number.

Abbreviations used on this page

TMS
Transport management system — the system of record for a load
TL
Truckload — a shipment that fills a trailer and moves point to point
LTL
Less-than-truckload — freight consolidated with other shippers' loads
RFP
Request for proposal — the annual contract freight bid
EDI
Electronic data interchange (204 load tender, 990 tender response, 214 status)
MC / DOT
Motor Carrier and Department of Transportation operating-authority numbers issued by the FMCSA
FMCSA
Federal Motor Carrier Safety Administration — the US carrier authority and safety regulator
SCAC
Standard Carrier Alpha Code — the four-letter carrier identifier used on tenders
CSA
Compliance, Safety, Accountability — the FMCSA's carrier safety measurement programme
RPM
Revenue per mile — the unit price a lane is quoted and settled in
GM/load
Gross margin per load — linehaul revenue minus carrier cost on a single covered load
OPE
Off-policy evaluation — estimating how a new pricing or ranking policy would have performed from logs of the old one

Free · 8 questions · ~3 minutes

Score your matching operation on the ladder

Eight questions, one at a time, about three minutes. Answer them and we build your personalised matching report — your rung on the ladder, your score on each of the four dimensions, and the specific blocker standing between you and the next rung — and send it to your inbox. Your result doubles as the baseline for your offer-log instrumentation.

0 of 8 answered

Question 1 of 8Matching signal quality

What does your system know about a carrier before it decides whether to offer them a load?

Everything a matching model can do is bounded by the carrier features available at decision time. Authority and equipment are table stakes; behaviour is where the signal is.

How the score maps to a stage
  • 05 — Stage 1, Manual matching. Manual matching is coverage by relationship and phone call — a person decides who gets the load, and the reasoning leaves no trace a system could learn from.
  • 611 — Stage 2, Assisted matching. Assisted matching is a person still deciding, but with a market rate index, a filtered carrier list and a suggested price on the screen beside them.
  • 1216 — Stage 3, Model-ranked. Model-ranked matching is a system that orders the carrier list and sets the opening price, with a person still constructing and sending every offer.
  • 1721 — Stage 4, Auto-matched. Auto-matched means a defined segment of loads is offered, priced and booked with no human touch, inside stated and monitored bounds.
  • 2224 — Stage 5, Self-pricing marketplace. A self-pricing marketplace sets prices continuously against its own measured supply and demand, and knows which part of what it learns is its own reflection.

What machine learning freight matching is — and what has to happen for a match

A definition, the seven prediction problems hiding inside the phrase, and the lifecycle a load actually travels from tender to covered truck.

Machine learning freight matching is the use of predictive models to decide which carrier should be offered which load, at what price, in what order — and to book the result. It replaces a chain of human judgements (who runs this lane, what will they take, will they actually show up) with a chain of predictions, each trained on a different label drawn from the operation's own history of offers, rate confirmations and delivery events.

The phrase hides at least seven distinct modelling problems, and conflating them is the most common architectural mistake in the domain. There is an assignment problem (which carrier gets which load, across the whole board at once). There is a short-horizon price prediction (what will this lane clear at in the next 24 to 72 hours) and a completely different long-horizon one (what should we bid in the annual RFP (opens in a new tab)). There is an acceptance prediction, a reliability score, a cold-start problem for carriers with no history, and a sequential problem about what the truck does next. Each trains on a different label, each fails differently, and a single team treating them as one system typically ships the easiest and calls it matching.

This page is about the network side of logistics AI — loads, carriers, lanes, prices and offers. It deliberately says nothing about what happens inside the four walls of a warehouse; picking, slotting, labour planning and robotics orchestration are a different problem with different systems of record and are covered separately. The systems of record here are the TMS, the load board, the carrier master and the settlement ledger, and the KPIs are first-tender acceptance, routing-guide depth, deadhead per covered load and gross margin per load.

How a load becomes a covered truck

The lifecycle a single load travels, with the model layer in the middle lane. Read the bottom-right edge first: every rejection is a training label, and the operations that throw it away are the ones that later cannot build an acceptance model. The load side and the carrier side both feed the model layer; only the model layer decides who is asked, at what price, in what order.

  • Data & feeds
  • System-of-record action
  • AI / model
  • Human in the loop
  • Where value leaks

The process, in words

  • On the load side, a shipper tender (EDI 204) or a spot request creates the load in the TMS, and a hard feasibility filter removes every carrier who cannot legally or physically take it — wrong equipment, lapsed authority, insufficient insurance, no hours of service left, appointment window unreachable. This filter is deterministic and belongs in code, not in a model; putting it in a model is how forbidden matches reach a carrier.
  • In the model layer, candidate generation narrows the feasible set to carriers with relevant history — this lane, an adjacent lane, or a plausible repositioning move — then the price model predicts your own cost to cover at this hour, and the acceptance model attaches a calibrated probability to each carrier at each price. The list is then ranked by expected margin, which is the only ranking objective that is not systematically wrong.
  • On the carrier side, capacity arrives through a load-board search, the carrier app or an inbound call, and reliability and compliance signals — FMCSA authority and CSA, tracking compliance, historical fall-off — feed the ranking rather than the filter, because behaviour is a matter of degree while authority is not.
  • The edge that matters most is the dashed one from rejection back into the model. A rejection is the single most informative event in the whole diagram, because it tells you a price a specific carrier would not take on a specific lane at a specific hour. Operations that log covers and discard rejections are discarding the training set for the only model that would have made the next offer better.
Step-by-step insights
The feasibility filter belongs in code, not in a model
Equipment type, operating authority, insurance limits, hazmat endorsement, hours of service and appointment feasibility are hard constraints with legal and safety consequences, and none of them is a probability. Teams occasionally fold them into the ranking model as features because it is convenient, and the model then learns to strongly disprefer infeasible matches rather than to forbid them — which means that under distribution shift it will eventually surface one. Keep the filter deterministic, version it, test it, and let the model rank only what has already been declared legal to run.
Candidate generation is where the latency budget is spent
Scoring every carrier in the network against every open load is computationally straightforward and operationally pointless — the useful candidate set for a given load is almost always in the low hundreds, defined by lane history, adjacency and plausible repositioning. Published work on truckload matching leans hard on spatial bucketing of origin and destination for exactly this reason: it turns an intractable pairwise problem into a lookup plus a rerank. Get candidate generation wrong and the ranking model never gets a chance to be right, because the good carrier was never in the list.
Cost to cover is not the market rate
A market index reports what a lane has been paying across all buyers. Your cost to cover is what this carrier base will take from you, this week, given your payment terms and your reputation for detention and quick pay. The two diverge most on exactly the loads where the money is: thin lanes, awkward hours, seasonal peaks. Train the price model on your own rate confirmations with the market index as one feature among many, and the residual — the gap between the index and your realised cost — becomes a measurable property of your carrier base rather than an unexplained variance.
Rank by expected margin, never by quoted price
Sorting the carrier list by cheapest quote optimises a number you do not pay. What you pay is the realised cost of the carrier who eventually accepts, plus the time spent reaching them, plus the risk of falling through the routing guide to spot. Expected margin — predicted revenue minus predicted cost, weighted by calibrated acceptance probability — collapses all three into one orderable number. Reps resist the change for about a month, because the top of the list is visibly dearer, and the offer log settles the argument every time.
Every rejection is a labelled counterfactual you already paid for
You showed a specific carrier a specific price on a specific lane at a specific hour and they said no. That is a labelled data point about the shape of supply, and it cost you nothing extra to generate because the offer was going to be made anyway. Log the carrier, the price shown, the offer window, the rank position and the outcome, including no-response as distinct from explicit refusal. Operations that start this log two years before they need it are the ones whose acceptance models work on the first attempt.
Routing-guide depth is the cost of being wrong
On contract freight, a rejection is not just a lost match — it moves the load to the next carrier in the routing guide, at the next price. Depth three or worse usually means the contracted rate is gone and the load is heading to spot, where the margin the annual bid assumed no longer exists. Measuring first-tender acceptance and mean routing-guide depth per lane converts model quality directly into money, and it is the cleanest way to show a finance team what an acceptance model is worth without ever mentioning a model metric.

The five rungs in detail

For each rung: what it looks like on a live board, the diagnostic signals a reviewer can check in an afternoon, the anti-pattern that traps operators there, and what leaving costs.

Matching maturity is a ladder with five rungs, and the rung you are on is decided by where the decision is made rather than by how good the model is. Manual matching keeps the decision in a person's head; assisted matching puts information beside them; model-ranked matching orders the list and sets the opening price; auto-matched removes the touch entirely for a defined segment; and a self-pricing marketplace closes the loop and then has to manage the fact that it has closed it.

Contribution released as the matching loop closes

The curve is not linear. Contribution stays close to flat through rungs 1 and 2, because information on a screen changes what a rep knows and not what the operation does. It inflects at rung 3, when ranking and pricing start to change which carrier is asked first, and again at rung 4, when the human touch finally leaves the load and cost to serve moves. It flattens again at rung 5 — not because the technology stops improving, but because the constraint has moved off the model and onto the unit economics of the business.

Contribution released per covered load by stage

  • Stage 1 · Manual matching — 22% of operators. Manual matching is coverage by relationship and phone call — a person decides who gets the load, and the reasoning leaves no trace a system could learn from.
  • Stage 2 · Assisted matching — 38% of operators. Assisted matching is a person still deciding, but with a market rate index, a filtered carrier list and a suggested price on the screen beside them.
  • Stage 3 · Model-ranked — 26% of operators. Model-ranked matching is a system that orders the carrier list and sets the opening price, with a person still constructing and sending every offer.
  • Stage 4 · Auto-matched — 11% of operators. Auto-matched means a defined segment of loads is offered, priced and booked with no human touch, inside stated and monitored bounds.
  • Stage 5 · Self-pricing marketplace — 3% of operators. A self-pricing marketplace sets prices continuously against its own measured supply and demand, and knows which part of what it learns is its own reflection.

Curve shape: logistic, plotted from the stage data above. Distribution: Illustrative, consistent with publicly reported marketplace disclosures.

Each rung below is written for a practitioner rather than a buyer. The hallmarks describe observable conditions on a live board, the diagnostic signals are checks you can run against your own TMS and offer log this week, and the anti-pattern is the specific mistake most often made trying to leave that rung.

Select a rung

Every rung's full detail is in the page source — the selector only changes which panel is visible, so nothing here depends on JavaScript to exist.

Stage 1

Manual matching

22% of operators sit here

Manual matching is coverage by relationship and phone call — a person decides who gets the load, and the reasoning leaves no trace a system could learn from.

Rung 1 is not incompetence, and it is important to say so before anything else. A good rep covering freight manually is genuinely fast, genuinely accurate about which carrier runs which lane on which day, and genuinely better than a badly specified model. Freight brokerage was built on exactly this skill and a great deal of it still is. The problem with rung 1 is not the quality of the decision — it is that the decision is stored in a person rather than in a system, so it cannot be examined, transferred, improved or compounded.

The economic shape of rung 1 is linear and unforgiving. Every additional load costs roughly the same number of human touches as the one before it, so cost to serve scales with volume in a straight line. Growth therefore requires headcount at almost exactly the rate it requires freight, which is why manual brokerages have a natural ceiling that has very little to do with how good their people are. Nothing about a matching model changes this until the touches actually come out of the load.

The thing that is missing at rung 1 is not a model. It is a log. Every day a rung-1 operation generates the exact dataset a matching system would need — hundreds of offers made, prices quoted, carriers approached, refusals given, reasons stated — and throws almost all of it away, keeping only the covers. Two years later, when someone finally proposes an acceptance model, the honest answer is that the training data does not exist and the first eighteen months of the project is collecting it. Starting the log is cheap, it is boring, and it is the single highest-return thing an operation at this rung can do.

In practice

The rep who was the routing guide

A mid-sized brokerage covered a difficult reefer lane out of the Central Valley at consistently better margin than any of its peers. One night-shift rep had spent four years learning which twelve carriers would take that lane late, which of them would take it at a discount if the appointment was flexible, and which would say yes and then fall off. When she moved to a competitor, cover rate on the lane fell and cost per covered load rose within a fortnight. Nothing had been written down, so nothing could be rebuilt — the operation had been running a highly effective matching model that lived entirely in one person's head.

What it looks like

  • Coverage depends on which rep is on shift and who they know
  • Pricing is anchored to the last rate confirmation on the lane
  • Rejected offers exist only in call notes, email threads and memory
  • No structured record of who was offered what, at what price

Diagnostic signals you can check this week

  • Ask for last month's rejected offers. If the answer is that you do not keep those, you are at rung 1
  • Count the systems a rep touches to cover one load — load board, TMS, phone, email, a personal spreadsheet
  • Ask two reps to price the same lane on the same morning, independently, and compare the numbers
  • Ask what happens to cover rate on a difficult lane when the rep who owns it takes a fortnight off

Anti-pattern · Buying a matching engine before you have an offer log

Vendors demo matching engines on their own data, where the offer history already exists. Bought into a rung-1 operation, the engine arrives with nothing to learn from, so it falls back to filtering by equipment and authority — which is what the TMS already did — and gets quietly abandoned inside two quarters. The engine is not the problem; the sequence is. Instrument the offer log first, run it for two quarters, and the same engine arrives with a training set instead of a cold start.

What holds you here

Nothing records what was offered, to whom, at what price and what came back — so there is no dataset any matching or pricing model could be trained on.

Highest-leverage next move

Log every offer, not just every cover: carrier, price shown, offer window, rank position and outcome, on contract and spot alike.

Cost of leaving

Effort
2–4 months
Team
One data engineer and one operations lead, part-time
Risk
Low — logging is purely additive and nothing in production depends on it yet
To next stage
2–4 months

If this is you, the next step is

A two-week engagement: define the event schema, wire it to the TMS, start collecting.

Instrument your offer log

Stage 2

Assisted matching

38% of operators sit here

Assisted matching is a person still deciding, but with a market rate index, a filtered carrier list and a suggested price on the screen beside them.

Rung 2 is where most of the industry sits, and it looks like progress because it is progress — the screen genuinely has more on it than it did. A market index tells the rep roughly what the lane has been paying. A filter has removed carriers without the right equipment or valid authority. A suggested rate appears in the box. All of this is real work, correctly done, and none of it has moved the decision: a person still chooses the carrier and a person still chooses the price.

The specific trap at this rung is that a published market index is not your cost. An index is an average of what a market paid across a lane, and your cost to cover that lane depends on your own carrier base, your payment terms, your reputation among small fleets, and what you tendered last week. Operators discover this the moment they compare the suggestion against their realised rate confirmations: the index is right on average and wrong exactly where the money is, which is at the tails — Friday afternoons, holiday weeks, produce season, the lane with four qualified carriers instead of four hundred.

Time spent at rung 2 is not neutral. Reps learn, correctly, that the suggested rate is advisory, and the override becomes reflexive rather than considered. Worse, the overrides are where all the information lives — a rep overriding a suggestion by fourteen per cent is telling you something the model does not know — and at rung 2 nobody is reading them. An operation that sits here for three years usually ends up harder to move than one at rung 1, because the tooling has been discredited internally before it ever had a chance to be right.

In practice

The index that was right on average and wrong on Fridays

A brokerage wired a purchased market index into its load screen and measured the suggestion against its own realised carrier cost for a quarter. Averaged over all loads the index was close enough to be useful. Split by day of week and season, it was systematically low on Friday-afternoon pickups out of two produce regions and systematically high on Monday-morning reloads into a saturated market. Reps had already learned both patterns and were overriding accordingly. The overrides were the model everybody needed and nobody was capturing — the fix was not a better index but a prediction trained on the brokerage's own rate confirmations, with day-of-week and region as features.

What it looks like

  • A market rate index sits next to the load inside the TMS
  • The carrier list is filtered by equipment, authority, insurance and lane history
  • A suggested rate exists, is advisory, and is overridden constantly
  • The offer log covers contract tenders reliably and spot freight patchily

Diagnostic signals you can check this week

  • Measure the override rate on suggested rates, then ask whether anyone reads the overrides
  • Check whether the suggested rate is a market index or a prediction of your own cost to cover
  • Ask whether rejected spot offers reach the same log as contract tenders, or no log at all
  • Look at whether the carrier list is ranked by anything, or merely filtered

Anti-pattern · Buying a second market data feed

When the suggestion is wrong, the instinctive fix is more market data — a second index, a broader panel, a finer lane granularity. It rarely helps, because the error is not noise in the market signal, it is the gap between the market's price and yours. Two indices disagreeing produces an average that is wrong in a new way. Spend the same quarter training a cost-to-cover model on your own rate confirmations with the market index as one feature among several, and the error usually halves without any new subscription.

What holds you here

The suggestion is advisory and anchored to a market average rather than to your own realised cost, so it is overridden exactly when it matters most.

Highest-leverage next move

Replace the index lookup with a model that predicts your realised carrier cost on this lane at this hour, trained on your own rate confirmations, and rank the carrier list by expected margin rather than by quoted price.

Cost of leaving

Effort
4–8 months
Team
One ML engineer, one integration engineer, a named operations owner
Risk
Medium — the first model that sets a price needs a ceiling and a tested fallback
To next stage
4–8 months

If this is you, the next step is

The rung 2 → 3 move: predict your cost, not the market's average. Typically one quarter.

Turn the index into a cost-to-cover model

Stage 3

Model-ranked

26% of operators sit here

Model-ranked matching is a system that orders the carrier list and sets the opening price, with a person still constructing and sending every offer.

Rung 3 is the first rung where the models change what happens rather than what is displayed. The mechanical change is small and the conceptual change is large: the carrier list stops being sorted by quoted price and starts being sorted by expected margin, which is the predicted revenue minus the predicted cost, weighted by the predicted probability that the carrier says yes inside the offer window. A carrier who quotes cheapest and accepts one offer in six is genuinely more expensive than a carrier who quotes higher and accepts four in five, once you price the re-tender, the routing-guide depth and the risk of falling to spot.

The discipline that arrives with rung 3 is calibration, and it catches most teams by surprise. An acceptance model with excellent ranking quality and poor calibration will order the carrier list beautifully and price catastrophically, because pricing needs the probability itself to mean something. If the model says thirty per cent and the realised acceptance in that decile is fifty-five, every expected-margin calculation built on it is wrong in the same direction. Plot predicted probability against realised acceptance by decile, insist the line is close to diagonal, and re-check it monthly — calibration drifts with the market even when ranking does not.

The constraint that emerges here is throughput, and it is human. The models improve every decision, and a person still constructs and sends every offer, so touches per covered load barely moves and cost to serve barely moves with it. That is why rung 3 operations often report better margin per load and no improvement at all in operating leverage — the models are doing their job and the organisation has not yet let them do the part that removes work.

In practice

The list that stopped being sorted by price

A brokerage re-sorted its carrier list from lowest quoted rate to highest expected margin and, for the first month, reps hated it: the model was putting more expensive carriers at the top. The offer log settled the argument. On the lanes where the change was live, the number of carriers contacted before cover fell by roughly a third and the share of loads that fell through to spot fell with it, so realised cost per covered load improved even though the first carrier contacted was nominally dearer. The reps had been optimising the quoted price; the model was optimising the price actually paid.

What it looks like

  • A cost-to-cover model, not a purchased index, sets the opening price
  • An acceptance model ranks the carrier list by expected margin
  • Every offer — carrier, price, window, rank, outcome — is a first-class logged dataset
  • Model health is watched on calibration, not only on error or ranking quality

Diagnostic signals you can check this week

  • Plot predicted acceptance probability against realised acceptance by decile — if the line is not near-diagonal, the model cannot be used for pricing
  • Ask what the ranking objective is; if the answer is lowest cost, the model is not doing the job
  • Check whether the price model trained on your own rate confirmations or on a purchased index
  • Count touches per covered load — at this rung it should have stopped rising, even if it has not yet fallen

Anti-pattern · Optimising ranking quality instead of calibration

Teams report AUC because it is the metric the modelling literature hands them, and AUC is indifferent to whether a predicted probability is right. A model can rank every carrier correctly and still be systematically over-confident, and every expected-margin decision downstream inherits that bias silently. Add a reliability diagram to the same dashboard as the ranking metric, gate deployments on both, and treat a calibration regression as a stop-ship even when ranking improved.

What holds you here

A person still constructs and sends every offer, so the models improve margin per load without touching cost to serve.

Highest-leverage next move

Let the system construct and send the offer itself inside explicit guardrails — a price ceiling, a carrier-tier floor and a one-switch fallback to the human routing guide.

Cost of leaving

Effort
9–15 months
Team
Two ML engineers, a platform engineer, an operations product owner
Risk
Medium — the first system-set price changes who is accountable for a bad rate
To next stage
9–15 months

If this is you, the next step is

We plot decile calibration against your own offer log and mark where pricing inherits the bias.

Review your acceptance model's calibration

Stage 4

Auto-matched

11% of operators sit here

Auto-matched means a defined segment of loads is offered, priced and booked with no human touch, inside stated and monitored bounds.

Rung 4 is where a matching programme finally deletes a cost line rather than improving a rate. Cost to serve — the operations headcount required per hundred covered loads — is the only item on a brokerage P&L that a matching model touches directly, and it only moves when the touches genuinely leave the load. That is a discrete change, not a gradual one: a load either books without a person or it does not, and the segment that books without a person is the number worth reporting.

The engineering at this rung is guardrails, and the guardrail that matters most is the price ceiling. A ceiling frozen at training time is a ceiling calibrated to a market that no longer exists; in a turning market it will either block every booking or wave through prices that destroy the margin on the segment. Index the ceiling to a live market feed, review the index choice quarterly, and page a human when the auto-book rejection rate moves sharply in either direction — a collapse in bookings and a surge in bookings are both symptoms of the same stale bound.

Rung 4 is also where sequential matching starts to pay. Matching one load in isolation is a bipartite assignment; matching a load knowing what the truck will do next is a sequential decision problem, and the difference shows up as empty miles. The reinforcement-learning literature on dispatching and repositioning has been explicit about this for years — optimising each assignment greedily strands capacity in the wrong place and the cost lands two loads later. Evaluate sequential matching at the network level, on deadhead per covered load and pool coverage, never on the quality of the individual pairing.

In practice

The lane set that books itself

A brokerage designated nine dense, high-frequency lanes as its auto-book segment, chosen because each had at least forty qualified carriers and at least two hundred comparable rate confirmations a month. Inside that segment the system constructed the offer, priced it against a ceiling indexed to a live market feed, sent it to the top-ranked carrier and booked the acceptance straight into the TMS. Touches per covered load in the segment fell close to zero; everywhere else it did not move at all. The segment definition — dense lanes with predictable prices — was doing more work than the model.

What it looks like

  • A named segment of loads books end to end without a human touch
  • Every auto-booked load is bounded by a price ceiling and a carrier-tier floor
  • Touches per covered load is a reported operating metric with a named owner
  • Sequential matching considers the next load, not only this one

Diagnostic signals you can check this week

  • Ask what bounds an auto-booked price, and whether that bound moves with the market or only with a release
  • Check whether the auto-book segment is defined by lane density and price predictability, or by whoever asked loudest
  • Measure deadhead per covered load; if sequential matching is genuinely live, it should be falling
  • Exercise the fallback — can one switch return a lane to the human routing guide today, and when was that last tested?

Anti-pattern · Extending auto-book by lane count instead of by evidence

The segment works, so it grows, and the growth is measured in lanes added rather than in evidence gathered. Thin lanes with six qualified carriers and no comparable rate history get added because they are adjacent on a map, and the first bad automated booking on one of them typically results in auto-book being switched off entirely — a two-rung regression from a single incident. Every new lane should re-earn inclusion from its own offer history: density, comparables, calibration in that lane specifically.

What holds you here

The models are trained entirely on offers you chose to make, so the price band narrows onto your own policy and the system becomes confidently wrong outside it.

Highest-leverage next move

Budget an exploration share — a monitored slice of offers priced off-policy on purpose — and evaluate every pricing change off-policy before it reaches a carrier.

Cost of leaving

Effort
15–24 months
Team
Platform team, operations product owner, and a finance partner who owns the margin line
Risk
Higher — an unbounded auto-book segment in a turning market is a fast, quiet loss
To next stage
15–24 months

If this is you, the next step is

Which loads may book unattended, at what ceiling, with what fallback — and how each is monitored.

Design your auto-book guardrails

Stage 5

Self-pricing marketplace

3% of operators sit here

A self-pricing marketplace sets prices continuously against its own measured supply and demand, and knows which part of what it learns is its own reflection.

Rung 5 is rarer and narrower than the phrase suggests. It requires genuine liquidity — enough loads and enough carriers in the same lanes at the same time that a price can be discovered rather than looked up — and that condition holds for a small fraction of freight. On thin lanes a self-pricing marketplace is a self-pricing marketplace of one, which is just a price. Operators who reach this rung do so in a defined, dense subset of their network and quite deliberately never extend it beyond that subset.

The hard problem at this rung is epistemic rather than technical. A marketplace that sets its own prices generates the data it will learn from next week, so the model's confidence is highest exactly where the policy already operates and its ignorance is invisible everywhere else. The counter-measures are well established in the recommender and dynamic-pricing literature — a deliberate exploration budget, off-policy evaluation before deployment, monitoring the width of the realised price band as a first-class metric — and they are unglamorous enough that they are usually the first thing cut. Cutting them does not produce an error message; it produces a model that is quietly, increasingly wrong about a market it can no longer see.

The honest part of rung 5 is that it is not a business model. Convoy was a heavily funded digital freight brokerage with genuinely strong technology, sat near the top of this ladder on every technical axis, and ceased core operations in October 2023. Matching and pricing quality move two lines on a brokerage P&L — gross margin per load and cost to serve — and they move nothing else. A marketplace can be the best matcher in the market and still lose, and any programme whose business case rests on matching quality alone has mistaken a capability for an economic model.

In practice

The exploration budget that had to be defended every quarter

A marketplace ran roughly one offer in twenty at a deliberately randomised price inside a bounded window, purely to keep variance in the training data. Every planning cycle somebody proposed cutting it, because on any single quarter's numbers the exploration offers looked like margin given away. The argument that kept it alive was an off-policy evaluation showing that the last three pricing changes — each of which did improve realised margin — could not have been validated at all without those randomised offers, because every in-policy log was concentrated in the band the old policy already used.

What it looks like

  • Prices move continuously with observed supply and demand, not with a release cycle
  • A budgeted, monitored exploration share keeps training data from collapsing onto the policy
  • Pricing changes are evaluated off-policy before they reach a carrier
  • A unit-economics ledger is reported next to every matching metric

Diagnostic signals you can check this week

  • Ask for the exploration share as a number, and who owns the budget line it comes out of
  • Ask how the last pricing change was validated; if the answer is an in-policy A/B test only, the loop is still closed
  • Check whether contribution per load after operations cost is reported alongside cover rate
  • Ask what happens to the price band when the market turns — the answer should name a mechanism, not a person

Anti-pattern · Treating marketplace maturity as the business case

This is the Convoy lesson, and it is a lesson about arithmetic rather than about engineering. A programme that reports acceptance rate, cover rate and price error to a board is reporting model health, and a board hears business health. When the market turns and gross margin per load compresses for every broker at once, a technically excellent marketplace looks exactly like a technically poor one on the only line that matters. Publish a unit-economics ledger — gross margin per load, cost to serve, contribution after operations cost — beside the matching metrics from the first quarter, so nobody has to reconstruct the argument under pressure.

What holds you here

Matching and pricing quality are no longer the binding constraint — the constraint is the unit economics of the business the marketplace sits inside.

Highest-leverage next move

Report contribution per load after operations cost next to every matching metric, and make the pricing forum accountable for both numbers rather than one.

Cost of leaving

Effort
Continuous
Team
Platform team plus a standing pricing-governance forum with finance in the room
Risk
Concentrated — a mispriced auto-book segment compounds losses at machine speed

If this is you, the next step is

We take one lane set and run the loop against a simulated market turn, then read the ledger.

Stress-test your pricing loop

Where freight operations actually sit on the ladder

The distribution across the five rungs, and why the assisted-to-model-ranked transition is the largest single loss.

Most freight operations sit at rung 2, assisted matching. The distribution is heavily weighted toward operations that have bought market data and wired it onto the load screen without changing who makes the decision or what gets recorded about it. A minority have models ranking the carrier list, and a very small minority let a defined segment of loads book with no human touch at all.

Distribution of freight operations across the five matching rungs

Rung 2 is both the mode and the plateau. The drop from rung 2 to rung 3 is the largest single transition loss on the ladder, and the reason is almost never modelling capability — it is that the offer log needed to train an acceptance model was never collected.

Share of operations

  • 22% — 1 · Manual matching
  • 38% — 2 · Assisted matching (the plateau)
  • 26% — 3 · Model-ranked
  • 11% — 4 · Auto-matched
  • 3% — 5 · Self-pricing marketplace

Source: Illustrative distribution, synthesised from public marketplace disclosures and the freight-matching literature

The reason rung 2 is so crowded is that it is the last rung reachable by purchase. A market rate index can be bought and wired onto a screen in a quarter; DAT's published market trendlines (opens in a new tab) and equivalent feeds make the spot side of that trivially available. Everything above rung 2 requires a dataset nobody sells you, because it is a record of your own offers and your own rejections. That asymmetry — buyable information, unbuyable behaviour — is what makes the second transition the expensive one and the reason so many operations stall with excellent data on screen and no model behind it.

The other structural reason is that freight brokerage is a fragmented market of small carriers. The FMCSA (opens in a new tab) registers hundreds of thousands of interstate operating authorities, and the long tail of one-to-five-truck fleets is where most flexible capacity actually lives. A matching model therefore spends most of its life reasoning about carriers with very little history, which is why cold-start is not an edge case in this domain — it is roughly half the problem, and any framework that treats it as a footnote will systematically underserve exactly the carriers who move the difficult freight.

The freight-matching model stack: seven problems, seven labels

Every model in the stack, what it predicts, the label it trains on, where that label comes from, and the specific way each one fails.

There are seven models behind a working freight-matching system, and the single most useful thing to know about them is that they do not share a label. The assignment model learns from realised covers, the price models from rate confirmations, the acceptance model from offers made and refused, the reliability model from delivery events, and the cold-start model from the first handful of loads of every carrier ever onboarded. A team that plans one dataset and one training pipeline for all seven will build whichever model that dataset happens to support and describe it as freight matching.

ModelWhat it predictsLabel it trains onWhere the label comes fromThe way it fails
Matching / assignmentWhich carrier should take which load, across the whole open board at onceRealised assignments and their eventual costRate confirmations and cover events in the TMSOptimises each load greedily and strands the hardest loads for last
Spot rate predictionThe clearing price for this lane over the next 24 to 72 hoursRates actually paid on comparable lanes and hoursYour own rate confirmations, plus a market index as a featureLearns your own buying behaviour and reports it as the market
Contract bid pricingWhat to quote in an annual RFP, and what honouring it will costAwarded lane volume and realised cost across the award yearLast year's bid file, award file and settlement ledgerPrices the average week and loses money in the six weeks that matter
Carrier acceptanceP(this carrier accepts this load at this price inside the offer window)Accept, reject and no-response on offers actually madeThe offer log and the EDI 990 tender-response streamTrains only on offers you chose to make, so it cannot see the rest
Carrier reliability scoringWhether this carrier will deliver on time, track the load, and not fall offOn-time events, tracking compliance, fall-off and claim eventsTMS status events, EDI 214 and the visibility feedPunishes small carriers for having less history rather than worse behaviour
Cold start for new carriersExpected behaviour of a carrier with no history with youThe first ten to twenty loads of every carrier ever onboardedOnboarding cohort history plus FMCSA authority and CSA dataA confidence floor new carriers can never climb out of
Sequential / round-trip matchingThe next load after this one, and where the truck should be for itRealised multi-leg sequences and the deadhead between themGPS and ELD traces joined to subsequent rate confirmationsOptimises the pair beautifully and starves the pool around it
The freight-matching model stack. Read the fourth column first — the availability of the label, not the sophistication of the model, is what decides which of these you can build this quarter.

Two of these deserve to be built first, and they are not the two that get proposed. The acceptance model is the highest-leverage prediction in the stack because it is the only one that changes both the order of the carrier list and the price, and it is trained on data you generate free every day. The cost-to-cover price model is second, because without it the acceptance model has no price to condition on. Assignment optimisation, which is the model everybody wants to start with, is worth very little until the first two are calibrated — an optimiser fed bad costs and bad acceptance probabilities will confidently produce an optimal solution to the wrong problem.

  • The assignment problem is a solved algorithm and an unsolved data problem

    Optimally assigning a set of loads to a set of carriers is a bipartite matching problem with a well-known polynomial solution, and it has been for decades. What is not solved is the cost matrix: every cell in it is a prediction of what a specific carrier will charge and whether they will accept. Published work on large-scale truckload matching spends almost all its effort on generating plausible candidates and estimating those cells — see recent work on spatially bucketed truck matching (opens in a new tab) — because the optimiser itself is the cheapest component in the system.

  • Acceptance prediction is a censored-data problem, not a classification problem

    You observe outcomes only for offers you made, which means the dataset is selected by your own past policy. A carrier you never offer a lane to generates no label, forever, and the model concludes nothing about them because it has been shown nothing. This is structurally the same problem the recommender-systems literature calls a degenerate feedback loop (opens in a new tab), and the counter-measures are the same: deliberate exploration, off-policy evaluation, and treating the absence of a label as information rather than as a missing value to impute away.

  • Carrier reliability scoring is where fairness and accuracy actually collide

    A score built from raw counts of on-time deliveries will rank a hundred-truck fleet above a three-truck owner-operator who has never been late, purely because the fleet has more history. That is not a better prediction, it is a volume tax, and it systematically excludes the small carriers who move the awkward freight. Score on rate-adjusted behaviour with an explicit uncertainty term, publish the components, and give carriers a route to contest a score — the same evidential discipline the FMCSA applies to its own CSA measurements.

  • Cold start is half the problem, not an edge case

    In a market of predominantly small fleets, a large share of the carriers who could take your load have no history with you at all. Treating them as low-confidence and therefore low-rank means they never get an offer, never generate history, and remain low-confidence permanently. The workable pattern is an explicit exploration allocation for new carriers — a budgeted share of offers reserved for carriers below a history threshold, with authority and insurance checked hard through FMCSA registration data (opens in a new tab) and the outcome fed straight back into the cohort model.

  • Sequential matching is where the empty miles are

    Matching one load in isolation is a static assignment; matching it knowing what the truck should do afterwards is a sequential decision problem, and the difference shows up as deadhead. The reinforcement-learning work on multi-driver dispatching and repositioning (opens in a new tab) and on mean-field approaches to large-scale order dispatch (opens in a new tab) both make the same point: greedy per-load optimisation moves cost forward in time rather than removing it. Evaluate on network deadhead and pool coverage, never on the quality of an individual pairing.

  • Identifiers are the boring precondition for all seven

    None of these models works if the same carrier appears three times in the carrier master under three spellings, or if a location is a free-text address rather than a resolvable identifier. Standard carrier codes, consistent MC/DOT keys and structured location identifiers of the kind GS1 maintains (opens in a new tab) are not a data-governance nicety here — they are the join keys the entire feature layer depends on, and entity-resolution debt in the carrier master shows up downstream as a reliability model that cannot see half a carrier's history.

Pricing and acceptance: spot and contract are two different problems

Why the same lane needs two unrelated models, how acceptance probability turns a price into a decision, and where each pricing approach belongs.

Spot pricing and contract pricing are different modelling problems that happen to share a lane name. Spot asks what this lane will clear at in the next few days and gets its answer back the same day; contract asks what it will cost to honour an award across a year of unknown weeks and gets its answer back after a full bid cycle. They have different horizons, different label latencies, different loss functions and different failure modes, and building one model for both produces something that is mediocre at spot and dangerous at contract.

DimensionContract (routing guide)Spot
HorizonTwelve months, priced once in the annual RFPHours to days, repriced continuously
What you are predictingYour cost to honour an award across a year of unknown weeksThe clearing price in this lane over the next 24 to 72 hours
Label latencyA full bid cycle before you know whether the price was rightSame day, on every covered load
Dominant riskWinning lanes you cannot cover at the awarded rateBidding into your own price signal and calling it the market
Right model classDistributional — predict the cost distribution and price the tail, not the meanShort-horizon time series with market and capacity features
What breaks itPeak weeks, lane-mix drift after award, and a shipper who tenders a different shape than they bidFeedback loops, thin lanes, and stale market feeds
The metric that mattersRealised cost versus awarded rate, by lane, across the award yearGross margin per covered load, weekly
The governance questionWho may override the bid price, and on what evidenceWho sets the auto-book price ceiling, and what it is indexed to
Spot versus contract as modelling problems. The row that surprises people is label latency: a contract pricing model gets one supervised signal per lane per year, which is why it should be built as a distributional model rather than a point predictor.

The contract side is genuinely a distributional problem. Pricing an annual award at the mean expected cost guarantees losing money in the tail weeks, because the weeks where your cost blows out are precisely the weeks where the shipper tenders most volume. The relevant research frames this as a bidding problem under advance commitment — reinforcement-learning approaches to dynamic bidding in truckload markets (opens in a new tab) make the commitment structure explicit — and the practical translation is simple: predict the distribution of your cost on the lane, price against a chosen percentile rather than the mean, and record which percentile you chose so the following year's post-mortem has something to argue with.

The spot side is a short-horizon forecasting problem with an unusual amount of exogenous signal — capacity posting density, load-to-truck ratios, fuel, weather, and the shape of the lane's own recent history. Work on transportation marketplace rate forecasting (opens in a new tab) and on driver-facing surge pricing (opens in a new tab) both point at the same structural insight: the price is only half the decision. The other half is the probability that the price is accepted, and a price model without an acceptance model beside it cannot tell you whether a quote is good or merely low.

Where to point your matching investment, by lane type

Plot lane price predictability against carrier supply depth. Three of the four quadrants are not asking for a better model — one is asking for a better bid, one is asking for a wider exploration budget, and one is asking you to pick up the phone.

Rank, don't price

  • Plenty of carriers, no reliable clearing price
  • Let acceptance modelling discover the price by asking
  • Short offer windows and a wide exploration budget

Auto-match

  • Both signals strong — this is the auto-book quadrant
  • Set a market-indexed price ceiling and let it run
  • Where rung 4 actually pays for itself

Pick up the phone

  • Neither signal exists; a model adds latency, not value
  • Experienced reps still win here and should
  • Instrument the calls anyway, so the log exists in two years

Price well, book manually

  • You know the price; you do not have the trucks
  • The value is in the annual bid, not in the match
  • Dedicated capacity and committed lanes beat spot matching
Carrier supply depth — top: Many qualified carriers, bottom: Few qualified carriers
Price predictability in the lane — left: Thin, volatile, few comparable rate confirmations, right: Dense, stable, many comparables

The quadrant map is worth running against your own lane list before any modelling work is commissioned, because it usually reveals that the auto-book quadrant is smaller than assumed and the bottom-left quadrant is larger. Operations that skip this step tend to build a general matching capability, deploy it everywhere, and then discover that it performs well on the ten per cent of lanes that were already easy and adds nothing but latency on the rest.

The marketplace feedback loop: your prices become your training data

The structural problem that makes freight matching different from every other supervised-learning problem in logistics — and the three counter-measures that work.

In a freight marketplace, the model's own decisions generate the data the next model is trained on, which means the training set is not a sample of the world — it is a sample of your policy. Every price you quote and every carrier you choose to approach becomes a label; every price you did not quote and every carrier you did not approach becomes silence. Over enough cycles the model becomes extremely confident inside the band it already operates in, and has no opinion whatsoever about anything outside it.

How a pricing model learns its own reflection

The loop that closes on itself. The top lane is what you do, the middle lane is what actually gets recorded, and the bottom lane is what the model concludes. The dashed edges are the censored half of the data — the offers you never made — and they are invisible to every metric on the dashboard. The single node marked as an action is the only thing that reopens the loop.

  • Human in the loop
  • System-of-record action
  • Data & feeds
  • Where value leaks
  • AI / model

The process, in words

  • What you do: a pricing and ranking policy decides which carriers see which loads, at which price, for how long. That policy is a choice, and every choice it makes is a choice not to observe the alternative.
  • What gets recorded: clean accept and reject labels for the offers you made, and absolutely nothing for the offers you did not. The second category is far larger than the first and appears nowhere on any dashboard, because a missing row does not raise an alert.
  • What the model learns: a function fitted to your own policy, most confident exactly where the policy already operates. Each retraining cycle narrows the realised price band a little further, and the narrowing looks like improving precision right up until the market moves and the model has never seen the region it now needs.
  • The counter-measure is the one action node in the diagram: a budgeted, monitored share of offers priced off-policy on purpose, feeding an unbiased signal back into the next policy. It costs measurable margin every quarter and it is the only thing keeping the loop open.
Step-by-step insights
Why this is worse in freight than in retail recommendation
A retail recommender that over-narrows shows fewer novel products and loses some incremental revenue. A freight pricing model that over-narrows sets prices, and prices move supply. If your model has never quoted above a certain band on a lane, it does not merely fail to recommend that band — it has actively prevented the market from telling you whether carriers would have taken it, while your competitors' offers continue to shape the same carriers' expectations. The loop is not only closed, it is closed around an asset that is moving.
Exploration budget: what it costs and how to size it
The usual shape is a low single-digit percentage of offers, priced at a deliberate offset from the policy price inside a bounded window, concentrated in lanes where you most need signal — thin lanes, new carriers, regions you are trying to enter. Size it against the value of the decisions it unblocks rather than as a fixed rate: if you cannot validate a pricing change without it, its cost is the price of being able to change prices at all. Give it a named owner and a line in the plan, or it will be cut in the first quarter that misses.
Off-policy evaluation before anything ships
Off-policy evaluation estimates how a proposed pricing or ranking policy would have performed using logs generated by the current one. It is not a substitute for a live test, but it is the gate that stops obviously bad policies reaching carriers and it is the only tool that can compare several candidate policies without running several experiments. Its estimates are only as good as the overlap between the old and new policies, which is precisely why the exploration budget and the evaluation method have to be funded together.
Monitor the width of the realised price band, not just the error
Prediction error can improve while the model becomes more dangerous, because a model that only ever operates in a narrow band will have low error inside it. Track the interquartile range of realised prices per lane over time as a first-class metric. A steadily narrowing band with steadily improving error is the signature of a loop closing, and it is a warning, not an achievement. Alert on the trend, not on a threshold.
Carrier expectations are part of the loop too
Carriers learn your pricing behaviour just as your model learns theirs. A marketplace that consistently opens low on a lane trains its own carrier base to wait, which lengthens time to cover and pushes loads down the routing guide — a second-order effect the model will attribute to market softness because it has no feature for its own reputation. The mitigation is unglamorous: hold the offer window and the opening-price policy stable long enough for the effect to be measurable, and treat time-to-cover drift on stable lanes as a signal about you rather than about the market.

Three counter-measures, in the order they should be built

  1. Log the counterfactual, not just the outcome

    Record the full candidate set considered, the rank position of each carrier, the price that would have been shown, and which of them actually received the offer. This costs nothing at decision time and turns an unrecoverable gap in the data into a recoverable one — you at least know what you chose not to do.

  2. Fund an exploration share with a named owner

    A budgeted, bounded slice of offers priced off-policy on purpose, concentrated where signal is thinnest. Report it as a line item so that cutting it is a visible decision rather than a quiet one, and monitor the realised price band it produces as evidence that it is working.

  3. Gate every pricing change on off-policy evaluation

    No pricing or ranking policy reaches a carrier without an off-policy estimate of its effect on gross margin per covered load and first-tender acceptance. The gate catches the changes that look better on validation loss and worse on money, which in this domain is a surprisingly large share of them.

What this looks like in public: two marketplaces, two outcomes

Two publicly reported digital freight programmes read against the ladder. Neither is an Atomic Loops engagement; each links to the operator's own material or to named reporting.

The public record on digital freight matching contains one clear success at scale and one equally clear cautionary tale, and the useful thing is that both operations were technically strong. Reading them against the ladder separates the part that was about matching quality from the part that was not — which is exactly the separation any operator building this capability needs to make before writing a business case.

Two digital freight programmes read against the ladder

Outcomes as reported by the operators themselves or by named outlets; verify figures against the linked source before reusing them, as we have not independently audited them. The card images are generated industry scenes from our media library, not photographs of these companies, and imply no endorsement or relationship.

Scene: a digital freight marketplace operations view with lanes, carrier capacity and live pricingUber FreightDigital freight network · shipper and carrier marketplace35
Challenge
Matching shipper demand to a highly fragmented carrier base at a scale where a human quote-and-call process cannot be the mechanism, and doing it continuously rather than once per bid cycle.
Approach
The company describes a marketplace built on routing algorithms, real-time data processing and dynamic pricing that matches freight to a carrier and adjusts price with market conditions, exposed to carriers through an app rather than through a phone call to a rep.
Reported outcome
Uber Freight publicly reports more than $17bn of freight under management, roughly 18 million shipments and 1.8 billion transactions a year across the network, and around $1bn in annual customer savings.
What it shows about the curveThis is what the top of the ladder looks like when the liquidity exists to support it: prices set continuously against observed supply and demand, and the carrier-facing offer constructed by the system rather than by a person. Note that the enabling condition is network density, not model novelty.

Uber Freight — company site (opens in a new tab)

Scene: a digital brokerage operations floor with load boards and carrier matching displaysConvoyDigital freight brokerage · ceased core operations October 202345
Challenge
Rebuilding truckload brokerage as an automated marketplace rather than a phone-and-fax business, in a market where gross margin per load is set largely by a freight cycle no operator controls.
Approach
A heavily funded, technology-first digital brokerage matching shippers to a large carrier base through an app and an automated booking flow, backed by investors including Jeff Bezos and, at its last raise, valued at $3.8bn.
Reported outcome
The company announced on 19 October 2023 that it was shutting down core operations after more than four months seeking a buyer; a WARN filing recorded 533 employees laid off. Flexport acquired the Convoy platform the following month and sold it on to DAT Freight & Analytics in July 2025 — the technology outlived the company.
What it shows about the curveThe ladder lesson, and the most important one on this page: matching quality alone does not fix brokerage unit economics. Convoy was further up this ladder than almost anyone and still could not withstand a freight-cycle collapse, because matching models move gross margin per load and cost to serve and leave every other line untouched.

CNBC — Convoy shutdown and CEO memo (opens in a new tab)

In the end, market forces were too strong for us to withstand on our own. We moved all business levers possible. But we were running up the down escalator…. and it kept speeding up.

It is worth being precise about what the Convoy outcome does and does not demonstrate, because it is routinely misread in both directions. It does not show that digital freight matching does not work — the platform was valuable enough that Flexport bought it, ran it for eighteen months and then sold it to DAT (opens in a new tab) rather than letting it disappear. What it shows is that a technology advantage in matching sits on top of a brokerage cost structure it cannot rewrite, and that a sufficiently deep freight-cycle downturn compresses the margin line for everyone at once. Contemporaneous industry analysis (opens in a new tab) and the closure reporting (opens in a new tab) both place the outcome squarely in the market cycle rather than in the technology.

Unit economics: what matching quality moves, and what it does not

The Convoy lesson expressed as a ledger. Four P&L lines a matching model touches, four it does not, and the reporting discipline that keeps the two apart.

A matching model moves exactly two things directly: the gap between what you sell a load for and what you buy it for, and the number of human touches required to cover it. Everything else on a brokerage P&L — customer acquisition cost, working capital, claims exposure, the freight cycle itself — is either untouched or touched so weakly that attributing movement to the model is dishonest. Writing that down before the programme starts is the cheapest insurance available, because the alternative is discovering it during a downturn in front of a board.

P&L lineDoes better matching move it?By what mechanismWhat actually sets the level
Gross margin per loadYes, partiallyBetter cost prediction narrows the gap between the price you sell at and the price you buy atThe freight cycle — in a soft market the spread compresses for every broker at once
Cost to serve (ops headcount per 100 loads)Yes, stronglyAuto-matching removes the touches per load; this is the only cost line a model deletes directlyHow many exceptions your freight mix throws, and how many of them need a person
First-tender acceptance / cover rateYes, stronglyAcceptance modelling puts the offer in front of the carrier most likely to take it, firstPhysical capacity availability in the lane at that hour
Carrier costWeaklySequential matching cuts the deadhead the carrier prices into their rateFuel, driver pay and equipment supply — see ATRI's operational cost work
Claims and insuranceWeaklyReliability scoring screens out repeat offenders before they are offered freightCargo value, lane risk profile and theft exposure
Customer acquisition costNoSales motion, contract cycle length and shipper switching costs
Working capital (quick pay, factoring)NoBalance sheet, payment terms and the cost of capital
Contribution per load after ops costYes — this is the number to reportThe compound of the three lines above that the model genuinely movesWhether those three compound faster than volume growth consumes cash
The matching unit-economics ledger. The right-hand column is the one to read aloud in a planning session: for every line, something other than your model is setting the level, and the model is only moving it at the margin.

18M

Shipments a year Uber Freight reports across its network

Uber Freight

1.8B

Transactions a year on that same network

Uber Freight

533

Employees in Convoy's WARN filing when it wound down operations

Trucking Dive

The reporting discipline that follows from the ledger is simple and unpopular: every matching metric is published next to a money metric, in the same document, on the same cadence. First-tender acceptance appears next to gross margin per covered load. Auto-book share appears next to cost to serve. Deadhead per covered load appears next to carrier cost. Acceptance-model calibration appears next to nothing, because it is a model-health metric and belongs on an engineering dashboard rather than in a board pack. Operations that mix the two categories eventually find themselves defending a calibration plot in a conversation about cash.

The second discipline is the holdout. In a live network, seasonality, lane mix and the freight cycle will happily claim credit or take blame for anything, so a matching improvement claimed without a comparable set of lanes left on the old process is an assertion rather than a measurement. Holding out lanes costs real margin, and it is the only thing that makes a matching claim survive a hostile budget review — which is why the holdout set should be chosen and frozen before the model goes live, never selected afterwards from lanes that happen to make the number look good.

The matching stack, layer by layer

What actually has to exist at each rung — five layers, annotated with the rung that first requires them, and the one everybody skips.

A rung-3 matching capability needs five layers, and the order they are built in decides whether the programme compounds or stalls. The architecture below is deliberately vendor-neutral: every layer is defined by what it must guarantee rather than by what product supplies it, because in this domain the same five guarantees are needed whether the matching engine is bought, built or borrowed.

Layers required by rung

Each layer is annotated with the rung that first requires it. A programme trying to reach rung 3 without a complete offer log in layer one is building a rung-2 pilot with more infrastructure around it.

  1. Load, carrier and market data

    Stage 1+

    • Load and tender recordsTMS plus EDI 204 tender, 990 response, 214 status
    • Carrier masterMC/DOT authority, insurance, SCAC, CSA, entity-resolved
    • Offer logEvery offer: carrier, price, window, rank, outcome — including rejections
    • Market rate feedsSpot indices and posting density as features, never as the price
  2. Feature and signal layer

    Stage 2+

    • Lane featuresOrigin–destination buckets, seasonality, distance bands, appointment shape
    • Carrier featuresLane history, fall-off rate, tracking compliance, rate-adjusted behaviour
    • Market featuresLoad-to-truck ratio, index spread to contract rate, fuel
    • Definitions and lineageOne definition of on-time, one of fall-off, versioned and owned
  3. Model layer

    Stage 3+

    • Cost-to-cover predictionYour realised carrier cost, distributional not point
    • Acceptance probabilityCalibrated per carrier per price per window
    • Reliability scoringRate-adjusted behaviour with an explicit uncertainty term
    • Candidate generation and rerankFeasible set to shortlist, shortlist to ranked offer
  4. Decision and offer layer

    Stage 4+

    • Offer constructionPrice, expiry, carrier set, channel — assembled by the system
    • Ranking objectiveExpected margin, explicitly configured, never lowest quote
    • GuardrailsMarket-indexed price ceiling, carrier-tier floor, segment definition
    • Fallback pathOne switch returns a lane to the human routing guide
  5. Feedback and measurement

    Stage 4+

    • Full decision logCandidate set, ranks, price shown, expiry, outcome, policy version
    • Exploration budgetMonitored share of off-policy offers with a named owner
    • Off-policy evaluationGate on gross margin and first-tender acceptance before ship
    • Unit-economics ledgerMargin per load, cost to serve, contribution — versus a holdout

Pipeline described

  1. Load, carrier and market data (stage 1+) — Load and tender records: TMS plus EDI 204 tender, 990 response, 214 status; Carrier master: MC/DOT authority, insurance, SCAC, CSA, entity-resolved; Offer log: Every offer: carrier, price, window, rank, outcome — including rejections; Market rate feeds: Spot indices and posting density as features, never as the price
  2. Feature and signal layer (stage 2+) — Lane features: Origin–destination buckets, seasonality, distance bands, appointment shape; Carrier features: Lane history, fall-off rate, tracking compliance, rate-adjusted behaviour; Market features: Load-to-truck ratio, index spread to contract rate, fuel; Definitions and lineage: One definition of on-time, one of fall-off, versioned and owned
  3. Model layer (stage 3+) — Cost-to-cover prediction: Your realised carrier cost, distributional not point; Acceptance probability: Calibrated per carrier per price per window; Reliability scoring: Rate-adjusted behaviour with an explicit uncertainty term; Candidate generation and rerank: Feasible set to shortlist, shortlist to ranked offer
  4. Decision and offer layer (stage 4+) — Offer construction: Price, expiry, carrier set, channel — assembled by the system; Ranking objective: Expected margin, explicitly configured, never lowest quote; Guardrails: Market-indexed price ceiling, carrier-tier floor, segment definition; Fallback path: One switch returns a lane to the human routing guide
  5. Feedback and measurement (stage 4+) — Full decision log: Candidate set, ranks, price shown, expiry, outcome, policy version; Exploration budget: Monitored share of off-policy offers with a named owner; Off-policy evaluation: Gate on gross margin and first-tender acceptance before ship; Unit-economics ledger: Margin per load, cost to serve, contribution — versus a holdout
Step-by-step insights
Layer one — the offer log is the layer, not a nice-to-have inside it
Most freight data architectures treat the offer log as telemetry and put it somewhere cheap with a short retention. It is in fact the single differentiating asset in the stack: load and tender records can be reconstructed, market feeds can be bought, and carrier authority data is public, but nobody can sell you a record of which carriers refused which of your prices. Give it the same retention, schema governance and backfill discipline as the settlement ledger, and resist every proposal to sample it.
Layer two — entity resolution on the carrier master is the silent blocker
A carrier that appears three times under three spellings has its history split three ways, and every model that consumes carrier features sees a third of the evidence. This is dull, expensive work with no demo, and it is routinely deferred past the model build, at which point the reliability model underperforms for reasons nobody can locate. Resolve on MC and DOT numbers, keep SCAC and name as attributes rather than keys, and treat structured location identifiers with the same seriousness — the join keys decide what the feature layer can see.
Layer three — build the acceptance model before the optimiser
The instinct is to start with assignment optimisation, because it is the part that looks like operations research and produces an impressive demo. But an optimiser is only as good as its cost matrix, and every cell of that matrix is a prediction of what a carrier will charge and whether they will accept. Build cost-to-cover and calibrated acceptance first, verify calibration by decile, and the optimiser becomes a well-understood component rather than a sophisticated way of being wrong quickly.
Layer four — the fallback is what unlocks the approval, not the guardrail
Operations leaders will accept a system that constructs and sends offers if, and generally only if, one switch returns the lane to the human routing guide without a deployment. The guardrails — price ceiling, carrier tier, segment definition — are what make the system safe; the fallback is what makes it approvable. Drill it deliberately on a quiet week, record how long the revert took, and put that number in the change request. Proposals without it sit in a queue for two quarters.
Layer five — measurement is a layer, not a reporting task
Exploration budget, off-policy evaluation and the unit-economics ledger are infrastructure with owners, schemas and alerting, not a monthly spreadsheet. Treating them as reporting means they get built last, staffed by whoever has capacity, and cut first — which is precisely how a matching programme ends up unable to prove its own value in the quarter it most needs to. Build the ledger in the same release as the first auto-booked load.

The layer most often skipped is the exploration budget in layer five, and the reason is that it has a visible cost and an invisible benefit. Every quarter it appears as margin deliberately given away, and its return only materialises the next time somebody needs to validate a pricing change and finds that they can. Fund it as infrastructure with a named owner, or accept that the pricing model will slowly stop being able to see the market it operates in.

A 90-day plan: cut tender rejection on your top 20 contract lanes

The rung 2 → 3 transition made concrete on one logistics problem — predicting carrier acceptance before you tender, so the routing guide stops falling to spot. Contains no optimiser.

Moving one rung takes about 90 days when it is scoped to a single decision and multiple years when it is scoped to a function. To make that concrete, the plan below runs the transition on one specific, common and expensive freight problem: contract loads rejected by the primary carrier, falling down the routing guide, and being covered at spot rates that the annual bid never budgeted for. The plan contains no assignment optimiser and no marketplace — just an acceptance model, a re-ranked routing guide and an honest measurement.

Rung 2 → rung 3 on tender rejection, in one quarter

Twenty lanes, one named owner, one holdout set. If any phase needs more than its window, narrow the scope — fewer lanes, one shipper — rather than extending the plan.

  1. Days 1–15

    Pick the lanes and price the rejection

    Choose the twenty highest-volume contract lanes. Pull twelve months of EDI 204 tenders and 990 responses from the TMS and compute, per lane: first-tender acceptance, mean routing-guide depth at cover, and the realised cost difference between covering at the primary rate and covering after a fall to spot. That last number is what a rejection costs you, and most operations have never calculated it. Name the person who owns contract cost as the owner.

    The cost of a rejection, in money, by lane

  2. Days 16–45

    Build the acceptance model on your own tender log

    Train a calibrated acceptance model on the tender and response history: carrier, lane, day of week, lead time, rate versus market index, recent volume with that carrier. Validate on calibration by decile before anything else — ranking quality is secondary here because the output is going to be used to reorder tenders, not merely to display a list. Hold out a comparable lane set from the whole exercise now, not later.

    A calibrated acceptance model and a defined holdout

  3. Days 46–70

    Re-rank the routing guide inside the TMS

    Order the tender sequence by expected accepted cost rather than by contracted rate — a carrier at a higher rate who accepts four times in five beats a cheaper carrier who accepts one in six. Write the ranking into the routing guide the planner already works from, keep the contracted sequence one switch away as the fallback, and log every tender, response and position from the first day it is live.

    Model-ranked tendering live on twenty lanes

  4. Days 71–90

    Attribute in cost per covered load, not in AUC

    Report the difference between the treated lanes and the holdout on three numbers: first-tender acceptance, mean routing-guide depth, and realised cost per covered load. Report calibration drift separately, on the engineering dashboard. This is the number that funds the next quarter, and it is the number that will be quoted back at you in a soft market, so compute it carefully.

    A cost-per-covered-load delta finance accepts

The order matters

  1. Calibration before ranking

    The output is used to reorder tenders and to reason about expected cost, so the probability has to mean what it says. A model with excellent ranking quality and 20 points of calibration bias will re-rank the guide sensibly and mis-state the expected cost of every sequence built on it.

  2. Contract before spot

    Contract tendering has a clean, structured, already-logged response stream in the EDI 990 flow. Spot rarely does. Starting on contract means the acceptance model has real labels on day one, and the spot offer log you start collecting in parallel will be ready by the time you need it.

  3. Twenty lanes before the network

    The shared feature and serving layer is worth building when the second and third lane sets are already asking for the same features. Building it before the first twenty lanes have an attributed number encodes guesses as architecture, and it is much harder to unpick a wrong feature definition than to write a second one.

Failure modes, metrics and the auto-book readiness checklist

Five ways a matching programme goes backwards, the telemetry that catches each one, and the eight things that must be true before a load books without a person.

Matching maturity is not monotonic, and the regressions in this domain are unusually quiet because a matching system that is degrading still produces covers. Loads still move, rate confirmations still issue, and the dashboard still shows a cover rate — so the first visible symptom is usually a margin number three months later, by which time the cause is hard to isolate. The five failure modes below account for most of it, and each has a cheap piece of telemetry that catches it early.

Likelihood: highImpact: high

The model learns your own prices and calls it the market

Each retraining cycle fits more tightly to the band your current policy operates in. Prediction error improves, confidence rises, and the model's opinion about any price outside the band becomes pure extrapolation. Nothing alerts, because from the inside this looks exactly like a model getting better.

PreventionMonitor the interquartile range of realised prices per lane as a first-class metric; fund a budgeted exploration share and gate pricing changes on off-policy evaluation.

Likelihood: highImpact: medium

Carrier scoring becomes a tax on having less history

A reliability score built on raw event counts ranks large fleets above small ones regardless of behaviour, so small carriers stop receiving offers, stop generating history, and stay unranked permanently. The carrier base narrows toward the carriers who need you least, and the effect is invisible in aggregate cover rate.

PreventionScore on rate-adjusted behaviour with an explicit uncertainty term, and reserve a budgeted share of offers for carriers below the history threshold.

Likelihood: mediumImpact: high

Auto-book runs into a market turn with a frozen ceiling

The price ceiling was set from training-period data and is now either blocking every booking in the segment or waving through prices that destroy the margin on it. Both symptoms come from the same stale bound, and both are frequently diagnosed as a model problem.

PreventionIndex the ceiling to a live market feed rather than to a constant, and page a named human when auto-book acceptance moves sharply in either direction.

Likelihood: mediumImpact: medium

Sequential matching optimises the pair and starves the pool

A model that reasons about the next load for one truck will happily reposition capacity out of a region that needed it, and the cost lands two loads later on a different account. Per-match metrics all improve while network deadhead and cover rate quietly worsen.

PreventionEvaluate sequential matching at the network level on deadhead per covered load and pool coverage; never accept a per-match improvement as evidence.

Likelihood: highImpact: high

Matching quality is presented as the business case

Acceptance rate, cover rate and price error are reported to a board that hears them as business health. When the freight cycle compresses margin for everyone, a technically excellent matching operation looks identical to a poor one on the only line the board is actually watching, and the programme loses its funding for reasons that have nothing to do with its quality.

PreventionPublish the unit-economics ledger — gross margin per load, cost to serve, contribution after operations cost, versus a holdout — beside the matching metrics from the very first quarter.

Each of those failure modes is detectable from telemetry the systems already produce. The build sheet below is the instrumentation list: formula, source system, cadence, and the rung at which the metric first measures something real rather than something aspirational.

MetricFormula / readSourceCadenceHonest from
First-tender acceptanceLoads accepted by the first carrier tendered ÷ loads tenderedTMS + EDI 990 responsesDailyRung 2
Routing-guide depth at coverMean position in the routing guide at which the load is coveredTMS tender sequenceWeeklyRung 2
Gross margin per covered loadLinehaul revenue − carrier cost, per covered loadSettlement ledgerWeeklyRung 1 (as baseline)
Price errorPredicted carrier cost − paid carrier cost, signedRate confirmations vs model logPer loadRung 3
Acceptance calibrationPredicted P(accept) vs realised acceptance, by decileOffer logWeeklyRung 3
Offer-to-cover timeCover timestamp − load-ready timestampTMS + offer logPer loadRung 3
Touches per covered loadLogged human interactions ÷ covered loadsCRM and operations toolingWeeklyRung 3
Auto-book shareLoads covered with no human touch ÷ loads covered in segmentDecision logWeeklyRung 4
Deadhead per covered loadEmpty miles between drop and next pickup, per loadELD/GPS trace joined to rate confirmationsWeeklyRung 4
Exploration shareOffers priced off-policy on purpose ÷ all offersOffer log, policy version tagWeeklyRung 5
Realised price band widthInterquartile range of realised price per lane, trendedSettlement ledgerMonthlyRung 5
Instrumentation build sheet for freight matching. 'Honest from' is the rung at which the metric first measures something real — an auto-book share before rung 4 is always zero, and an exploration share before rung 5 is usually theatre.

Auto-book readiness checklist

Eight conditions that should be true before a single load books without a person. If you cannot tick all eight, the honest position is rung 3 regardless of how good the models are. Tick as you go — this list works with JavaScript switched off.

0 of 8 ticked

Tick honestly — an empty list is still a diagnosis

Most rung-2 operations can genuinely tick one of these, not zero. If none apply, do not start with an auto-book project: start the offer log, run it for two quarters, and six of these eight items become achievable rather than aspirational. The 90-day plan above is the cheapest way to begin.

Glossary

Hover a term for its definition — or expand the map full screen. The full definitions are written out below.

Freight matching
The decision about which carrier is offered which load, in what order and at what price. In a machine-learning system it is the composition of a candidate-generation step, a price prediction, an acceptance prediction and a ranking objective, rather than a single model.
Offer log
The record of every offer made — carrier, price shown, offer window, rank position and outcome, including rejections and non-responses. It is the only dataset in freight matching that cannot be bought, and the training set for the acceptance model.
Cost to cover
The carrier cost you will actually pay to move a specific load on a specific lane at a specific hour, as distinct from the market rate a published index reports. The gap between the two is a measurable property of your own carrier base.
First-tender acceptance
The share of loads accepted by the first carrier tendered. The cleanest single measure of matching quality on contract freight, because it converts directly into routing-guide depth and therefore into money.
Routing-guide depth
The position in the contracted carrier sequence at which a load is finally covered. Depth of three or worse usually means the contracted rate has been lost and the load is heading to spot at a price the annual bid never budgeted for.
Deadhead
Miles a truck runs empty between dropping one load and collecting the next. Carriers price expected deadhead into their rate, so sequential and round-trip matching reduces your cost by reducing theirs.
Spot rate
The price a lane clears at right now, in an open market, for a load moving in the next few days. Contrast with the contract rate, which is agreed once in an annual bid and honoured across a year of conditions nobody forecast.
Acceptance probability
The calibrated likelihood that a specific carrier accepts a specific load at a specific price inside the offer window. Calibration matters more than ranking quality here, because the number is multiplied into an expected-margin calculation.
Cold start
The problem of deciding what to offer a carrier with no history with you. In a market dominated by small fleets this is roughly half the matching problem, and it requires a budgeted exploration allocation rather than a low default score.
Marketplace feedback loop
The property that a marketplace's own pricing and ranking decisions generate the data its next model is trained on, so the training set reflects the policy rather than the market. Left unmanaged it narrows the realised price band until the model is confidently wrong outside it.
Off-policy evaluation
Estimating how a proposed pricing or ranking policy would have performed using logs generated by the current one. Its reliability depends on overlap between the two policies, which is why it must be funded alongside an exploration budget.
Cost to serve
The operations headcount required per hundred covered loads. The only line on a brokerage P&L that a matching model deletes directly, and it moves only when the human touches genuinely leave the load.

Frequently asked questions

The questions operators ask most often when they start building matching and pricing models on their own freight.

What is machine learning freight matching?

It is the use of predictive models to decide which carrier is offered which load, at what price and in what order, and to book the result. In practice it is a stack rather than one model: candidate generation narrows the feasible carrier set, a cost-to-cover model predicts what the load will cost you, an acceptance model predicts whether each carrier will say yes at each price, and a ranking objective combines the two into expected margin. Reliability scoring, cold-start handling and sequential matching sit alongside those.

Which model should we build first?

The acceptance model, with a cost-to-cover model beside it. Acceptance prediction is the highest-leverage single model in the stack because it changes both the order of the carrier list and the price you should quote, and it trains on data you already generate every day. Assignment optimisation, which is what most teams propose first, is worth very little until costs and acceptance probabilities are calibrated — an optimiser fed poor inputs produces a confident, optimal answer to the wrong problem.

How much data do we need before an acceptance model is useful?

Less than teams expect on volume and more than they expect on coverage. A few months of tender and response history on your busiest lanes is usually enough to beat the incumbent heuristic on those lanes. What matters far more is breadth: the log must contain rejections as well as covers, spot as well as contract, and offers to carriers you would not normally pick. A large log that only records covers on twenty lanes teaches a model that everybody accepts everything.

Should we rank carriers by lowest quoted price?

No. Quoted price is not what you pay — what you pay is the realised cost of whoever eventually accepts, plus the time spent reaching them, plus the risk of falling through the routing guide to spot. A carrier who quotes cheapest and accepts one offer in six is more expensive than a carrier quoting higher who accepts four in five. Rank by expected margin: predicted revenue minus predicted cost, weighted by calibrated acceptance probability.

Why is calibration more important than accuracy for acceptance models?

Because the output is multiplied, not just sorted. Ranking metrics such as AUC are indifferent to whether a predicted probability is numerically correct, so a model can order the carrier list perfectly while being systematically over-confident. Every expected-margin calculation downstream then inherits that bias in the same direction. Plot predicted probability against realised acceptance by decile, insist the line is close to diagonal, and treat a calibration regression as a stop-ship even when ranking improved.

How do we handle carriers with no history with us?

With a budgeted exploration allocation rather than a low default score. If new carriers rank low because they lack history, they never receive an offer, never generate history, and remain permanently low — a trap that systematically excludes the small fleets who move awkward freight. Reserve a defined share of offers for carriers below a history threshold, validate authority and insurance hard through FMCSA registration data, and feed the outcome straight back into a cohort-level model so the allocation gets smarter.

What is the marketplace feedback loop, and why does it matter?

It is the property that your own pricing and ranking decisions generate the data your next model learns from. You only observe outcomes for offers you chose to make, so the training set describes your policy rather than the market. Over successive retraining cycles the model becomes confident inside the band it already operates in and has no opinion outside it. The counter-measures are a budgeted exploration share, off-policy evaluation before deployment, and monitoring the realised price band as a first-class metric.

Are spot and contract pricing the same modelling problem?

No, and building one model for both is a common and expensive mistake. Spot pricing has a horizon of hours to days and a same-day label, so it is a short-horizon forecasting problem with heavy exogenous signal. Contract pricing has a horizon of a year and one supervised signal per lane per bid cycle, so it should be built as a distributional model — predict the cost distribution and price against a chosen percentile rather than the mean, because the weeks your cost blows out are the weeks the shipper tenders most volume.

What actually happened with Convoy, and what should we learn from it?

Convoy was a heavily funded digital freight brokerage with strong matching technology. It announced on 19 October 2023 that it was ceasing core operations after months of seeking a buyer; Flexport acquired the platform the next month and sold it on to DAT in 2025. The lesson is structural rather than technical: matching models move gross margin per load and cost to serve, and nothing else on a brokerage P&L. A technology advantage sits on top of a cost structure it cannot rewrite, and a deep freight-cycle downturn compresses margin for everyone at once.

How do we prove a matching model is actually paying for itself?

Hold out a comparable set of lanes on the old process before the model goes live, and report three numbers against them: first-tender acceptance, mean routing-guide depth and realised cost per covered load. Publish every matching metric next to a money metric on the same cadence, and keep model-health metrics such as calibration on an engineering dashboard rather than in a board pack. In a network with this much seasonality and cycle variance, an improvement claimed without a holdout is an assertion, not a measurement.

When is a load safe to book without a human?

When eight things are true: the offer log is complete, the acceptance model is calibrated by decile, a market-indexed price ceiling and carrier-tier floor bound every booking, the segment is defined by lane density and price predictability, new carriers have an explicit cold-start path, some offers are deliberately priced off-policy, gross margin per covered load is measured against a holdout, and a one-switch fallback to the human routing guide has actually been drilled. Missing any one of those makes the honest position rung 3.

Does any of this apply to a shipper rather than a brokerage?

Most of it, with the economics inverted. A shipper is buying capacity rather than reselling it, so the target is landed transport cost and service rather than gross margin per load, and the annual routing guide is the main decision instead of continuous spot pricing. The acceptance model, the calibration discipline, the cold-start problem and the feedback loop are all identical — a shipper's tender history is the same censored dataset, and a routing guide re-ranked by expected accepted cost is the same intervention.

About the author

Atomic Loops Engineering

Industrial AI practice

Atomic Loops builds production AI systems for logistics, manufacturing and energy operators — matching, pricing, forecasting and decision support running against live operational data, integrated into the TMS and the offer path rather than delivered as dashboards.

  • · Production deployments across freight matching, pricing and network planning
  • · Offer-log instrumentation and acceptance-model calibration with operator teams
  • · Integration-first delivery: TMS write-back, guardrails, monitoring, rollback
  • · 21 cited sources on this page

Sources

  1. DAT Freight & AnalyticsDAT freight marketplace (opens in a new tab)
  2. DAT Freight & AnalyticsTrendlines market data (opens in a new tab)
  3. Uber FreightUber Freight network and technology (opens in a new tab)
  4. Uber FreightUber Freight for carriers (opens in a new tab)
  5. Uber FreightUber Freight newsroom (opens in a new tab)
  6. FlexportFlexport platform (opens in a new tab)
  7. FlexportWhy we bought, built, and sold the Convoy platform (opens in a new tab)
  8. CNBCBezos-backed freight firm Convoy shuts down — read the CEO memo (opens in a new tab)
  9. FreightWavesConvoy's shutdown exposes the desperate state of trucking (opens in a new tab)
  10. Trucking DiveConvoy closes, unable to find buyer (opens in a new tab)
  11. C.H. RobinsonTechnology platform (opens in a new tab)
  12. FMCSA (US DOT)Motor carrier registration and safety data (opens in a new tab)
  13. GS1GS1 standards for identification and location (opens in a new tab)
  14. American Transportation Research InstituteAn Analysis of the Operational Costs of Trucking — 2025 update (opens in a new tab)
  15. arXivIntelligent truck matching in full truckload shipments (opens in a new tab)
  16. arXivReinforcement learning for dynamic bidding in truckload markets (opens in a new tab)
  17. arXivTransportation marketplace rate forecast using signature transform (opens in a new tab)
  18. arXivDriver surge pricing (opens in a new tab)
  19. arXivDeep reinforcement learning for multi-driver vehicle dispatching and repositioning (opens in a new tab)
  20. arXivEfficient ridesharing order dispatching with mean-field multi-agent RL (opens in a new tab)
  21. arXivDegenerate feedback loops in recommender systems (opens in a new tab)

Find out which of the seven models your data can actually support

We run the assessment with your engineering, operations and pricing leads, read it against a quarter of your own offer and tender history, and leave you with a costed 90-day plan for your weakest dimension. You keep the plan whether or not we build it.

Published · Last updated

Benchmark request

Tell us where to send it

Benchmark for this page

Used once, to send this benchmark and follow it up personally. No newsletter, no automated sequences.