Container Tracking: MSC, Maersk Cargo Updates, Demurrage Alerts
Pricing
from $3.70 / 1,000 container update (rules only)s
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
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

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 get | one row per container in ONE format — status, milestone, ports, vessel, ETA, ETA slip, last free day, a note |
| You provide | container, B/L or booking numbers — any carriers; or paste an e-mail, or link a Google Sheet |
| Typical run | 40 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 tier | your first 25 container updates, once per Apify account |
| Keys / setup | Starter 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 plan | Free demo and your own results (list, template): any plan · live tracking and the e-mail digest: a plan that runs Store Actors |
| Carriers | MSC, 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 with | Schedules, 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
- Click
Try it— the free demo: 5 sample containers from 4 carriers and one typo. - 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.
- Press Start — demurrage risks, ETA slips and discharges come first. Export, or wire a webhook.
- Schedule it daily with
notifyEmail— only containers that changed are delivered and charged.

📚 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 siblings | This 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 again | the 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 containers | What it lacks | |
|---|---|---|
| This Actor | $1.37 rules · $2.03 AI | — |
Container Tracking API (nabeelbaghoor) | $1.50 + $0.005 a milestone + Vizion contract | your own Vizion key; no change-only monitor |
MSC Container Tracking Scraper (brii3343) | $0.20 | other carriers, alerts |
| Carriers' own pages · track-trace.com | free | one table, export, API, alerts |
💵 Pricing — what a run really costs
| Event | When it is charged | Price |
|---|---|---|
free-tier | your first 25 container updates on this Actor, in any mode | $0.00 |
qualified-container-update-basic | AI off — the one-format row, flags, the note | $0.0037 |
qualified-container-update-ai | AI 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
| Field | Default | What 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 |
freeTimeDays | 0 | Free days at the POD → lastFreeDay and the dd_risk flag; 0 = off |
sourceMode | live | The mode that runs = this field, except {} = the free demo; list / dataset read results |
demurrageRatePerDay | 150 | Your demurrage per box per day → demurrageAtRiskUsd and the digest's total |
maxDiscoveryChargeUsd | 0.5 | Hard cap on the lookups on your account |
targetFlags | — | Only updates with one of these flags (dd_risk, arrived, eta_slipped …) |
minScore | 0 | 0 = every new or changed container; higher = only those needing attention |
enableAi | true | AI 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 tableConsignee 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
- Open the saved task and click Schedule after your first real run (
OUTPUT.scheduleTaskUrl);notifyEmaile-mails the digest of every run with changes. - 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 ownmonitorStoreName. - 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. - Send alerts to: a Slack, Teams or Telegram link gets the digest;
webhookUrlthe rows — start from the tracker sheet.historyDatasetNamekeeps 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 case | What it does | Start |
|---|---|---|
| Forwarder: morning table | every container, rules only | forwarder-morning-table |
| Importer: demurrage and delay alerts | dd_risk + arrived + eta_slipped ≥ 2 days, 5 free days, AI on | importer-arrival-alerts |
| TMS / ERP feed | every change with its event list | tms-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 —
webhookUrlPOSTs{"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;
webhookUrlgets 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 onshipmentKey(dedupeKey= one update). - Bill of lading tracking API — a B/L in
trackingNumbersreturns 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 broker | one morning table of every container, ETA slips first; a branded report per client | forwarder-morning-table, daily |
| Exporter / importer | "warn me before demurrage starts, and when my containers arrive" | importer-arrival-alerts |
| Trade platform / TMS | milestone webhooks into the shipment state machine | tms-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-litethrough Apify's model access (not measured on the platform yet);google:gemini-3.5-flash-litewith 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 () — free here, the carrier lookup still ≈ $0.01 on your account. No vessel position (AIS) yet.unverifiedCarrier: true
❓ 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
- OFAC Sanctions Screening — Screen every consignee with one clear / review / block verdict before you ship.
🆘 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.