This is an extract of the data from Shadow Fleet section of the Ukrainian Government's War Sanctions website, served up as a Portolan / STAC catalog.
# GUR Shadow Fleet — Ports
One row per port or terminal that at least one shadow-fleet vessel is recorded as having called at (~1,240 locations), geocoded to a point from GUR's embedded map. Each port carries its country, a flag for whether it lies in Russia (`is_russian`), and the count and IMO list of the vessels that visited. Also published as a PMTiles tileset for web mapping.
Format: GeoParquet + PMTiles · Rows: 1,244
Data: https://data.source.coop/cholmes/gur-shadow-fleet/ports/ports.parquet
Collection: https://data.source.coop/cholmes/gur-shadow-fleet/ports/collection.json
Browser: https://browser.portolan-sdi.org/#/external/data.source.coop/cholmes/gur-shadow-fleet/ports/collection.json
Tiles: https://data.source.coop/cholmes/gur-shadow-fleet/ports/ports.pmtiles
## Columns
- `port_id` (bigint) — Unique port identifier
- `name` (varchar) — Port name
- `country` (varchar) — Country where the port / company is located
- `is_russian` (boolean) — Whether the port is in Russia
- `lat` (double) — Latitude (WGS84)
- `lng` (double) — Longitude (WGS84)
- `vessel_count` (bigint) — Number of distinct vessels linked to this row
- `vessel_imos` (varchar) — IMO numbers of the linked vessels (JSON array)
- `geometry` (geometry) — Point/MultiPoint geometry (WGS84)
## Query (DuckDB)
```sql
INSTALL spatial; LOAD spatial;
-- Busiest ports outside Russia
SELECT name, country, vessel_count
FROM read_parquet('https://data.source.coop/cholmes/gur-shadow-fleet/ports/ports.parquet')
WHERE NOT is_russian
ORDER BY vessel_count DESC
LIMIT 10;
```
Rights: © GUR, War & Sanctions portal — no open license asserted (see ../RIGHTS.md).