How to Compare Multiple Carrier Rates on One Shipment

Written by Martin Nivel · Founder of Cargavo Updated 12 min read

Multi-carrier rate comparison means pricing one shipment against every carrier tariff you already hold for that lane, then reading four numbers per carrier: buy price, sell price, margin in euros and transit time. No carrier is contacted and nothing is tendered. The comparison is only valid if each carrier’s own chargeable basis — kilos, pallets or linear metres — is derived from the same shipment description.

What is multi-carrier rate comparison in freight quoting?

Multi-carrier rate comparison prices a single shipment against every rate grid that covers the lane and returns one row per carrier. Nothing is sent to the carriers: the engine reads tariffs you negotiated months ago. It is a lookup across your own contracts, not an auction, a tender or a load board.

The phrase is used for two completely different things, and confusing them wastes a lot of time. On a freight exchange or a tendering platform, comparison means broadcasting a load and waiting for carriers to answer — minutes or hours, and a different answer every time. In a broker’s quoting tool, comparison means running the shipment through the tariffs already stored in the system, which is deterministic and takes milliseconds. This guide is about the second one.

Mechanically, a comparison is five steps repeated per carrier. Select the grids whose zone table contains the delivery postcode and whose validity dates cover today. Derive that carrier’s chargeable basis from the shipment. Look up the cell, apply minimum charge and bracket rules. Add that carrier’s fuel surcharge and the options the shipment needs. Then apply the margin rule that governs this customer and this grid.

The step people skip is the second one, and it is the one that decides whether the comparison means anything. Three carriers can hold three different tariff shapes for the identical lane: one prices per 100 kg against a zone, one prices per pallet count against a zone, one prices per linear metre. They are not three prices for the same quantity — they are three prices for three quantities that all describe the same six pallets. A comparison that lines up rate cards instead of recomputing the shipment for each carrier is comparing units, not costs.

That is also why comparison and carrier onboarding are the same subject: a carrier only enters the comparison once its tariff is stored in a structure the engine can read. See the carrier onboarding category for the wider workflow, and carrier integration for freight brokers for why the tariff, not a connection, is the integration surface.

How do you compare three carriers on the same shipment?

Derive each carrier’s own chargeable basis from one shipment description, then add that carrier’s fuel surcharge and option prices before ranking anything. In the worked example below, three base rates land within €28.80 of each other and the buy ranking reverses completely once fuel and tail lift are applied.

Take one shipment and three fictitious carriers — Carrier Alpha, Carrier Bravo and Carrier Charlie. They are invented for this example; the arithmetic is real and you can rebuild it with your own tariffs.

The shipment: Lyon (FR-69) to Antwerp (BE-2000), zone 3 for all three carriers. 6 EUR pallets of 1.2 × 0.8 m, non-stackable, 3,600 kg gross, tail lift required at delivery. Floor space is 6 × 0.96 m² = 5.76 m², which over a 2.4 m trailer width is 2.4 linear metres.

Carrier Alpha (weight_zone). Its tariff converts 1 linear metre into 1,750 kg, so the LDM floor is 2.4 × 1,750 = 4,200 kg, above the 3,600 kg gross. Chargeable weight is therefore 4,200 kg. Zone 3, bracket 3,000–4,999 kg at €13.40 per 100 kg gives 42 × €13.40 = €562.80. The engine also tests the next bracket floor — 5,000 kg at €11.60 per 100 kg = €580.00 — which is worse, so €562.80 stands.

Carrier Bravo (pallet). Zone 3, 6 pallets, flat €534.00. Weight is only checked against a cap of 800 kg per pallet; 3,600 ÷ 6 = 600 kg, so the grid applies.

Carrier Charlie (mpl_bracket). Zone 3, bracket 2.0–2.9 LDM at €228.00 per linear metre gives 2.4 × €228.00 = €547.20. Weight is not an input at all.

CarrierGrid typeChargeable basisBase rateFuel + tail liftBuy total
Alphaweight_zone4,200 kg€562.80€33.77 + €28.00€624.57
Bravopallet6 pallets€534.00€50.73 + €35.00€619.73
Charliempl_bracket2.4 LDM€547.20€21.89 + €22.00€591.09

