
Congress Stock Trades Scraper
scrape.ly/store/querystone/congress-trades-scraperNewsBusiness
3 monthly users

Track Maersk containers, bills of lading and bookings in bulk: origin and destination, shipment status, ETA, vessel and voyage, and the full container move history. No login needed.
Track Maersk shipments in bulk by container number, bill of lading or booking number and get clean, structured data: origin and destination, shipment status, ETA, vessel and voyage, and every container move with its time and place. Paste one number or thousands, no Maersk account or login needed, and pay only for shipments that are found.
MSKU1234565), bills of lading and booking numbers (e.g. 262598646), all in one list. Numbers from Maersk's sister brands (Hamburg Süd, Sealand, MCC) work too.eta_final_delivery and latest_event fields with yesterday's to catch rolled or delayed containers.| Field | What it does |
|---|---|
trackingNumbers | Container, bill of lading or booking numbers, one per line. Spaces, dashes and duplicates are cleaned up. |
maxItems | Stop after this many shipments are saved. Empty or 0 = track every number. |
shipmentStatus | any, inTransit (before departure or in transit) or arrived (arrived, delivered or completed). |
eventsSince | Keep only moves on or after this date (2026-01-31 or 30 days). |
maxEventsPerContainer | Keep only the latest N moves of each container (0 = all). |
includePlannedEvents | Also list moves Maersk still expects (estimated arrivals and departures). On by default. |
includeNotFound | Add a free found: false row for each number Maersk doesn't know. |
{
"trackingNumbers": ["MAEU3402103", "262598646"],
"shipmentStatus": "any",
"maxEventsPerContainer": 0
}
One row per shipment found. A bill of lading or booking with several containers is one row with all its containers inside.
| Field | Description |
|---|---|
tracking_number | The number you tracked |
shipment_status | Before departure, In transit, Arrived, Delivered, Completed or Cancelled |
origin_name, destination_name | Terminal, city and country of origin and final destination |
origin_location_code, destination_location_code | Maersk location codes |
eta_final_delivery | Estimated (or actual) arrival at the final destination |
latest_event_activity, latest_event_time, latest_event_location | The latest actual move |
latest_event, next_event | Latest actual and next planned move with vessel, voyage and transport mode |
vessel_name, voyage_num | Vessel and voyage of the latest sea leg |
container_count, container_numbers | Containers on the shipment |
container_size, container_type, iso_code | Size, type and ISO code of the first container |
tpdoc_num | Transport document (bill of lading) number on bill of lading and booking searches |
has_import_shipment, is_container_search, is_split_combine_part_load, is_cancelled_shipment, unassigned_containers | Maersk's shipment flags |
last_update_time | When Maersk last updated the shipment |
origin, destination | Full origin and destination records (terminal, city, state, country, country code, site type, location code) |
containers | Every container with size, type, ISO code, operator, seals, ETA, status and its moves per location (locations[].events[]: activity, time, actual or expected, vessel, voyage, transport mode, empty or full) |
tracking_url | The maersk.com tracking page |
Example (a real bill of lading from a test run, shortened to one container and one location):
{
"tracking_number": "262598646",
"found": true,
"search_type": "bill_of_lading_or_booking",
"tpdoc_num": "262598646",
"shipment_status": "Completed",
"origin_name": "WEIHAI TERMINAL (Weihai, China)",
"destination_name": "APM 2 TERMINAL MAASVLAKTE II (Rotterdam, Netherlands)",
"eta_final_delivery": "2026-03-20T09:22:00.000",
"latest_event_activity": "CONTAINER RETURN",
"latest_event_time": "2026-03-20T09:22:00.000",
"latest_event_location": "Cabooter Greenport Venlo BV (Venlo, Netherlands)",
"vessel_name": "MAERSK MC-KINNEY MOLLER",
"voyage_num": "605W",
"container_count": 4,
"container_numbers": ["MRKU3414693", "MRSU8938700", "MRSU8939347", "MRSU8939373"],
"container_size": "40",
"container_type": "DRY",
"iso_code": "45G1",
"last_update_time": "2026-03-20T15:14:12.000Z",
"containers": [
{
"container_num": "MRKU3414693",
"container_size": "40",
"container_type": "DRY",
"iso_code": "45G1",
"operator": "MAEU",
"eta_final_delivery": "2026-03-20T09:22:00.000",
"status": "COMPLETE",
"shipment_status": "Completed",
"locations": [
{
"terminal": "WEIHAI TERMINAL",
"city": "WEIHAI",
"country": "CHINA",
"country_code": "CN",
"location_code": "CNWHATM",
"events": [
{"activity": "GATE-OUT", "stempty": true, "actfor": "EXP", "event_time": "2026-01-16T19:24:00.000", "event_time_type": "ACTUAL"},
{"activity": "GATE-IN", "stempty": false, "actfor": "EXP", "event_time": "2026-01-17T22:36:00.000", "event_time_type": "ACTUAL"},
{"activity": "LOAD", "voyage_num": "1050", "transport_mode": "FEF", "event_time": "2026-01-22T03:58:00.000", "event_time_type": "ACTUAL"}
]
}
]
}
],
"tracking_url": "https://www.maersk.com/tracking/262598646"
}
The Containers view of the dataset lists one row per container.
tracking-result event.Is it legal to scrape Maersk tracking? The actor reads the same public tracking information anyone can see on maersk.com without logging in. It does not access accounts or private customer data. Check your own use case with your legal team if unsure.
Do I need a Maersk account, an API key or a proxy? No. The run opens Maersk's public tracking page in a hosted browser and asks Maersk's tracking service from there. Nothing to configure.
How many numbers can I track? As many as you like. Large lists are tracked 16 at a time and saved as they arrive; 1,000 numbers took about 2 minutes in our tests, and longer lists scale linearly.
Why is a field empty?
Maersk only shows what it has: a shipment that hasn't departed has no vessel yet, a cancelled booking has no containers, and next_event is empty once all moves are done. Numbers Maersk doesn't know produce no row (or a free found: false row with includeNotFound).
Which number formats work?
Container numbers (4 letters + 7 digits, e.g. MRKU3414693), Maersk bill of lading and booking numbers (usually 9 digits, e.g. 262598646), with or without spaces and dashes, and maersk.com tracking links.
Can I schedule it or use it from my code? Yes. Schedule the actor to run daily or hourly, and start runs and read results through the API in any language.
OUTPUT record and are not charged.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
trackingNumbersarrayOptionalTracking numbers
Maersk container numbers (e.g. MAEU3402103), bill of lading or booking numbers (e.g. 262598646), one per line. Numbers from Maersk's sister brands (Hamburg Süd, Sealand, MCC) work too. Spaces and dashes are ignored, duplicates are tracked once, and pasted maersk.com tracking links work.
maxItemsintegerOptionalMax results
Stop after this many shipments are saved. Leave empty (or 0) to track every number in the list.
shipmentStatusenumOptionaldefault "any"Shipment status
Keep only shipments that are still on their way, or only those that arrived, were delivered or are completed. Shipments that don't match are skipped and not charged.
eventsSincestringOptionalEvents since
Keep only container moves on or after this date (YYYY-MM-DD, or a period like '30 days'). The summary fields still use the full history.
maxEventsPerContainerintegerOptionaldefault 0Max events per container
Keep only the latest N moves of each container. 0 keeps the full history.
includePlannedEventsbooleanOptionaldefault trueInclude planned moves
Also list the moves Maersk still expects (estimated arrivals and departures). The next planned move is always shown in the summary.
includeNotFoundbooleanOptionaldefault falseAdd rows for numbers Maersk doesn't know
Add a free row (found: false) for every number Maersk has no shipment for. These rows are never charged.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| tracking_number | string | null | The number you tracked |
| found | boolean | null | True for every shipment row; false only on the optional free rows for unknown numbers |
| operator | string | null | Operator code of the first container, e.g. MAEU |
| search_type | string | null | container, or bill_of_lading_or_booking |
| tpdoc_num | string | null | Transport document (bill of lading) number, on bill of lading and booking searches |
| shipment_status | string | null | Before departure, In transit, Arrived, Delivered, Completed or Cancelled |
| origin_name | string | null | Origin terminal, city and country |
| origin_location_code | string | null | Origin location code |
| destination_name | string | null | Destination terminal, city and country |
| destination_location_code | string | null | Destination location code |
| eta_final_delivery | string | null | Estimated (or actual) arrival at the final destination |
| latest_event_activity | string | null | Latest actual move, e.g. LOAD, DISCHARG, GATE-OUT, CONTAINER ARRIVAL |
| latest_event_time | string | null | Local time of the latest actual move |
| latest_event_location | string | null | Terminal, city and country of the latest actual move |
| latest_event | object | null | Latest actual move: activity, time, location, vessel and voyage |
| next_event | object | null | Next planned move, when Maersk shows one |
| vessel_name | string | null | Vessel of the latest sea leg |
| voyage_num | string | null | Voyage of the latest sea leg |
| container_count | number | null | Containers on the shipment |
| container_numbers | array | null | Container numbers on the shipment |
| container_size | string | null | Size of the first container, e.g. 40 |
| container_type | string | null | Type of the first container, e.g. DRY, REEF, FLAT |
| iso_code | string | null | ISO size-type code of the first container, e.g. 45G1 |
| event_count | number | null | Moves listed in containers[].locations[].events |
| has_import_shipment | boolean | null | Maersk flag: the shipment has an import leg |
| is_container_search | boolean | null | Maersk flag: the number is a container number |
| is_split_combine_part_load | boolean | null | Maersk flag: split, combined or part-load shipment |
| is_cancelled_shipment | boolean | null | Maersk flag: the shipment was cancelled |
| unassigned_containers | number | null | Containers booked but not assigned yet |
| last_update_time | string | null | When Maersk last updated the shipment |
| origin | object | null | Origin: terminal, city, state, country, country_code, site_type, location_code |
| destination | object | null | Destination: terminal, city, state, country, country_code, site_type, location_code |
| containers | array | null | Every container with size, type, ISO code, operator, seals, ETA, status and its moves per location (locations[].events[]) |
| tracking_url | string | null | Maersk tracking page for the number |
| scraped_at | string | null | When the row was scraped (UTC) |
| error | string | null | Only on free not-found rows: why there is no shipment |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Tracking result | One shipment found and saved for a tracked container, bill of lading or booking number (status, route, ETA, vessel and the full container move history). Numbers Maersk does not know are free. | $0.007 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/maersk-tracking-scraper').call({
"trackingNumbers": [
"MAEU3402103",
"262598646"
]
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/maersk-tracking-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/maersk-tracking-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.