The AIS Maritime dataset contains ~1.4M normalized vessel positions sourced from terrestrial and satellite AIS receivers, enriched with vessel identity from IMO registries, behavior anomaly detection, and linkage to Codex port events. Records are ingested continuously and published as monthly immutable snapshots.
Every record inherits the full APRS envelope (record_id, chunk_id, bitemporal fields, confidence_score, provenance) and carries the join keys documented below.
Dataset-specific fields
Vessel identity
| Field | Type | Nullable | Description |
|---|
imo | integer | yes | IMO number (7-digit). Primary vessel identifier per IMO A.600(15). |
mmsi | string | yes | Maritime Mobile Service Identity (9-digit). Fallback identifier. |
vessel_name | string | yes | Vessel name (max 20 ASCII characters per AIS message 5). |
call_sign | string | yes | Radio call sign (max 7 characters). |
flag_state | string | yes | ISO 3166-1 alpha-3 country code. |
vessel_type | string | yes | Codex 6-category enum: container, tanker_crude, tanker_product, bulker, fishing, other. Raw ITU code preserved in metadata. |
dwt | numeric | yes | Deadweight tonnage in metric tonnes. |
length_oa | numeric | yes | Length overall in meters. |
beam | numeric | yes | Beam in meters. |
draught | numeric | yes | Draught in meters. |
Position and kinematics
| Field | Type | Nullable | Description |
|---|
lat | float | no | WGS84 latitude. |
lng | float | no | WGS84 longitude. |
speed | float | yes | Speed over ground in knots (0.1 kn resolution). |
course | float | yes | Course over ground in degrees (0.1° resolution). |
heading | float | yes | True heading in degrees (1° resolution). |
nav_status | string | yes | AIS navigation status (0–15). Codex emits both the numeric code and a human-readable label. |
rot | float | yes | Rate of turn in degrees per minute (decoded from AIS-coded ±127 value). |
timestamp | timestamptz | no | UTC timestamp of the position fix. |
h3_index | string | no | H3 resolution-8 cell derived from lat/lng. |
Codex enrichments
| Field | Type | Nullable | Description |
|---|
behavior_anomaly_flag | boolean | no | true when kinematic or behavioral anomaly detected (AIS gap, speed anomaly, or route deviation). |
port_event_id | UUID | yes | Links to the corresponding event in Events Timeline when the position falls inside a port polygon. |
beneficial_owner_urn | string | yes | Entity resolution link to the vessel’s beneficial owner. |
sanctioned_owner | boolean | yes | true when the beneficial owner appears on a sanctions list. |
Vessel types
The raw ITU vessel type code (0–99) is preserved in metadata.itu_vessel_type_code. Codex normalizes vessels into six categories for consistent filtering:
| Category | Description |
|---|
container | Container ships |
tanker_crude | Crude oil tankers |
tanker_product | Product and chemical tankers |
bulker | Dry bulk carriers |
fishing | Fishing vessels |
other | All other vessel types |
Navigation status codes
| Code | Label |
|---|
| 0 | Under way using engine |
| 1 | At anchor |
| 2 | Not under command |
| 3 | Restricted maneuverability |
| 4 | Constrained by draught |
| 5 | Moored |
| 7 | Engaged in fishing |
| 8 | Under way sailing |
AIS positions are compressed to one per minute per vessel. Both raw and compressed views are available depending on your tier.
Join keys
| Key | Presence | Notes |
|---|
record_id | always | APRS URN |
chunk_id | always | Deterministic from record_id |
imo | often | Primary vessel identity. Null for small craft without IMO numbers |
mmsi | always | Fallback vessel identity |
h3_index | always | H3 resolution-8 spatial key |
port_event_id | sometimes | Links to Events Timeline for in-port positions |
beneficial_owner_urn | sometimes | Entity resolution link to beneficial owner |
Example query
Find vessels flagged as anomalous near a specific port in the last 30 days:
SELECT
record_id,
vessel_name,
imo,
mmsi,
timestamp,
speed,
nav_status,
behavior_anomaly_flag,
sanctioned_owner
FROM read_parquet('ais-maritime-2026-04.parquet')
WHERE h3_index = '88283082b9fffff'
AND behavior_anomaly_flag = true
AND timestamp >= now() - interval '30 days'
ORDER BY timestamp DESC;
Known limitations
imo is null for small craft, fishing vessels, and some flag-of-convenience registrations. Use mmsi as a fallback.
vessel_type normalization collapses 99 ITU codes into 6 categories — check metadata.itu_vessel_type_code when you need the original classification.
beneficial_owner_urn is populated by the entity resolution pipeline and may be null for recently ingested positions.
- Position compression (1-per-minute) means sub-minute maneuvers are not visible in the default view.