Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts avatar

Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts

Pricing

from $3.70 / 1,000 container update (rules only)s

Go to Apify Store
Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts

Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts

First 25 container updates free. Container tracking for any carrier, pay per qualified container update — junk never charged by us. Where is my container, container status alerts and ETA slips in one format. Free demo on any plan. Replaces 15 single-carrier scrapers; MCP-ready.

Pricing

from $3.70 / 1,000 container update (rules only)s

Rating

0.0

(0)

Developer

Rich Minds

Rich Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Every container, any carrier, one table — only the changes in your inbox daily.

⚡ First 25 container updates free · 💵 ≈ $0.014 per container update all in, the carrier source lookup included — $0.0037 of it is ours · 🤖 AI ≈ $0.020 all in · ⏱️ demo in seconds

Sample output — one row per container update: carrier, status, what changed, ETA slip, last free day, the note

Try it in 30 seconds. Click Try it — the form holds 5 sample containers; the demo runs on any plan. → What a run costs · What the AI adds · Run it weekly

⚡ At a glance

What you getone row per container in ONE format — status, milestone, ports, vessel, ETA, ETA slip, last free day, a note
You providecontainer, B/L or booking numbers — any carriers; or paste an e-mail, or link a Google Sheet
Typical run40 containers, 4 carriers → 40 rows: $0.55 rules only · $0.82 with the AI, lookups included; then only those that moved (≈ 6 a day)
Per update, all in≈ $0.014 rules only · ≈ $0.020 with the AI (the carrier lookup on your account included)
Free tieryour first 25 container updates, once per Apify account
Keys / setupStarter plan and up include Apify model access: AI on every update, no key · Free plan: your own key — free Gemini = 1–3 AI verdicts per run, paid = every update
Which planFree demo and your own results (list, template): any plan · live tracking and the e-mail digest: a plan that runs Store Actors
CarriersMSC, Maersk, CMA CGM · in beta — free here, the carrier lookup still ≈ $0.01 on your account: COSCO, OOCL, ONE, Hapag-Lloyd, Evergreen, HMM, Yang Ming, ZIM, Wan Hai, PIL, SITC, Emirates Shipping
Works withSchedules, webhooks, Google Sheets, Slack, Teams, Telegram, Make / n8n / Zapier, MCP

🎯 What this Actor does

  • Replaces 15 single-carrier scrapers — one list, any carrier, routed by its prefix (MSCU… → MSC).
  • One milestone format — DCSA codes (LOAD, DEPA, ARRI, DISC …), one status, the ETA in port time and UTC.
  • Demurrage in dollars — the last free day, the box first 3 days before it, the money at risk in the digest.
  • Only changes, fewer paid lookups — unchanged containers and typos (ISO 6346 check digit) are free; finished and far-off boxes are looked up less.

🚢 Multi carrier container tracking and bill of lading tracking

A container is routed by its owner code, a B/L by its prefix (MEDU…); a booking needs the carrier (254839107, Maersk, PO-4411, 5); a pasted e-mail works too.

⏰ Container status alerts — the ETA slip in days

etaSlipDays = days the ETA moved since the last run (+ = later); ≥ 1 day sets eta_slipped / eta_earlier and ranks the row first.

💰 Demurrage alerts — the last free day and the money at risk

freeTimeDays: discharge day + free days = lastFreeDay; dd_risk 3 days before it. demurrageAtRiskUsd = (days past it + 3) × demurrageRatePerDay ($150); the digest opens with "≈ $1,350 of demurrage at risk — 3 boxes".

🚀 How to use it

  1. Click Try it — the free demo: 5 sample containers from 4 carriers and one typo.
  2. Paste your numbers (or link your Google Sheet) — they replace the sample and start the live lookup on your Apify account, capped by "Max source spend". Leave "AI assessment" on.
  3. Press Start — demurrage risks, ETA slips and discharges come first. Export, or wire a webhook.
  4. Schedule it daily with notifyEmail — only containers that changed are delivered and charged.

The Consignee alerts view — the line to forward and the next step

📚 Learn more: Tutorial — track containers from any carrier with this Actor

🚢 Track by carrier, one table

MSC cargo tracking

MSCU, MEDU containers and B/Ls.

Maersk tracking

Maersk, Sealand, Hamburg Süd (MAEU, MSKU, SUDU) in DCSA codes.

CMA CGM, COSCO, OOCL and Wan Hai container tracking

