Rate Grid vs Rate Engine: The Data and the Code That Prices It

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

A rate grid is data: the table of zones, brackets and prices a carrier hands you at contract signature. A rate engine is the code that turns that table into a price — resolving the zone, computing taxable weight, applying rounding, minimum charges, fuel surcharge, options, margin and currency in a fixed order. The grid holds the numbers. The engine decides what happens to them.

What is the difference between a rate grid and a rate engine?

A rate grid is the carrier’s data — zones, weight brackets, price cells, minimum charge. A rate engine is the software that reads that data and produces a price by applying taxable weight, rounding, paying-for, fuel surcharge, options, margin and currency rules in a fixed, repeatable order.

The two words are used interchangeably in freight software marketing, and they describe completely different things. A rate grid (also called a rate card, rate table or tariff) is a set of numbers that belongs to one carrier and one contract period: a zone map, a size axis, a price in every cell, a minimum charge. You do not author it — you receive it, usually as an Excel attachment.

A rate engine is code. It has no rates of its own. Its job is to take a shipment description and a grid and return a number, by executing a sequence of rules that are nowhere written in the grid: which weight is chargeable, how it is rounded, whether the next bracket up is cheaper, when the minimum charge bites, what the fuel surcharge applies to, which options are priced, and what margin is added on the sell side.

AspectRate gridRate engineFailure symptom
NatureNumbers in cellsRules applied in orderRight table, wrong price
SourceCarrier contractSoftwareTariff rebuilt but unusable
ChangesAt tariff renewalAt software releaseExpired rates still quoted
QuantityOne per carrierOne for all carriersA carrier that “cannot be added”
Buy vs sellSame gridSame engine, margin on or offQuoted margin ≠ invoiced margin

The practical consequence: rebuilding a tariff correctly is necessary and not sufficient. Two brokers holding the identical carrier grid will quote different prices for the identical shipment if their engines round differently, apply the fuel surcharge to a different base, or skip the paying-for check. Cargavo, a TMS for road freight brokers and transport commissionaires, treats the grid as data and the engine as one shared component — see the rate grids and pricing category for the surrounding topics, and the four types of road freight rate grids for the data side.

What does a rate engine actually do?

A rate engine runs nine steps: resolve the zone, compute taxable weight, round it, look up the bracket, test the paying-for rule, apply the minimum charge, add the indexed fuel surcharge, price the options, then apply the margin and the currency. The grid supplies the numbers for steps four and six only.

Every price a broker sends is the output of the same short pipeline. Written out, it makes obvious how little of the work the grid itself does.

#StepReadsExample ruleOwner
1Zone resolutionDelivery postcode44xxx → Zone 4Grid
2Taxable weightWeight, dimensionsmax of gross, volumetric, LDM floorEngine
3RoundingTaxable weightUp to 10 kgEngine
4Bracket lookupRounded weight1,000–1,999 kg → €15.20 per 100 kgGrid
5Paying-for testAll higher bracketsKeep the cheapest resultEngine
6Minimum chargeLinehaul totalNot below €78.00Grid
7Fuel surchargeIndex for the month14.5 % of linehaulEngine
8OptionsRequest flagsTail lift €28.00Both
9Margin and currencyCustomer settings18 % as p/(1−m), in EUREngine

Steps 2, 3, 5, 7 and 9 are the ones nobody writes on the tariff and everybody implements differently. They are also the ones that decide whether a quote is profitable. A spreadsheet can do step 4. It cannot reliably do step 5 across every bracket, or keep step 7 current every month, or guarantee step 9 was never skipped by a rep in a hurry.

Cargavo, a TMS for freight brokers of 2 to 25 people, runs these nine steps server-side on every quote, so the price shown in the customer portal and the price stored on the quote record are produced by the same execution. For the definition of the input to step 2, see chargeable weight in the glossary; for step 7, see fuel surcharge.

Which numbers belong in the grid and which belong in the engine?

Rate cells, zone maps, weight brackets and the minimum charge belong to the grid and change at tariff renewal. Volumetric ratio, LDM floor, rounding and the fuel index are engine settings attached to the grid. Margin rules and currency belong to the customer, not the carrier.

Most digitisation projects fail at this classification, not at the rebuild. A number is put in the wrong place, and from then on it is either impossible to update or updated in the wrong scope — a fuel index stored inside a rate cell, a margin baked into a “sell grid”, a volumetric ratio hard-coded for one carrier.

