Industry

ERP for Logistics and Freight Forwarding in the UAE: Jobs, Costing and Customs Documents

A freight forwarder does not sell products. It sells jobs, each with its own revenue, its own costs in three currencies and its own pile of documents. An ERP that cannot model the job will never show you which shipments made money.

Most freight forwarders in Dubai, Sharjah and Jebel Ali run on the same stack: a booking system or a spreadsheet for jobs, a standalone accounting package for the books, Outlook for documents and a shared drive for the rest. It works until the fourth branch opens, the air cargo desk starts quoting in USD against costs in EUR, and the finance manager is asked which trade lanes are actually profitable. Nobody can answer, because the profit lives in a job file that the accounting system has never seen.

This guide sets out how a logistics or freight forwarding company in the UAE should think about ERP: what the job file needs to hold, how costing and agent settlements work, where customs documents sit, and how VAT on transport should be configured.

Key takeaways

  • The job file, not the invoice, is the unit of profit. Every revenue line and every cost line must carry a job reference.
  • Costs arrive late. Accrue them at booking and replace with actual supplier bills, or your monthly margin will be fiction.
  • Multi-currency is not optional: quotes in USD, carrier costs in EUR or AED, agent settlements netted in USD, books in AED.
  • International transport and connected services are generally zero-rated for UAE VAT; domestic legs and local handling are standard-rated. Set the tax codes per service line.
  • Customs declaration numbers, duty, VAT and documents belong on the job, with the ERP holding references rather than filing the declaration.

The job file is the centre of everything

In trading or manufacturing, the ERP is built around products and stock. In forwarding there is no stock. There is a shipment, and everything hangs off it: the booking, the house and master bills, the customs entry, the supplier costs, the customer invoice, the agent settlement and the documents.

A workable job file in an ERP holds at least the following:

  • Header: job number, mode (sea FCL, sea LCL, air, land), direction (import, export, cross-trade), customer, shipper, consignee, origin, destination, incoterm, sales owner and operations owner.
  • References: master bill or air waybill, house bill, container numbers, booking reference, customs declaration number, port and terminal references.
  • Revenue lines: freight, origin charges, destination charges, customs clearance, documentation, handling, insurance, each with its currency and VAT treatment.
  • Cost lines: carrier freight, overseas agent charges, port and terminal handling, trucking, customs duty and VAT paid on behalf of the customer, demurrage and detention.
  • Status and milestones: booked, departed, arrived, cleared, delivered, invoiced, closed.

In Odoo this is most often modelled with a project or a custom job object linked to an analytic account, so that every sales order line, vendor bill and journal entry carries the job as an analytic dimension. The principle is the same in SAP Business One or Dynamics 365 Business Central: a job or project dimension that every transaction must reference.

Costing: the problem is timing, not arithmetic

Freight margins are thin and costs arrive late. A customer is invoiced the week the container sails. The carrier invoice arrives three weeks later. The destination agent's debit note arrives six weeks after that, often netted against what they owe you on other jobs. If the ERP only recognises cost when a supplier bill is posted, every month-end shows a profit that quietly shrinks over the following quarter.

The fix is to accrue expected costs on the job at booking, using the quoted or tariff cost, and reverse the accrual when the actual bill arrives. In the ERP it becomes a standard job cost line with a status of estimated, accrued or actual, and a month-end routine that posts the accruals for all open jobs.

Cost lineWhen it is knownHow to record it
Carrier freightAt booking, from the rate sheetEstimated cost on the job, accrued at month-end, replaced by the carrier bill
Origin or destination agent chargesAgent quote at booking, actual on debit note weeks laterEstimated, then matched to the agent statement and netted in settlement
Port, terminal and customs chargesAt clearance, from the port system or brokerActual on the day, often paid first and billed on to the customer
Trucking and last mileAt deliveryActual from the haulier bill or own-fleet trip cost
Demurrage and detentionWeeks after deliveryProvision on jobs with known delays, actual when billed

Two more decisions matter. First, pass-through charges such as customs duty paid on behalf of the customer should be tracked on the job but kept out of revenue and margin, so a job with AED 40,000 of duty does not look like a large job with a tiny margin. Second, the job should not close until all expected cost lines have been matched or written off, and the profitability report should show open, closed and provisional jobs separately.

Agent settlements and multi-currency

A forwarder with a network of overseas agents does not pay each invoice. It settles. Every month or quarter, the agent sends a statement listing what you owe them and what they owe you, in USD, and one net amount moves. The ERP has to support an agent being both a customer and a supplier, with a settlement process that matches both sides of the ledger and posts the net payment. In Odoo this is handled with a partner that has both receivable and payable balances and a reconciliation routine; it works, but it needs to be designed in from the start rather than discovered at the first quarter-end.

Currency is the second structural requirement. A typical Dubai forwarder quotes in USD, pays carriers in USD or EUR, pays local charges in AED, settles agents in USD and reports in AED. Every job line needs its own currency and rate, the system needs rates per day rather than per month, and finance needs an unrealised gain and loss revaluation at month-end.

Customs documents and where they live

Declarations themselves are filed through the customs authority portal in each emirate or through a licensed broker's system. The ERP's job is to hold the declaration number, the HS codes and values used, the duty and VAT amounts, and the supporting documents: commercial invoice, packing list, certificate of origin, bill of lading or air waybill, and delivery order. Attach them to the job, not to an email thread.

For forwarders acting as importer of record for clients, or operating inside a free zone such as JAFZA or Dubai South, that trail is a compliance asset: a customs or FTA query two years later is answered in minutes from the job, not over several days from three mailboxes and a departed employee's laptop.

VAT on transport: get the tax codes right per service line

UAE VAT treats the international transport of goods and the services directly connected with it differently from domestic transport and local services. In broad terms, the international leg and connected services are zero-rated, while domestic trucking, local storage and many handling services are standard-rated at 5 percent.

The practical consequence is that one job will carry several VAT treatments on the same invoice. Configure a tax code per service line, make the default follow the service rather than the customer, and have your tax adviser confirm the mapping before go-live. Your VAT return, and from 2027 your e-invoices through an Accredited Service Provider, will be generated from these codes.

Reporting that actually answers the owner's questions

With jobs, costs and currencies modelled properly, the reports most owners want fall out directly:

  1. Gross profit per job, per trade lane, per customer and per sales owner, in AED, with open and closed jobs separated.
  2. Unbilled jobs: shipments delivered but not yet invoiced, which is usually where the cash is hiding.
  3. Unmatched costs: accrued lines older than 60 days with no supplier bill, which is where the surprises are hiding.
  4. Agent balances by agent and currency, with the next settlement date.
  5. Receivables ageing by customer with credit limits enforced at booking, not after the fact.

How Kaido approaches it

We start with the job, not the chart of accounts. In the first workshop we take five recent shipments, one per mode and direction, and walk them from enquiry to agent settlement, listing every reference, cost line and document along the way. That becomes the specification for the job object and the analytic structure, and it usually reveals two or three charge types the finance team did not know operations were absorbing.

From there the build is conventional: sales, purchasing and accounting configured around the job, multi-currency with daily rates, tax codes per service line, document attachment on the job, and the accrual routine as part of month-end. If your business has already outgrown the spreadsheet and accounting package combination, our guide for trading and distribution companies covers the adjacent problems of stock and landed cost, and our Odoo page explains how we scope and price a forwarding build.

Running a forwarding business on spreadsheets and a standalone accounting package?

Talk to a senior consultant about how your jobs, costs and documents would sit in one system. We will map your operation, from booking to agent settlement, and show you what the job profitability report would look like on your own data.

Book a discovery call →