Fuel surcharges here are 6.0%, 9.5% and 4.0% — each carrier indexes its own. On base rate the order is Bravo, Charlie, Alpha. On buy total it is Charlie, Bravo, Alpha. Bravo started €13.20 below Charlie and finished €28.64 above it — a €41.84 swing caused by one surcharge percentage and one tail-lift price. Any comparison that stops at the rate card ranks the wrong carrier first. The four tariff shapes involved are described in types of freight rate grids, and the chargeable-basis rules in chargeable weight.

Is the cheapest carrier always the right one for a shipment?

No. Price is one column of six. Transit time, delivery-site constraints, lane capacity, claims history and invoice accuracy all change the real cost of a booking. In the worked example, choosing Charlie saves €33.48 on the buy price and costs two extra days in transit.

Carrier Charlie is €33.48 cheaper to buy than Carrier Alpha. Charlie also delivers in 4 days against Alpha’s 2. Whether that trade is good depends on facts the price column does not contain, and they are worth writing down before the comparison rather than arguing about after it.

  • Transit time against the customer’s own deadline. Two days of slack is free; two days past a production stop is a lost account. Transit time is a stated property of the tariff, so it belongs next to the price in the comparison, not in someone’s memory.
  • Delivery-site constraints. A site that only receives on booked slots, has no dock, or refuses vehicles over 12 m eliminates carriers regardless of price. This is why tail lift, timed delivery and restricted access must be priced options in every grid — a carrier that cannot perform them has no price for that shipment, not a cheap one.
  • Capacity on the lane, in the direction you need. A regional haulier that is cheapest southbound may have nothing running northbound in week 32. A cheap rate you cannot book is worth zero.
  • Claims and damage history for the commodity. Non-stackable, high-value or fragile goods change the ranking more than €30 does.
  • Invoice accuracy. A carrier that regularly bills a different chargeable weight than its own grid produces turns a €33 saving into a monthly reconciliation job.

The honest limit: no quoting tool can score a carrier on data you have never recorded. A rate comparison gives you price, chargeable basis and the transit time stated in the tariff. Reliability is your own history, and the useful discipline is simply to log why a non-cheapest carrier was chosen on a quote, so the next person can see the reasoning instead of re-deriving it. Cargavo, a TMS for freight brokers and transport commissionaires, keeps that reasoning attached to the quote record rather than in an email thread.

One more trap: the cheapest carrier is not automatically the one that wins you the deal, because the price your customer sees is not the buy price. That is the next section.

How do you read buy price, sell price and margin per carrier?

Read three numbers per row and never fewer: buy total, sell price, and margin expressed in currency rather than percentage. When margin rules differ per carrier, sorting by buy price and sorting by sell price produce different — sometimes exactly opposite — rankings.

Continue the same shipment. Suppose this customer’s pricing configuration sets a percentage margin per grid: 15% on Alpha, 18% on Bravo, 22% on Charlie. The margin is applied to the transport line with p ÷ (1 − m) — the formula that makes the margin a true share of the sell price rather than a markup on the buy price; the fuel surcharge is then computed on that sell base, and each option carries its own sell price. The totals below are the resulting sell prices.

CarrierBuy totalMargin ruleSell priceMargin earnedTransit
Alpha€624.5715%€734.79€110.222 days
Bravo€619.7318%€755.77€136.043 days
Charlie€591.0922%€757.81€166.724 days

Rebuilding a row: Alpha is €562.80 ÷ 0.85 = €662.12 of transport, plus 6.0% fuel on that sell base = €39.73, plus the configured tail-lift sell price of €32.94 — €734.79. The tail-lift sell prices used here are €32.94 for Alpha, €42.68 for Bravo and €28.21 for Charlie; option sell prices are configured per customer, not derived from the margin percentage, which is why the realised margin on a row is never exactly the percentage of the margin rule.

Read the first and fourth columns together. The buy ranking is Charlie, Bravo, Alpha. The sell ranking is Alpha, Bravo, Charlie — the exact reverse. The carrier with the lowest buy price produces the most expensive quote your customer will receive, and the carrier with the highest buy price produces the cheapest one while also being the fastest. Anyone who reads only the buy column books the slowest carrier and sends the most expensive offer.

Now read the margin column in euros, not percent. Charlie earns €166.72 against Alpha’s €110.22 — a €56.50 difference on one consignment. That is the real trade on the table: €23.02 more to the customer and two extra days, in exchange for €56.50 of gross margin. Stated that way it is a commercial decision someone can actually make.

