Veloxa
← All guides

Margin & Job Profitability

6 July 2026 · 6 min read

How freight forwarders can track profit per job

The Thursday before month-end close, your accountant sends over the P&L. The company made money — say AED 64,000 net for the month. You should feel fine. But there are two files on your desk, both sea exports out of Jebel Ali, quoted a week apart, and you are fairly sure one of them lost money. You just can't prove which one.

That is the normal state of many forwarding offices. Total revenue is easy — it is the sum of your invoices. Per-job profit is hard, because a job's costs arrive at different times, from different vendors, on paper, by email, and sometimes as a WhatsApp photo of a bill. This article is about closing that gap, and most of it is discipline rather than software. You can do almost all of it in Excel.

Why a profitable month can hide losing jobs

A company-level P&L adds everything together. Twenty jobs go in, one number comes out. If twelve jobs made a healthy margin and eight quietly lost money, the P&L can still look respectable — the good jobs subsidize the bad ones. And the bad jobs are rarely random. They cluster: one underquoted lane, one customer whose cargo always sits long enough to trigger detention, one trade where your buy rates moved and your sell rates didn't. A P&L cannot show you the cluster. Only job-level numbers can.

Put differently: the P&L answers "did we make money?" but never "should we keep quoting this lane at this rate?" — and the second question is the one that sets next quarter's profit.

What belongs on a job — and what doesn't

Per-job profit only works if you are strict about what counts. The sell side is straightforward: the lines you invoiced the customer for this job — freight, customs clearance, transport, handling, documentation. If you quoted it and billed it, it belongs to the job.

The buy side is where offices go wrong. Everything a vendor charges you because this shipment existed belongs to the job:

  • The carrier or co-loader's freight bill, matched against the AWB or BOL
  • Customs duties and clearance charges paid on the customer's behalf
  • Transport — the trucker's bill for pickup and delivery
  • Port, terminal, and handling charges
  • Detention and demurrage, when it lands on you rather than the customer

Equally important is what does not belong: rent, salaries, utilities, the office car. Those are company expenses. Spread them across jobs and every job looks vaguely bad and none is comparable. Keep office costs in their own bucket and judge jobs on shipment costs alone.

Estimated, booked, final — a job's cost is three numbers, not one

At quote time you have estimated costs: the buy rates you priced against. When you commit — an LPO to the transporter, a booking with the co-loader — those become booked costs, and they are often already different from the estimate. Weeks later the vendor bill arrives and the cost becomes final, sometimes carrying lines nobody planned for: an amendment fee, a rate that moved, a detention charge.

The mistake is treating cost as a single number that appears at the end. If you track all three stages, you see the drift while the job is still open — while you can still rebill a charge to the customer, dispute a vendor bill against the LPO, or correct the next quotation.

One job, AED 18,400 invoiced, six weeks of costs

Say a sea export from Jebel Ali to Mombasa. You invoice the customer AED 18,400. At quote time you estimated AED 13,100 in costs — an expected margin around AED 5,300, roughly 29%.

Then the bills arrive on their own schedule. Week one brings the trucker's bill for pickup, AED 1,450. Week two, clearance and port charges through your agent, AED 1,900. In week three the co-loader's freight bill lands at AED 9,400 — the estimate said AED 9,100, but the rate moved between quote and booking. And in week five, after you had mentally closed the file, a detention bill for AED 1,200 that nobody expected.

Final cost: AED 13,950. Final margin: AED 4,450 — 24.2%, not the 29% you quoted at. Still a decent job. But you only know that because all four bills landed on this job. If the detention bill had slipped into a general expenses column — which is where surprise bills tend to go — this job would have looked five points better than it really was, and you would quote the next Mombasa shipment on a fiction.

The one discipline: no vendor bill without a job number

Everything above stands or falls on one habit. When a vendor bill arrives — by email, by hand, as a photo on someone's phone — the first question is not "when do we pay it?" but "which job caused it?" Write the job reference on the bill before it goes anywhere else. No job number, no posting. There is more on this in vendor bill matching.

In Excel, the structure is simple: one sheet listing jobs, one sheet of invoice lines, one sheet of vendor costs — every row carrying a job reference — and a pivot by job. The common leaks are predictable: duties paid from petty cash and never recorded, bills settled straight from a WhatsApp message, and the "general" column where unclear bills go to hide. A fixed weekly slot to reconcile bills received against open jobs keeps the leaks small.

Margin is something you watch, not something you discover

If costs post to jobs as they arrive, margin becomes a running number instead of a post-mortem. You see the co-loader's bill push the Mombasa job from 29% toward 24% in week three — early enough to check whether the detention is rebillable, whether the bill matches what you booked, whether the tariff for that lane needs revising. Discover the same thing in a quarterly review and it is just history. Nothing about the job can be changed; only the regret is new.

Where Excel strains, and where Veloxa picks this up

The Excel version of this method genuinely works — up to a point. It usually holds while one disciplined person owns the sheets and volume stays modest. It strains when several people touch jobs at once, when part-payments and credit notes creep into the receivables sheet, and when the one person who understands the workbook takes annual leave. If that sounds close to home, we wrote about the signs your forwarding business has outgrown Excel.

Veloxa runs the same method on one record instead of three sheets. The quote becomes the job; the invoice is built from the job's own lines; every vendor bill is captured against the job it belongs to, with costs staged as estimated, booked, and final; and per-job margin is visible as soon as the job has estimate, invoice, or cost data — flagged when costs pass what you expected. Role-based access means operations staff run the shipment without seeing cost or margin, and office expenses stay deliberately separate from job costs.

If you would rather see this on a real freight workflow than read about it, book a 30-minute demo. We take one job from quote to margin — a quote becoming a job, vendor costs changing the margin, an overdue invoice showing up in receivables. No slides, and no pressure to decide anything that day.

See how Veloxa handles this.

30 minutes on a real freight workflow — book a demo.

Book a Demo