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

Track COSCO SHIPPING Lines containers, bills of lading and bookings in bulk: status, route, vessel and the container movement history. No login needed.
Track COSCO SHIPPING Lines shipments in bulk: paste container, bill of lading or booking numbers and get the latest container status, location, ETA, route, vessel legs and every container on the shipment as clean rows. No login, no COSCO account, and you only pay for numbers COSCO actually has data for.
tracking_number, type, total and containers, the field names used by a similar actor on another platform, so existing pipelines keep working.| Field | What it does |
|---|---|
trackingNumbers | Container, bill of lading or booking numbers, one per line |
trackingType | auto (default), container, billOfLading or booking |
maxItems | Track at most this many numbers (empty = all) |
updatedSince | Keep only shipments whose latest status is on or after this date (2026-10-01 or 7 days) |
includeEta | Look up the ETA of container numbers (default on) |
includeRawData | Add COSCO's original itNumber, shipment and trackingPath for bills of lading and bookings (default on) |
includeNotFound | Add a free row for numbers COSCO doesn't know |
proxyConfiguration | Datacenter by default; switches to residential on its own if COSCO refuses too many requests |
{
"trackingNumbers": ["CSNU1036292", "6462548410"],
"trackingType": "auto"
}
One row per tracked number.
| Field | Description |
|---|---|
trackingNumber, numberType | The number and its type (Container, Bill of lading, Booking) |
latestStatus, latestLocation, latestDate, latestTransportation | Most recent container status of the shipment |
eta | Estimated arrival at the port of discharge |
billOfLadingNumber, bookingNumber, blType, blStatus, bookingStatus | Document numbers and status |
origin, destination, portOfLoading, portOfDischarge | Route (bills of lading and bookings) |
vesselName, voyage, departure, arrival | Main vessel and the first departure / last arrival (actual when known) |
legs | Every vessel leg: vessel, voyage, service, ports, loaded, planned and actual departure, ETA, actual arrival, discharge |
containers | Every container: number, type, latest status, location, date, transport mode, ETA, empty pick-up and return dates where COSCO shows them |
cargoAvailableAt, inlandTransport, destinationFacility, destinationFirmsCode, podFacility, podFirmsCode, inBondNumber | Delivery details (mostly North America) |
trackingUrl, trackedAt | Link to the COSCO tracking page and when the number was tracked |
Real example from a test run (a container number and a bill of lading):
[
{
"trackingNumber": "CSNU1036230",
"numberType": "Container",
"containerType": "20GP",
"eta": "2026-10-16 11:00",
"containerCount": 1,
"containerNumbers": [
"CSNU1036230"
],
"latestStatus": "Discharged at Last POD",
"latestLocation": "Shouguang Port Co.,Ltd,Shouguang,Shandong,China",
"latestDate": "2026-10-16 19:00",
"latestTransportation": "FEEDER",
"containers": [
{
"containerNumber": "CSNU1036230",
"containerType": "20GP",
"latestStatus": "Discharged at Last POD",
"latestLocation": "Shouguang Port Co.,Ltd,Shouguang,Shandong,China",
"latestDate": "2026-10-16 19:00",
"transportation": "FEEDER",
"statusHistory": [
{
"status": "Discharged at Last POD",
"location": "Shouguang Port Co.,Ltd,Shouguang,Shandong,China",
"date": "2026-10-16 19:00",
"transportation": "FEEDER"
}
],
"sealNumber": null,
"grossWeight": null,
"pieces": null,
"eta": "2026-10-16 11:00",
"hsCodes": []
}
],
"trackingUrl": "https://elines.coscoshipping.com/ebusiness/cargoTracking?trackingType=CONTAINER&number=CSNU1036230",
"trackedAt": "2026-10-22T06:28:48Z",
"tracking_number": "CSNU1036230",
"type": "cntr",
"total": 1
},
{
"trackingNumber": "6462548410",
"numberType": "Bill of lading",
"billOfLadingNumber": "6462548410",
"bookingNumber": null,
"bookingNumbers": [],
"blType": "Sea WayBill",
"blStatus": "Sea Waybill",
"bookingStatus": null,
"origin": "La Spezia,La Spezia,Italy",
"destination": "Cleveland,OH,Cuyahoga,United States",
"portOfLoading": "La Spezia-La Spezia container Terminal",
"portOfDischarge": "Norfolk-Norfolk Int'l Terminal (N.I.T.)",
"firstPortOfLoading": "La Spezia",
"lastPortOfDischarge": "Norfolk",
"vesselName": "CMA CGM INNOVATION",
"voyage": "AMG000W19",
"departure": "2026-09-05 11:29",
"departureIsActual": true,
"arrival": "2026-10-05 10:14",
"arrivalIsActual": true,
"eta": "2026-10-05 05:00",
"cargoAvailableAt": "2026-10-10 08:00",
"cargoCutOff": null,
"inlandTransport": "Rail",
"destinationFacility": "Norfolk Southern Rail Road",
"destinationFirmsCode": "J037",
"podFacility": "Norfolk Int'l Terminal (N.I.T.)",
"podFirmsCode": "L005",
"inBondNumber": "V2109393935",
"containerCount": 1,
"containerNumbers": [
"OOLU0233904"
],
"latestStatus": "Empty Equipment Returned",
"latestLocation": "Norfolk Southern Rail Road,Maple Heights,Ohio,United States",
"latestDate": "2026-10-13 11:56",
"latestTransportation": "Truck",
"legs": [
{
"sequence": 1,
"transportMode": "Vessel",
"vesselName": "CMA CGM INNOVATION",
"vesselCode": "MQR",
"voyage": "AMG000W19",
"service": "MENA",
"portOfLoading": "La Spezia",
"portOfDischarge": "Norfolk",
"loadedAt": "2026-09-04 12:03",
"plannedDeparture": "2026-09-05 12:00",
"actualDeparture": "2026-09-05 11:29",
"estimatedArrival": "2026-10-05 05:00",
"actualArrival": "2026-10-05 10:14",
"dischargedAt": "2026-10-05 16:05",
"city": null
}
],
"containers": [
{
"containerNumber": "OOLU0233904",
"containerType": "20GP",
"latestStatus": "Empty Equipment Returned",
"latestLocation": "Norfolk Southern Rail Road,Maple Heights,Ohio,United States",
"latestDate": "2026-10-13 11:56",
"transportation": "Truck",
"statusHistory": [
{
"status": "Empty Equipment Returned",
"location": "Norfolk Southern Rail Road,Maple Heights,Ohio,United States",
"date": "2026-10-13 11:56",
"transportation": "Truck"
}
],
"sealNumber": null,
"grossWeight": null,
"pieces": null,
"eta": null,
"emptyPickUpDate": null,
"ladenReturnDate": null,
"ladenPickUpDate": null,
"emptyReturnDate": null,
"lastFreeDay": null,
"pickUpNumber": null,
"hsCodes": []
}
],
"trackingUrl": "https://elines.coscoshipping.com/ebusiness/cargoTracking?trackingType=BILLOFLADING&number=6462548410",
"trackedAt": "2026-10-22T06:28:48Z",
"tracking_number": "6462548410",
"type": "bl",
"total": 1
}
]
You pay $7.00 per 1,000 tracked shipments ($0.007 per number COSCO returns data for), plus a small platform usage fee for compute and proxy traffic. There is no start fee. Example: tracking 1,000 numbers costs about $7 in events plus a few cents of usage. Unknown numbers, containers without a current status and shipments removed by the filter are not charged.
Is it legal to track COSCO shipments this way? The actor reads the same public tracking information anyone can see on the COSCO SHIPPING Lines website by entering a number. It doesn't log in or read private account data. Check your own use case with your legal team if you are unsure.
Do I need a COSCO account, login or proxy? No account or login. The proxy is included: datacenter exits by default, with an automatic switch to residential if COSCO starts refusing requests.
How many numbers can I track in one run? As many as you like. Runs of several hundred numbers finished in well under a minute of tracking time in our tests; very large lists simply take longer.
Why is a field empty?
COSCO only shows what it has for that shipment: container numbers have no route or vessel legs, some containers have no ETA, and North American fields are only filled for shipments to the US or Canada. Numbers COSCO doesn't know return no row (or a free found: false row with "Add rows for numbers COSCO doesn't know").
Do I get the full container event history?
No. COSCO's public tracking returns only the latest status of each container (its movement list comes back with the details blanked out), so statusHistory holds that latest status. Bills of lading and bookings add every vessel leg with its actual times.
Can I schedule it or use the API? Yes. Schedule the actor to run every few hours or daily, combine it with "Updated since", and read the results through the API or webhooks.
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
COSCO SHIPPING Lines container numbers (e.g. CSNU1036292), bill of lading numbers (e.g. 6462548410) or booking numbers, one per line. Spaces, dashes and a COSU prefix are ignored, duplicates are tracked once, and pasted tracking links work too.
trackingTypeenumOptionaldefault "auto"Number type
Leave on Auto-detect: container numbers are recognised by their format (4 letters + 7 digits), other numbers are tried as a bill of lading first and then as a booking. Pick a type to skip the detection.
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.
updatedSincestringOptionalUpdated since
Keep only shipments whose latest container status is on or after this date (YYYY-MM-DD, or a period like '7 days'). Handy for daily monitoring. Shipments that don't match are skipped and not charged.
includeEtabooleanOptionaldefault trueAdd the ETA of container numbers
For container numbers, also look up the estimated arrival at the port of discharge (one small extra request per container). Bills of lading and bookings always include their ETA.
includeRawDatabooleanOptionaldefault trueInclude COSCO's original shipment record
For bills of lading and bookings, also add itNumber, shipment (the vessel legs) and trackingPath exactly as COSCO returns them (handy if you already parse that shape). Turn off for smaller rows.
includeNotFoundbooleanOptionaldefault falseAdd rows for numbers COSCO doesn't know
Add a free row (found: false, with a message) for every number COSCO has no shipment for. These rows are never charged.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter exits work well for COSCO and each tracked number uses only a few kilobytes. If COSCO refuses too many requests, the run switches to residential exits on its own.
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 | Container, Bill of lading or Booking |
| latestStatus | string | null | Latest container status (e.g. Discharged at Last POD, Empty Equipment Returned) |
| latestLocation | string | null | Where the latest status happened |
| latestDate | string | null | Local date and time of the latest status (YYYY-MM-DD HH:MM) |
| latestTransportation | string | null | Transport mode of the latest move |
| eta | string | null | Estimated arrival at the port of discharge |
| containerType | string | null | Container size and type (container numbers) |
| billOfLadingNumber | string | null | Bill of lading number |
| bookingNumber | string | null | Booking number |
| bookingNumbers | array | null | Bookings grouped under the bill of lading |
| blType | string | null | Bill of lading type (Original, Sea WayBill...) |
| blStatus | string | null | Bill of lading status |
| bookingStatus | string | null | Booking status (bookings) |
| origin | string | null | Place of receipt |
| destination | string | null | Final destination |
| portOfLoading | string | null | Port and terminal of loading |
| portOfDischarge | string | null | Port and terminal of discharge |
| firstPortOfLoading | string | null | First port of loading |
| lastPortOfDischarge | string | null | Last port of discharge |
| vesselName | string | null | Vessel |
| voyage | string | null | Voyage |
| departure | string | null | Departure from the first port (actual when known) |
| departureIsActual | boolean | null | True when departure is the actual time |
| arrival | string | null | Arrival at the last port (actual when known, else estimated) |
| arrivalIsActual | boolean | null | True when arrival is the actual time |
| cargoAvailableAt | string | null | Cargo available for pick-up |
| cargoCutOff | string | null | Cargo cut-off |
| inlandTransport | string | null | On-carriage mode after discharge (Truck, Rail) |
| destinationFacility | string | null | Inland destination facility (North America) |
| destinationFirmsCode | string | null | FIRMS code of the destination facility |
| podFacility | string | null | Discharge terminal (North America) |
| podFirmsCode | string | null | FIRMS code of the discharge terminal |
| inBondNumber | string | null | In-bond (IT) number |
| containerCount | number | null | Number of containers |
| containerNumbers | array | null | Containers on the shipment |
| legs | array | null | Vessel legs with planned and actual departure, arrival and discharge times |
| containers | array | null | Containers with type, latest status, location, date and transport mode |
| trackingUrl | string | null | Tracking page on elines.coscoshipping.com |
| trackedAt | string | null | When the number was tracked (UTC) |
| tracking_number | string | null | The number you tracked (original field name) |
| type | string | null | cntr, bl or bkg (original field name) |
| total | number | null | Number of containers (original field name) |
| found | boolean | null | false on free rows for unknown numbers |
| error | string | null | Why a number has no data (free rows only) |
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 COSCO container, bill of lading or booking number (latest status, ETA, route, vessel legs, containers). Unknown numbers 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/cosco-tracking-scraper').call({
"trackingNumbers": [
"CSNU1036292",
"6462548410"
],
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// 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/cosco-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/cosco-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.
Six container numbers, typed with spaces and dashes, detected automatically, with ETA.
Four COSCO bills of lading (one with a COSU prefix): route, ports, vessel legs and all containers.
Two COSCO booking numbers with booking status, first and last port.
Bills of lading Ningbo to Hamburg, Wuhan to Jakarta and Helsingborg to Shanghai, without the raw record.
Keeps shipments with a status in the last 120 days, at most 5 numbers.
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.