Screen chartered vessels for AIS gaps and sanctions red flags
Every six hours we check each ship on your watchlist for unexplained tracking gaps and off-port transfers, then log real findings and alert your team.
Every six hours, on a cron schedule, check the vessels on our chartering watchlist for behaviour that would expose us under sanctions rules, and write up anything genuinely suspicious.
The watchlist lives in a Notion database. Read it with the Notion Query a Data Source operation. Each row holds one vessel's IMO or MMSI, the counterparty we are dealing with, the charter reference, and a risk tier. Work through every row on each run, and use the risk tier to decide how hard to look: a top tier vessel deserves the benefit of less doubt than a routine one.
For each vessel, pull four things from MarineTraffic. Single Vessel Positions (PS07) gives the last reported position with its course, speed and timestamp. Single Vessel Events gives event based intelligence including ship to ship transfers and bunkering. Single Vessel Port Calls gives recent arrivals and departures. Vessel Particulars (VD02) gives flag and ownership.
Three MarineTraffic details matter for getting this right. Each MarineTraffic API service carries its own separate 40-character key, so this workflow needs the position, events, port call and particulars keys connected individually. SPEED is returned in knots multiplied by ten, so divide before reasoning about whether a ship is moving. All timestamps are UTC. An empty response almost always means no data matched the request rather than an auth failure, so never treat a blank result as evidence that a vessel is dark: go back to the last known position timestamp and reason from that.
Flag a vessel in three cases. First, when it has been at sea with no AIS report for longer than the gap threshold, which should be a configurable input defaulting to twelve hours. Second, when it shows a ship to ship transfer away from a port. Third, when it called at a port in a jurisdiction on our high risk list, which should also be a configurable input.
Use judgement to suppress the obvious false positives, because false positive suppression is the whole game here: an estimated five to ten percent of global traffic is dark at any moment, and a channel that cries wolf gets muted within a week. A ship sitting alongside in berth is not dark, so check the speed and the port call record before raising anything about a stationary vessel with a recent arrival and no departure. A vessel in a known poor coverage area is not dark either. A gap only slightly over the threshold that ends with the vessel resuming on the same course and speed is a routine reception dropout, not a red flag. When in doubt, stay quiet and let the next run confirm it.
For every real finding, create a page in the Notion incident register with the Create a Page operation. Include the vessel name and IMO, the counterparty and charter reference from the watchlist row, how long the vessel was dark, the last known position with course and speed, the supporting events such as transfers, bunkering or port calls, and the flag and ownership if either is relevant to the concern. Then write a short assessment in plain language: why this matters commercially and legally, and the specific questions to put to the owner.
Before creating anything, query the incident register with Query a Data Source and check whether this vessel already has an open finding for the same gap or the same event. A vessel that is already logged and still dark must not be written up again and must not be re-alerted every six hours. Only raise it again when something has materially changed, such as the gap growing far longer or a new transfer appearing since the last entry, and say in the page what changed.
Finish by posting exactly one Microsoft Teams channel message to the chartering and compliance channel with the Create Channel Message operation, covering only the new findings from this run. Lead each finding with the vessel name, IMO, counterparty and charter reference, give the concern in a line or two, and link to the register page for the detail. If there are no new findings, post nothing at all.
What does this prompt do?
- Reads your chartering watchlist from Notion and checks every vessel on it four times a day, pulling last known position, recent events, port calls, flag and ownership.
- Looks for the three things compliance teams get asked about: a ship that has stopped reporting its position at sea, a ship to ship transfer made away from any port, and a call at a port in a country you have marked high risk.
- Uses judgement to drop the obvious false alarms, such as a vessel sitting quietly alongside in berth, a short dropout in a known poor coverage area, or a gap barely over the threshold.
- Writes each real finding into your Notion incident register with the vessel, counterparty, charter reference and a short assessment of what to ask the owner, then posts one Microsoft Teams message covering only what is new this run.
What do I need to use this?
- A MarineTraffic subscription. Their data products are sold separately and each one comes with its own key, so you will need the ones covering vessel positions, vessel events, port calls and vessel particulars.
- A Notion workspace with two databases: a watchlist holding each vessel's IMO or MMSI, the counterparty, the charter reference and a risk tier, and an incident register where findings get filed.
- A Microsoft Teams account with access to the chartering and compliance channel you want alerts posted in.
- Your own list of the jurisdictions and ports you treat as high risk.
How can I customize it?
- Change the gap threshold. Twelve hours is the default; tighten it for tankers in sensitive trades, or loosen it on routes where coverage is genuinely patchy.
- Edit the high risk jurisdiction list, and add the coverage blackspots you want the check to forgive so your channel stays worth reading.
- Change how often it runs or point the alert at a different Teams channel, and adjust which fields get written into the register.
FAQs
Does a tracking gap always mean the ship is hiding something?
Will the same vessel be reported every six hours while it stays dark?
Do I need every MarineTraffic data product to run this?
Can I send the alerts to Slack instead of Microsoft Teams?
How many vessels can it watch?
Why does this matter commercially?
Related templates
Open one place to see every candidate site mapped with 5, 10 and 15 minute drive time areas, competitor counts, and a site brief you can defend.
See what your competitors are running on Google, Meta and LinkedIn in one screen, save the best ads to a shared Notion swipe file, and get a teardown on demand.
See every voyage on your books ranked by money at risk, open the full statement of facts, and let an agent draft the demurrage claim for review.
See waiting times, berth turnaround and inbound traffic for every port on your watchlist in one place, and get a written read on when you will actually berth.
Screen a ship before you fix it: particulars, twelve months of port calls and AIS gaps in one shared record, with a memo filed to Google Docs.
Pick a brand, competitor, category or hashtag and get persona cards from real social conversation, saved each quarter so you can track how your audience shifts.
Find out your ship went dark before your bank does.
Set up a six-hourly check across every vessel you have on charter that files the real findings and stays quiet about the rest.