Alphaliner Top 100 Carrier Fleets avatar

Alphaliner Top 100 Carrier Fleets

Pricing

from $1.50 / 1,000 carrier scrapeds

Go to Apify Store
Alphaliner Top 100 Carrier Fleets

Alphaliner Top 100 Carrier Fleets

Scrape the Alphaliner Top 100: every container line's operated TEU, owned vs chartered split, orderbook, market share and per-vessel IMO numbers, plus global fleet totals.

Pricing

from $1.50 / 1,000 carrier scrapeds

Rating

0.0

(0)

Developer

Arman Hossain

Arman Hossain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Categories

Share

Alphaliner Top 100 Carrier Fleet Scraper

Alphaliner Carrier Fleet: The Top 100 container carriers by TEU, with owned, chartered and orderbook capacity split out

Pulls the Alphaliner Top 100: the 100 largest container lines ranked by operated TEU, with the owned vs chartered split, orderbook, global market share and the full list of vessel IMO numbers in each carrier's fleet. One run reads the whole table in a single request.

This Actor reads structured data directly, so there's no browser, no proxy and no login required to use it.

Agent skill: SKILL.md

https://api.apify.com/v2/key-value-stores/t7YoTxpZEJOWvw4Ug/records/alphaliner-carrier-fleet-scraper.md

What you get

One record per carrier, ranked largest fleet first.

FieldWhat it holds
rankPosition by operated TEU, 1 (largest) to 100
operatorFull legal/registered operator name
carrierNameBrand/trading name (e.g. "MSC" for "Mediterranean Shg Co")
carrierCodeShort internal carrier code
companyId, companyRefIdAlphaliner's internal company identifiers
websiteCarrier's schedule/website URL
flagIconUrlFlag icon for the carrier's country of registration
notesFree-text note (subsidiary brands folded into this operator, etc.), null when empty
totalTeu, totalShipsTotal operated capacity: owned + chartered
ownedTeu, ownedShipsOwned-fleet portion
charteredTeu, charteredShips, charteredSharePercentChartered-in portion and its share of the total fleet
orderbookTeu, orderbookShips, orderbookSharePercentVessels on order and orderbook size as a percentage of the current fleet
marketSharePercentShare of total global operated TEU
top30true for the 30 largest operators
vesselImosEvery vessel's IMO number in that carrier's operated fleet
vesselCountLength of vesselImos (populated even when the list itself is switched off)
globalFleetGlobal cellular fleet totals (active vessels/TEU/DWT, transatlantic/transpacific/Europe trade capacity), the same object on every row
scrapedAtRun timestamp

RUN_SUMMARY in the key-value store holds per-run counts, the filters you used, and any call that failed.

Use cases

  • Carrier master data. vesselImos is a ready-made IMO-to-operator mapping for roughly 7,600 cellular ships, useful as a join key against AIS, port-call or sanctions data.
  • Fleet strategy tracking. Compare ownedTeu vs charteredTeu over successive weekly runs to see which lines are growing owned tonnage vs leaning on the charter market.
  • Orderbook and supply-side analysis. orderbookTeu and orderbookSharePercent show which operators are adding the most future capacity relative to their current fleet.
  • Market concentration. marketSharePercent across all 100 rows gives a full HHI-style concentration picture of global container shipping.
  • Credit and equity research. A clean, structured weekly snapshot instead of retyping the public table by hand.

Quick start

The full table, nothing filtered out:

{}

Just the carriers you care about, without the (large) IMO lists:

{
"carriers": ["MSC", "Maersk", "CMA CGM", "COSCO"],
"includeVesselImos": false
}

Only operators large enough to matter for a concentration study:

{
"minTotalTeu": 500000,
"maxCarriers": 30
}

Input

FieldTypeDefaultNotes
carriersarray[]Keep only carriers whose operator or carrierName contains one of these terms (case-insensitive substring match). Empty means all 100.
minTotalTeuinteger0Drop carriers whose totalTeu is below this. 0 keeps everyone.
maxCarriersinteger100Stop after this many carriers, counted after the filters above. The table is pre-sorted by rank, so a lower value keeps the largest operators. Clamped to 1-100.
includeVesselImosbooleantruePopulate vesselImos. Switch off for a much smaller dataset; vesselCount is still populated either way.
includeGlobalTotalsbooleantrueAttach globalFleet to every row. Switch off to get globalFleet: null and skip the extra request.

