Logistics

Spreadsheet work for freight forwarders and shippers

Shipment status that shows where a box actually is, clearance turnaround by agent, and demurrage you see before the invoice

Get your Excel job done

100% satisfaction guarantee — refunded in full if the file is not what you needed.

Shipping runs on spreadsheets because no two forwarders, carriers and customs brokers share a system, and the spreadsheet is the only place the whole journey exists in one row. The recurring failure is not that people lack software — it is that the sheet records an ETA and an actual, so a shipment is either on time or already late, with nothing in between. Every question worth asking lives in between: how long did clearance take, who is holding the documents, how many days has this box been sitting, and what is accruing while it does. The work we do in this sector is almost always the same shape — adding the milestones that were never recorded, then deriving everything else from them.

What we build for this sector

The four engagements that come up most often

Multi-milestone shipment tracking

  • Seven dated milestones per shipment, every leg duration derived, and the current stage deduced rather than typed

Clearance turnaround by agent

  • Time from documents sent to release, with query time separated from the agent's own working time

Demurrage and detention exposure

  • Tiered daily rates against free days, accruing live on containers still out rather than arriving as an invoice

Carrier and forwarder scorecards

  • On-time delivery, transit against quoted, damage and invoice accuracy, weighted into one defensible number

What the worksheet looks like

The columns that carry the argument

Shipment sheet: milestones typed, stage and ageing derived.
ABCDEFGHIJK
1RefCarrierPOLPODDocs to agentClearedSailedArrivedStageDays in stage
2SH-1042MSCTemaRotterdam2026-02-032026-02-092026-02-112026-03-04At destination3
3SH-1043MaerskTemaAntwerp2026-02-142026-02-27Awaiting loading16
4SH-1044CMA CGMLagosLe Havre2026-03-01In clearance11

The calculations behind it

Why each one is written the way it is

  • =IF($J5<>"","Delivered",IF($I5<>"","At destination",IF($H5<>"","In transit",IF($G5<>"","Awaiting loading",IF($F5<>"","In clearance","Booked"))))) The current stage, deduced from the last milestone filled. Nobody updates a status column, so it cannot be stale.
  • =IF($A5="","",IF($J5<>"",0,$P$2-MAX($F5:$J5))) Days sitting in the current stage. This is what you sort by in the morning — an ETA cannot tell you a container has not moved in a fortnight.
  • =IFERROR(AVERAGEIFS(Shipments!$K$5:$K$204,Shipments!$C$5:$C$204,$A5),"") Average clearance days per carrier, so a pattern separates from a bad week.
  • =IF($F5="","",MAX(0,$F5-$D5)) Chargeable demurrage days, floored at zero so an early return cannot silently offset a real charge elsewhere.

Sixteen days that no ETA would have shown

A worked case from this sector

A forwarder moving containers out of Tema books SH-1043 for Antwerp. Documents reach the clearing agent on 14 February and clearance comes through on 27 February — thirteen days against a four-day average. Then nothing. The carrier's portal still shows an ETA of 12 March and still looks fine, because the carrier never received the box: the booking lapsed while clearance ran long. What the sheet shows is Awaiting loading, 16 days. Sorted by days in stage it is the top row on a Monday; sorted by ETA it stays invisible until it is three weeks late and the customer calls.

Templates to start from

Free, and adaptable to your own data

Need it built around your data?

  • We work in your existing workbook
  • Fixed scope agreed before we start
  • Delivered within 24 hours

Questions from this sector

Specific to this work, not generic

Can you work from our forwarder's tracking export?

Yes, and it is usually the fastest route. Most forwarder and carrier portals export a CSV with the milestone dates already in it; the work is mapping their column names onto a consistent set and deriving the durations. You keep exporting as you do now and the sheet updates.

We track by container, not by shipment. Does that change things?

It changes the grain, not the structure. One row per container works identically and is better when containers on the same booking clear or move separately — which they do more often than most sheets assume.

How do you handle multi-leg shipments with transhipment?

Either a second set of sailed and arrived columns for the second leg, or one row per leg linked by the booking reference. Which is right depends on whether you need per-leg carrier performance; if you do, separate rows are the only honest option.

Our demurrage rates change by contract and by port. Can that be modelled?

Yes. The rate lives in a lookup table keyed on charge type, port and day range rather than being written into the formula, so adding a contract is adding a row.

Do you work with freight forwarders outside Europe?

Yes. Most of this work arrives from West Africa, the Gulf and South Asia, and none of it depends on where anyone is — the file comes by email and goes back the same way.