# Yangming Marine Transport Scraper \[only $0.75] (`memo23/yangming-cheerio`) Actor

Track global container shipments effortlessly with the Yangming Scraper! Extract real-time container statuses, vessel schedules, and port activities. Save time, optimize logistics, and make smarter shipping decisions—all with structured, analysis-ready data at your fingertips.

- **URL**: https://apify.com/memo23/yangming-cheerio.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Automation, Lead generation, Travel
- **Stats:** 25 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.95 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Yangming Marine Transport Corporation Scraper

### Overview

The **Yangming Marine Transport Corporation Scraper** extracts detailed container tracking and shipping data from [Yangming.com](https://www.yangming.com/en), a leading global container shipping company. Designed for logistics professionals, supply chain analysts, and shipping companies, this tool automates the collection of container statuses, vessel and voyage details, and port activities to streamline operations and enhance decision-making.

***

### Features

- **Container Tracking**: Scrape real-time container statuses, locations, and activities.
- **Vessel Information**: Extract the vessel name and voyage number carrying each container.
- **Port & Route Details**: Capture origin, discharge, and destination ports plus per-container ETD/ETA.
- **Port Activities**: Retrieve the full port and terminal activity timeline (arrivals, departures, transshipments) for each container.
- **Proxy Support**: Use residential proxies to avoid IP blocks and ensure uninterrupted scraping.
- **Customizable Workflow**: Adjust concurrency, retries, and data limits for large-scale scraping.

***

### How to Use

1. **Set Up**: Deploy the scraper on the [Apify Platform](https://apify.com/).
2. **Configure Input**: Define your container numbers, limits, and proxy settings (see example below).
3. **Run the Scraper**: Execute the job and monitor progress in real time.
4. **Export Results**: Download data in JSON, CSV, or Excel formats.

***

### Input Configuration

#### Example Input

```json
{
    "containers": [
        "YMLU8825399"
    ],
    "maxConcurrency": 10,
    "minConcurrency": 1,
    "maxRequestRetries": 100,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

#### Input Fields Explained

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| **containers** | `array` | List of container numbers to track. | `[]` |
| **maxConcurrency** | `integer` | Maximum parallel requests to process pages. | `10` |
| **minConcurrency** | `integer` | Minimum parallel requests to maintain. | `1` |
| **maxRequestRetries** | `integer` | Retry failed requests up to this number before stopping. | `100` |
| **proxy** | `object` | Proxy configuration for anonymity:<br>- `useApifyProxy`: Enable Apify Proxy.<br>- `apifyProxyGroups`: Use `RESIDENTIAL` for hard-to-scrape targets. | `{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }` |

***

### Output Structure

The scraper returns structured container tracking data. Below is an example output:

```json
{
    "newLink": "https://e-solution.yangming.com/e-service/track_trace/ctconnect.aspx?var=0XFp7%2fIgQ2YW%2frdIHIIHS2U35%2bQ%2fH1j6QbBG2sJPPdMZnaiy2pwlam5IEr0F7n84QOth9%2bxMs2O%2bv%2fphYa4hkBaznhp7ixvX1JcCB1yzxY0%3d",
    "container_number": "YMLU8825399",
    "Container_Size": "40",
    "vessel_name": "YM TRILLION",
    "voyage_no": "013E",
    "ETD_Origin": "2024-12-06T23:00:00.000Z",
    "Port_of_Origin": "SHANGHAI",
    "Port_of_Discharge": "VANCOUVER",
    "Port_of_Destination": "MONTREAL",
    "Current_Status": "Empty Returned",
    "ETA_Port_of_Discharge": null,
    "Current_Location": "MONTREAL - CP RAIL - LACHINE",
    "Activities_Array": [
        {
            "date": "2025-01-28T20:55:00.000Z",
            "status": "Empty Returned",
            "location": "MONTREAL - CP RAIL - LACHINE",
            "transport": "",
            "vessel_name": "",
            "voyage_no": ""
        },
        {
            "date": "2025-01-26T07:14:00.000Z",
            "status": "Full to Consignee",
            "location": "MONTREAL - CP RAIL - LACHINE",
            "transport": "",
            "vessel_name": "",
            "voyage_no": ""
        }
    ],
    "ata_eta": false,
    "atd_etd": false
}
```

#### Key Output Fields

- **container_number**: Unique container identifier.
- **vessel_name**: Name of the vessel carrying the container.
- **voyage_no**: Voyage number of the vessel.
- **ETD_Origin**: Estimated time of departure from the origin port.
- **Port_of_Origin**: Origin port of the container.
- **Port_of_Discharge**: Port where the container will be discharged.
- **Port_of_Destination**: Final destination port of the container.
- **Current_Status**: Current status of the container (e.g., "Empty Returned").
- **Current_Location**: Current location of the container.
- **Activities_Array**: Detailed timeline of container activities (e.g., arrivals, departures).

***

### Benefits

- **Operational Efficiency**: Automate container tracking and status updates.
- **Real-Time Insights**: Monitor container locations and activities in real time.
- **Market Analysis**: Analyze shipping trends and port activities for better decision-making.
- **Scalable**: Track thousands of containers across routes and ports in hours.

***

### Why Use This Scraper?

Yangming Marine Transport Corporation is a key player in global shipping, but manual data extraction is time-consuming. This scraper:

- **Saves Time**: Automates container tracking and status updates.
- **Ensures Accuracy**: Delivers structured, analysis-ready data in JSON/CSV.
- **Avoids Blocks**: Residential proxies prevent IP bans.

***

### Support

- **Issues**: Report via [Apify Actor Issues](https://console.apify.com/actors/memo23/yangming-cheerio/issues).
- **Contact**:
  - Email: <muhamed.didovic@gmail.com>
  - Portfolio: <https://muhamed-didovic.github.io/>

***

### Custom Services

Need tailored solutions? Contact me for:

- Custom fields (e.g., specific container types, route analysis).
- Bulk data extraction for historical container tracking.
- Integration with logistics management systems.

Email: <muhamed.didovic@gmail.com>

***

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/yangming-cheerio`).

**Purpose:** Track container shipments on Yang Ming (yangming.com) — returns current status, location, vessel/voyage, ports, and a full activity timeline for each container number.

**Minimal input:**

```json
{
  "containers": ["YMLU8825399"]
}
```

**Output:** one dataset row per container — container_number, Container_Size, vessel_name, voyage_no, ETD_Origin, Port_of_Origin, Port_of_Discharge, Port_of_Destination, Current_Status, ETA_Port_of_Discharge, Current_Location, Activities_Array \[{date, status, location, transport, vessel_name, voyage_no}], newLink, ata_eta, atd_etd.

**Behaviors an agent should know:**

- `containers` is required — pass one or more container numbers; output size equals the number of containers you submit (no separate maxItems cap).
- A built-in residential proxy routes all traffic by default at no extra cost; only set `proxy` to override with your own.
- `maxRequestRetries` defaults to 100 because Yangming's tracking endpoint can be intermittently slow.
- Pay-per-event billing — see the Pricing tab on the actor page.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Yang Ming Marine Transport Corporation or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available container-tracking pages on Yangming.com — no authenticated endpoints, paid features, or content behind a login wall. Users are responsible for ensuring their use complies with Yangming.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

***

### SEO Keywords

Yang Ming scraper, yangming scraper, scrape yangming, yangming.com scraper, yangming tracking api, Apify yangming, container tracking scraper, container tracking api, shipment tracking scraper, ocean freight data, vessel schedule scraper, bill of lading tracking, supply chain data api, logistics data scraper, container status export, shipping data api, ocean shipping intelligence, freight visibility data

# Actor input Schema

## `containers` (type: `array`):

One tracking number per row. Yang Ming's tracking accepts container numbers (e.g. TCNU2325192), bill-of-lading numbers, and booking numbers in the same field.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "containers": [
    "TCNU2325192"
  ],
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 100
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "containers": [
        "TCNU2325192"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/yangming-cheerio").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "containers": ["TCNU2325192"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/yangming-cheerio").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "containers": [
    "TCNU2325192"
  ]
}' |
apify call memo23/yangming-cheerio --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/yangming-cheerio"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/E126cHQU6Bey4Kpug/builds/M5ty81ThR28fsVdMq/openapi.json