The third option is usually the right one and is invisible unless you look for it: apply Alpha’s 15% rule to Charlie. €547.20 ÷ 0.85 = €643.76 of transport, plus 4.0% fuel = €25.75, plus the €28.21 tail lift = €697.72, still €106.63 of margin, and cheaper to the customer than every row in the table. Divergent per-carrier margin percentages are often historical accidents rather than decisions, and a comparison screen is where they become visible. Percentage against fixed margins, and where each belongs, is covered in margin rules: percentage vs fixed. Margins are applied server-side on every quote, so a rep cannot forget one or quote a buy price by mistake.

Which carrier wins on small shipments and which on large ones?

The winning carrier changes with shipment size and density, because the three grid shapes measure different things. Pallet grids usually win light-to-medium consignments, linear-metre grids win dense freight because they ignore weight, and weight-based grids win once a pallet grid hits its caps.

Comparing one shipment tells you who wins that shipment. Comparing the same three carriers across the size range tells you how to route your flow, and it is a five-minute exercise you should do the day a carrier is onboarded. Same lane, same three fictitious carriers, base rates only — no fuel, no options — so the grid shapes are visible.

ShipmentAlpha (weight_zone)Bravo (pallet)Charlie (mpl_bracket)Cheapest
2 pallets, 600 kg, 0.8 LDM€264.60€196.00€198.40Bravo
4 pallets, 1,200 kg, 1.6 LDM€425.60€344.00€387.20Bravo
6 pallets, 3,600 kg, 2.4 LDM€562.80€534.00€547.20Bravo
6 pallets, 5,200 kg, 2.4 LDM€603.20No price€547.20Charlie
10 pallets, 6,000 kg, 4.0 LDM€812.00No price€856.00Alpha

Three crossovers are visible, and none of them is obvious from reading the rate cards. Bravo owns everything up to its limits because a flat price per pallet count ignores both weight and volume. It disappears in row four: 5,200 ÷ 6 = 867 kg per pallet, above its 800 kg cap. It disappears again in row five because its grid stops at 8 pallets. Charlie is weight-blind, so rows three and four cost exactly the same €547.20 — 1,600 extra kilos travel free, which is why linear-metre pricing wins dense freight. Alpha only takes the lead in row five, where its LDM floor of 4.0 × 1,750 = 7,000 kg is still cheaper per unit at the 5,000 kg-plus bracket than 4.0 linear metres at €214.00.

The practical output is a sentence per carrier: "Bravo below 800 kg per pallet and 8 pallets, Charlie for dense freight, Alpha above 3.5 LDM." That sentence is worth more than any single comparison, because it tells a rep what to expect before the screen loads. Compute the linear metres with the loading metre calculator, and read linear metre (LDM) pricing explained for the conversion rules behind the floor.

What does it mean when a carrier returns no price?

A carrier returning no price means a specific rule blocked the lookup, and each cause has a different fix: the destination is not in the zone table, the shipment exceeds a cap or the last bracket, the tariff validity has expired, or the goods are excluded. A blank cell is diagnostic, not a failure.

A comparison that silently drops carriers is worse than no comparison, because you cannot tell whether a carrier is expensive or simply absent. Every blank should carry a reason, and there are only five common ones.

  1. Lane not covered. The delivery postcode is not in that carrier’s zone table. Either the carrier genuinely does not serve it, or the zone rebuild missed a postcode range — the second is far more common in the first weeks after onboarding.
  2. Above the last bracket or a cap. Rows four and five of the previous table: a pallet grid with a per-pallet weight cap and a maximum pallet count. Ask the carrier what happens above the cap; the answer is usually a full-load rate quoted case by case.
  3. Below a minimum. Not a blank — the grid should return its minimum charge. If it returns nothing, the minimum charge was never captured at rebuild.
  4. Tariff expired. The validity end date has passed. This is the most dangerous case of all when a system does not blank it, because an expired grid quietly quotes last year’s prices at this year’s costs.
  5. Goods or service excluded. ADR classes, temperature control, or a delivery option the carrier does not perform on that lane.

The operational rule follows from the list: quote from the carriers that did return a price, and treat the blanks as a work queue rather than an error message. If every carrier is blank, you still have a customer waiting for an answer — the request should stay in the same pipeline and be priced by hand, not disappear. That path is covered in quoting without a rate grid. Capturing zone tables, caps, minimum charges and validity dates correctly at rebuild is what prevents most blanks in the first place: see the carrier onboarding checklist. Cargavo, a TMS for freight brokers, accepts a quote request even when no grid covers the lane, so an uncovered destination stays a commercial opportunity instead of becoming an unanswered email.

