Alert your team when vessel ETAs slip more than six hours

Every weekday morning we compare each ship's predicted arrival against the last run and post a Slack alert only when something has actually moved.

Agentic Task
MarineTrafficGoogle SheetsSlackOperationsNotifications & AlertsResearch & Monitoring
PromptCreate

Every weekday at 07:00 on a cron trigger, watch my tracked fleet for ETA slippage and post an exception-only digest to Slack. MarineTraffic does not send outgoing webhooks and is not a polling source on this platform, so a scheduled run is the right and only trigger here.

Start by reading my watchlist tab in Google Sheets with Get Values. That tab is the control surface for this workflow and holds, per vessel: the vessel identifier (shipid, MMSI or IMO), the vessel name, an optional named discharge port, an optional laycan or contractual arrival window, and the ETA that was recorded the last time this ran. Also pull the current roster from MarineTraffic with Vessels in Fleet, and reconcile the two so that ships added to the fleet but not yet in the sheet are still checked and get a row created for them.

To get today's predicted arrivals, call Fleet Voyage Forecast. Note that this operation returns voyage information and a forecast for every vessel in the fleet in a single call, so call it once for the fleet rather than once per ship. That keeps the run well inside MarineTraffic's rate limit and avoids burning credits unnecessarily. For any vessel where I have named a specific discharge port in the sheet, additionally call Vessel ETA to Port for that vessel and port, and prefer that port-specific figure over the general forecast, because the forecast follows the destination the ship is currently broadcasting which is not always where I actually need it. If a vessel looks like it has drifted, you may optionally top up with Single Vessel Positions to report its present speed and position for context. Be aware that MarineTraffic returns SPEED in knots multiplied by ten, so divide by ten before showing it, and that all timestamps come back in UTC, so label the times in the message as UTC.

Now compare. For each vessel, work out the difference in hours between the ETA stored from the previous run and the ETA you just retrieved. A vessel counts as an exception when that difference is greater than six hours in either direction. Six hours is the default threshold and should be easy to change in one obvious place. Treat a later arrival as a delay and an earlier arrival as a pull-forward, and make clear which is which in the message, since arriving early can be just as disruptive to a berth booking as arriving late.

Write the fresh snapshot back to the same Google Sheets tab with Update Values on every single run, without exception. Do this even when nothing has drifted and no Slack message is going out, and even when the run is otherwise quiet. This spreadsheet is the only memory the workflow has between runs, so if a run ever finishes without writing the new ETAs, the next run has no baseline and the comparison silently breaks. Record the ETA and the timestamp of the run against each vessel. On the very first run there will be no stored ETAs at all: in that case just write the current snapshot, post nothing, and begin comparing from the following run rather than reporting every vessel as newly changed.

If at least one vessel has moved by more than the threshold, post exactly one message to Slack with Send a Message. List only the vessels that breached the threshold, one line each, showing the vessel name, the destination port, the previous ETA, the new ETA and the delta in hours. Sort the list worst delay first so the most damaging slippage is at the top and readable without scrolling. Do not include vessels that held steady, do not include a roster of everything you checked, and do not pad the message with a summary of how many ships were fine.

Call out separately, in its own clearly marked section above the main list, any vessel whose new ETA has now slipped past its laycan or contractual arrival window as recorded in the sheet. That is the one that costs money, so it should not be buried among ordinary delays. Say plainly which window has been missed and by how long.

On days when no vessel has moved by more than the threshold, stay completely silent. Do not post an all clear, a nothing to report note, or an empty digest. The value of this workflow is that a message arriving in the channel always means something needs attention, and a daily heartbeat would train the team to ignore it within a fortnight. Still complete the Google Sheets write on those silent days.

What does this prompt do?

  • Checks your tracked fleet every weekday morning and pulls the latest predicted arrival time for every ship, plus a port specific estimate for any vessel where you have named the discharge port.
  • Compares today's arrival times against the ones saved from the previous run, which live in your own spreadsheet, then saves the fresh set back so tomorrow always has something to measure against.
  • Posts one Slack message listing only the vessels whose arrival moved by more than six hours, showing the old time, the new time and how many hours it shifted, worst delay first.
  • Calls out separately any ship that has now slipped past its laycan or agreed arrival window, and stays completely silent on days when nothing has drifted.

What do I need to use this?

  • A MarineTraffic subscription that covers fleet voyage forecasts, plus the API key for that service. MarineTraffic sells each service separately and issues a separate key for each one, so if you also want live speed and position readings you will need the key for that service too.
  • A fleet already set up in your MarineTraffic account containing the ships you want to watch.
  • A Google Sheets spreadsheet with a tab for your watchlist. The same tab doubles as the memory of the previous run's arrival times, so the workflow can tell what changed.
  • A Slack workspace and the channel or direct message where the alerts should land.

How can I customize it?

  • Change the six hour threshold. Teams running short sea or coastal routes often drop it to three hours, while deep sea operators sometimes raise it to twelve so only meaningful swings surface.
  • Change the timing or the audience. Move it off 7am, run it seven days a week instead of weekdays, or send it to a private channel or a direct message rather than a shared one.
  • Add a discharge port and a laycan or contractual arrival window next to each vessel in your sheet to unlock the separate breach call-out, which is usually the line that actually costs money.

FAQs

Will this message me every single day?
No, and that is the whole point. On days when no vessel has moved by more than your threshold the workflow does its checks quietly and posts nothing. A digest that arrives every morning regardless gets muted within a fortnight, so this one only speaks up when something has genuinely changed.
What happens on the very first run?
There is no previous set of arrival times to compare against yet, so the first run simply records the current ones in your spreadsheet and stays quiet. Real comparisons begin on the second run, and from then on every run leaves behind a fresh baseline.
Do I need a paid MarineTraffic plan?
Yes. Voyage forecast and arrival prediction data is a paid MarineTraffic service. Worth knowing before you start: MarineTraffic sells each of its services separately and gives each one its own key, so the key that works for fleet forecasts will not work for live positions unless you have bought that service too.
Can I track ships heading to different ports?
Yes. You can name a specific discharge port next to any vessel in your spreadsheet, and the workflow will ask for the arrival estimate against that exact port rather than relying on whatever destination the ship is currently broadcasting. Vessels without a named port fall back to the general voyage forecast.
What if a vessel is already running late against its contract?
Those get their own section at the top of the message. If you record a laycan or agreed arrival window against a vessel, any ship whose new arrival time now falls outside that window is flagged separately from the ordinary delay list, because that is the one with money attached to it.

Related templates

Auto-fix your calendar when a flight slips, and flag what's at risk

When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.

Google Calendar
AviationStack
Slack
Agentic Task
Trace phishing emails to the sending IP and report abuse

Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.

AbuseIPDB
Gmail
Slack
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task
Turn each week's football fixtures into a venue staffing plan

Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.

API-Sports
Google Calendar
Slack
Agentic Task

Stop hearing about delays from your customer first.

Let the arrival times that actually moved find you every morning, and skip the mornings when nothing did.