Tell customers when their shipment arrives, before they ask
Automatically email your customers when their cargo comes within three days of port, quoting the booking reference and the day it is expected to berth.
Every six hours on a cron trigger, send proactive arrival notices to the customers whose cargo is on the water, so my team stops fielding "where is my shipment" emails.
Start by reading my shipment tab in Google Sheets with Get Values. Each row is one booking and carries the vessel IMO number, the discharge port, the customer name, the customer email address, the booking reference, a notified flag, and the arrival date that was last communicated to that customer. Treat every row whose booking is still open as in scope. Skip rows that have been closed out, already delivered, or are missing an IMO number or a discharge port.
For each open shipment, call MarineTraffic Vessel ETA to Port using that row's vessel IMO and its discharge port to get the current predicted arrival. MarineTraffic returns times in UTC, so convert to a normal calendar day before you use it in anything customer facing.
Then decide, per booking, which of three buckets it falls into. If the vessel is now inside 72 hours of arrival and the row has not been notified yet, it belongs in a first arrival notice. If the row was already notified but the arrival has since moved by more than 12 hours in either direction compared with the date last communicated, it belongs in a revised ETA update instead. Everything else is left alone and nothing is sent.
Group by customer before sending anything. If one customer has three bookings that qualify in the same run, they receive a single email covering all three, never three separate notices. Send each email with Gmail Send a Message.
Write the emails in short, plain English, the way a person on the shipping desk would write them. Quote the booking reference and the expected berthing day in friendly form, for example "Thursday 14 August". Do not paste raw tracking fields into the message: no AIS jargon, no MMSI numbers, no IMO numbers, no speeds in knots, no coordinates, no raw UTC timestamps and no field names lifted from the data. A first notice should simply say the shipment is due, name the port, give the day, and offer a contact for questions. A revised update should say plainly that the arrival has shifted, give the new expected day, and avoid sounding alarmed when the change is routine.
After an email sends successfully, stamp the sheet back with Update Values: set the notified flag on every row that was included in that email, and write the arrival date you just communicated into the row. This write is the idempotency guard and it is load bearing, because the workflow reruns against the same sheet every six hours and without the stamp it would re-email the same customer forever. Only stamp rows that were actually included in an email that sent successfully. If a send fails, leave that row untouched so the next run retries it rather than silently skipping the customer. For revised updates, overwrite the stored arrival date with the new figure so the next 12 hour comparison is made against what the customer was most recently told.
What does this prompt do?
- Checks every open booking in your shipment spreadsheet four times a day and looks up where each vessel actually is.
- Emails the customer once when their cargo comes within 72 hours of arriving, quoting their booking reference and the day it is expected to berth.
- Sends a follow up only when the arrival day genuinely moves, so customers hear from you when it matters and not otherwise.
- Marks each booking as notified in the spreadsheet, so nobody is ever emailed twice about the same shipment.
- Rolls several bookings for the same customer into a single email instead of three separate notices.
What do I need to use this?
- A Google Sheets shipment tracker with one row per booking: vessel IMO number, discharge port, customer name, customer email, booking reference, and a column to record that they were notified.
- A MarineTraffic account with the voyage and arrival service. MarineTraffic sells each of its data services separately and issues a separate key for each one, so make sure the key you connect is the one for vessel arrival times rather than another service.
- A Gmail account to send the notices from. A shared mailbox such as shipping@yourcompany.com works well so replies reach whoever is on duty.
How can I customize it?
- Change the 72 hour warning window. Some customers want a week of notice to arrange haulage, others only want to hear the day before.
- Change how far an arrival has to move before you send a revised update. Twelve hours is the default, but on short sea routes you may want less.
- Run it more or less often than every six hours.
- Send from a shared team mailbox rather than an individual address so replies land with the whole desk.
FAQs
Will my customers get the same email twice?
What happens if the ship is delayed?
Do I need a paid MarineTraffic subscription?
Will the emails sound robotic?
What if one customer has several shipments arriving at once?
Can I use a spreadsheet I already have?
Related templates
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.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
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.
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.
Every Thursday, rank your team's upcoming flights by how likely they are to run late, and email the fixes while changes are still cheap.
Each month, spot the saved cards about to expire, email the customers still on recurring billing, and rank the revenue at risk in Slack.
Stop answering "where is my shipment?"
Let your customers know their cargo is arriving before they ever have to ask.