CMA CGM's DCSA events as they are; COSCO, OOCL and Wan Hai in beta — free here, the lookup still ≈ $0.01 on your account.

🆚 Why this instead of running each carrier scraper yourself?

MSC Cargo Tracking Scraper + its 14 siblingsThis Actor
Your time per 100 containers≈ 1.5 h a check (estimate, not timed yet) — merge 4 shapes, re-read every row≈ 5 min (estimate) — read the 20 changed rows
Same 100 containers, 4 carriers, all in$1.00 a check: 100 unsorted rows$1.37 rules only · $2.03 with the AI memo — 100 ranked rows, junk costs $0 here
Next check, 20 of 100 moved$1.00 againthe same lookups + $0.07 here rules only · + $0.21 with the AI

How that compares — the lookups are the same $0.01 either way; here you add $0.0037 per update that changed, and one replaces ≈ 1 raw lookup row you would read by hand: $0.0037 per raw-row equivalent.

vs other container tracking Actors and free tools

100 containersWhat it lacks
This Actor$1.37 rules · $2.03 AI—
Container Tracking API (nabeelbaghoor)$1.50 + $0.005 a milestone + Vizion contractyour own Vizion key; no change-only monitor
MSC Container Tracking Scraper (brii3343)$0.20other carriers, alerts
Carriers' own pages · track-trace.comfreeone table, export, API, alerts

💵 Pricing — what a run really costs

EventWhen it is chargedPrice
free-tieryour first 25 container updates on this Actor, in any mode$0.00
qualified-container-update-basicAI off — the one-format row, flags, the note$0.0037
qualified-container-update-aiAI on — plus the AI codes, note and alert / extension request$0.0092

Never charged here: invalid numbers, unknown carriers, failed lookups, unchanged containers, beta-carrier rows (free here; their lookup still bills your account), rows below minScore, your exclude list. The lookups are not ours to waive: each carrier's Actor bills your account $0.01 a result ($0.004 ONE, Wan Hai) + $0.001 per run, capped by maxDiscoveryChargeUsd.

Worked example — 40 containers on 4 carriers, AI on, first run: lookups 40 × $0.01 + 4 × $0.001 = $0.40 on your account + 40 × $0.0092 + 40 × $0.0011 tokens = $0.82, ≈ $0.020 per container update ($0.59 with your first 25 free). Daily after that, ≈ 6 move and ≈ 20 are looked up (smart polling): $0.20 lookups + 6 × $0.0092 + 6 × $0.0011 tokens = $0.26 a day; rules $0.22.

At volume — a forwarder, 300 containers weekly, ≈ 75 % moving: $3.00 lookups + 225 × $0.0037 = $3.83 a week rules only (≈ $17 a month); AI on: $3.00 + 225 × $0.0092 + 225 × $0.0011 tokens = $5.32.