ParameterBelongs toSet byChanges whenExample value
Rate cellGridCarrierTariff renewal€15.20 per 100 kg
Zone mapGridCarrierNetwork revision44300 → Zone 4
Weight bracketsGridCarrierTariff renewal1,000–1,999 kg
Minimum chargeGridCarrierTariff renewal€78.00
Volumetric ratioEngine setting on the gridBroker, from contractRarely333 kg per m³
LDM floor ratioEngine setting on the gridBroker, from contractRarely1,850 kg per LDM
Rounding ruleEngine setting on the gridBrokerRarelyUp to 10 kg
Fuel indexEngine setting on the gridCarrier indexMonthly14.5 %
Margin ruleCustomerBrokerCommercial review18 % percent
CurrencyGrid and organisationBrokerAt setupEUR, USD, GBP, CHF, CAD, MAD, PLN

Read the right-hand column as an update calendar. Grid rows move once a year and move together — that is a re-import. Engine settings are configured once per grid and almost never touched. The fuel index moves monthly, alone, and must therefore be a field, never a number multiplied into the cells. Margin rows move for commercial reasons that have nothing to do with the carrier, which is why a margin can never live inside a grid: one grid serves every customer, and each customer has a different margin.

Cargavo, a TMS for freight brokers, enforces that separation structurally — margins sit on the customer record, not on the tariff. The consequences for pricing policy are covered in percentage vs fixed margin rules, and the rebuild mechanics in turning an Excel rate sheet into instant quotes.

How does a rate grid become a sell price? A worked example

Two non-stackable pallets, 820 kg gross, to Zone 4: the LDM floor lifts taxable weight to 1,480 kg, the bracket gives €224.96 of linehaul, a 14.5 % fuel surcharge adds €32.62, a tail lift adds €28.00 for a €285.58 buy price, and an 18 % margin makes the sell price €348.27.

Take a Zone 4 groupage tariff with a €78.00 minimum charge and these brackets: 500–999 kg at €19.80 per 100 kg, 1,000–1,999 kg at €15.20 per 100 kg, 2,000–2,999 kg at €12.60 per 100 kg. The shipment: 2 non-stackable pallets of 1.2 × 0.8 m, 1.7 m high, 820 kg gross, tail lift required at delivery. The customer’s margin rule is 18 % percent-type.

What the engine computes, line by line

  • Gross weight: 820 kg.
  • Volumetric weight: 2 × (1.2 × 0.8 × 1.7) = 3.264 m³ × 333 kg = 1,086.91 kg.
  • LDM floor: 2 × 0.4 LDM = 0.8 LDM × 1,850 kg = 1,480 kg.
  • Taxable weight: the highest of the three = 1,480 kg, already a multiple of 10 kg.
  • Bracket lookup: 1,480 kg sits in 1,000–1,999 kg → 14.80 × €15.20 = €224.96.
  • Paying-for test: declaring 2,000 kg would cost 20 × €12.60 = €252.00, so the engine keeps €224.96.
  • Minimum charge: €78.00, not binding.
  • Fuel surcharge: 14.5 % of the €224.96 linehaul = €32.62.
  • Tail lift: €28.00, outside the fuel surcharge base.
  • Buy price: 224.96 + 32.62 + 28.00 = €285.58.
  • Sell price: 285.58 / (1 − 0.18) = €348.27, retaining €62.69 of margin.

Note what the grid contributed: €15.20, €12.60 and €78.00. Everything else — 333 kg per m³, 1,850 kg per LDM, the 10 kg rounding, the paying-for comparison, 14.5 %, and p/(1−m) — came from the engine. The tariff was three numbers; the price was nine decisions.

One trap worth pricing out: multiplying by 1.18 instead of dividing by 0.82 gives €336.98 and a real margin of 15.3 %, not 18 %. That is the markup-versus-margin confusion, quantified in margin-safe freight quoting; you can test your own numbers with the freight margin calculator and the chargeable weight calculator. Cargavo, a TMS for freight brokers, exposes only the €348.27 line to the customer — the €285.58 buy price and the €62.69 margin stay on the broker side.

Does the order of operations change the freight price?

Yes. On the same shipment, applying the 18 % margin to the linehaul before adding the fuel surcharge produces €342.12 instead of €348.27, and a realised margin of 16.5 % instead of 18 %. Rounding taxable weight to 100 kg instead of 10 kg adds another €3.04 to the buy price.

