Methodology & SLA
This page documents the platform's data sources, models, persistence and service commitments. It's the document that B2B buyers' data teams (traders, insurers, freight forwarders) review before signing.
Data sources
- AIS positions — aisstream.io. Real-time stream via aisstream.io (community network). Excellent coverage in Europe / US, weaker in the Mediterranean / Persian Gulf.
- AIS static — ShipStaticData (Type, Name, Destination, Draught, broadcast ETA) — emitted by each vessel every ~6 minutes.
- Geo — bbox + zones (anchorages, berths, channels) defined manually per port. v1 catalogue: 51 ports including ARA, Hamburg, Algeciras, Fujairah, Singapore, Houston, Sabine Pass, Ras Laffan.
- Premium — No proprietary data integrated in v1 — the platform relies solely on public AIS. Premium sources (Spire, Orbcomm) are on the roadmap to fill low-coverage zones.
Cargo classification
Combination of AIS shipType signals and a textual heuristic (vessel name, declared destination) to assign a cargo class — tuned per port and fleet profile. Edge case: minimal AIS metadata falls back to a generic class.
Voyage detection
- Open: a voyage opens when a trackable-class vessel (tanker / container / bulk / general / RoRo) is observed approaching or anchoring with measurable motion, after a worker startup grace period.
- Arrival: transition to the moored state within a berth zone, derived from navigation status and motion.
- Departure: after arrival, transition back to underway combined with a distance threshold from port center.
- False positives: tugs, pilots and fishing vessels excluded from tracking — cargo class acts as a filter.
ETA model
- Naive estimate: distance / SOG where distance is the great circle between current position and port center. Refreshed continuously per active voyage.
- Seasonal correction: rolling median of error (predicted − actual) bucketed by arrival hour. Falls back to the global median when the bucket sample is too thin. Recomputed regularly.
- Comparison reference: ETA broadcast field extracted from ShipStaticData messages (entered manually by the vessel's crew — often imprecise and late).
- Metrics: RMSE and MAE in hours, computed over closed voyages with both predicted ETA AND broadcast ETA available. The broadcast baseline excludes ETAs more than 7 days from actual arrival: these are AIS sentinel values (default dates, never-updated ETAs, placeholders) — not genuine estimates — and would otherwise distort the RMSE. Model and broadcast are compared over exactly the same set of voyages. Updated on each closed voyage.
- Model roadmap: congestion integration, tides, weather, vessel-specific historical average speed.
Anomaly detection
v1: absolute dwell-at-anchor thresholds, tuned by cargo class.
- Tankers (crude/product/chemical/LNG/LPG) — longest acceptable dwell window.
- Containers — tightest dwell window (turnover-critical class).
- Other classes — intermediate dwell window.
Roadmap: thresholds derived from the historical (port, cargo) distribution; route-deviation detection; out-of-zone loitering detection ("dark fleet" signal).
Persistence & lineage
- Relational SQL storage with timestamped lineage. Every metric is traceable to its source positions.
- Every metric and voyage row carries the port id and a timestamp. Full reproducibility of any metric at a given instant.
- Position snapshots: per-vessel rate-limited writes. Enables backtesting and replayability of the model.
- Roadmap: daily Parquet export to S3 / GCS for clients' data scientists.
Service commitments (SLA v1)
| Platform availability | 99.5% / month (MVP) |
| Live positions latency | < 30s (P95) |
| KPIs / voyages latency | < 90s (P95) |
| Webhook delivery | 1 retry at 60s · 90-day delivery log |
| History retention | 7 days in-memory KPIs · unlimited in SQLite (90-day compaction) |
| Backfill | On contractual request (replay of persisted positions) |
Feed transparency & degradation
No AIS provider in the world has 100 % uptime. Our commitment is not to hide degradations but to detect and communicate them in real time.
- Automatic degradation banner at the top of the dashboard when a feed becomes unavailable — visible to visitors before they even sign up.
- Sources documented at portflow.uk/sources with their status (active / planned), tier (free / customer-key / paid) and licence — no black box.
- Server-side watchdog: automatic detection of zombie connections (open but receiving no messages), forced reconnect within 90 seconds.
- Multi-source roadmap in progress — gradual reduction of single-source dependency, including a second regional Asia feed.
Sanctions screening — multi-regime coverage
Vessels are reconciled against four official lists, refreshed daily and matched on IMO/MMSI:
- UK Sanctions List (UKSL) — FCDO, Open Government Licence v3.0. ~600 vessels (Russia, Iran). Authoritative source since the OFSI Consolidated List was retired on 28 January 2026.
- OFAC SDN — US Treasury, public domain (17 USC §105). ~1,500 vessels. Broadest global coverage, primarily Iran / Russia / Venezuela / Cuba / DPRK.
- UN Security Council Consolidated List — UN public information, free reuse. Coverage of DPRK, Libya, historical Iran.
- EU Consolidated FSF — European Commission, EC Reuse Decision 2011/833/EU. Russian post-2022 shadow fleet, Belarus, Syria. Activated on configuration (EU webgate token required).
Match on 7-digit IMO first (authoritative), MMSI as fallback. Red halo on the map and 🚫 badge in voyage tables.
Maritime chokepoint transit detection
12 zones tracked continuously: Suez, Hormuz, Bab el-Mandeb, Malacca, Singapore, Bosphorus-Dardanelles, Gibraltar, Skagerrak-Kattegat, Dover Strait, Panama, Cape of Good Hope, Magellan.
- Continuous point-in-bbox detection over a rolling AIS window.
- Dedup via a cooldown window to absorb GPS jitter without doubling transits.
- Sanctioned-state snapshot at entry — a vessel later delisted remains forensically marked for that transit.
- Coverage via terrestrial AIS — best reliability on coastal chokepoints (Hormuz, Bab el-Mandeb, Malacca, Singapore, Bosphorus, Dover, Gibraltar, Suez, Panama). Deeper-ocean zones (Cape of Good Hope, Magellan, central Mediterranean) rely on coastal-station passes. Continuous satellite coverage via BYO Spire / Orbcomm key (Pro+).
- Composable alert
vessel.sanctioned_chokepoint_transit: fired the moment a sanctioned vessel enters one of these zones.
CO₂ emissions estimation — in-house method
Bottom-up approach derived from the IMO Fourth GHG Study (2020), integrated over the AIS feed with no external dependency.
- Installed power and design service speed defaults from IMO Annex 1 tables, by cargo class (tanker / container / LNG / bulk / etc.).
- Periods at berth or at anchor are excluded from the count (stationary auxiliary load is not modelled in v1). Segments outside terrestrial AIS coverage are also excluded — see coverage limits.
- Indicative precision ±25% — sufficient for fleet ranking, voyage comparison, chartering screening. For regulatory reporting, cross with EU MRV (upcoming).
- Endpoint
GET /api/vessels/{mmsi}/emissions?days=30(per vessel) andGET /api/fleet/emissions?days=30(user watchlist aggregate).
Compliance
- AIS data: open, transmitted by vessels per the SOLAS convention. No crew personal data.
- GDPR: no personal data processing. MMSIs are vessel identifiers, not personal identifiers.
- Sanctions: the platform automatically reconciles vessels against four official lists (UKSL, OFAC, UN-SC, EU) — see dedicated section above. Clients can layer their own proprietary lists via webhooks or export.
- Full details on the Legal page.
Attributions & licences
- AIS terrestre : aisstream.io — flux communautaire AIS (terms of use libres pour usage technique dérivé).
- Météo : Open-Meteo — données sous licence CC-BY 4.0. Source citée à chaque affichage.
- Imagerie radar : « Contains modified Copernicus Sentinel data », ESA — données ouvertes Copernicus.
- Cartographie : tuiles © CARTO (CC BY 3.0) sur fond © OpenStreetMap contributors (ODbL 1.0).
- VIIRS Boat Detection : produit commercial du Payne Institute, Colorado School of Mines (licence requise) — connecteur prêt côté code, activation après contrat. Citation à inclure : Elvidge, C.D., et al., « VIIRS Boat Detection (VBD) ».
- Données AIS satellite premium(Spire / MarineTraffic / Orbcomm) : aucune utilisation par défaut. Activation contractuelle requise — termes du fournisseur s'appliquent.