Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts on the Apify Store →

How to track containers from any carrier in one table — and catch demurrage before it starts

A morning in an import desk starts with tabs: MSC's tracking page for three boxes, Maersk's for two, CMA CGM's for one, a COSCO booking that only shows up under its B/L. Each page shows the same journey in its own words — "Import Discharged from Vessel", "DISCHARG", "DISC" — and none of them says the one thing that costs money: the box was discharged two days ago and its free time runs out on Monday.

This tutorial shows how to replace that routine with one scheduled run of Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts on Apify: one list of numbers in, one table out, only what changed since yesterday, and a warning three days before demurrage starts.

The problem

A forwarder or importer with 40 containers on four carriers spends ≈ 1.5 hours per 100 containers per check: opening each carrier's page, copying the status, merging four output shapes into one sheet, and re-reading every row to find the few that moved. Missing one discharged box costs more than the whole week of checking — demurrage runs $75–300 per container per day once the free time is over.

Step by step

  1. Open the Actor and click Try it. The form is pre-filled with five sample containers from four carriers and one typo — press Start and the free demo returns in seconds, nothing charged. The Shortlist view shows one row per box: carrier, status, what changed, the ETA slip in days, the last free day and a one-line note.
  2. Paste your numbers into "Container, B/L or booking numbers", one per line. A container is routed by its owner code (MSCU… → MSC); a booking needs the carrier: 254839107, Maersk, PO-4411, 5 — carrier, your reference and your free days. You can also paste a whole booking e-mail; the numbers are pulled out, and a wrong check digit is reported for free instead of being looked up.
  3. Set your free time ("Free time at the port", e.g. 4 days). Every discharged box gets its lastFreeDay, and three days before it the dd_risk flag ranks it first with the next step: book the pickup or ask the line for an extension.
  4. Press Start. The Actor runs one batched lookup per carrier on your Apify account (capped by "Max source spend", $0.50 by default) and returns the table — demurrage risks and ETA slips first.
  5. Export or connect. The Morning table view is every container in one format; the Consignee alerts view holds the line to forward. Download CSV / Excel, or set a webhook.

What a run costs

The first 25 container updates are free. After that, each new or changed container costs $0.0037 here, plus the carrier lookup on your account ($0.01 a container + $0.001 per carrier run) — ≈ $0.014 per container update all in. 40 containers on four carriers, AI on: $0.40 of lookups + 40 × $0.0092 + ≈ $0.12 of tokens = $0.89 for the first run. After that only changes are charged, and smart polling stops looking up delivered boxes and checks boxes weeks from port every third run — a daily run of the same list costs ≈ $0.27.

Automate it

After the first real run the Actor saves the search as a Task; open it and click Schedule — daily for an import desk. Put your e-mail into "E-mail me the changes", or a Slack / Teams link into "Send alerts to". If your container list lives in a Google Sheet, share it as "Anyone with the link" and paste the link into "Your container list as a Google Sheet" — every run reads it, so adding a row there is all it takes.

From code:

from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("rich_minds/multi-carrier-tracking-ai").call(run_input={
    "sourceMode": "live",
    "trackingNumbers": ["MSCU0203658", "MAEU3402103", "254839107, Maersk, PO-4411, 5"],
    "freeTimeDays": 4,
    "maxDiscoveryChargeUsd": 0.5,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["trackingNumber"], item["status"], item["eta"], item["lastFreeDay"], item["note"])

Upsert each row on shipmentKey in your TMS or sheet: a reused box on its next voyage gets a new key, so it never overwrites the last shipment.

Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts on the Apify Store →