Prediction receipts
Every ETA we publish is timestamped before the vessel arrives, then scored against the actual arrival. No retro-fitting, no cherry-picking — the losses stay on the board with the wins. Last 30 days, most recent first.
Receipts settled
100
closed voyages with a pre-arrival prediction
Head-to-head vs broadcast
91 %
closer than the crew's own ETA on 42/46 comparable voyages
Average lead time
1 h
between the last locked prediction and arrival
The ledger
error = ETA minus actual arrival (hours)| Port | MMSI | Prediction locked | Arrived | Our error | Broadcast error | Verdict |
|---|---|---|---|---|---|---|
| 🇯🇵 Yokohama / Tokyo Bay | 431000527 | 26 Aug, 23:23 UTC | 26 Aug, 23:37 UTC | 1.7 h | -4.6 h | ✓ beat |
| 🇩🇪 Bremerhaven | 355137000 | 26 Aug, 23:28 UTC | 26 Aug, 23:37 UTC | 0.2 h | -42.6 h | ✓ beat |
| 🇯🇵 Yokohama / Tokyo Bay | 431100969 | 26 Aug, 22:54 UTC | 26 Aug, 23:36 UTC | 1.3 h | sentinel | n/a |
| 🇫🇷 Dunkerque | 538004750 | 26 Aug, 21:40 UTC | 26 Aug, 23:36 UTC | -0.7 h | sentinel | n/a |
| 🇳🇱 Amsterdam | 205509590 | 26 Aug, 23:23 UTC | 26 Aug, 23:35 UTC | -0.2 h | -34.9 h | ✓ beat |
| 🇳🇱 Rotterdam | 244046289 | 26 Aug, 23:33 UTC | 26 Aug, 23:35 UTC | 9.9 h | -29.6 h | ✓ beat |
| 🇳🇱 Amsterdam | 232046269 | 26 Aug, 23:26 UTC | 26 Aug, 23:34 UTC | -0.0 h | sentinel | n/a |
| 🇳🇱 Rotterdam | 244733530 | 26 Aug, 23:26 UTC | 26 Aug, 23:32 UTC | 9.9 h | — | n/a |
| 🇳🇱 Rotterdam | 244660351 | 26 Aug, 23:23 UTC | 26 Aug, 23:31 UTC | -3.9 h | -23.5 h | ✓ beat |
| 🇯🇵 Yokohama / Tokyo Bay | 431001071 | 26 Aug, 23:23 UTC | 26 Aug, 23:31 UTC | -1.1 h | -7.5 h | ✓ beat |
| 🇧🇪 Antwerp | 205575890 | 26 Aug, 23:18 UTC | 26 Aug, 23:29 UTC | 0.8 h | sentinel | n/a |
| 🇧🇪 Antwerp | 211487500 | 26 Aug, 23:19 UTC | 26 Aug, 23:29 UTC | -0.6 h | 16.2 h | ✓ beat |
| 🇭🇰 Hong Kong | 538010433 | 26 Aug, 22:34 UTC | 26 Aug, 23:28 UTC | 0.3 h | sentinel | n/a |
| 🇧🇪 Antwerp | 205568390 | 26 Aug, 23:19 UTC | 26 Aug, 23:28 UTC | 0.4 h | — | n/a |
| 🇸🇬 Singapore | 566702000 | 26 Aug, 23:07 UTC | 26 Aug, 23:28 UTC | 2.2 h | 7.3 h | ✓ beat |
| 🇮🇹 Trieste | 636015908 | 26 Aug, 22:56 UTC | 26 Aug, 23:26 UTC | 2.5 h | -2.4 h | ✗ missed |
| 🇳🇱 Amsterdam | 246845000 | 26 Aug, 23:16 UTC | 26 Aug, 23:26 UTC | 0.4 h | sentinel | n/a |
| 🇧🇪 Antwerp | 244218293 | 26 Aug, 23:07 UTC | 26 Aug, 23:26 UTC | 0.6 h | — | n/a |
| 🇧🇪 Antwerp | 244850275 | 26 Aug, 23:21 UTC | 26 Aug, 23:26 UTC | -0.9 h | sentinel | n/a |
| 🇧🇪 Antwerp | 205546090 | 26 Aug, 23:17 UTC | 26 Aug, 23:26 UTC | 1.7 h | -0.0 h | ✗ missed |
| 🇭🇰 Hong Kong | 477997242 | 26 Aug, 23:21 UTC | 26 Aug, 23:25 UTC | 0.5 h | sentinel | n/a |
| 🇳🇱 Rotterdam | 244012683 | 26 Aug, 23:16 UTC | 26 Aug, 23:25 UTC | 2.1 h | -7.7 h | ✓ beat |
| 🇯🇵 Yokohama / Tokyo Bay | 431000986 | 26 Aug, 23:20 UTC | 26 Aug, 23:25 UTC | 1.2 h | sentinel | n/a |
| 🇧🇪 Antwerp | 244670494 | 26 Aug, 23:18 UTC | 26 Aug, 23:25 UTC | 1.6 h | 35.3 h | ✓ beat |
| 🇧🇪 Antwerp | 257289000 | 26 Aug, 23:15 UTC | 26 Aug, 23:21 UTC | 0.4 h | — | n/a |
| 🇸🇬 Singapore | 538090616 | 26 Aug, 23:07 UTC | 26 Aug, 23:21 UTC | 2.2 h | -42.4 h | ✓ beat |
| 🇳🇱 Rotterdam | 205564190 | 26 Aug, 23:16 UTC | 26 Aug, 23:21 UTC | 4.0 h | sentinel | n/a |
| 🇩🇪 Hamburg | 257755000 | 26 Aug, 23:13 UTC | 26 Aug, 23:21 UTC | 0.6 h | -8.4 h | ✓ beat |
| 🇯🇵 Yokohama / Tokyo Bay | 431009113 | 26 Aug, 23:00 UTC | 26 Aug, 23:20 UTC | -2.3 h | -7.3 h | ✓ beat |
| 🇳🇱 Rotterdam | 244074275 | 26 Aug, 23:05 UTC | 26 Aug, 23:20 UTC | 1.3 h | — | n/a |
| 🇯🇵 Yokohama / Tokyo Bay | 431006049 | 26 Aug, 23:10 UTC | 26 Aug, 23:20 UTC | 1.4 h | -91.3 h | ✓ beat |
| 🇧🇪 Antwerp | 244740453 | 26 Aug, 23:10 UTC | 26 Aug, 23:20 UTC | -0.2 h | -50.9 h | ✓ beat |
| 🇩🇪 Hamburg | 211162470 | 26 Aug, 23:18 UTC | 26 Aug, 23:19 UTC | 1.2 h | — | n/a |
| 🇭🇰 Hong Kong | 413773462 | 26 Aug, 22:37 UTC | 26 Aug, 23:19 UTC | -0.7 h | — | n/a |
| 🇳🇱 Rotterdam | 244850360 | 26 Aug, 23:11 UTC | 26 Aug, 23:19 UTC | -0.4 h | sentinel | n/a |
| 🇧🇪 Antwerp | 218006030 | 26 Aug, 23:13 UTC | 26 Aug, 23:16 UTC | 2.4 h | — | n/a |
| 🇳🇱 Rotterdam | 244650588 | 26 Aug, 23:06 UTC | 26 Aug, 23:16 UTC | 1.4 h | — | n/a |
| 🇳🇱 Rotterdam | 244070991 | 26 Aug, 23:04 UTC | 26 Aug, 23:16 UTC | -0.4 h | — | n/a |
| 🇳🇱 Rotterdam | 304030000 | 26 Aug, 23:12 UTC | 26 Aug, 23:14 UTC | 9.2 h | -38.2 h | ✓ beat |
| 🇳🇱 Amsterdam | 211121690 | 26 Aug, 23:03 UTC | 26 Aug, 23:14 UTC | 0.5 h | — | n/a |
| 🇧🇪 Antwerp | 205482190 | 26 Aug, 23:13 UTC | 26 Aug, 23:14 UTC | 0.7 h | 9.5 h | ✓ beat |
| 🇸🇬 Singapore | 564287000 | 25 Aug, 13:36 UTC | 26 Aug, 23:13 UTC | -32.6 h | -87.2 h | ✓ beat |
| 🇳🇱 Rotterdam | 244650739 | 26 Aug, 23:10 UTC | 26 Aug, 23:12 UTC | 9.4 h | sentinel | n/a |
| 🇧🇪 Antwerp | 244630035 | 26 Aug, 23:07 UTC | 26 Aug, 23:12 UTC | 2.5 h | sentinel | n/a |
| 🇬🇷 Piraeus | 240620300 | 26 Aug, 22:58 UTC | 26 Aug, 23:12 UTC | 0.6 h | sentinel | n/a |
| 🇧🇪 Antwerp | 636023094 | 26 Aug, 23:07 UTC | 26 Aug, 23:12 UTC | 0.7 h | -7.2 h | ✓ beat |
| 🇳🇱 Rotterdam | 244070846 | 26 Aug, 23:05 UTC | 26 Aug, 23:12 UTC | -0.5 h | sentinel | n/a |
| 🇧🇪 Antwerp | 255916109 | 26 Aug, 22:59 UTC | 26 Aug, 23:11 UTC | 0.8 h | -63.2 h | ✓ beat |
| 🇭🇰 Hong Kong | 440493000 | 26 Aug, 22:42 UTC | 26 Aug, 23:11 UTC | 0.4 h | -1.7 h | ✓ beat |
| 🇭🇰 Hong Kong | 305558000 | 26 Aug, 22:50 UTC | 26 Aug, 23:10 UTC | 0.2 h | — | n/a |
| 🇧🇪 Antwerp | 205570190 | 26 Aug, 23:08 UTC | 26 Aug, 23:10 UTC | 0.2 h | sentinel | n/a |
| 🇳🇱 Rotterdam | 244719540 | 26 Aug, 23:05 UTC | 26 Aug, 23:10 UTC | 6.8 h | sentinel | n/a |
| 🇳🇱 Rotterdam | 218085000 | 26 Aug, 23:02 UTC | 26 Aug, 23:09 UTC | 0.2 h | sentinel | n/a |
| 🇯🇵 Yokohama / Tokyo Bay | 431501791 | 26 Aug, 22:51 UTC | 26 Aug, 23:09 UTC | -2.3 h | -15.2 h | ✓ beat |
| 🇳🇱 Rotterdam | 244620933 | 26 Aug, 22:52 UTC | 26 Aug, 23:09 UTC | 0.3 h | -156.6 h | ✓ beat |
| 🇯🇵 Yokohama / Tokyo Bay | 431009317 | 26 Aug, 23:00 UTC | 26 Aug, 23:09 UTC | 2.0 h | — | n/a |
| 🇧🇪 Antwerp | 205222790 | 26 Aug, 23:01 UTC | 26 Aug, 23:08 UTC | 2.0 h | sentinel | n/a |
| 🇳🇱 Amsterdam | 244131369 | 26 Aug, 23:04 UTC | 26 Aug, 23:08 UTC | 0.2 h | -50.8 h | ✓ beat |
| 🇭🇰 Hong Kong | 477995064 | 26 Aug, 22:30 UTC | 26 Aug, 23:08 UTC | 0.2 h | — | n/a |
| 🇺🇸 Los Angeles | 538004202 | 26 Aug, 22:59 UTC | 26 Aug, 23:07 UTC | 0.7 h | -1.1 h | ✓ beat |
| 🇳🇱 Amsterdam | 244000835 | 26 Aug, 22:59 UTC | 26 Aug, 23:07 UTC | 0.4 h | sentinel | n/a |
| 🇳🇱 Rotterdam | 244716806 | 26 Aug, 22:52 UTC | 26 Aug, 23:06 UTC | 1.6 h | -11.3 h | ✓ beat |
| 🇳🇱 Rotterdam | 244046976 | 26 Aug, 22:55 UTC | 26 Aug, 23:06 UTC | 10.6 h | 1.3 h | ✗ missed |
| 🇳🇱 Amsterdam | 244700311 | 26 Aug, 22:59 UTC | 26 Aug, 23:06 UTC | 0.4 h | — | n/a |
| 🇳🇱 Amsterdam | 244740684 | 26 Aug, 22:59 UTC | 26 Aug, 23:05 UTC | 0.2 h | — | n/a |
| 🇫🇷 Le Havre | 226012010 | 26 Aug, 22:56 UTC | 26 Aug, 23:03 UTC | -0.2 h | — | n/a |
| 🇳🇱 Amsterdam | 244100621 | 26 Aug, 22:59 UTC | 26 Aug, 23:03 UTC | 0.2 h | — | n/a |
| 🇯🇵 Yokohama / Tokyo Bay | 431000892 | 26 Aug, 22:57 UTC | 26 Aug, 23:03 UTC | 1.6 h | 9.2 h | ✓ beat |
| 🇳🇱 Rotterdam | 244830333 | 26 Aug, 22:51 UTC | 26 Aug, 23:02 UTC | 0.3 h | -49.5 h | ✓ beat |
| 🇧🇪 Antwerp | 244218293 | 26 Aug, 22:52 UTC | 26 Aug, 23:02 UTC | 0.7 h | — | n/a |
| 🇧🇪 Antwerp | 244164000 | 26 Aug, 22:52 UTC | 26 Aug, 23:02 UTC | 2.5 h | 31.0 h | ✓ beat |
| 🇩🇪 Bremerhaven | 209731000 | 26 Aug, 22:51 UTC | 26 Aug, 23:02 UTC | 0.8 h | -17.0 h | ✓ beat |
| 🇳🇱 Amsterdam | 244690107 | 26 Aug, 22:49 UTC | 26 Aug, 23:01 UTC | 1.8 h | — | n/a |
| 🇳🇱 Rotterdam | 244620963 | 26 Aug, 22:51 UTC | 26 Aug, 23:01 UTC | -0.8 h | 21.6 h | ✓ beat |
| 🇧🇪 Antwerp | 246108000 | 26 Aug, 22:51 UTC | 26 Aug, 23:01 UTC | 1.0 h | 82.0 h | ✓ beat |
| 🇧🇪 Antwerp | 205543390 | 26 Aug, 22:51 UTC | 26 Aug, 23:00 UTC | 1.6 h | sentinel | n/a |
| 🇳🇱 Amsterdam | 244001028 | 26 Aug, 22:55 UTC | 26 Aug, 23:00 UTC | 0.3 h | sentinel | n/a |
| 🇳🇱 Rotterdam | 244670595 | 26 Aug, 20:44 UTC | 26 Aug, 22:58 UTC | -2.3 h | — | n/a |
| 🇸🇬 Singapore | 563038800 | 26 Aug, 14:28 UTC | 26 Aug, 22:58 UTC | -9.3 h | -26.5 h | ✓ beat |
| 🇺🇸 Houston | 477083800 | 26 Aug, 22:33 UTC | 26 Aug, 22:57 UTC | -5.3 h | sentinel | n/a |
| 🇯🇵 Yokohama / Tokyo Bay | 370439000 | 26 Aug, 22:16 UTC | 26 Aug, 22:56 UTC | -1.8 h | -1.4 h | ✗ missed |
| 🇯🇵 Yokohama / Tokyo Bay | 431006191 | 26 Aug, 22:47 UTC | 26 Aug, 22:56 UTC | 1.8 h | -4.9 h | ✓ beat |
| 🇧🇪 Antwerp | 205436290 | 26 Aug, 22:49 UTC | 26 Aug, 22:56 UTC | 4.2 h | 34.4 h | ✓ beat |
| 🇧🇪 Antwerp | 636016683 | 26 Aug, 22:50 UTC | 26 Aug, 22:56 UTC | 1.7 h | -30.4 h | ✓ beat |
| 🇧🇪 Antwerp | 205371390 | 26 Aug, 22:45 UTC | 26 Aug, 22:55 UTC | 0.7 h | -27.8 h | ✓ beat |
| 🇳🇱 Rotterdam | 235095972 | 26 Aug, 22:53 UTC | 26 Aug, 22:55 UTC | 8.3 h | -24.9 h | ✓ beat |
| 🇧🇪 Antwerp | 244670191 | 26 Aug, 22:51 UTC | 26 Aug, 22:55 UTC | 0.4 h | — | n/a |
| 🇳🇱 Rotterdam | 244710707 | 26 Aug, 22:47 UTC | 26 Aug, 22:53 UTC | 1.5 h | — | n/a |
| 🇯🇵 Yokohama / Tokyo Bay | 431003435 | 26 Aug, 22:32 UTC | 26 Aug, 22:53 UTC | 4.3 h | sentinel | n/a |
| 🇧🇪 Antwerp | 205591890 | 26 Aug, 22:44 UTC | 26 Aug, 22:52 UTC | 1.2 h | -3.0 h | ✓ beat |
| 🇳🇱 Rotterdam | 205212890 | 26 Aug, 22:46 UTC | 26 Aug, 22:52 UTC | 2.5 h | sentinel | n/a |
| 🇧🇪 Antwerp | 244730899 | 26 Aug, 22:49 UTC | 26 Aug, 22:51 UTC | 0.2 h | sentinel | n/a |
| 🇳🇱 Rotterdam | 257836000 | 26 Aug, 22:44 UTC | 26 Aug, 22:51 UTC | -0.9 h | -30.9 h | ✓ beat |
| 🇺🇸 Corpus Christi | 367457000 | 26 Aug, 22:42 UTC | 26 Aug, 22:50 UTC | -0.7 h | -55.8 h | ✓ beat |
| 🇧🇪 Antwerp | 205391690 | 26 Aug, 22:46 UTC | 26 Aug, 22:48 UTC | 1.5 h | — | n/a |
| 🇳🇱 Rotterdam | 244620196 | 26 Aug, 22:41 UTC | 26 Aug, 22:48 UTC | -1.1 h | -34.2 h | ✓ beat |
| 🇸🇬 Singapore | 574005160 | 26 Aug, 10:50 UTC | 26 Aug, 22:48 UTC | -10.3 h | — | n/a |
| 🇧🇪 Antwerp | 205320790 | 26 Aug, 22:42 UTC | 26 Aug, 22:48 UTC | -0.1 h | — | n/a |
| 🇧🇪 Antwerp | 244660532 | 26 Aug, 22:46 UTC | 26 Aug, 22:47 UTC | 1.6 h | — | n/a |
| 🇳🇱 Rotterdam | 211511740 | 26 Aug, 22:40 UTC | 26 Aug, 22:46 UTC | 0.4 h | — | n/a |
Why this page exists
- A receipt only enters the ledger if its prediction timestamp (`predicted_at`) precedes the actual arrival — enforced in the query, not by editorial choice.
- Broadcast ETAs more than 168 h from the actual arrival are marked as AIS sentinel values and excluded from the head-to-head, as documented on /methodology.
- Aggregated accuracy (RMSE/MAE per port and window) lives on /precision.