Laytime and demurrage claim workspace for chartering ops

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.

App
MarineTrafficGoogle SheetsGmailGeneral Input DatabaseOperationsFinanceAI ReportsEmail Automation
PromptCreate

Build me an app my chartering operations team opens to work laytime and demurrage claims, instead of running them out of a spreadsheet. It is a working surface for the claims desk: the exposure ranking, the statement of facts, the claim status, and an agent that drafts the actual claim.

The main screen is a voyage board showing every voyage we have on the books. The fixture list comes from a Google Sheets tab read with Get Values, one row per voyage carrying the vessel IMO, vessel name, load port, discharge port, laytime allowed in hours, demurrage rate per day, the charterparty terms or notes for that fixture, the counterparty name and the counterparty email. Treat the sheet as read only. The app never writes back to it.

Each fixture row is joined to what actually happened using MarineTraffic, addressed by the IMO on the row. Use Single Vessel Port Calls for arrival and departure timestamps and Single Vessel Berth Calls for the docking and undocking timestamps. Every board row should show the vessel, the load and discharge ports, arrival, berthed, sailed, actual time in port, the laytime allowed from the fixture, hours over or under that allowance, and the money at risk, calculated as hours over divided by 24 and multiplied by the demurrage rate per day. Sort the board by money at risk, biggest exposure first, and make rows that have run over their laytime visually obvious. Each row also carries its current claim status.

Clicking a voyage opens a detail page built around a statement of facts timeline: every arrival, departure, docking and undocking event for that vessel in that port window, in order, each one labelled with what it is and where it came from. The header carries the ship's details pulled from MarineTraffic Vessel Particulars, so name, IMO, MMSI, vessel type, flag, deadweight, year built and dimensions. Below the timeline, show the fixture terms from the sheet and the laytime calculation broken out step by step, so someone can see how the app got from the timestamps to the hours over and to the money figure.

All timestamps are UTC and must be labelled as UTC everywhere they appear, on the board and in the timeline. The app also has to make clear which times came from AIS-derived vessel tracking, meaning the MarineTraffic port call and berth call records, and which came from an agent's report or a human entry. Tag every event with its source, show a short legend explaining the difference, and never let the two sit unmarked in the same column. That provenance is what the claim rests on, so it is a first-class part of the interface rather than a footnote.

Claim status lives in the app's own database, one record per voyage keyed to the fixture row and the vessel IMO. The status is one of draft, sent, disputed or settled, and it is editable inline straight from the board and from the voyage detail page, with the change saved immediately and the time of the change recorded. The database also holds the claim narratives the agent writes, so the sheet stays a plain fixture list and everything the desk produces stays in the app.

Put a "Build claim pack" button on each voyage that kicks off a background agent. The agent re-pulls the port call and berth call timestamps for that vessel over the fixture window with Single Vessel Port Calls and Single Vessel Berth Calls, lays them against the charterparty terms on that fixture row, works out how the laytime allowance was consumed and what demurrage is owed, and writes a claim narrative in plain prose: when the vessel arrived, when it berthed, how the allowed hours were used up, when it sailed, and exactly how the demurrage figure was reached. It saves the narrative, the timestamp table it used and the computed figures onto the voyage record in the app database so the app can display them, and then it creates a Gmail draft to the counterparty using Create a Draft, containing the narrative and the timestamp table. The agent never sends anything. The draft exists so a human reviews it before anything goes out.

While the agent is working, show its status on the voyage so the desk knows a pack is being built. When it finishes, show the narrative on the voyage page along with a note that a Gmail draft is waiting. Keep previous claim packs in a history list on the voyage rather than overwriting, so the team can see what was drafted before and when.

One setup detail that matters: each MarineTraffic API service carries its own separate 40 character key, so this app needs distinct MarineTraffic credentials for Port Calls, Berth Calls and Vessel Particulars rather than a single shared key. Also, berth call history is only available from July 2017 and port call history from January 2015. If a fixture window predates that, say so plainly on the row instead of rendering an empty cell that looks like the vessel never called.