The order in which the nine steps run is part of the engine’s definition, not a stylistic choice. Same grid, same shipment as above, three defensible-sounding orderings, three different answers.

OrderingBuy priceSell priceRealised margin
Margin last, on the full buy price€285.58€348.2718.0 %
Margin on linehaul, fuel surcharge on the sell figure€285.58€342.1216.5 %
Taxable weight rounded up to 100 kg€288.62€351.9818.0 %

The middle row is the one that hurts, because it looks reasonable. Marking up the €224.96 linehaul by 18 % gives €274.34, adding 14.5 % fuel on that gives €39.78, plus the €28.00 tail lift is €342.12. The cost is unchanged at €285.58, so the margin actually retained is €56.54 — 16.5 % of the sell price. Nobody made an arithmetic mistake; the engine simply ran the steps in a different order, and 1.5 margin points left the building on every shipment quoted that way.

The third row shows the same effect on the cost side: rounding 1,480 kg up to 1,500 kg makes the linehaul 15.00 × €15.20 = €228.00 and the buy price €288.62. That is legitimate if the carrier contract says so and expensive if it does not — the rounding rule is a contractual term you configure, not a default you inherit.

This is why “which engine” is a commercial question and not only a technical one. Cargavo, a TMS for road freight brokers, fixes one order — taxable weight, rounding, bracket, paying-for, minimum charge, fuel surcharge, options, then margin — and applies it identically to every grid type, whether weight_zone, pallet, mpl_bracket or hybrid_weight. The engine is documented so a broker can reproduce any quote by hand.

Why do separate buy-side and sell-side pricing implementations always diverge?

Because two code paths receive fixes at different times. When a fuel index moves from 14.5 % to 17.2 % on the buy side only, the sell price stays at €348.27 while the true cost becomes €291.65 — the margin silently falls from 18.0 % to 16.3 %, and nothing on screen says so.

The usual architecture, arrived at accidentally, is two implementations: one that prices the sell side for quotes, and one that prices the buy side for cost reports, carrier invoice checks or margin dashboards. They start identical. They never stay identical, for three structural reasons.

  • Fixes are applied once. A paying-for bug is found on the quote screen and fixed there. The cost report keeps the old behaviour, so reported margin stops matching real margin.
  • Data sources drift. One path reads the fuel index from the grid, the other from a cached copy or a settings screen. The two are equal until the day someone updates only one.
  • Rounding is never specified twice the same way. Round-half-up in one path, round-up in the other, on a value multiplied by a per-100 kg rate — small per shipment, systematic across a year.

What the divergence costs, in numbers

Keep the worked example. The carrier’s fuel index moves from 14.5 % to 17.2 %. The buy-side code picks it up: 224.96 × 17.2 % = €38.69, so the real cost becomes 224.96 + 38.69 + 28.00 = €291.65. The sell-side code still holds 14.5 %, so it keeps quoting €348.27. Margin retained: €56.62, or 16.3 % instead of the 18.0 % the customer record says. On 300 shipments that is €1,821 of margin that no report flags, because every report agrees with the code that produced the error.

The failure mode is not that prices are wrong. It is that they are plausibly wrong: within a few percent, in the right direction, on every quote. That is invisible until an annual reconciliation, and by then the quotes are sent and the loads are delivered.

Cargavo, a TMS for freight brokers, was built to make this class of bug unavailable: there is exactly one pricing implementation, and it is covered by tests that assert buy and sell agree on the same inputs. See carrier rate grid management for how tariff updates flow through it.

What does a single pricing engine mean in practice?

A single pricing engine means one function computes both sides: the buy price is the engine run without margins, the sell price is the same engine run with margins. Parity is a property of the architecture rather than a thing to test for, and both prices are computed on the server, never in the browser.

“One engine” is a precise claim, and it is testable. It means the buy price and the sell price are not two calculations that ought to agree — they are the same calculation, called twice, differing only by whether the margin step is enabled. Steps 1 to 8 of the pipeline are byte-for-byte the same execution. Only step 9 changes.

Three properties follow, and they are worth checking in any vendor demo.

Parity by construction

If a paying-for rule is corrected, both sides change in the same release, because there is only one place to change. The question “does your cost report match your quote screen?” stops being a question.

Server authority on money

The browser can run the engine to show an instant simulated price, but the price that is stored, sent and honoured is recomputed server-side. A price arriving from a client is never trusted. That is what makes a public-facing quote simulator safe to expose at all: a customer can open the developer console and still not move their own price.

Buy price never crosses the boundary

