Nearly every freight business starts on a spreadsheet, and a good number run on one for years. That is not a failure of discipline. A sheet is instant, it costs nothing, everyone can already use it, and for a business doing a few shipments a week it genuinely holds the whole picture.
So this is not an argument for replacing it. It is the layout that works, from having seen a lot of them — and then, honestly, the three things that go wrong that no amount of spreadsheet skill fixes.
The rule that decides everything: one row per shipment
The most common mistake is a row per event — one line when it is booked, another when it is collected, another when it is delivered. It feels natural because that is the order things happen in. It ruins the sheet, because the moment there are three rows for one job you can no longer count your shipments, filter them, or add up what they earned without deduplicating first.
One row per shipment. Events become columns. This single decision is the difference between a sheet you can answer questions with and a list you can only read.
The columns
Reference. Yours, not the carrier’s. It must never change, and it must be the thing every other document quotes. The mistake is using the carrier’s number as the reference — it arrives late, it sometimes changes, and it is different per carrier, so half your sheet is blank for the first two days of every job.
Customer. Written identically every time. “Al Noor Trading”, “Al Noor Trading LLC” and “AlNoor” are three customers as far as any total is concerned, and this is the single most common reason a monthly figure is wrong. Pick the spelling once and use a dropdown, not typing.
Mode. Air, sea, road, courier. One word, from a list.
Origin and destination. Two separate columns, never “Dubai to Riyadh” in one, or you can never group by destination.
Planned and actual dates, side by side. This is the pair most sheets are missing. A column for when it was supposed to depart and one for when it did. Without both, you can tell a customer where their shipment is but you can never tell yourself which lane or which carrier is habitually late — and that is the difference between a tracking sheet and a sheet you learn anything from.
Status. From a fixed short list. Five or six words, agreed once. Free-typed status is why nobody trusts the filter.
What you charged. The sell figure, and its currency in its own column. One number with the currency mixed in as text cannot be added up.
What it cost you. The buy figure — and see the next section, because this is the column that quietly breaks.
Invoiced, and paid. Two columns, two dates. Not a tick. A tick tells you something happened; a date tells you when, which is the only way to see that a customer is drifting from thirty days to sixty.
Where the paperwork is. A link, a folder name, anything. The alternative is a search of somebody’s inbox every time a customer asks.
The cost column is where every sheet gets its wound
Sell is easy: you know it when you quote. Cost is not, because the supplier’s invoice arrives two, three, six weeks after delivery — by which point that row is far up the sheet and the job feels finished.
So the cost column gets filled with the estimate and never updated. And an estimate is not a cost. Your margin report is then a report of what you expected to spend, which is a different document from the one you think you are reading, and it is always the more flattering of the two.
If you keep one habit from this article, keep this one: when a supplier invoice arrives, go back and correct the row. A sheet where that happens is worth more than a system where it does not.
Three things a spreadsheet cannot be fixed out of
Two people cannot hold it at once. Shared editing helps and does not solve it, because the real conflict is not two cursors in one cell — it is two people with different ideas of what is true. Somebody quotes from yesterday’s copy. Somebody filters, edits and unfilters, and the edit lands on the wrong row. Nothing warns you, and the sheet looks perfectly healthy afterwards.
It has no memory. A cell holds one value: whatever it says now. When a price changes, the previous one is gone, along with who changed it and when. That is fine until a customer says they were quoted something different, and there is nothing to check — only two people remembering.
It cannot tell you what you did not think to ask. A sheet answers the questions you built columns for. It will never mention that one customer’s payments have quietly slipped past sixty days, or that a lane has been losing money for four months, because nobody wrote a formula to notice. The information is sitting in the file; it simply has no way of reaching you.
When to stop
Not at a shipment count. The moment is one of these, and you will recognise it:
Somebody asks what last month earned and the honest answer is “let me rebuild the sheet”. A customer disputes a price and there is no way to see what was actually quoted. Two people are keeping two versions and neither will give theirs up. Or the person who built it takes leave, and the business slows down.
Until one of those, a well-built sheet is a perfectly respectable way to run a freight business, and considerably better than software nobody has time to learn.
When one of them arrives, the thing to look for is not more features. It is that the shipment, the costs against it and the invoice are the same record — so the supplier invoice that turns up six weeks late has somewhere to land, and the margin stops being an estimate.