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

Track OOCL containers, bills of lading and bookings in bulk: status, route, vessel and voyage, ETA, cargo release and customs status, and the full container event history. No login needed.
Track OOCL shipments in bulk. Paste container numbers, bills of lading or booking numbers and get one clean row per shipment: status, route, vessel and voyage, departure and arrival times, cargo release and customs status, and every container event with its date and place. No login, no API key, and numbers OOCL doesn't know cost nothing.
cargoReleaseStatus, customsClearanceStatus and the advance manifest status per bill of lading.arrivalTime and finalDestinationEta between scheduled runs and flag delays or changed vessels.| Field | What it does |
|---|---|
trackingNumbers | Container numbers (e.g. OOCU0127070), bills of lading (e.g. OOLU2162169420) or booking numbers (e.g. 2162169420). Spaces and dashes are ignored, duplicates are tracked once, OOCL tracking links work too. |
trackingType | auto (default), container, billOfLading or booking. |
maxItems | Track only the first N numbers. Empty or 0 tracks all of them. |
shipmentStatus | any, inTransit (not arrived yet) or arrived (arrived, delivered or completed). |
eventsSince | Keep only container events on or after a date (2026-10-01) or a period (30 days). |
maxEventsPerContainer | Keep only the latest N events per container. |
includeRawData | Also save OOCL's complete original record (ooclData). |
includeNotFound | Add a free found: false row for each number OOCL doesn't know. |
{
"trackingNumbers": ["OOCU0127070", "OOLU2162169420"],
"trackingType": "auto",
"shipmentStatus": "any"
}
One row per tracked number. The Containers and Route views show one row per container and per route leg.
| Field | Description |
|---|---|
trackingNumber, numberType | The number you tracked and how OOCL found it (container, billOfLading, booking) |
status | Booked, At origin, In transit, Arrived, Delivered, Completed (empty returned) or Cancelled |
bookingNumber, bookingStatus, billOfLadingNumbers, billOfLadingStatus | Booking and bill of lading references and their status |
origin, destination, portOfLoading, portOfDischarge, transshipments | Route summary |
vesselName, voyage, service | First ocean leg |
departureTime, departureIsActual, arrivalTime, arrivalIsActual | Departure from the port of loading and arrival at the port of discharge (local time; actual or estimated) |
finalDestinationEta, cargoCutoff | ETA at the final destination and the cargo cut-off |
latestEvent, latestEventTime, latestEventLocation | Latest container event |
currentMilestone, currentStage, currentMilestoneTime, currentMilestoneLocation | OOCL's current milestone (Outbound, Ocean, Inbound) |
cargoReleaseStatus, freightReleaseStatus, customsClearanceStatus, customsClearanceCode, originalBillOfLadingReceived, advancedManifestStatus | Release and customs status (bills of lading) |
billOfLadingInfo | The same per bill of lading, with customs clearance time and each manifest filing |
containerCount, containerNumbers, containers | Containers with size/type, quantity, gross weight, VGM, empty pick-up and return locations, latest event and the full event history |
route | Route legs (receipt, loading, transshipment, discharge, final destination) with facility, vessel, voyage, ETA, ETD, ATA and ATD |
shipper, consignee, notifyParty, bookingParty, bookingOffice, references | Parties and references as OOCL shows them |
quantity, pendingReasons, otherShipments | Cargo quantity, booking change reasons, further shipments listed for a reused container |
trackingUrl, trackedAt | Link to the shipment on OOCL and the time of tracking |
Example (from a real run, shortened; party names replaced):
{
"trackingNumber": "OOLU2162169420",
"numberType": "billOfLading",
"found": true,
"status": "Completed",
"bookingNumber": "2162169420",
"bookingStatus": "Confirmed",
"billOfLadingNumbers": ["2162169420"],
"billOfLadingStatus": "B/L Ready",
"origin": "Hong Kong",
"destination": "Long Beach",
"portOfLoading": "Hong Kong",
"portOfDischarge": "Long Beach",
"vesselName": "XIN FEI ZHOU",
"voyage": "104E",
"service": "PSX",
"departureTime": "2025-09-20T15:46",
"departureIsActual": true,
"arrivalTime": "2025-10-07T06:05",
"arrivalIsActual": true,
"finalDestinationEta": "2025-10-10T17:00",
"cargoCutoff": "2025-09-19T19:00",
"quantity": "1169 CT",
"currentStage": "Inbound",
"latestEvent": "Empty Return",
"latestEventTime": "2025-10-21T06:15",
"latestEventLocation": "Long Beach Container Terminal (Pier E)",
"containerCount": 1,
"containerNumbers": ["OOLU9679728"],
"shipper": "Example Logistics (Hong Kong) Ltd",
"consignee": "Example Imports Inc",
"cargoReleaseStatus": "Cleared",
"freightReleaseStatus": "Cleared",
"customsClearanceStatus": "Cleared",
"customsClearanceCode": "WAC8",
"originalBillOfLadingReceived": "N.A.(Under Sea Waybill)",
"advancedManifestStatus": "US24 (United States): Release",
"containers": [
{
"containerNumber": "OOLU9679728",
"sizeType": "40HQ",
"grossWeight": "6755 KG",
"verifiedGrossMass": "10559 KG (Amended)",
"latestEvent": "Empty Return",
"latestEventTime": "2025-10-21T06:15",
"latestEventTimezone": "PDT",
"emptyPickupLocation": "HIT - Hongkong International Terminals",
"emptyReturnLocation": "Long Beach Container Terminal (Pier E)",
"events": [
{
"event": "Empty Return",
"dateTime": "2025-10-21T06:15",
"timezone": "PDT",
"location": "Long Beach Container Terminal (Pier E)",
"facilityCode": "LGB10",
"stage": "Inbound",
"transportMode": "Truck"
}
]
}
],
"trackingUrl": "https://www.oocl.com/Pages/ExpressLink.aspx?eltype=ct&businessType=blNumber&businessNumber=OOLU2162169420&language=en",
"trackedAt": "2026-10-21T22:09:30Z"
}
You pay $0.007 per shipment found ($7 per 1,000 results), plus platform usage for compute and residential proxy traffic, which is small: under $0.001 for a 10-number run and about $0.02 per 1,000 numbers on long lists in our test runs. Numbers OOCL doesn't know, invalid entries and shipments skipped by your filters are not charged.
Example: tracking 1,000 containers that all exist costs about $7.02 in total; a run of 10 costs about $0.071.
Is it legal to track OOCL shipments? The actor reads the same public cargo tracking OOCL offers on its website, for the numbers you supply. Only track shipments you have a business reason to follow, and check the terms that apply to you. This actor is not affiliated with OOCL.
Do I need an OOCL account or a proxy? No account is needed. The actor uses residential exits by default because OOCL's tracking service refuses datacenter addresses; that traffic is part of the usage charge (about 5 KB per number on long lists, up to 25 KB on very short ones).
How many numbers can I track per run? As many as you like. Numbers are tracked in parallel and results are saved as they arrive, so long lists stream in steadily.
What if a number isn't found or a field is empty?
Unknown numbers are skipped and not charged (turn on includeNotFound to get a free row for each). Fields stay empty when OOCL has no value yet, e.g. release and customs status before arrival, or the ATA before the vessel arrives.
Booking or bill of lading?
Auto-detect handles both: a container number is recognised by its format, other numbers are tried as a booking and as a bill of lading. With or without the OOLU prefix works.
Can I schedule it or use the API? Yes. Schedule the actor to refresh your list daily and connect it to webhooks, or start runs and read the dataset through the API.
otherShipments says how many more exist.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
OOCL container numbers (e.g. OOCU0127070), bill of lading numbers (e.g. OOLU2162169420) or booking numbers, one per line. Spaces and dashes are ignored, duplicates are tracked once, and pasted OOCL tracking links work too.
trackingTypeenumOptionaldefault "auto"Number type
Leave on Auto-detect: container numbers (4 letters + 7 digits) are recognised by their format; other numbers are tried as a booking or bill of lading. 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.
shipmentStatusenumOptionaldefault "any"Shipment status
Keep only shipments that are still on their way, or only those that already arrived (or were delivered). Shipments that don't match are skipped and not charged.
eventsSincestringOptionalEvents since
Keep only container events on or after this date (YYYY-MM-DD, or a period like '30 days'). The shipment summary fields still use the full history.
maxEventsPerContainerintegerOptionaldefault 0Max events per container
Keep only the latest N events of each container. 0 keeps the full history.
includeRawDatabooleanOptionaldefault falseInclude OOCL's original record
Also save OOCL's complete tracking record for each number (field ooclData), for integrations that want every carrier detail.
includeNotFoundbooleanOptionaldefault falseAdd rows for numbers OOCL doesn't know
Add a free row (found: false) for every number OOCL has no shipment for. These rows are never charged.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential exits are the default: OOCL's tracking service refuses datacenter addresses. A tracked number uses about 5 KB of traffic on long lists (more on very short ones, where connections are new).
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 | How OOCL found it: container, billOfLading or booking |
| found | boolean | null | True for every shipment row; false only on the optional free rows for unknown numbers |
| status | string | null | Booked, At origin, In transit, Arrived, Delivered, Completed (empty container returned) or Cancelled |
| bookingNumber | string | null | OOCL booking number |
| bookingStatus | string | null | Booking status, e.g. Confirmed or Cancelled |
| billOfLadingNumbers | array | null | Bills of lading behind the number |
| billOfLadingStatus | string | null | Bill of lading status, e.g. B/L Ready |
| origin | string | null | Place of receipt |
| destination | string | null | Final destination |
| portOfLoading | string | null | First port of loading |
| portOfDischarge | string | null | Last port of discharge |
| vesselName | string | null | Vessel of the first ocean leg |
| voyage | string | null | Voyage of that vessel |
| service | string | null | OOCL service (loop) code |
| departureTime | string | null | Departure from the port of loading, local time (actual when departureIsActual) |
| departureIsActual | boolean | null | True when departureTime is the actual departure |
| arrivalTime | string | null | Arrival at the port of discharge, local time (actual when arrivalIsActual) |
| arrivalIsActual | boolean | null | True when arrivalTime is the actual arrival |
| finalDestinationEta | string | null | Estimated arrival at the final destination, local time |
| cargoCutoff | string | null | Cargo (CY) cut-off, local time |
| quantity | string | null | Cargo quantity, e.g. 1169 CT |
| currentMilestone | string | null | OOCL's current milestone group, e.g. LOADED_GROUP |
| currentStage | string | null | Outbound, Ocean or Inbound |
| currentMilestoneTime | string | null | Time of the current milestone, local time |
| currentMilestoneLocation | string | null | Place of the current milestone |
| latestEvent | string | null | Latest container event, e.g. Loaded, Discharged, Empty Return |
| latestEventTime | string | null | Time of the latest event, local time |
| latestEventLocation | string | null | Facility of the latest event |
| containerCount | number | null | Number of containers |
| containerNumbers | array | null | Container numbers |
| transshipments | array | null | Transshipment ports on the route |
| shipper | string | null | Shipper as shown by OOCL |
| consignee | string | null | Consignee as shown by OOCL |
| notifyParty | string | null | Notify party as shown by OOCL |
| bookingParty | string | null | Booking party as shown by OOCL |
| bookingOffice | string | null | OOCL booking office code |
| cargoReleaseStatus | string | null | Inbound cargo release status |
| freightReleaseStatus | string | null | Inbound B/L freight clearance status |
| customsClearanceStatus | string | null | Inbound customs clearance status |
| customsClearanceCode | string | null | Customs clearance location code at the final destination |
| originalBillOfLadingReceived | string | null | Whether OOCL received the original B/L, e.g. N.A.(Under Sea Waybill) |
| advancedManifestStatus | string | null | Advance manifest filings and their status, e.g. US24 (United States): Release |
| billOfLadingInfo | array | null | Per bill of lading: release, customs, original B/L and manifest details |
| references | array | null | Shipment references OOCL shows (type, label, value) |
| pendingReasons | array | null | Reasons a booking is pending or changed |
| containers | array | null | Containers with size/type, weights, empty pick-up and return, latest event and full event history |
| route | array | null | Route legs: place of receipt, ports of loading, transshipments, discharge and final destination with vessel, voyage, ETA/ETD/ATA/ATD |
| otherShipments | number | null | Further shipments OOCL lists for the same number (a reused container) |
| trackingUrl | string | null | Link that opens the shipment on OOCL's tracking page |
| trackedAt | string | null | When the number was tracked (UTC) |
| ooclData | object | null | OOCL's complete original record (only with 'Include OOCL's original record') |
| error | string | null | Why there is no shipment (only on the optional free rows) |
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, vessel, ETA, release and customs status, full container event history). Numbers OOCL 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/oocl-tracking-scraper').call({
"trackingNumbers": [
"OOCU0127070",
"OOLU2162169420"
],
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// 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/oocl-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/oocl-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.