AI tier, all in: $0.0092 + ≈ $0.0011 tokens (1,961 input + 214 output per update, gemini-3.5-flash-lite at OpenRouter's rates, measured 2026-10-24) ≈ $0.010 per container update — 2.8× the basic price; ≈ $0.020 all in with the lookup.

🤖 What the AI tier adds

The same container update, AI off:

{"trackingNumber": "MSCU7421055", "status": "DISCHARGED", "lastFreeDay": "2026-10-26", "flags": ["dd_risk", "arrived", "milestone_changed"], "recommendedNextStep": "Book the pickup at ROTTERDAM, NL (NLRTM) before 2026-10-26, or ask MSC for a free-time extension today."}

AI on (qualified-container-update-ai, $0.0092) — the own-key AI run of the sample (INPUT.ai.json), 2026-10-24:

{
"trackingNumber": "MSCU7421055", "status": "DISCHARGED", "lastFreeDay": "2026-10-26", "score": 95,
"assessedBy": "ai", "aiModel": "google:gemini-3.5-flash-lite",
"scoreReasons": ["status is DISCHARGED at NLRTM", "ddRisk is true with lastFreeDay on 2026-10-26", "milestone is DISC on 2026-10-22"],
"generatedText": "Request free-time extension or urgent pickup slot for MSCU7421055 at ROTTERDAM, NL before last free day 2026-10-26."
}

The AI writes the extension / pickup request for a box at demurrage risk — one avoided $150 day pays for ≈ 16,000 AI updates — and reads the events ("Vessel skipped the Singapore call" → "a risk of a missed connection"). It saves ≈ 3 min each on 4 sample containers — read by hand vs the AI rows, 2026-10-24.

How much AI do I get on my plan? AI on every update with Apify's model access (Starter and up) or a paid own key; a free Gemini key (aistudio.google.com/apikey) gives 1–3 AI verdicts per run; else the demo shows sample verdicts.

⚙️ Input

FieldDefaultWhat it does
trackingNumbers—Numbers or pasted text; NUMBER, carrier, reference, free days per line
numbersSheetUrl—A shared Google Sheet (or CSV link) read every run
freeTimeDays0Free days at the POD → lastFreeDay and the dd_risk flag; 0 = off
sourceModeliveThe mode that runs = this field, except {} = the free demo; list / dataset read results
demurrageRatePerDay150Your demurrage per box per day → demurrageAtRiskUsd and the digest's total
maxDiscoveryChargeUsd0.5Hard cap on the lookups on your account
targetFlags—Only updates with one of these flags (dd_risk, arrived, eta_slipped …)
minScore00 = every new or changed container; higher = only those needing attention
enableAitrueAI codes, note and the alert / extension request on/off
clientName, brandName—White-label: your client's and your company's name on the REPORT and digest
notifyEmail—The digest by e-mail after every run with changes

Also in the Input tab: pollPolicy (smart), itemsList, datasetId, goalDescription, etaSlipAlertDays (1), the AI model and key, suppressionList, dedupeAcrossRuns, includeEvents, sendAlertsTo; allowList, dedupeTtlDays, webhookSecret, API-only fields and every flag (etaSlipped works too) in the API reference (Integrations).

📤 Output

One item per new or changed container:

{
"url": "https://www.maersk.com/tracking/MSKU6104820", "itemId": "maersk:MSKU6104820",
"shipmentKey": "maersk:MSKU6104820:2026-10-05", "dedupeKey": "maersk:MSKU6104820:38b303d007",
"carrier": "Maersk", "status": "IN_TRANSIT", "milestone": "DEPA", "eta": "2026-11-02T06:00:00", "etaUtcOffset": "+00:00",
"etaUtc": "2026-11-02T06:00:00Z", "etaSlipDays": 3, "changeType": "eta", "score": 90, "unverifiedCarrier": false,
"note": "MSKU6104820 (Maersk) — in transit; last event: vessel departed (export) at MYTPP on 2026-10-06; ETA FELIXSTOWE, GB (GBFXT) 2026-11-02, 3 days later than at the last check."
}

eta = local time at the port; etaUtc for comparisons (the port's time zone by UN/LOCODE). More fields: name, numberType, carrierScac, routedBy, milestoneDescription, milestoneLocation, milestoneTime, milestoneIsActual, daysToLastFreeDay, demurrageAtRiskUsd, problem, problemDetail, sourceActor, targetFlagsMatched, label, chargedEvent, billedAs, checkedAt.

Upsert key: shipmentKey (a reused box on its next voyage gets a new key, changeType: new_shipment); itemId = the box. Sort by score; threshold and trend across runs on ruleScore (fitScore = the AI's). OUTPUT holds the run record (trackingSummary, pollSkipped, numbersExtracted); a DIGEST and a forwardable REPORT sit next to it. Views: Shortlist,

Morning table
, Consignee alerts, Score breakdown, Export.

⭐ Found it useful? A review on the Store helps others find it — it takes a minute on the Actor's page.

🔁 Run it weekly

  1. Open the saved task and click Schedule after your first real run (OUTPUT.scheduleTaskUrl); notifyEmail e-mails the digest of every run with changes.
  2. Leave Only changes on — an unchanged container is free. Tracking for clients? Save one task per client: its numbers, clientName + brandName (the REPORT and digest carry both) and its own monitorStoreName.
  3. Your list stays in your Google Sheet (numbersSheetUrl) and the results come back into it: the Apps Script writes status, ETA, last free day and the note next to each number.
  4. Send alerts to: a Slack, Teams or Telegram link gets the digest; webhookUrl the rows — start from the tracker sheet. historyDatasetName keeps the log across months.

It renews by itself: ≈ 15 % of containers move a day. 40 containers weekly, ≈ 30 moving: $0.40 lookups + 30 × $0.0092 + 30 × $0.0011 tokens ≈ $0.71 a week with the AI, $0.51 rules only.

🎯 Try it for your niche

Pick one in Start from a ready set-up (preset) and press Start.

Use caseWhat it doesStart
Forwarder: morning tableevery container, rules onlyforwarder-morning-table
Importer: demurrage and delay alertsdd_risk + arrived + eta_slipped ≥ 2 days, 5 free days, AI onimporter-arrival-alerts
TMS / ERP feedevery change with its event listtms-webhook-feed

🔌 Container tracking API for any carrier, integrations

Tested calls and the full item: API reference; OUTPUT.mode says what ran (demo, live, list, dataset).

  • Webhook — webhookUrl POSTs {"event": "container_update.qualified", "container_update": {…}, "runId": "…"} per update; webhookBatchSize > 1 sends {"event": "container_updates.qualified", "container_updates": [{…}, …], "runId": "…"}; a 429 / 5xx is retried once, a failed POST is re-sent next run (never charged again) and never fails the run.
  • Which delivery field wins — every URL is posted once; a per-service field (API-only) wins for its service; webhookUrl gets the rows, the others the digest.
  • Google Sheets / HubSpot / Pipedrive — a Make / Zapier "create or update" step: record = reference + trackingNumber + carrier, note = note + recommendedNextStep, upsert on shipmentKey (dedupeKey = one update).
  • Bill of lading tracking API — a B/L in trackingNumbers returns every box on it, shipmentKey = that B/L.

MCP: {"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=rich_minds/multi-carrier-tracking-ai"}}}. Minimal agent input — the memory off, so the same question asked twice answers both times:

{"sourceMode": "live", "trackingNumbers": ["MSCU0203658", "MAEU3402103"], "enableAi": false, "dedupeAcrossRuns": false, "maxDiscoveryChargeUsd": 0.1}

Any plan, your own rows: {"sourceMode": "list", "itemsList": [{"trackingNumber": "MSCU0203658", "events": [...]}]} · demo {}.

👥 Who is it for?

You are…You run it to…Start with
Freight forwarder / customs brokerone morning table of every container, ETA slips first; a branded report per clientforwarder-morning-table, daily
Exporter / importer"warn me before demurrage starts, and when my containers arrive"importer-arrival-alerts
Trade platform / TMSmilestone webhooks into the shipment state machinetms-webhook-feed + webhookUrl

🧠 How the AI works

  • Grounded. The model sees one container's row and only the DCSA codes; a note naming a fact the row does not hold is dropped for the template one, as is a failed call.
  • The model. google/gemini-3.5-flash-lite through Apify's model access (not measured on the platform yet); google:gemini-3.5-flash-lite with your own key (measured 2.7–12.2 s and 214 output tokens per update).

🔒 Data, compliance and limits

  • Public tracking data only, no login. Some carriers show no ETA (no_eta) or vessel.
  • Beta carriers: mapped from their Actors' documented fields until real rows are captured (
    unverifiedCarrier: true
    ) — free here, the carrier lookup still ≈ $0.01 on your account. No vessel position (AIS) yet.