Nothing is required. Running with no input returns all 100 carriers, fully populated.

Output example

{
"rank": 1,
"operator": "Mediterranean Shg Co",
"carrierName": "MSC",
"carrierCode": "MSC",
"companyId": "289",
"companyRefId": "157581",
"website": "https://www.msc.com/en/search-a-schedule",
"flagIconUrl": "https://static.axsmarine.com/images/flags/big/ch.png",
"notes": "MSC includes WEC Lines, Log-In Logistica",
"totalTeu": 7389280,
"totalShips": 1010,
"ownedTeu": 4737110,
"ownedShips": 759,
"charteredTeu": 2652170,
"charteredShips": 251,
"charteredSharePercent": 35.9,
"orderbookTeu": 2935318,
"orderbookShips": 166,
"orderbookSharePercent": 39.7,
"marketSharePercent": 21.5,
"top30": true,
"vesselImos": ["9453298", "9463205", "9142447"],
"vesselCount": 1010,
"globalFleet": {
"activeVessels": 7629,
"activeTeu": 34594537,
"activeDwt": 411462664,
"fullyCellularVessels": 6812,
"fullyCellularTeu": 34175555,
"transatlanticTeu": 153697,
"transpacificTeu": 601579,
"europeTeu": 553910
},
"scrapedAt": "2026-08-21T12:00:00.000Z"
}

(vesselImos is truncated above for readability; a real record carries the full fleet.)

API example

curl -X POST "https://api.apify.com/v2/acts/arman-bd~alphaliner-carrier-fleet-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"minTotalTeu": 500000,
"maxCarriers": 30
}'

JavaScript example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('arman-bd/alphaliner-carrier-fleet-scraper').call({
carriers: ['MSC', 'Maersk'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const c of items) console.log(`#${c.rank} ${c.carrierName}: ${c.totalTeu.toLocaleString()} TEU, ${c.vesselCount} ships`);

Notes

  • The table has exactly 100 rows and no pagination: one run reads all of them in a single request.
  • rank is derived from the table's own sort order (largest fleet first), not copied from the source's own rank field, which is only populated for the top 20 rows.
  • globalFleet reflects the total active cellular container fleet, not just the Top 100. It is the same on every row in a given run because it is a single global figure, not a per-carrier one.
  • notes sometimes lists subsidiary brands folded into the parent operator's Top 100 entry (for example, MSC's entry covers WEC Lines and Log-In Logistica too), which is useful context when reconciling against a brand-level list.
  • This table is refreshed by its source on a weekly cadence, so daily runs will usually return identical or near-identical figures. A weekly schedule matches how often the numbers actually move.
  • Attribute Alphaliner/AXSMarine as the source of this data; it is not licensed for resale as a bulk feed.

FAQ

Do I need an account or API key? No. No credentials are required to use this Actor.

How far back does this go? This is always the current snapshot. For history, run on a schedule (weekly matches the source's own update cadence) and key your own archive on scrapedAt.

Why is vesselCount sometimes different from totalShips? vesselCount counts the IMO numbers actually listed in the fleet string; totalShips is the source's own operated-ship count. They normally match; a handful of the smallest operators carry no vessel list at all, in which case vesselCount is 0.

Can I get owned and chartered fleets as separate vessel lists? No, vesselImos is the combined operated fleet. The owned/chartered split is only available as TEU and ship counts (ownedTeu/ownedShips vs charteredTeu/charteredShips), not per-vessel.

Does top30 change if I filter with carriers or minTotalTeu? No. top30 reflects the carrier's true rank in the full 100-row table, regardless of which rows your filters keep.

Can I plug it into something else? Yes. Apify API, the client libraries, webhooks, scheduled runs, dataset exports to JSON, CSV or Excel, or MCP. The output is structured JSON.