Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Shipping Disruption Tracker - War & Supply Chain

Apify Actor Crawlee Node.js PPE Pricing Category

Real-time intelligence on 6 critical maritime chokepoints, commodity price tracking, port operational status, and AI-powered risk assessment -- built for supply chain professionals, commodity traders, and geopolitical analysts.

170+ ships are trapped in the Persian Gulf as of March 2026. The Strait of Hormuz -- through which 20% of the world's petroleum flows -- is partially blocked. Supply chain managers need real-time visibility, not $100K enterprise subscriptions.


How It Works

flowchart LR
    A["Select Regions"] --> B["Fetch News"]
    B --> C["Analyze Risk"]
    C --> D["Check Ports"]
    D --> E["Get Commodity\nPrices"]
    E --> F["Disruption\nReport"]

    style A fill:#1a1a2e,stroke:#e94560,color:#fff
    style B fill:#1a1a2e,stroke:#0f3460,color:#fff
    style C fill:#1a1a2e,stroke:#e94560,color:#fff
    style D fill:#1a1a2e,stroke:#0f3460,color:#fff
    style E fill:#1a1a2e,stroke:#e94560,color:#fff
    style F fill:#16213e,stroke:#0f3460,color:#fff,stroke-width:3px
Loading

Architecture

flowchart TB
    subgraph Input["Input Configuration"]
        R[Regions Array]
        C[Commodities Array]
        T[Feature Toggles]
    end

    subgraph Pipeline["Scraping Pipeline"]
        direction TB
        PC[PuppeteerCrawler]

        subgraph News["News Aggregation"]
            NF[Fetch Headlines]
            NP[Parse per Region]
        end

        subgraph Risk["Risk Keyword Engine"]
            direction TB
            KW["Keyword Analysis"]
            CR["CRITICAL\n-- war, attack, blockade --\n-- military strike, missile --"]
            HR["HIGH_RISK\n-- sanctions, conflict --\n-- threat, closure, seizure --"]
            MO["MODERATE\n-- tensions, dispute --\n-- delays, weather, drill --"]
        end

        subgraph Ports["Port Status"]
            PS[Operational Check]
            CO[Coordinates Lookup]
        end

        subgraph Commodities["Commodity Prices"]
            OIL[Crude Oil]
            GAS[Natural Gas]
            GOLD[Gold]
            MORE[Copper / Wheat /\nIron Ore / LNG]
        end
    end

    subgraph Output["Disruption Report"]
        DR[Region Reports]
        PR[Price Data]
        RA[Risk Assessments]
    end

    R --> PC
    C --> PC
    T --> PC
    PC --> News
    News --> Risk
    Risk --> Ports
    Ports --> Commodities
    Commodities --> Output

    KW --> CR
    KW --> HR
    KW --> MO

    style CR fill:#dc3545,stroke:#fff,color:#fff
    style HR fill:#fd7e14,stroke:#fff,color:#fff
    style MO fill:#ffc107,stroke:#000,color:#000
    style Output fill:#0d6efd,stroke:#fff,color:#fff
Loading

Monitored Regions

graph TB
    subgraph WORLD["6 Critical Maritime Chokepoints"]
        direction TB

        subgraph Middle_East["Middle East"]
            HORMUZ["Strait of Hormuz\n26.56N, 56.25E\nPorts: Fujairah, Bandar Abbas,\nMuscat, Khor Fakkan"]
            REDSEA["Red Sea / Bab el-Mandeb\n12.58N, 43.33E\nPorts: Jeddah, Port Sudan,\nDjibouti, Aden"]
        end

        subgraph Africa["Africa / Mediterranean"]
            SUEZ["Suez Canal\n30.46N, 32.34E\nPorts: Port Said, Suez,\nAin Sokhna, Damietta"]
        end

        subgraph Asia["Asia-Pacific"]
            SCS["South China Sea\n12.00N, 113.00E\nPorts: Singapore, Ho Chi Minh,\nManila, Hong Kong"]
        end

        subgraph Americas["Americas"]
            PANAMA["Panama Canal\n9.08N, 79.68W\nPorts: Balboa, Cristobal,\nManzanillo, Colon"]
        end

        subgraph Europe["Europe / Eurasia"]
            BLACK["Black Sea\n43.00N, 35.00E\nPorts: Odessa, Constanta,\nNovorossiysk, Istanbul"]
        end
    end

    style HORMUZ fill:#dc3545,stroke:#fff,color:#fff
    style REDSEA fill:#dc3545,stroke:#fff,color:#fff
    style SUEZ fill:#fd7e14,stroke:#fff,color:#fff
    style SCS fill:#fd7e14,stroke:#fff,color:#fff
    style PANAMA fill:#0d6efd,stroke:#fff,color:#fff
    style BLACK fill:#dc3545,stroke:#fff,color:#fff
