Skip to main content
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

FieldTypeNullableDescription
imointegeryesIMO number (7-digit). Primary vessel identifier per IMO A.600(15).
mmsistringyesMaritime Mobile Service Identity (9-digit). Fallback identifier.
vessel_namestringyesVessel name (max 20 ASCII characters per AIS message 5).
call_signstringyesRadio call sign (max 7 characters).
flag_statestringyesISO 3166-1 alpha-3 country code.
vessel_typestringyesCodex 6-category enum: container, tanker_crude, tanker_product, bulker, fishing, other. Raw ITU code preserved in metadata.
dwtnumericyesDeadweight tonnage in metric tonnes.
length_oanumericyesLength overall in meters.
beamnumericyesBeam in meters.
draughtnumericyesDraught in meters.

Position and kinematics

FieldTypeNullableDescription
latfloatnoWGS84 latitude.
lngfloatnoWGS84 longitude.
speedfloatyesSpeed over ground in knots (0.1 kn resolution).
coursefloatyesCourse over ground in degrees (0.1° resolution).
headingfloatyesTrue heading in degrees (1° resolution).
nav_statusstringyesAIS navigation status (0–15). Codex emits both the numeric code and a human-readable label.
rotfloatyesRate of turn in degrees per minute (decoded from AIS-coded ±127 value).
timestamptimestamptznoUTC timestamp of the position fix.
h3_indexstringnoH3 resolution-8 cell derived from lat/lng.

Codex enrichments

FieldTypeNullableDescription
behavior_anomaly_flagbooleannotrue when kinematic or behavioral anomaly detected (AIS gap, speed anomaly, or route deviation).
port_event_idUUIDyesLinks to the corresponding event in Events Timeline when the position falls inside a port polygon.
beneficial_owner_urnstringyesEntity resolution link to the vessel’s beneficial owner.
sanctioned_ownerbooleanyestrue 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:
CategoryDescription
containerContainer ships
tanker_crudeCrude oil tankers
tanker_productProduct and chemical tankers
bulkerDry bulk carriers
fishingFishing vessels
otherAll other vessel types
CodeLabel
0Under way using engine
1At anchor
2Not under command
3Restricted maneuverability
4Constrained by draught
5Moored
7Engaged in fishing
8Under 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

KeyPresenceNotes
record_idalwaysAPRS URN
chunk_idalwaysDeterministic from record_id
imooftenPrimary vessel identity. Null for small craft without IMO numbers
mmsialwaysFallback vessel identity
h3_indexalwaysH3 resolution-8 spatial key
port_event_idsometimesLinks to Events Timeline for in-port positions
beneficial_owner_urnsometimesEntity 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.