Handle the thin cases honestly rather than guessing. If a vessel has no matching port call in the fixture window, if a port reports no berth-level calls, or if a fixture row is missing a laytime allowance or a demurrage rate, show that on the row and skip the calculation rather than computing a number the desk might quote in a claim.

What does this prompt do?

  • Reads your fixture tab in Google Sheets and lines each voyage up against what the ship actually did, so arrival, berthing, sailing and real time in port sit next to the laytime you allowed
  • Ranks the board by money at risk, so the biggest demurrage exposure is the first thing the desk sees each morning
  • Opens any voyage into a full statement of facts: every arrival, departure, docking and undocking, with the ship's particulars in the header
  • Builds a claim pack on one click, where an agent re-checks the timestamps, writes the narrative explaining how laytime was consumed and how the demurrage figure was reached, saves it on the voyage, and leaves a Gmail draft for a person to review
  • Tracks claim status (draft, sent, disputed, settled) inside the app, with every time shown in UTC and labelled by whether it came from vessel tracking or from someone's report

What do I need to use this?

  • A Google Sheets fixture tab with one row per voyage: vessel IMO number, load and discharge ports, laytime allowed in hours, and the demurrage rate per day
  • A MarineTraffic account with the vessel port call, berth call and vessel particulars services. Each MarineTraffic service is sold separately and comes with its own key, so expect to paste more than one
  • A Gmail account for the claim drafts. Nothing is sent automatically, every draft waits for a human
  • The counterparty contact for each fixture, so drafts are addressed to the right party

How can I customize it?

  • Change which fixture columns drive the calculation, for example weather working days, reversible laytime, or a demurrage rate in a different currency
  • Set a threshold so only voyages above a certain exposure appear on the board, or change the sort to focus on the oldest open claims
  • Reword the claim narrative the agent writes, or point every draft at one shared claims mailbox instead of individual counterparties
  • Add your own claim statuses beyond draft, sent, disputed and settled to match how your desk works

FAQs

Do I have to move off my fixture spreadsheet?
No. The board reads your existing Google Sheets fixture tab every time it loads, so the spreadsheet stays the place you record new fixtures. The app never writes back to it. Only the claim narratives and claim statuses live in the app's own storage.
Will it email the counterparty automatically?
No. The agent stops at a Gmail draft sitting in your drafts folder with the narrative and the timestamp table in it. A person reads it, edits it and hits send. Nothing leaves your account without a human deciding it should.
How far back can it pull port and berth times?
Vessel port call history reaches back to January 2015 and berth call history to July 2017. If a fixture falls before those dates, the app says so on the row instead of showing a blank and letting you assume there was no call.
Why does MarineTraffic ask me for more than one key?
Each MarineTraffic data service is a separate subscription with its own key, so the port calls, berth calls and vessel particulars services each need their own. The app asks for them separately during setup and tells you which is which.
Can I tell which timestamps came from vessel tracking rather than a report?
Yes, and that is deliberate. Every event is tagged with its source and shown in UTC with the label on screen, because a claim rests on where the evidence came from. Tracking-derived times and reported times never sit in the same column unmarked.
Who on the team is this for?
The chartering operations desk that works claims day to day. It is a shared working surface, so one person can update a claim status inline while another opens the statement of facts on a different voyage.

Related templates

Call overdue Xero customers with an AI collections agent

Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.

LiveKit
Xero
Deepgram
+2
Agentic Task
Local listing health board for every location you manage

See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.

Local Business Data
Google Sheets
App
Win back LiveChat visitors whose chats went unanswered

Every couple of hours we find the chats your team never answered, email those visitors a real reply, and hand the sensitive ones to a support lead.

LiveChat
Gmail
Slack
Agentic Task
Let support send one-off Loops emails without an engineer

Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.

Loops.so
Stripe
Google Sheets
App
A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

General Input Storage
General Input Database
JigsawStack
+1
App
Stop cold emails to anyone with a live deal in Pipedrive

Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.

Mailshake
Pipedrive
Google Sheets
Deterministic Code

Stop working demurrage claims out of a spreadsheet.

Give your chartering desk one screen where the exposure is ranked, the evidence is timestamped, and the claim narrative writes itself for review.