❓ FAQ

How much will one run cost me? The lookups ($0.01 a container, + $0.001 per carrier) plus $0.0037 per update here — 40 containers, lookups included: $0.55 rules only, $0.82 in all AI on.

Is this an alternative to the carriers' own tracking pages or track-trace.com? They are free and authoritative — use them for one number; for 20+ containers they lack one table, an API and change alerts.

Already using the Maersk tracking scraper or the MSC one? Paste the same numbers — or read its last dataset.

Where is my container — for every carrier at once? Yes: one row per box with its last milestone, place and ETA.

Which Apify plan do I need? Any plan: the demo and your own results; live lookups and the e-mail digest: a plan that runs Store Actors.

🧩 More Actors from the same developer

🆘 Support

A carrier field or status missing? Open an issue on the Actor's page — buyer requests ship first.

📝 Changelog

  • 0.1.4 (2026-10-24) — The form now shows what a run really costs: at most $0.92 here + ≈ $0.11 of AI tokens + your $0.50 lookup cap at the defaults, and beta carriers say plainly that their lookup still costs ≈ $0.01 on ….
  • 0.1.3 (2026-10-24) — the page says plainly how much AI you get on your plan; the measured own-key speed.
  • 0.1.2 (2026-10-24) — demurrage alerts, shipmentKey, smart polling, e-mail and Google Sheet input.
  • 0.1.1 (2026-10-24) — initial release: 15 carriers, one DCSA-style format, change-only monitor.

Coming next: 2026-10-31 — AI without model access or a key · 2026-11-07 — real rows for every beta carrier, the Maersk DCSA API · 2026-11-14 — monitoring and demurrage-alert events.