Loading

Input Schema

classDiagram
    class Input {
        +String[] regions
        +String[] commodities
        +Boolean includeNews
        +Boolean includeCommodityPrices
        +Boolean includePortStatus
        +Number maxNewsPerRegion
    }
Loading

Parameters

Parameter Type Default Description
regions String[] All 6 regions Maritime regions to monitor
commodities String[] ["Crude Oil", "Natural Gas", "Gold"] Commodity prices to track
includeNews Boolean true Aggregate news headlines per region
includeCommodityPrices Boolean true Fetch current commodity prices
includePortStatus Boolean true Check port operational status
maxNewsPerRegion Number 15 Headlines per region (5-50)

Available Regions

Region Key Ports Strategic Significance
Strait of Hormuz Fujairah, Bandar Abbas, Muscat 21% of global oil transit
Red Sea / Bab el-Mandeb Jeddah, Port Sudan, Djibouti Europe-Asia trade corridor
Suez Canal Port Said, Suez, Ain Sokhna 12% of global trade
South China Sea Singapore, Manila, Hong Kong $3.4T annual trade flow
Panama Canal Balboa, Cristobal, Manzanillo Americas east-west link
Black Sea Odessa, Constanta, Novorossiysk Grain and energy exports

Available Commodities

Commodity Relevance
Crude Oil Directly impacted by Hormuz, Red Sea, Suez disruptions
Natural Gas LNG shipping routes through all 6 chokepoints
Gold Safe-haven asset, spikes during maritime conflict
Copper Industrial bellwether, Asia-Pacific trade flows
Wheat Black Sea grain corridor dependency
Iron Ore South China Sea and Panama shipping lanes
LNG Liquefied natural gas spot pricing

Example Input

{
    "regions": ["Strait of Hormuz", "Red Sea", "Suez Canal"],
    "commodities": ["Crude Oil", "Natural Gas", "Gold"],
    "includeNews": true,
    "includeCommodityPrices": true,
    "includePortStatus": true,
    "maxNewsPerRegion": 20
}

Output Schema

classDiagram
    class DisruptionReport {
        +String region
        +String description
        +String riskLevel
        +String status
        +PortStatus[] affectedPorts
        +Object commodityPrices
        +NewsItem[] newsHeadlines
        +Number newsCount
        +String monitoredAt
    }

    class NewsItem {
        +String title
        +String source
        +String url
        +String publishedAt
    }

    class PortStatus {
        +String port
        +String country
        +String status
        +String statusDetail
        +String[] recentHeadlines
    }

    class CommodityPrice {
        +Number price
        +String priceFormatted
        +String source
        +String fetchedAt
    }

    DisruptionReport --> NewsItem
    DisruptionReport --> PortStatus
    DisruptionReport --> CommodityPrice
Loading

Example Output

{
    "region": "Strait of Hormuz",
    "description": "Critical chokepoint for 20% of global petroleum. Active military operations zone.",
    "riskLevel": "CRITICAL",
    "status": "Critical disruptions detected. Ports suspended/closed: Kuwait Port. Active military operations or blockade indicators present.",
    "commodityPrices": {
        "Crude Oil": {
            "price": 92.10,
            "priceFormatted": "$92.10",
            "source": "Google Finance",
            "fetchedAt": "2026-03-22T12:00:00.000Z"
        }
    },
    "affectedPorts": [
        {
            "port": "Bandar Abbas",
            "country": "Iran",
            "status": "Suspended/Closed",
            "statusDetail": "Critical disruption indicators detected in recent news",
            "recentHeadlines": ["Iran closes Bandar Abbas port amid US strikes"]
        },
        {
            "port": "Fujairah",
            "country": "UAE",
            "status": "Operational",
            "statusDetail": "No disruption reports found"
        }
    ],
    "newsHeadlines": [
        {
            "title": "US Navy escorts tankers through Hormuz as tensions escalate",
            "source": "Reuters",
            "publishedAt": "Sun, 22 Mar 2026 14:30:00 GMT",
            "url": "https://news.google.com/..."
        }
    ],
    "newsCount": 15,
    "monitoredAt": "2026-03-22T12:00:00.000Z"
}

Risk Levels

Level Trigger Keywords Meaning
CRITICAL war, attack, blockade, military strike, explosion, missile Active conflict or imminent threat to shipping
HIGH_RISK sanctions, conflict, threat, closure, seizure, naval Elevated danger, rerouting likely
MODERATE tensions, dispute, delays, weather, inspection, drill Disruption possible but not imminent

Use Cases

