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

Track Wan Hai Lines containers, bills of lading and bookings: status, vessel and voyage, route, ETA and container movements. No login needed.
Track Wan Hai Lines (WHL) shipments in bulk by container, booking, bill of lading or release number. Paste your numbers and get the latest container status, vessel and voyage, and, if you want them, the full route with ETD/ETA, transshipment ports, every container with seal, weights and gate times, and each container's movement history. No login, no Wan Hai account, from $2.50 per 1,000 numbers.
arrivalDate and status with yesterday's to catch rolled cargo or changed ETAs.WHSU8766529, 127G505411).| Field | What it does |
|---|---|
trackingNumbers | Container, booking, B/L or release numbers, one per line. Spaces and dashes are ignored, duplicates are tracked once. |
maxItems | Track at most this many numbers from the list. Empty means all. |
numberType | auto (default), container, bookingOrBl or release. |
includeDetails | Add the booking and B/L pages: route, containers, weights, movements. Charged as a detailed result. |
includeContainerEvents | With full details: add each container's movement history (on by default). |
eventsSince | With full details: keep only movements on or after this date. |
includeNotFound | Add a free found: false row for numbers Wan Hai has no data for. |
{
"trackingNumbers": ["WHSU8766529", "127G505402"],
"includeDetails": true
}
One row per tracked number. Without full details you get the fields of Wan Hai's result list. With full details every field below is filled where Wan Hai has it.
| Field | Description |
|---|---|
trackingNumber, numberType | The number you tracked and what it is: container, booking, billOfLading or release |
referenceNumber, bookingNumber, blNumber | Wan Hai's booking and B/L numbers |
status, statusDate, statusLocation, statusPlace | Latest container status, its local time, terminal or depot, and city |
vessel, voyage | Vessel and voyage |
onboardDate, closeDate | On-board date (B/L) or cargo close date (booking) |
bookingDate, bookingStatus, blIssueDate, blType | Booking and B/L facts (full details) |
placeOfReceipt, portOfLoading, transshipmentPorts, portOfDischarge, placeOfDelivery | Route summary (full details) |
departureDate, arrivalDate, deliveryDate | ETD at loading, ETA at discharge and at delivery (full details) |
route | Every leg with place, country, date type, date, vessel and voyage |
containers | ISO code, type, size, seal, status, gate out/in, depots, weights, packages, cargo weight and events |
events | Movement history of the tracked container, newest first (container numbers) |
totalPackages, packageUnit, totalWeightKg | B/L totals |
Example (full details, trimmed):
{
"trackingNumber": "WHSU8766529",
"numberType": "container",
"found": true,
"referenceNumber": "127G505411",
"status": "Laden Or Empty Transit Container Discharged From Own Or Feeder Vessel At Pier/Terminal Awaiting For",
"statusDate": "2026-10-20T18:54",
"statusLocation": "WAN CHUN INTERNATIONAL CO.LTD(WHARF #34)",
"statusPlace": "TAICHUNG",
"vessel": "DONG FANG QIANG",
"voyage": "2621S",
"bookingNumber": "127G505411",
"bookingStatus": "LOADED",
"blNumber": "127G505411",
"blType": "Telex Release",
"portOfLoading": "LIANYUNGANG (CN)",
"transshipmentPorts": ["TAICHUNG (TW)"],
"portOfDischarge": "PENANG (MY)",
"departureDate": "2026-10-18",
"arrivalDate": "2026-11-08",
"containerCount": 3,
"containers": [
{
"containerNumber": "WHSU8766529",
"isoCode": "45G1",
"containerType": "DRY STEEL",
"containerSize": "40'",
"sealNumber": "WHA2165405",
"status": "Laden Or Empty Transit Container Discharged From Own Or Feeder Vessel At Pier/Terminal Awaiting For",
"statusDate": "2026-10-20T18:54",
"gateOutTime": "2026-10-13T20:33",
"gateInTime": "2026-10-14T10:51",
"maxGrossWeightKg": 32500,
"packages": 27,
"packageUnit": "ROL",
"cargoWeightKg": 23839
}
],
"events": [
{
"date": "2026-10-20T18:54",
"status": "Laden Or Empty Transit Container Discharged From Own Or Feeder Vessel At Pier/Terminal Awaiting For",
"statusCode": "TZ",
"location": "Wan Chun International Co.Ltd(Wharf #34)",
"place": "TAICHUNG",
"vessel": "DONG FANG QIANG",
"voyage": "S621"
}
],
"totalPackages": 86,
"packageUnit": "ROL",
"totalWeightKg": 73535,
"detailsIncluded": true,
"trackedAt": "2026-10-22T02:33:20Z"
}
tracking-result, $0.0025 each), with the fields of Wan Hai's result list.tracking-detail, $0.005 each) when Include full details is on. It replaces the basic result, so a number is never charged twice.Is it legal to scrape Wan Hai tracking? The actor reads Wan Hai's public cargo tracking pages, the same ones anyone can open without an account. It collects no personal data. Check that your use fits your own agreements with Wan Hai.
Do I need a login, an API key or a proxy? No. The actor opens the public tracking pages in a hosted browser, which is included and billed as platform usage.
How many numbers can I track at once? As many as you like. Numbers go to Wan Hai in batches of 10, and long lists are spread over several browser sessions. Wan Hai keeps tracking data for 90 days, so older shipments come back as not found.
Why is a field empty? Wan Hai fills fields as the shipment moves on. A booking that hasn't sailed has no B/L, a cancelled booking has no route, and the transshipment ETA is only published once it is planned. Without full details only the result-list fields are filled.
Can I schedule it or use it through the API? Yes. Save your list as a task, schedule it daily, and read the dataset through the API or an integration.
I used a similar actor on another platform. Will my input work?
Yes. trackingNumbers and includeDetails work the same way, and the output keeps every value in flat, named fields.
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.
trackingNumbersarrayRequiredTracking numbers
Wan Hai container numbers (e.g. WHSU8766529), booking or bill of lading numbers (e.g. 127G505411) or release numbers, one per line. Spaces and dashes are ignored and duplicates are tracked once. Wan Hai keeps tracking data for 90 days.
maxItemsintegerOptionalMax results
Track at most this many numbers from the list (in list order). Leave empty (or 0) to track every number. Each shipment found is one result.
numberTypeenumOptionaldefault "auto"Number type
Leave on Auto-detect: container numbers (4 letters + 7 digits) are recognised by their format, other numbers are looked up as booking / B/L numbers and then as release numbers. Pick a type to skip the detection.
includeDetailsbooleanOptionaldefault falseInclude full details
Also open the booking and B/L pages of every shipment: route with ports, transshipments, vessels and ETA/ETD, booking and B/L dates, cargo, every container with seal, weights, packages and gate times, plus each container's movement history. Charged as a detailed result instead of a basic one.
includeContainerEventsbooleanOptionaldefault trueInclude container movements
With full details: add each container's movement history (date, status, terminal or depot, city, vessel, voyage). Turn off for faster runs on large bookings.
eventsSincestringOptionalEvents since
With full details: keep only container movements on or after this date (YYYY-MM-DD, or a period like '30 days'). Status and route fields are not affected.
includeNotFoundbooleanOptionaldefault falseAdd rows for numbers Wan Hai doesn't know
Add a free row (found: false) for every number Wan Hai has no data for, so your list and the results line up. Off: those numbers are only listed in the run's OUTPUT summary.
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 |
|---|---|---|
| trackingNumber | string | null | The number you tracked |
| numberType | string | null | What Wan Hai found: container, booking, billOfLading or release |
| found | boolean | null | True for every shipment row; false only on the optional free rows for unknown numbers |
| referenceNumber | string | null | Wan Hai's booking / B/L number behind the tracked number |
| status | string | null | Latest container status, as Wan Hai words it |
| statusDate | string | null | Date and local time of the latest status |
| statusLocation | string | null | Terminal or depot of the latest status |
| statusPlace | string | null | City of the latest status (with full details and movements) |
| vessel | string | null | Vessel name |
| voyage | string | null | Voyage number |
| onboardDate | string | null | On-board date (B/L numbers) |
| closeDate | string | null | Cargo close date (bookings) |
| bookingNumber | string | null | Booking number |
| bookingDate | string | null | When the booking was made (full details) |
| bookingStatus | string | null | Booking status, e.g. LOADED or CANCELLED (full details) |
| blNumber | string | null | Bill of lading number |
| blIssueDate | string | null | B/L issue date (full details) |
| blType | string | null | B/L type, e.g. Telex Release (full details) |
| docCutoffDate | string | null | Documentation cutoff (full details) |
| earliestReturnDate | string | null | Earliest container return date (full details) |
| lastGateInDate | string | null | Gate-in date of the last container (full details) |
| placeOfReceipt | string | null | Place of receipt, e.g. LIANYUNGANG (CN) |
| portOfLoading | string | null | Port of loading |
| transshipmentPorts | array | null | Transshipment ports in route order |
| portOfDischarge | string | null | Port of discharge |
| placeOfDelivery | string | null | Place of delivery |
| finalDestination | string | null | Final destination, when Wan Hai shows one |
| departureDate | string | null | Estimated departure from the port of loading |
| arrivalDate | string | null | Estimated arrival at the port of discharge |
| deliveryDate | string | null | Estimated arrival at the place of delivery |
| route | array | null | Route legs: place type, place, country, arrival/departure date, vessel and voyage |
| cargo | array | null | Booked equipment: container type, size, height, dangerous goods, quantity |
| containerCount | number | null | Number of containers in the shipment (full details) |
| containers | array | null | Containers with ISO code, type, size, seal, status, gate times, depots, weights, packages and movement events |
| totalPackages | number | null | Total packages on the B/L |
| packageUnit | string | null | Package unit, e.g. BAG or ROL |
| totalWeightKg | number | null | Total cargo weight on the B/L in kg |
| events | array | null | Movement history of the tracked container, newest first (container numbers, full details) |
| detailsIncluded | boolean | null | True when the booking and B/L pages were added (detailed result) |
| error | string | null | Why a number has no shipment (only on the optional not-found rows) |
| trackedAt | string | null | When the number was looked up (UTC) |
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 with full details | Charged instead of a tracking result when full details are on: adds the booking and B/L pages (route, ETD/ETA, transshipments, cargo, containers with seals, weights and gate times) and container movements. Numbers Wan Hai does not know are free. | $0.005 |
| Tracking result | One shipment found for a tracked container, booking, B/L or release number: latest status, date, location, vessel and voyage. Numbers Wan Hai does not know are free. | $0.0025 |
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/wan-hai-tracking-scraper').call({
"trackingNumbers": [
"WHSU8766529",
"127G505402"
]
})
// 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/wan-hai-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/wan-hai-tracking-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Three Wan Hai containers with route, ETA, B/L facts, seals, weights and movement history.
Eight booking / B/L numbers, result-list fields only (vessel, voyage, on-board date). Cheapest mode.
Two B/L numbers with the full booking and B/L pages, container movements off for speed.
Tracks only the first three numbers and adds a free row for a number Wan Hai doesn't know.
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.