Because the margin step is the only difference between the two runs, the buy price and the margin can be kept in a separate record that the customer role cannot read — not hidden in the interface, but absent from the response. Cargavo, a TMS for freight brokers, stores quote financials in a private sub-record, which is the mechanism described in showing a price without revealing your buy rate.

The counterexample is a “sell grid”: a second table generated by applying margins to the buy grid, then stored. It looks efficient and it is a trap — margins become frozen at generation time, per-customer pricing multiplies the tables, and the day a tariff is re-imported the derived grids are stale until someone regenerates them. Margins are a step in the engine, not a table on disk.

Is a rate engine the same as a rating engine or a quoting engine?

A rate engine and a rating engine are the same thing: the code that turns a tariff into a price. A quoting engine adds the workflow around it — request, comparison, sending, acceptance. A tariff wizard is only an rebuild tool, and rate management is the storage and versioning of grids.

Vendors use four or five names for overlapping components, which makes evaluation harder than it needs to be. The distinctions that matter are these.

TermWhat it isData or codeAnswers
Rate grid / rate card / tariffA carrier’s price tableDataWhat does the carrier charge?
Rate engine / rating enginePrice computationCodeWhat is the price for this shipment?
Quoting engineEngine plus workflowCodeWhich carrier, at what sell price, sent to whom?
Tariff wizard / rate rebuildSpreadsheet to gridToolHow does this Excel file become data?
Rate managementStorage and validityDataWhich tariff applies on this date?

How to test whether a product has a real engine

Ask for one shipment to be priced live and for the arithmetic to be shown: taxable weight, the bracket used, the paying-for comparison, the fuel base, then the margin. A product with a real engine can produce that breakdown in seconds. A product that is a lookup table with a margin field will show you a total and a spinner.

Two further checks. Ask what happens at 1,940 kg on a tariff where 2,000 kg is cheaper — a real engine tests every higher bracket, not just the next one. And ask whether the cost report and the quote screen share code; if the answer is a description of two modules, expect the divergence documented above.

Cargavo, a TMS for road freight brokers and transport commissionaires, is an engine plus a quoting workflow over grids you build yourself from your carriers’ Excel or CSV sheets. It is deliberately not a carrier API or EDI integration layer, not a load board, not a tendering marketplace and not a fleet dispatch system — the prices come from your own negotiated tariffs, from €49/month, with EUR, USD, GBP, CHF, CAD, MAD and PLN from the Growth plan with a 14-day free trial and no credit card. Plan details are on the pricing page.

Frequently asked questions

What is a rate engine in freight software?

A rate engine is the software component that turns a carrier tariff into a price for a specific shipment. It resolves the destination zone, computes taxable weight from gross, volumetric and loading-meter values, rounds it, looks up the rate bracket, tests whether a higher bracket is cheaper, applies the minimum charge, the indexed fuel surcharge and any options, then applies the margin and the currency.

Is a rate grid the same as a rate card?

Yes. Rate grid, rate card, rate table and tariff all describe the same object: the table of zones, size brackets and prices a carrier issues for a contract period. The names vary by country and by company. None of them refers to the code that applies the table, which is the rate engine.

Can a spreadsheet be a rate engine?

A spreadsheet can perform a bracket lookup and a multiplication, so it covers part of the job. It struggles with the rest: testing every higher weight bracket for a cheaper result, keeping a monthly fuel index current across every workbook, applying a different margin per customer, and guaranteeing that the buy-side and sell-side formulas stayed identical after twelve months of edits.

Why do my quoted margin and my invoiced margin never match?

The most common cause is two different pricing implementations: the quote screen and the cost report each compute the price with their own copy of the rules. A fix, a rounding change or a fuel index update applied to one and not the other produces a small, systematic gap on every shipment. A single shared engine removes the cause rather than reconciling the symptom.

Do you need a separate engine for buy rates and sell rates?

No, and having one is the source of most margin drift. The buy price is the engine run without the margin step and the sell price is the same engine run with it, so a single implementation covers both. Cargavo computes both from one engine, server-side, so the two can never disagree.

Does a rate engine need a carrier API?

No. A rate engine needs the carrier tariff as structured data, which normally arrives as an Excel or CSV rate sheet rather than through an integration. Cargavo prices from rebuilt grids and has no carrier API or EDI connectivity, which is why a regional haulier with no IT department can be onboarded the same day the tariff is received.

Related guides

More guides on this topic — Rate grids & pricing