Outgrown Spreadsheets? 6 Signs a Freight Broker Needs a TMS
A spreadsheet is enough while one person quotes from one or two carrier tariffs. It stops being enough at the point where the same rate exists in more than one file, where the buy price and the sell price are maintained separately, or where a quote cannot be produced without one specific colleague. Cargavo, a TMS for freight brokers, replaces those files with structured rate grids priced server-side, from €49 per month.
Do I need a TMS or is a spreadsheet enough?
A spreadsheet is enough while one person prices one or two carrier tariffs of a single grid type for a handful of customers on the same margin. It stops being enough once the workbook has to keep buy rates, sell prices, weight rules, surcharges and per-customer margins consistent at the same time.
A spreadsheet is not a stage you outgrow by headcount alone. Plenty of two-person brokerages run one carrier tariff in one workbook for years without a single incident. What breaks a rate workbook is not volume — it is the number of independent things it has to keep consistent simultaneously.
Count them on your own file. A working rate workbook holds the carrier buy tariff, the customer sell price, the taxable weight rules (loading-meter floor, volumetric ratio, rounding), the fuel surcharge in force this month, the price of each option, and the margin that applies to each account. Six moving parts, each maintained by hand, each with its own update cycle. Two are manageable. Six drift.
| Measure | Spreadsheet workable | Review needed | Spreadsheet is the bottleneck |
|---|---|---|---|
| Carrier tariffs in active use | 1 to 2 | 3 to 5 | 6 or more |
| Grid types you must price | 1 | 2 | 3 to 4 |
| People who send prices | 1 | 2 to 3 | 4 or more |
| Customers on their own margin | 1 to 3 | 4 to 10 | More than 10 |
| Quotes sent per week | Under 10 | 10 to 30 | Over 30 |
| Requests arriving outside office hours | Rare | Weekly | Daily |
Read this table row by row, not as a total score. One cell in the right-hand column is enough, because each row fails in a different way and the failures compound. Four carrier tariffs across three grid types is a harder spreadsheet than twelve tariffs that are all weight-zone.
The six signs below are the observable symptoms of those failures. Each one is a test you can run this week on files you already have, and each carries a worked example of what it costs. If several apply, the question stops being "should we look at software" and becomes the sequencing question covered in our TMS selection resources.
Sign 1: your buy price and your sell price live in different files
When the cost sheet and the customer price list are two separate objects, every carrier increase has to be applied twice. Miss the second application and you keep quoting the old sell price at the new cost — the margin evaporates silently, because the quote still looks correct on screen.
This is the most expensive sign and the hardest to see, because nothing looks wrong. The quote is well formatted, the number is plausible, the customer accepts. The margin simply is not what you think it is.
It happens because the sell side of a spreadsheet is almost always a copy. Someone built a "customer price list" tab by pasting the carrier's rates and adding a markup column. From that moment, the tab is a snapshot. The carrier's next increase lands in the cost file, and the snapshot keeps quoting last quarter's cost.
Worked example: one missed rate increase
Take a groupage shipment of 3 pallets, 620 kg gross, into zone 3, on a weight-zone tariff. The target margin is 18%, applied with the standard sell formula p/(1−m).
- Current cost sheet — bracket 500 to 999 kg, zone 3: €18.40 per 100 kg. 6.20 × 18.40 = €114.08, plus a 9% fuel surcharge = €124.35 buy.
- Correct sell price — 124.35 / 0.82 = €151.65.
- Stale customer price list — still holds the previous €16.90 per 100 kg. 6.20 × 16.90 = €104.78, plus 9% = €114.21, then 114.21 / 0.82 = €139.28 quoted.
- Realised margin — (139.28 − 124.35) / 139.28 = 10.7%, not 18%.
- Gap — €12.37 per shipment. Across 12 shipments a month on that lane, €148.44 of margin gone, with nothing in the file to flag it.
The structural fix is not discipline, it is architecture: one engine that computes the buy price and then derives the sell price from it, so a sell price that does not match the current cost cannot exist. That separation between the stored table and the calculation is explained in rate grid vs rate engine, and the margin arithmetic itself in markup vs margin. In Cargavo, a TMS for freight brokers, the same engine produces both prices — the buy price without margins, the sell price with them.
Sign 2: only one person in the office can read the carrier tariff
If a colleague cannot price a groupage shipment without asking someone, the pricing logic is not in the file — it is in a head. Rate sheets carry unwritten rules: which weight to look up, when the next bracket is cheaper, which surcharge is already included. Those rules do not survive absence.
Run the test literally. Give a colleague who does not normally quote a real request — 4 pallets, 1.2 × 0.8 m, 210 kg each, non-stackable, Lyon to Barcelona — and the workbook. Say nothing else. Then watch which questions they ask.
They will ask most of these, and each one is a rule that exists nowhere in the file:
- Which weight do I look up — the gross weight, or the chargeable weight after the loading-meter floor?
- This falls at 995 kg; is the 1,000 kg bracket minimum cheaper, and am I allowed to charge it?
- Is the fuel surcharge in these cells, or added after?
- Does this customer get 15% or 22%, and on which base?
- Is this tariff still valid, or did it expire on 31 March?
A spreadsheet stores numbers. It does not store the procedure that turns those numbers into a price. That procedure lives with whoever built the file, which is why brokerages of five people routinely have a pricing capacity of one, and why holidays and sick days show up as unanswered quote requests rather than as absences.
The specific rules that go missing are well known: taxable weight (loading-meter floor and volumetric ratio), the paying-for rule on weight brackets, rounding, the minimum charge, and which options are already in the rate. Each one is a stated parameter in a structured rate grid and an unwritten habit in a workbook.
Moving them into configuration changes what onboarding a colleague means. Instead of months of apprenticeship on which customer gets which markup, a new operator quotes correctly on the first day, because the rules are applied by the engine rather than remembered. In Cargavo, that is also a permissions boundary: an operator role can quote and book without being able to edit grids or margins at all. The rules that get lost in a spreadsheet are listed carrier by carrier in the carrier onboarding checklist.
Sign 3: the same tariff exists in several versions
Search your drive for a carrier name. If it returns four files with dates, initials or "final" in the filename, you no longer have a tariff — you have candidates. Nobody can prove which one was in force on the day a disputed quote was sent, which makes every claim an argument.
Rate files multiply for ordinary reasons. The carrier sends a new PDF, someone retypes it. A colleague makes a local copy to test a scenario. A version travels by email to a laptop and comes back edited. Within a year the same tariff exists as TarifXYZ_2026.xlsx, TarifXYZ_2026_v2.xlsx, TarifXYZ_2026_MJ.xlsx and TarifXYZ_FINAL.xlsx, and the differences between them are three cells nobody can find.
The damage is not the duplication. It is that a spreadsheet has no concept of validity. A rate table is only meaningful with two dates attached — the day it takes effect and the day it stops — and a file has neither. So the file cannot answer the two questions that matter when a customer disputes an invoice: which rates were in force on 14 April, and which of them did we actually quote from?
The test
- Search your shared drive for one carrier's name.
- Count the files that contain rates.
- Open the two most recent and compare the same cell — a mid-range bracket in your busiest zone.
If the two cells differ, every quote sent in the past month was priced from a coin toss. If they are identical, you have redundancy rather than divergence, which is survivable but still means every increase has to be applied in four places.
A structured grid replaces the filename convention with effective and expiry dates on the rates themselves, so an expired tariff stops producing prices instead of quietly producing wrong ones. The rebuild mechanics — merged cells, free-text zones, overlapping brackets — are covered in rebuilding an Excel rate sheet into a TMS. Cargavo, a TMS for freight brokers and transport commissionaires, keeps one active grid per carrier tariff, so "which version" is not a question the team can ask.
Sign 4: quotes go out with copy and lookup errors
Spreadsheet pricing fails in two ways that produce a confident wrong number: a lookup on the wrong weight, and a rate read in the wrong unit. Both return a plausible figure, so neither is caught before the quote is sent — only when the carrier invoice arrives weeks later.
The dangerous errors are not typos. A typo produces €4,782 where €478 was meant and gets caught immediately. The errors that survive are the ones that produce a believable number.
Wrong weight looked up. The tariff is applied to gross weight when it should be applied to chargeable weight, or the reverse.
Wrong unit read. A rate expressed per 100 kg is multiplied as if it were per kg, or a €0.184 per kg cell is read as €18.40 per 100 kg in a workbook where both conventions appear on different tabs.
Approximate-match lookup. A bracket table read with an approximate match returns the row below the shipment weight when the boundary is set at the upper limit — one bracket too cheap, every time, on every shipment near a boundary.
Worked example: gross weight instead of chargeable weight
Four non-stackable pallets of 1.2 × 0.8 m, 120 kg each — 480 kg gross.
- Floor space: 4 × 0.96 m² = 3.84 m². Divided by 2.4 = 1.6 loading meters.
- With a carrier loading-meter floor of 1,850 kg per LDM: 1.6 × 1,850 = 2,960 kg chargeable.
- Priced on 480 kg — bracket 400 to 499 kg at €26.00 per 100 kg = €124.80.
- Priced on 2,960 kg — bracket 2,500 to 2,999 kg at €13.20 per 100 kg = €390.72.
- Understatement: €265.92 on one quote, on a shipment that looked entirely routine.
Note that the correct price is higher despite a much lower rate per 100 kg — which is exactly why the error is invisible to the person quoting. Check your own exposure with the loading meter calculator, and read linear meter (LDM) pricing explained for the floor and volumetric rules. In an engine, chargeable weight is derived from the dimensions before the lookup runs, so the wrong weight cannot be looked up.
Sign 5: nobody can quote when they are away from the office
A rate workbook is a desktop object. It needs the file, the right version, a large screen and the person who understands it. That means requests arriving at 18:30, on a Saturday, or while the pricer is on a customer visit wait — and shippers who asked three brokers rarely wait.
Every brokerage knows this one and most treat it as a fact of life. It is worth measuring instead, because the measurement is easy and the result is usually uncomfortable.
Take last month's sent items, filter the quotes, and sort by the timestamp of the incoming request rather than your reply. Count how many arrived after 18:00, before 08:00, or at a weekend. Then count how many of those were answered within the hour. In most small brokerages the second number is zero, because the file was on a desktop and the person was not.
The delay is rarely the pricing itself. Timing the steps separately — reading the request, chasing missing dimensions, opening the file, doing the lookup, writing the email — shows that the calculation is a small fraction of the elapsed time, as broken down in the quote turnaround time benchmark. The rest is queueing: waiting for a person to be at a desk, with a file open.
There are two independent fixes and they solve different halves of the problem:
- Move the calculation to a server. Any authorised colleague can then price from a phone between appointments, because there is no file to have.
- Let the customer price it themselves. A branded portal answers at 21:00 with your rates and your margin for that account, and returns a structured request instead of "roughly 2 pallets, maybe 800 kg".
Cargavo, a TMS for freight brokers, includes the customer portal on every plan, from €49 per month; full white-label branding is on the Scale plan (€399 per month) — see plans and pricing. The portal is not a load board and it is not a tendering marketplace: it exposes your prices to your own customers only. What it changes for a small team is set out in customer quote portals for freight brokers.
Sign 6: nobody can say who quoted what, and at which price
A quote that exists only as a sent email has no status, no owner and no history. You cannot list what is outstanding, you cannot tell an accepted quote from an ignored one, and you cannot reconstruct which rates produced a price three months ago when the customer disputes the invoice.
Ask your team a question with a definite answer: how many quotes are open right now, for how much, and who owns each one? If answering requires several people to search their own mailboxes, the pipeline does not exist as data. It exists as recollection.
This costs money in three distinct places, and they are worth separating because only the third is obvious.
Nothing gets followed up
A quote sent on Tuesday and never answered is indistinguishable from one that was accepted, unless someone remembers it. The follow-up that wins the load is the one nobody makes.
Disputes are unwinnable
Three months later a customer says the agreed price was lower. Without a dated record linking the quote to the tariff version and the options selected, the discussion is one memory against another, and the broker generally concedes.
You cannot see which lanes make money
Margin per shipment is knowable only when buy price, sell price, customer and carrier are recorded together on the same object. In a mailbox they are four unrelated facts, so questions like "which customer looks busy but earns nothing" stay unanswerable.
The mechanism that fixes this is unglamorous: a reference. Every quote gets an identifier such as Q-2026-0311 with a status, an author, a date and the priced lines attached. When it is accepted it becomes a shipment with its own reference, S-2026-0184, carrying the same financial record forward. The message thread about the shipment hangs off the same object instead of living in one person's inbox.
Cargavo, a TMS for freight brokers and transport commissionaires, stores buy price, sell price and margin in a private area of each quote and shipment that customers can never read, while showing them their own sell price. That is a design requirement rather than a display setting — see how to show a price without revealing your buy rate.
Which of these six signs does a TMS actually fix?
Software removes the failures caused by manual repetition: divergence, version confusion, lookup errors, desk dependency and missing records. It does not fix a badly negotiated tariff, an unprofitable customer or a carrier that answers slowly — those stay commercial problems after the migration.
Be precise about the boundary, because a vendor that promises to fix everything is describing marketing rather than software.
| Sign | Test you can run today | Cost in the worked example | Removed by software? |
|---|---|---|---|
| 1 — Buy and sell drift apart | Compare cost sheet and price list on one lane | €12.37 per shipment | Yes — one engine both sides |
| 2 — One person reads the tariff | Ask a colleague to quote alone | Pricing capacity of 1 | Yes — rules become configuration |
| 3 — Several tariff versions | Search the drive for a carrier name | 4 files, 1 valid | Yes — validity dates on rates |
| 4 — Copy and lookup errors | Re-price 5 quotes already sent | €265.92 on one quote | Yes — computed, never typed |
| 5 — No quoting away from the desk | Count requests arriving after 18:00 | 0 answered within the hour | Yes — server-side + portal |
| 6 — No record of who quoted what | List every open quote and its owner | No dated evidence | Yes — Q-2026-NNNN references |
What stays your problem
A TMS prices what you negotiated. If your zone 4 buy rate is 12% above the market, a grid engine will apply that rate faster and more consistently than a spreadsheet ever did. Software also cannot invent a rate for a lane no carrier has quoted you — though it should still accept the request rather than dead-end it, which is the point of quoting without a rate grid.
Be clear on scope too. Cargavo, a TMS for freight brokers, does not connect to carrier APIs or EDI, is not a load board or a tendering marketplace, and is not a fleet, dispatch or accounting system. It prices the tariffs you already hold, in EUR, USD, GBP, CHF, CAD, MAD or PLN, in English, French, Spanish or German.
The migration itself is data entry, not an IT project: roughly one to two hours per tariff, with the timings broken down in the TMS implementation timeline. Plans are €49, €149 and €399 per month with a 14-day free trial and no credit card — see what each includes.
Frequently asked questions
Do I need a TMS or is a spreadsheet enough?
A spreadsheet is enough while one person prices one or two carrier tariffs of a single grid type, for a small set of customers on the same margin. It stops being enough when the same workbook must keep buy rates, sell prices, chargeable weight rules, fuel surcharge and per-customer margins consistent at the same time, because those parts are updated on different cycles and drift apart.
What are the signs a freight brokerage has outgrown Excel?
The six observable signs are: buy prices and sell prices maintained in separate files, only one person able to read the carrier tariff, several versions of the same tariff on the drive, quotes leaving with lookup or unit errors, no ability to quote outside the office, and no record of who quoted what at which price. Each can be tested in an afternoon on files you already have.
Why is quoting freight in Excel risky?
Excel returns a confident number whether or not the inputs are right. A lookup on gross weight instead of chargeable weight, a rate read per kg instead of per 100 kg, or an approximate-match bracket lookup all produce plausible figures that pass review and only surface when the carrier invoice arrives. The file also has no validity dates, so an expired tariff keeps producing prices.
How many carriers can you manage in a spreadsheet before it breaks?
The count matters less than the variety. Twelve weight-zone tariffs with identical structure stay manageable, while four tariffs spanning weight-zone, per-pallet, loading-meter bracket and hybrid formats do not, because each needs different lookup logic and different chargeable weight rules. Once you are maintaining more than one grid shape by hand, the workbook is holding logic rather than data.
What happens to my existing rate spreadsheets when I move to a TMS?
They become the input. Each carrier tariff is entered once as a structured grid — weight_zone, pallet, mpl_bracket or hybrid_weight — and from then on prices are computed rather than looked up. Keep the workbooks as an archive and as a check: re-price ten shipments you were already paid for and compare the results before you retire the file.
Is a TMS worth it for a two-person freight brokerage?
It depends on how many of the six signs apply rather than on team size, since a two-person brokerage with four carrier tariffs has more divergence risk than a five-person one with a single tariff. Cargavo starts at €49 per month with a 14-day free trial and no credit card, which is enough time to enter one tariff and price real shipments against the spreadsheet.
Related guides
- TMS for Small Freight Brokers: The Complete Buyer’s Guide
- TMS Pricing in 2026: What a TMS Really Costs a Small Brokerage
- How a Small Freight Broker Competes With Large 3PLs