What does the customer see when you compare carriers?

Only what you decide to show, and never a buy price or a margin. The usual choice is one sell price, or two or three service levels described by transit time and delivery options rather than by carrier name. Buy rates and margins stay server-side and are never sent to the portal.

The comparison screen is a broker tool. The customer-facing view is a different object built from the same calculation, and the difference is architectural rather than cosmetic: the buy price, the margin rule and the carrier’s tariff live in records a customer account cannot read at all. Hiding a column in an interface is not the same thing, and it fails the first time someone shares a screenshot or an export.

Three presentation choices, each defensible:

  • One price. You pick the carrier, the customer sees a single sell price. Simplest, fastest to accept, and it keeps your carrier panel confidential.
  • Service levels. Two or three options described as "delivery in 2 working days" or "with tail lift", each with its own sell price. The customer chooses the trade-off you already evaluated; the carrier names stay yours.
  • Named carriers. Occasionally required by a customer whose own compliance rules name approved hauliers. Fine when it is contractual — but understand that you have just made your panel visible.

The middle option is usually the best commercial answer, because it converts the comparison you ran into a choice the customer makes, and a customer who chooses is a customer who books. In the worked example, offering Alpha at €734.79 in 2 days alongside Charlie at €757.81 in 4 days is not a coherent pair — the slower option is dearer. Re-pricing Charlie under the 15% rule at €697.72 gives a clean pair: faster and dearer, or slower and cheaper.

Cargavo, a TMS for freight brokers of 2 to 25 people, runs the comparison from grids you build yourself as Excel or CSV — weight_zone, pallet, mpl_bracket and hybrid_weight — with no carrier API and no EDI. It is not a load board, not a tendering marketplace and not a dispatch system: the carriers compared are the ones whose tariffs you hold. Customers get the sell price only, in a portal under your brand, in English, French, Spanish or German, priced in EUR, USD, GBP, CHF, CAD, MAD or PLN, and an accepted quote (Q-YYYY-NNNN) becomes a tracked shipment (S-YYYY-NNNN). Plans are Starter €49/month, Growth €149/month and Scale €399/month, annual billing worth about two months free, 14-day free trial with no credit card — details on the pricing page. The confidentiality model is explained in how to show a price without revealing your buy rate.

Frequently asked questions

How do freight brokers compare carrier rates?

A broker prices the same shipment against every carrier tariff that covers the lane, then compares buy total, sell price, margin and transit time in one table. Each carrier is computed on its own chargeable basis — kilos, pallet count or linear metres — because three tariffs for one lane rarely measure the shipment the same way. No carrier is contacted during the comparison.

Is the cheapest carrier always the best choice for a shipment?

No. Transit time, delivery-site constraints such as tail lift or booked slots, capacity on the lane, claims history and invoice accuracy all change the real cost of a booking. A saving of €30 on the buy price disappears the first time a shipment is refused at delivery and redelivered. Price is one column among six.

Why do two carriers quote different prices for the same pallets?

Because they price different quantities. A weight-based tariff charges a chargeable weight that may be lifted by a linear-metre floor, a pallet tariff charges a flat price per pallet count, and a linear-metre tariff ignores weight entirely. Fuel surcharge percentages and option prices such as tail lift are also set per carrier, so two similar base rates can end up far apart.

Can you compare carrier rates without an API?

Yes, and most road freight brokers do. A negotiated tariff is a contract document valid for a stated period, so storing it as a structured rate grid produces the same numbers the carrier will invoice. Cargavo compares carriers exclusively from rebuilt grids and has no carrier API or EDI connectivity.

Does the customer see which carriers you compared?

Only if you choose to show them. Most brokers present a single sell price, or two or three service levels described by transit time and delivery options rather than by carrier name. In Cargavo the buy price, the margin rule and the carrier tariff are stored where a customer account cannot read them, so they are never exposed by the portal.

How many carriers should a freight broker compare on one lane?

Enough to cover the size range rather than a fixed number. Two or three tariffs of different shapes — one pallet grid, one weight grid, one linear-metre grid — usually cover a lane better than five tariffs of the same shape, because each shape wins a different band of weight and density.

Related guides

More guides on this topic — Carriers & onboarding