---
title: "Maritime and vessel data"
summary: "Vessels are first-class entities in OpenSanctions, letting you screen ships by IMO number, flag, and owner."
url: "https://www.opensanctions.org/docs/coverage/maritime/"
date_updated: "2026-08-28"
---

Sanctions increasingly target ships directly, not only the people and companies behind them. Vessels are deflagged, denied port access, or named outright to disrupt sanctioned oil trades and the [shadow fleet](/articles/2025-05-27-maritime-download/). OpenSanctions models these ships as entities you can screen against, alongside the companies that own and operate them.

Vessels are modelled as [`Vessel`](/reference/#schema.Vessel). Each ship is its own entity, carrying its identifiers and names, and linking out to the `Company` entities that own or operate it. This mirrors how we handle [securities](/docs/coverage/securities/), where an instrument is a `Security` entity linked to its issuer.

## How vessels are identified

A vessel carries the identifiers a maritime screening workflow depends on:

- **IMO number** — the seven-digit International Maritime Organization (IMO) identifier is assigned to a hull for its lifetime and does not change when a ship is renamed, sold, or reflagged. It is the strongest signal for matching a vessel. The IMO also assigns numbers to companies under a [separate scheme](https://followthemoney.tech/explorer/types/identifier/#identifier-formats), so an organization can carry an IMO number too.
- **MMSI** — the Maritime Mobile Service Identity is issued by a vessel's flag state under a numbering scheme administered by the International Telecommunication Union (ITU), and used for maritime communication and navigation. Because it changes when a vessel reflags, it is a weaker signal than the IMO number.
- **Flag and registration** — `flag` records the flag state a ship is registered under — usually one, though a small share carry several where a vessel flag-hops or sources disagree — and `pastFlags` keeps earlier ones, so reflagging leaves a trail but makes the current flag a moving target. The separate `country` property is a broader association — for a shadow-fleet tanker, it's typically the controlling or sanctioned nation rather than the flag of convenience it sails under.

A vessel links out to the [`Company`](/reference/#schema.Company) entities behind it through relationship entities. Ownership and control are recorded as [`Ownership`](/reference/#schema.Ownership) relationships — edges from a company to the ship, each carrying a `role` (such as "owner" or "owned or controlled by") and optional `percentage` and dates. Operators, technical and commercial managers, classification societies, and other maritime service providers are attached as [`UnknownLink`](/reference/#schema.UnknownLink) relationships, each carrying a `role` ("ship operator", "ISM company", "technical manager") that names the connection. Either way, a screening hit on a vessel can be traced to the corporate network around it.

## Where vessel data comes from

Government sanctions lists name some vessels directly, giving IMO numbers alongside the designation. We expand these listings through [enrichment](/docs/enrichment/): shipping and transport records link vessels to their owning and operating companies, which helps map the network around a sanctioned ship. These sources include port-state-control records from the [Abuja MoU](/datasets/ext_abuja_mou_psc/) (West and Central Africa) and the [Tokyo MoU](/datasets/ext_tokyo_mou_psc/) (Asia-Pacific).

Vessels are also reached through [sanctions programs](/docs/programs/) rather than by name. Maritime measures include port access bans, ship-to-ship transfer bans, vessel deflagging, and prohibitions on maritime services such as crewing, classification, bunkering, and insurance.

## Screening a vessel through the API

**Use the `Vessel` schema when you screen a ship.** The [matching algorithm](/matcher/) activates identifier features per schema, and IMO and MMSI matching only apply to `Vessel`. A generic schema such as `LegalEntity` ignores these properties and produces weaker results.

When you build a `/match` query, supply the identifiers in priority order:

- `imoNumber` is the strongest signal — provide it whenever you have it.
- `mmsi` is the fallback identifier when no IMO number is available.
- `callSign`, `crsNumber`, and `registrationNumber` are ignored by the vessel-specific feature, but the generic identifier match picks them up — so they still contribute a score, and are worth sending when you have no IMO number.
- `flag` or `country` is not a positive signal on its own; it only feeds a mismatch penalty.

## The maritime CSV export

The [maritime CSV export](/datasets/maritime/#download) is a shipping-focused subset for screening vessels, operators, and owners. It contains every watchlist relevant to maritime operations, and features both the vessels themselves and the organizations linked to them. All vessels are included, whether or not an IMO number is available; organizations are included only when a source assigns them an IMO number.
