How container tracking actually works.
Every box you've ever shipped sat in a database somewhere — at the carrier, at the terminal, at the inland depot. Tracking is the art of stitching those fragments into one timeline. Here's the plumbing.
If you've ever opened a carrier's tracking portal, typed your container number, and watched a single status line appear — "Loaded on vessel · 14 days ago" — you've experienced 5% of what tracking can be. The carrier knows where your container is. They just don't always tell you.
Modern container tracking is the process of collecting whatever the carrier does publish, fusing it with independent vessel data, and showing you the result before anyone has to ask. The hard part is that "whatever the carrier publishes" varies wildly by line, by week, and sometimes by container.
The container's journey, end to end
Before we talk about data, it helps to know what's actually happening to your box. A typical Asia → Europe move looks like:
- Booking confirmed. Your forwarder commits the container to a sailing.
- Empty release. The carrier nominates a depot; the trucker picks up an empty.
- Stuffing. The container is loaded at your shipper's facility or at a CFS.
- Gate-in. The container arrives at the origin terminal. Now it's in the carrier's possession.
- Loaded on vessel. Cranes lift it onto the ship.
- Departure. The ship sails.
- Transhipment (often). At a hub like Singapore or Tanger Med, the container moves to a second vessel.
- Arrival. The discharging port unloads.
- Customs clearance. Your broker files; if the inspection lottery is unkind, this stage drags.
- Gate-out. The trucker collects it.
- Empty return. Once unstuffed, the empty goes back to the depot. The "container journey" technically ends here.
Each of those 11 stages is a tracking event. Each is produced by a different system — terminal operating systems (TOS), carrier ERPs, customs portals, telematics vendors. None of them talk to each other natively.
What carriers publish (and don't)
Every major ocean carrier — Maersk, MSC, CMA CGM, Hapag-Lloyd, ONE, Evergreen, COSCO, ZIM, HMM, Yang Ming — operates a tracking API or a structured tracking page. The format varies but the data shape is similar:
- Container number (the 4-letter prefix + 7 digits, e.g.
MEDU9091004) - Status text — "On vessel", "At terminal", "Empty received at CY"
- Current and next port
- ATD origin (Actual Time of Departure) and ETA destination
- Vessel name + voyage number
- Bill of lading reference
What they often don't publish: precise lat/lng for the current vessel, the rotation of every intermediate port, the gate-event timestamps at the destination terminal, or the dwell time at customs. They could. They mostly don't, because publishing operational detail makes it easier to hold them accountable to it.
AIS — the vessel-side of the puzzle
While the carrier is silent about exactly where the vessel is, the vessel itself is shouting its position into the open ocean. AIS (Automatic Identification System) is a VHF radio standard that every commercial vessel over 300 GT broadcasts on, every 2–10 seconds. The signal contains MMSI (the vessel's radio ID), latitude, longitude, speed, course, and heading.
Two systems pick those signals up:
- Terrestrial AIS. A worldwide network of coastal receivers, typically within ~40 nautical miles of a station. Coverage is excellent near major ports and shipping lanes.
- Satellite AIS. Satellite constellations (Spire, ORBCOMM, exactEarth) listen for AIS signals from space. Slower refresh, more expensive, but it sees the middle of the Atlantic where no coastal station can.
If you've got the vessel's MMSI — which the carrier helpfully publishes via the voyage number — you can plot where the ship is right now. (See: AIS vs Satellite AIS.)
The fusion step
Here's the trick: your container is wherever the vessel is. Once you know which vessel and which voyage, you have a moving lat/lng for the box itself. That's why container tracking platforms (us included) maintain two independent feeds:
- A daily poll of the carrier's tracking endpoint to catch status changes (loaded → departed → arrived → transhipped).
- A continuous AIS subscription on every vessel currently carrying a tracked container — for live position.
Fuse those two streams and you get something neither side alone can give you: a status timeline (carrier) anchored to a moving map (AIS).
One poll per day. Live AIS in between.
jsoncargo handles the daily carrier poll; aisstream.io delivers the AIS firehose. The fusion happens server-side, the dashboard sees one clean object per container.
Transhipment: where most tracking falls apart
The hardest part of building a tracking system isn't the first leg. It's the second one. When your container is discharged at Singapore PSA and loaded onto a new vessel, the carrier publishes a status update with a new voyage number. The naive tracker stops getting AIS data because it's still subscribed to the first vessel.
A real tracking system watches for transhipment events, looks up the new vessel's MMSI, and silently switches the AIS subscription. The user never sees the seam.
Caching, freshness, and why ETAs jump
Carrier APIs are slow and metered. A single tracking call can take 1–8 seconds and counts against a monthly quota. The right pattern is to poll once a day per container, cache the result, and serve every subsequent dashboard load from the cache. AIS data, which is cheap and abundant, refreshes more often — typically every 2 minutes for vessels in coastal coverage.
Why does an ETA suddenly jump 3 days later? Usually it's not the ship slowing down — it's the carrier finally updating their estimate based on a port congestion report or a downstream berth change. Real ETA churn happens upstream of the tracking system; tracking only surfaces it.
The Broadpath approach
We try to do three things well:
- Daily polling, 30-day window. One credit covers a container for 30 days of unlimited re-tracking, polled once daily in the background.
- Indefinite event history. Once polling stops, the events we collected stay. Disputes happen months later.
- Multi-source fusion. Carrier data + jsoncargo aggregation + aisstream.io live positions + Broadpath's own port-call indexing.
That's the whole pitch. The interesting engineering is in the fusion. The interesting business is in not making you click between five carrier portals.
Got a tracking-specific question we haven't answered? Email [email protected] — we'll add it to the article.