Maersk Scraper | Vessel Schedules and Port Calls avatar

Maersk Scraper | Vessel Schedules and Port Calls

Pricing

from $8.47 / 1,000 port calls

Go to Apify Store
Maersk Scraper | Vessel Schedules and Port Calls

Maersk Scraper | Vessel Schedules and Port Calls

Maersk (Mærsk) scraper for vessel schedules and port calls: type a port, vessel, country or maersk.com link and get every call with terminal, ETA, ETD, actual times, voyage, service, IMO, flag and TEU. Default run in 2026: 96 port calls in 1 second, 44 fields each. No login, no tracking number.

Pricing

from $8.47 / 1,000 port calls

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

Maersk Scraper (Mærsk) | Vessel Schedules, Port Calls and ETAs (2026)

Maersk port calls, 44 fields each, from any search.

From SilentFlow. Creators of Facebook Search Scraper and JD Products Scraper (#1 for “jd scraper” in Apify Store search), with 750,000+ combined lifetime runs.

Every Maersk vessel call at your ports, one row per call, with the vessel, the terminal and the arrival and departure times. Our default test run typed Rotterdam and saved the next 14 days of Maersk calls there, 96 calls from 54 vessels, in under 2 seconds. Each row names the vessel with its IMO number, flag, TEU capacity, build date and operator, the terminal, the arrival and departure in local time and in UTC, whether each time is estimated or actual, the hours in port, the voyages and the services. No Maersk account, no tracking number.

Why choose this actor?

Searching maersk.com one port at a time, three to fourteen days per search? Copying ETAs into a spreadsheet before every planning meeting? Waiting for a developer account to read a schedule anyone can see on the website?

  • 41 data fields per port call, not 7. On our default run (Rotterdam, next 14 days), 41 data fields were filled on at least half of the 96 rows and 38 of them on every row: vessel name, Maersk code, IMO, call sign, flag, TEU capacity, build date, operator and status; port, UN/LOCODE, region, country, coordinates and timezone; terminal and its codes; arrival and departure in local time and in UTC, each marked estimated or actual; hours in port; arrival and departure voyages and services; two maersk.com links. The example result of the most used Maersk scraper on the Store shows 7 top-level keys.
  • Four ways in: a port, a vessel, a country or a maersk.com link. Type Rotterdam or NLRTM, type Madrid Maersk or the IMO 9778791, pick a whole country, or paste a port calls or vessel schedule page from maersk.com. In our tests Madrid Maersk returned its next 8 calls at 7 ports in 2.4 seconds, the United States 114 calls from 25 ports in 13 seconds, and a pasted Singapore link 82 calls in under a second. The most used Maersk scraper takes tracking numbers only.
  • No required field, no tracking number to find first. The form opens with Rotterdam filled in: press Start and the next two weeks of calls arrive. Our run of that form returned 96 calls from 54 vessels in under 2 seconds. You never paste a container or booking number, and you never fill a field you do not need.

Try Maersk Scraper

Try your first port calls

Paste this input in the JSON tab of the Input page and press Start. It reads every Maersk call at Rotterdam over the next 14 days.

{
"portQueries": ["Rotterdam"]
}

It runs on the Apify Free plan. Each vessel call becomes one row of your dataset: open the Output tab to see the table, switch to the "Vessels" view for the IMO number, flag, TEU capacity, build date and operator, or to the "Arrival and departure times" view for the UTC times, the estimated or actual flag and the hours in port. Export the rows as JSON, CSV or Excel.

How it works

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it the full picture of this scraper:

You have access to the Maersk Scraper on Apify: silentflow/maersk-scraper
It reads Maersk's public vessel schedules and port calls (maersk.com/schedules), without an account,
and returns one row per vessel call at a terminal.
Input schema (no field is required; give at least one port, vessel, country or link):
- portQueries (array of strings): port names, UN/LOCODEs or Maersk port codes: "Rotterdam", "NLRTM",
"Tanjung Pelepas". Add the country when two ports share a name: "Cartagena, ES". Every port with
that exact name is read.
- vesselIds (array of strings): IMO numbers ("9778791"), vessel names ("Madrid Maersk") or Maersk's
three-character vessel codes ("Y24"). Each vessel gives one row per port on its route.
- startUrls (array of {url}): maersk.com/schedules/portCalls?portGeoId=... and
maersk.com/schedules/vesselSchedules?vesselCode=... pages. A link keeps its own fromDate and numberOfDays.
- country (string): ISO code, 3-letter code or English name ("us", "usa", "United States"): adds every
Maersk port of that country.
- fromDate (string): first day, "2026-11-02", or a span back from today such as "30 days". Empty = today.
- numberOfDays (integer, default 14, 1 to 365): days to read after fromDate.
- maxItems (integer, default 500): rows saved in total.
- debugMode (boolean, default false).
Output per call (44 keys, null when Maersk gives no value):
- id (stable: UNLOCODE-terminal-vessel-voyages), url (vessel schedule on maersk.com), portCallsUrl
- vesselName, vesselMaerskCode, vesselImo, vesselCallSign, vesselFlagCode, vesselFlagName,
vesselBuiltDate, vesselCapacityTeu (integer), vesselClassSociety, vesselOperator, vesselStatus
- portName, cityName, unLocode, portGeoId, regionCode, regionName, countryCode, countryName,
latitude, longitude, timezone (IANA), terminalName, terminalCode, terminalGeoId
- arrivalTime, departureTime (RFC 3339 in the port's local time), arrivalTimeUtc, departureTimeUtc,
arrivalTimeType, departureTimeType (ESTIMATED | ACTUAL), portStayHours (number)
- arrivalVoyage, departureVoyage, arrivalServiceName, arrivalServiceCode, departureServiceName,
departureServiceCode
- sourceType (port | vessel), query (the entry that produced the row), scrapedAt (RFC 3339 UTC)
Use apify-client for Python or JavaScript: client.actor("silentflow/maersk-scraper").call(run_input=...).

How to scrape Maersk vessel schedules and port calls

Three inputs, from the simplest to the most complete. Each one runs as is.

Get the next two weeks of Maersk calls at Rotterdam

Type the port the way you would say it, or its UN/LOCODE.

{
"portQueries": ["Rotterdam"],
"numberOfDays": 14
}

This is the default input: in our test it saved 96 calls from 54 vessels in under 2 seconds, across Rotterdam's terminals from APM 2 Maasvlakte II to Rotterdam World Gateway.

Follow Madrid Maersk port by port for two months

Type the vessel's name or its IMO number to get its route as a list of calls.

{
"vesselIds": ["Madrid Maersk"],
"numberOfDays": 60
}

In our test this returned the vessel's next 8 calls at 7 ports in 2.4 seconds, from Ningbo through Tanjung Pelepas and the Suez Canal to London Gateway, Bremerhaven and Rotterdam, each with its terminal, ETA, ETD, voyage and service.

Pull last month's actual arrivals at Singapore and Tanjung Pelepas

Start the window in the past: calls that already happened carry their actual arrival and departure times.

{
"portQueries": ["SGSIN", "Tanjung Pelepas"],
"fromDate": "30 days",
"numberOfDays": 30,
"maxItems": 1000
}

In our test this saved 679 calls from 337 vessels in under 4 seconds, 528 of them with their actual arrival time, the rest still estimated because those vessels had not arrived yet.

Input parameters

FieldTypeDefaultWhat it does
portQueriesarray of textRotterdam (prefill)Ports by name, UN/LOCODE or Maersk port code. A name shared by two ports reads both, unless you add the country: Cartagena, ES.
vesselIdsarray of textnoneVessels by IMO number, name (with or without MV) or Maersk's three-character code.
startUrlsarray of linksnonePort calls and vessel schedule pages copied from maersk.com. A link keeps the dates it shows.
countrytextnoneAdds every Maersk port of one country: pick it, or type us, usa or United States.
fromDatedate or spantodayFirst day of the window: 2026-11-02, or 30 days to start 30 days ago.
numberOfDaysinteger14Days to read after the first day, from 1 to 365.
maxItemsinteger500Rows saved in total, across every port, country, vessel and link.
debugModebooleanfalseDetailed logs, for support.

Accepted ports: a port or city name (Rotterdam, Le Havre, Tanjung Pelepas, Port of Rotterdam), a UN/LOCODE (NLRTM, SGSIN, USNYC), Maersk's 13-character port code (1JUKNJGWHQBNJ), or a name with its country after a comma or in brackets (Manzanillo, MX, Cartagena (Spain)). Accents and capitals are optional. A part of a name works when it fits three ports or fewer (pelepas).

Accepted vessels: an IMO number (9778791, IMO 9778791), a name (Madrid Maersk, MV MADRID MAERSK) or Maersk's code (Y24). A part of a name works when it fits one vessel only: Madrid fits both Madrid Express and Madrid Maersk, so the run asks for the full name.

Accepted links:

  • https://www.maersk.com/schedules/portCalls?portGeoId=1JUKNJGWHQBNJ&fromDate=2026-11-02&numberOfDays=7
  • https://www.maersk.com/schedules/vesselSchedules?vesselCode=Y24&fromDate=2026-11-02
  • the -embed versions of both pages

Accepted dates: 2026-11-02, today, tomorrow, yesterday, or a span back from today: 7 days, 2 weeks, 3 months, 1 year. Leave it empty for a schedule that always starts on the day of the run.

What data can you extract from Maersk?

One row per vessel call at a terminal, 44 keys, flat and ready for a spreadsheet:

GroupFields
Identityid, url, portCallsUrl
VesselvesselName, vesselMaerskCode, vesselImo, vesselCallSign, vesselFlagCode, vesselFlagName, vesselBuiltDate, vesselCapacityTeu, vesselClassSociety, vesselOperator, vesselStatus
Port and terminalportName, cityName, unLocode, portGeoId, regionCode, regionName, countryCode, countryName, latitude, longitude, timezone, terminalName, terminalCode, terminalGeoId
TimesarrivalTime, arrivalTimeUtc, arrivalTimeType, departureTime, departureTimeUtc, departureTimeType, portStayHours
Voyage and servicearrivalVoyage, departureVoyage, arrivalServiceName, arrivalServiceCode, departureServiceName, departureServiceCode
MetasourceType, query, scrapedAt

A few facts that help when you use the data:

  • id joins the UN/LOCODE, the terminal, the vessel and its voyages, so it stays the same when Maersk moves an ETA. Use it to update yesterday's rows instead of adding new ones.
  • arrivalTime and departureTime keep the port's local time with its offset, the way a terminal reads them; arrivalTimeUtc and departureTimeUtc put every port on one clock for sorting and charts.
  • arrivalTimeType and departureTimeType say ESTIMATED for a time still to come and ACTUAL once the vessel has arrived or left. Compare the two over a past window to measure how late a service runs.
  • portStayHours is the departure minus the arrival, in hours with one decimal.
  • vesselOperator is the company that runs the vessel on Maersk's network: Maersk itself, a partner line such as Hapag-Lloyd, a feeder operator such as BG Feeder or Unifeeder, or OTHER COMPETITORS, Maersk's own label for vessels of other lines.
  • vesselCapacityTeu, vesselBuiltDate and vesselClassSociety come from Maersk's vessel register and are null when Maersk does not record them, mostly for small feeders and barges.
  • vesselImo was filled on every Rotterdam and United States row of our tests; around Singapore, 189 of 679 calls were barges Maersk records without an IMO number.
  • url opens the vessel's schedule on maersk.com from the day of the call; portCallsUrl opens the port's calls around that day.
  • Dates are RFC 3339. Coordinates and the timezone are those of the port's city, not of the berth.

Output example

A real row from our default run (Rotterdam, next 14 days):

{
"id": "NLRTM-NLROTLB-1IM-642L-642L",
"url": "https://www.maersk.com/schedules/vesselSchedules?vesselCode=1IM&fromDate=2026-10-28#NLRTM-NLROTLB-1IM-642L-642L",
"portCallsUrl": "https://www.maersk.com/schedules/portCalls?portGeoId=1JUKNJGWHQBNJ&fromDate=2026-10-28&numberOfDays=3",
"vesselName": "MARY MAERSK",
"vesselMaerskCode": "1IM",
"vesselImo": "9619921",
"vesselCallSign": "OWJE2",
"vesselFlagCode": "DK",
"vesselFlagName": "Denmark",
"vesselBuiltDate": "2013-08-29T00:00:00Z",
"vesselCapacityTeu": 19076,
"vesselClassSociety": "ABS",
"vesselOperator": "MAERSK A/S",
"vesselStatus": "ACTIVE",
"portName": "Rotterdam",
"cityName": "Rotterdam",
"unLocode": "NLRTM",
"portGeoId": "1JUKNJGWHQBNJ",
"regionCode": "ZH",
"regionName": "Zuid-Holland",
"countryCode": "NL",
"countryName": "Netherlands",
"latitude": 51.91667,
"longitude": 4.5,
"timezone": "Europe/Amsterdam",
"terminalName": "Rotterdam Layby Berth",
"terminalCode": "NLROTLB",
"terminalGeoId": "YROGHE8AMDA52",
"arrivalTime": "2026-10-28T01:00:00+01:00",
"arrivalTimeUtc": "2026-10-28T00:00:00Z",
"arrivalTimeType": "ESTIMATED",
"departureTime": "2026-10-28T06:00:00+01:00",
"departureTimeUtc": "2026-10-28T05:00:00Z",
"departureTimeType": "ESTIMATED",
"portStayHours": 5,
"arrivalVoyage": "642L",
"departureVoyage": "642L",
"arrivalServiceName": "AE2",
"arrivalServiceCode": "412",
"departureServiceName": "AE2",
"departureServiceCode": "412",
"sourceType": "port",
"query": "Rotterdam",
"scrapedAt": "2026-10-28T01:48:07Z"
}

Advanced usage

Five recipes for questions the examples above do not cover. Each input runs as is.

Measure schedule reliability over the last quarter

{
"portQueries": ["Rotterdam"],
"fromDate": "90 days",
"numberOfDays": 90,
"maxItems": 2000
}

Ninety days back from today, every call that already happened carries its actual times. In our test this saved 509 Rotterdam calls from 174 vessels in under 2 seconds, 502 with their actual arrival. Group by arrivalServiceName and average portStayHours to see which services hold the berth longest.

Map every Maersk call in a country

{
"country": "us",
"numberOfDays": 7,
"maxItems": 1000
}

The country adds each port Maersk serves there. In our test the United States (27 Maersk ports) gave 114 calls in the coming week at 25 of them, from Norfolk and Houston to Newark and Savannah, in 13 seconds. China gave 231 calls at 12 ports in 7 seconds.

Read a port's schedule a year ahead

{
"portQueries": ["Shanghai"],
"numberOfDays": 365,
"maxItems": 3000
}

Maersk publishes its schedules about a year ahead. In our test Shanghai's next 365 days gave 1,388 calls by 343 vessels on 52 services, in under 5 seconds. Calls far ahead follow the service's planned rotation and get firmer as the date comes closer.

Follow a fleet by IMO number

{
"vesselIds": ["9778791", "9619921", "9944546"],
"numberOfDays": 90
}

Each IMO gives the vessel's route as one row per port. In our test these three vessels gave 59 calls at 12 ports over the next 90 days, in under 5 seconds. Load the rows into your TMS and match them on vesselImo and arrivalVoyage.

Feed a weekly arrivals board for a port range

{
"portQueries": ["Hamburg", "Bremerhaven", "Antwerp"],
"numberOfDays": 7
}

Leave the first day empty and schedule the run every Monday: each run reads the coming week. In our test the three ports gave 95 calls (38 at Hamburg, 38 at Bremerhaven, 19 at Antwerp) in under 2 seconds. Send the dataset to Google Sheets, Slack or your own endpoint with an Apify integration.

FAQ

What is Maersk? A.P. Møller - Mærsk, Maersk in English, is one of the world's largest container shipping lines, based in Copenhagen. Its website publishes the schedules of the vessels that sail on its network: when each vessel calls at each port and terminal, on which voyage and service. On the day of our tests the schedules listed 467 ports in 134 countries and about 1,850 vessels.

Do I need a Maersk account or an API key? No. The actor reads the schedules maersk.com shows to any visitor. No login, no Maersk account, no developer key to request.

What does one row contain? One vessel call at one terminal: the vessel with its IMO number, call sign, flag, TEU capacity, build date and operator, the port with its UN/LOCODE, country, coordinates and timezone, the terminal, the arrival and departure times with their estimated or actual flag, the hours in port, the voyages and the services. Up to 44 keys; on our default run 41 data fields were filled on at least half of the rows.

How fresh is the data? Live. Every run reads Maersk's schedules at that moment, so ETAs and ETDs are the ones Maersk shows on the day of the run.

How far back and how far ahead can I go? Up to a year ahead: Shanghai's next 365 days gave 1,388 calls in our test. Back in time, past calls come with their actual arrival and departure; in our tests the history went back to June 2025, with 70 Rotterdam calls in the week of 1 June 2025.

Does it track containers or bills of lading? No. It reads vessel schedules and port calls, the network every shipment travels on. If you know the vessel and voyage of your booking, follow that vessel by its IMO number to get every ETA on its route.

Does it cover Sealand and Maersk's partner vessels? Maersk's Sealand brands publish the same schedule, so their calls are in the same rows. Vessels that partner lines and feeder operators run on Maersk's network appear too; vesselOperator names the company running each vessel.

Why is the IMO number or the TEU capacity empty on some rows? Maersk's register has no IMO number or capacity for some small feeders and barges. In our tests every Rotterdam and United States call had its IMO number, while 189 of 679 calls around Singapore were barges recorded without one. Those fields are null on their rows; the call itself, its terminal and its times are still there.

Can I mix ports, vessels, a country and links in one run? Yes. Links are read first, then ports, then the country, then vessels. maxItems caps the whole run, and a call found twice (at a port and on a vessel's route) is saved once.

Which time zone are the times in? Both. arrivalTime and departureTime are in the port's local time with its UTC offset, as on maersk.com; arrivalTimeUtc and departureTimeUtc are the same moments in UTC.

Can I use this from n8n, Make, Zapier or my own code? Yes. Call the actor from the Apify API, the Python or JavaScript client, or the Apify integrations for n8n, Make and Zapier, and read the dataset as JSON, CSV or Excel.

More SilentFlow scrapers

🛒 E-commerce

💼 Jobs

🏠 Real estate

📣 Social media

🏢 Business data

✈️ Travel

🎯 Lead generation

🔎 SEO

📈 Marketing

🎬 Video

📰 News

🧰 More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available vessel schedules from maersk.com. It does not bypass any login, paywall or CAPTCHA, and never uses a Maersk account. Users are responsible for complying with Maersk's terms of service and applicable data protection laws (GDPR, CCPA, and PIPL where relevant). The rows describe vessels, ports, terminals and voyages; they carry no personal data. Schedules change after publication: verify times with the carrier or the terminal before acting on them for regulated or time-critical operations.

Maersk Scraper by SilentFlow: Maersk vessel schedules and port calls from a port, a vessel, a country or a link, ready for your spreadsheet.