How We Turn AIS Signals into Maritime Intelligence
What the processing pipeline looks like at a conceptual level — and where we're honest about the limits.
There is a common misconception about AIS-based maritime intelligence: that the hard part is getting the data. It isn't. AIS transponder data is public, mandated by international law for all commercial vessels above 300 gross tons, and available from multiple aggregators in near-real-time. The hard part is making it say something meaningful.
This post describes how we process it. We're not going to give you every implementation detail — the methodology is the work — but we want to be clear about what the analysis is based on, where the uncertainty lives, and why you should treat our numbers as estimates rather than facts.
Layer 1: Position Processing
A vessel position record contains: a timestamp, latitude, longitude, speed over ground, course over ground, a navigational status code, and a reported draft. Alone, that record tells you almost nothing. Assembled across thousands of records per vessel per voyage, it tells you quite a lot.
The first processing layer constructs continuous voyage traces — linking individual position records into coherent port-to-port journeys. This involves filtering out noise (GPS drift, duplicate broadcasts, implausible speed transitions), anchoring voyage segments to port zones, and resolving vessel identity across the MMSI number, which changes more often than most people expect.
Layer 2: Cargo Estimation
When a vessel takes on cargo, it sits lower in the water. When it unloads, it rises. The change in draft between port entry and port departure, applied to a vessel's known displacement characteristics, yields a cargo weight estimate.
This is physics, not inference — Archimedes' principle applied to the waterline. What we add is the engineering work: calibrating displacement curves for different vessel classes, correcting for trim (vessels are rarely perfectly level), accounting for ballast water, and adjusting for water density differences between fresh-water ports and open-ocean conditions. Each of these corrections reduces error, but none eliminates it. Our estimates carry meaningful uncertainty bands, which we include in analysis posts when they're relevant.
The output is an estimated tonnage per departure, per commodity type (derived from vessel type, routing, and berth assignment), aggregated by port and week. We compare these estimates against government statistics where they exist — USDA Export Inspections is our primary calibration source for grain — and publish the comparison. When our estimates diverge from official statistics, we say so and explain why.
Layer 3: Anomaly Detection
Normal vessels behave predictably. Their speed profiles, acceleration patterns, and turning behavior conform to the physics of their hull type and load condition. When a vessel's behavior departs from what is physically consistent with its declared state — its reported speed, its reported draft, its stated destination — that departure is detectable.
We maintain behavioral priors for vessel classes under different operating conditions. A laden bulk carrier in port approach behaves differently from the same vessel in open ocean transit. A vessel at anchor behaves differently from one in a slow transit. We score deviations from these expected patterns and flag events that exceed thresholds calibrated against known anomalous behaviors.
We also track AIS gaps — periods where a vessel's transponder stops broadcasting, or where broadcasts become implausible. Not all gaps are suspicious. Equipment failures, radio shadows, and deliberate power-cycling for maintenance create benign gaps. The scoring system accounts for gap duration, vessel history, geographic context, and what the vessel does immediately before and after the gap.
Layer 4: Identity and Temporal Analysis
Vessels change their names, flags, and registration more often than cargo ships have any legitimate reason to. When those changes cluster in time or co-occur (name and MMSI changing simultaneously, for example), they are worth noting. We build a temporal record of identity changes for every vessel in our coverage universe and score the velocity and pattern of those changes.
This layer also tracks destination reliability: whether the port a vessel declares as its destination at departure matches where it actually goes. Persistent declaration mismatches, particularly combined with other signals, are informative about vessel intent.
What We Don't Do
We do not maintain a comprehensive real-time database of every vessel's current position. We monitor specific port regions and shipping corridors. Our coverage is intentionally focused rather than global.
We do not make legal determinations about sanctions violations. We flag patterns that warrant investigation, not conclusions that support prosecution.
We do not have ground truth for most of what we estimate. Our cargo estimates are estimates. Our anomaly scores are scores. The appropriate reader response to any specific finding in our analysis is "this warrants further investigation," not "this is confirmed."
Where the Analysis Goes
All of the quantitative findings we publish on this blog — cargo estimates, dark event counts, risk scores, destination mismatch rates — derive from the processing pipeline described above. Each analysis post names the underlying data source, describes the metric, and states the uncertainty. If a number is implausible or a finding doesn't survive scrutiny, we want to know.
Published April 2026. Questions or corrections: contact@axiomancer.io