Part 8 of our series on ERP for Maltese businesses, by sector.
You quoted the shipment three weeks ago. It has since arrived, cleared, and been delivered. The client is happy and the invoice has gone out.
Now, what did you make on it?
The honest answer in most freight and transport businesses is: ask again in a month. The shipping line invoice is in. The port charges are not. There was a storage cost because clearance took two extra days, and nobody is entirely sure whether that was passed on. The haulier who did the final delivery bills at the end of the month. And the fuel and driver time on your own vehicle is somewhere in the general overhead.
So the margin on that job exists, but it is spread across four future invoices and one set of costs nobody attributes to anything. By the time it can be calculated, you have quoted forty more shipments using the same assumptions that produced it.
Why logistics is a difficult sector to run on spreadsheets
Malta's position makes this business essential and structurally awkward at the same time. Everything arrives by sea or air, timings depend on schedules you do not control, and a delay anywhere in the chain becomes a cost that lands on someone.
Four things make the numbers hard:
Your costs arrive after your revenue. You invoice the client relatively quickly. The costs behind that job trickle in for weeks afterwards, from carriers, ports, agents and subcontractors.
A large share of your cost base is other people's invoices. You are buying and reselling third party services, which means your margin is the difference between two sets of paperwork that arrive at different times in different formats.
Every job is a small project. Not a repeated transaction. Each shipment has its own route, its own charges, its own documents, its own exceptions.
And exceptions are where the money goes. Demurrage, storage, re-delivery, amended documents, inspection charges. These are the costs that were not in the quote, and whether they get recharged usually depends on whether somebody noticed in time.
The five things that cost you money
1. Unrecharged disbursements
This is the largest and most consistent leak in freight forwarding.
A charge comes in that was genuinely the client's responsibility: an inspection fee, two days of storage, an amendment charge. It is small enough that nobody escalates it, and by the time the invoice has been processed, the job is closed and billed. Passing it on now means reopening a settled matter, so it gets absorbed.
Individually these are rounding errors. Across a year they frequently exceed net profit.
2. Quoting from rates that have moved
Freight rates are volatile, and Malta's routes are thin enough that a change in schedule or capacity moves pricing quickly.
If your rate card lives in a spreadsheet that gets updated when someone remembers, you will quote at last quarter's costs. The client accepts, the shipment runs, and the margin is a third of what you assumed. Nothing in the process flags it, because nothing compares the quoted cost to the actual cost afterwards.
3. Documents scattered everywhere
Bills of lading, customs entries, delivery notes, packing lists, proof of delivery, correspondence with the agent at the other end. Some in email, some on a shared drive, some printed.
Two costs follow. The obvious one is time: someone spends fifteen minutes finding a document every time a client queries something. The less obvious one is risk: when a dispute arises about what was agreed or what was delivered, the business that cannot produce the paperwork quickly tends to lose the argument.
4. Fleet costs that nobody attributes
If you run your own vehicles, they are one of your largest cost centres and often one of the least visible.
Fuel, servicing, tyres, insurance, licensing, repairs, and the cost of a vehicle being off the road. Most operators know the total roughly, from the bank account. Very few can say what a particular vehicle costs per month, which vehicle is quietly expensive, or what the running cost of a specific delivery was.
Maintenance also tends to be reactive, which is the most expensive way to run vehicles: a breakdown costs the repair plus the disrupted schedule plus the emergency subcontracted delivery.
5. Warehousing and storage that is under-billed
Where you hold goods for clients, storage revenue is easy to lose. Pallets come in, some go out, some sit for months. Unless somebody is calculating occupancy and generating charges on a schedule, storage tends to be billed on estimate, and estimates drift downward.
What good looks like
Setting software aside, a well-run logistics business looks like this:
- Every shipment or movement is a job, and every cost attaches to that job whenever it arrives
- Quoted cost sits next to actual cost on the same record, so the gap is visible
- Recharges are flagged at the point the cost lands, while the job is still open
- All documents for a job live in one place, retrievable in seconds
- Vehicle running costs are recorded per vehicle, with servicing scheduled rather than reactive
- Storage is calculated from what is actually held, and billed on a cycle
- You can rank clients, routes and service types by real margin
- Nothing gets closed and billed until someone has checked that all expected costs have landed
Where Odoo fits
The useful idea for this sector is analytic job costing: a single record per shipment that every cost and every charge attaches to, regardless of when it arrives or who issues it.
A job record per shipment or movement. Each consignment becomes a project or job with its own reference, client, route and status. Everything relating to it hangs off that record.
Costs attached as they arrive. Vendor bills from carriers, ports, agents and hauliers get tagged to the job when they are processed. The job's cost position updates continuously rather than being reconstructed later.
Committed cost before the invoice. Purchase orders raised to carriers and subcontractors record the commitment immediately, so a job's expected cost is visible before the paperwork catches up.
Quoted versus actual, side by side. Because the quotation and the accumulated costs sit on the same record, you can see which jobs, routes and clients are performing as priced. That is what makes the next quote better than the last one.
Recharges captured while the job is open. Costs flagged as rechargeable can be pulled onto the client invoice, so disbursements stop quietly disappearing.
Document management per job. Bills of lading, customs paperwork, delivery notes and proof of delivery filed against the job, with access controlled. A client query becomes a search rather than an expedition.
Fleet management. Odoo's Fleet app holds vehicles with their contracts, insurance, servicing, fuel and repair costs, plus odometer readings and scheduled services. You get cost per vehicle rather than a fuel total, and maintenance becomes planned rather than reactive.
Warehousing and storage. Where you hold client goods, Odoo's inventory can track them by client and location, and recurring invoicing handles storage billing on a cycle rather than on memory.
Recurring and contract billing. Regular clients on agreed monthly arrangements bill automatically, which removes another common source of revenue quietly going missing.
Reporting that answers commercial questions. Margin by client, by route, by service type, by month. Which is how you discover that your busiest client is your least profitable, a finding that is common and rarely welcome.
One honest note. This sector has more variation between businesses than almost any other in this series. A customs clearance agent, a domestic haulier, a freight forwarder and a 3PL warehouse operator have genuinely different processes, and a configuration that suits one will not suit another without real thought. Any implementation worth doing starts with mapping how your specific job flow works rather than assuming a standard shape.
How these projects usually run
Sensible phasing: start with the job record and cost capture, because that is where the blind spot is largest and the payback fastest. Then quoting and recharges. Then documents. Then fleet. Then storage billing and the reporting layer.
Cost capture first is deliberate. Once every cost has a job to attach to, the rest of the value follows quickly, and the business gets a real margin figure within the first month or two.
Where to start
Three things you can do before making any decision:
Take ten completed jobs from three months ago and calculate their true margin. Every carrier invoice, every port charge, every subcontracted delivery, plus a fair allocation of your own vehicle and labour cost. Compare that to what you assumed when you quoted. The spread is the finding.
Go through last month's supplier invoices and mark every charge that could have been recharged but was not. Add it up. That number is usually enough on its own.
Pick one vehicle and calculate its total cost over the last twelve months. Fuel, servicing, repairs, insurance, licensing, plus days off the road. Then work out what it earned. Most operators find at least one vehicle that is not paying for itself.
If any of those exercises is hard to complete with the records you have, that difficulty is the point.
Centric Malta is an Odoo implementation partner based in Birkirkara, working with Maltese freight forwarders, hauliers, clearance agents and warehousing operators. If you would like to talk through how your job costs, recharges and fleet currently connect, and what it would take to see a shipment's real margin while it is still open, get in touch.
Mob +356 7746 9333 | Tel +356 2746 3333 | info@centricmt.com
Previously in this series: ERP for construction and contracting businesses in Malta..