mindmap
    root((Shipping\nDisruption\nTracker))
        Supply Chain
            Route planning
            Alternative corridor analysis
            Supplier risk scoring
            Inventory buffer decisions
        Insurance
            Marine cargo underwriting
            War risk premium calculation
            Claims trigger monitoring
            Portfolio exposure mapping
        Trading
            Commodity price signals
            Freight rate forecasting
            Geopolitical alpha generation
            Spread trade triggers
        Logistics
            Vessel rerouting decisions
            Port congestion monitoring
            ETA recalculation
            Carrier selection
        Risk Management
            Country risk dashboards
            Scenario modeling
            Board-level reporting
            Regulatory compliance
Loading

AI Agent Integration

Connect this actor to any AI agent framework for automated supply chain monitoring.

JavaScript (Apify Client)

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('george.the.developer/shipping-disruption-tracker').call({
    regions: ['Strait of Hormuz', 'Red Sea', 'Suez Canal'],
    commodities: ['Crude Oil', 'Natural Gas', 'Gold'],
    includeNews: true,
    includeCommodityPrices: true,
    includePortStatus: true,
    maxNewsPerRegion: 15,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

for (const report of items) {
    console.log(`${report.region}: ${report.riskLevel}`);
    console.log(`  Ports: ${report.affectedPorts.map(p => `${p.port} (${p.status})`).join(', ')}`);
    console.log(`  Headlines: ${report.newsCount}`);
}

Python (Apify Client)

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("george.the.developer/shipping-disruption-tracker").call(run_input={
    "regions": ["Strait of Hormuz", "Red Sea", "Suez Canal"],
    "commodities": ["Crude Oil", "Natural Gas", "Gold"],
    "includeNews": True,
    "includeCommodityPrices": True,
    "includePortStatus": True,
    "maxNewsPerRegion": 15,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    risk = item["riskLevel"]
    region = item["region"]
    print(f"{region}: {risk}")

    for port in item.get("affectedPorts", []):
        print(f"  {port['port']} ({port['country']}): {port['status']}")

    for headline in item.get("newsHeadlines", []):
        print(f"  - {headline['title']} [{headline['source']}]")

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/george.the.developer~shipping-disruption-tracker/runs" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "regions": ["Strait of Hormuz", "Red Sea"],
    "commodities": ["Crude Oil", "Gold"],
    "includeNews": true,
    "includeCommodityPrices": true,
    "includePortStatus": true,
    "maxNewsPerRegion": 10
  }'

# Fetch results (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN"

Apify MCP Server (Claude / GPT / LangChain)

This actor is compatible with the Apify MCP Server for direct AI agent integration. Connect it to Claude Desktop, GPT-based agents, CrewAI, or LangChain supply chain monitoring workflows.


Pricing

Scope Cost
Per region report $0.008
3 regions (most common) $0.024
All 6 regions (full scan) $0.048
Hourly monitoring, all regions (monthly) ~$35/month

Pricing uses Apify's Pay Per Event model. You are charged only for the regions you select. News aggregation, commodity prices, and port status checks are included in the per-region cost.


FAQ

How often should I run this actor? For active conflict zones, every 1-4 hours. For general monitoring, once or twice daily is sufficient. Set up recurring runs from the Apify Console schedules tab.

Which regions are most volatile right now? The actor does not predict the future, but historically the Red Sea, Strait of Hormuz, and Black Sea have the highest frequency of CRITICAL and HIGH_RISK assessments.

Can I monitor just one region? Yes. Pass a single region in the regions array and you will be charged only $0.008 for that run.

Can I add custom regions? Yes. Enter any region name and it will create a search-based monitor using relevant maritime keywords.

How does risk assessment work? Headlines are scanned for conflict-related keywords. Words like "attack", "blockade", or "missile" trigger CRITICAL. Terms like "sanctions" or "threat" produce HIGH_RISK. Lower-severity terms like "tensions" or "delays" result in MODERATE.

How does it determine port status? Port status is assessed by analyzing recent news about each port for disruption keywords (blockade, suspended, closed, military, diversion, etc.). It is news-based intelligence, not direct port authority feeds.

What commodity data is included? Current price, formatted price string, source, and fetch timestamp. Supported commodities: Crude Oil, Natural Gas, Gold, Copper, Wheat, Iron Ore, and LNG.

Can I integrate this with my dashboard or alerting system? Yes. Use the Apify API or webhook integrations to push results to Slack, email, or any HTTP endpoint. The structured JSON output works with any BI tool.

What happens if a news source is unavailable? The actor uses PuppeteerCrawler with retry logic. If a source is temporarily down, it continues with available sources and returns partial results rather than failing.


Built with Crawlee and Apify SDK by george.the.developer

About

Monitor global shipping disruptions, maritime chokepoints, port closures. Strait of Hormuz, Red Sea, Suez Canal, South China Sea. Real-time intelligence. API + AI agent ready.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors