Track container shipments in carrier portals that have no API

Twice a day we sign in to each carrier portal, check every open container, and lead your Slack update with the ones that were rolled, held, or delayed.

Agentic Task
SteelGoogle SheetsSlackOperationsResearch & MonitoringNotifications & AlertsData Sync
PromptCreate

Twice every weekday, at 7am and 1pm, check the status of every open shipment sitting in carrier and forwarder portals that have no API. Use Steel, Google Sheets, and Slack. Run this on a cron trigger, because these portals are pull-only and never notify us when something changes.

Start by reading the open shipment list from Google Sheets with Get Values. Each row gives me the shipment reference, which may be a container number, a bill of lading, or a booking reference, plus the carrier or forwarder that reference belongs to, the last status we recorded, and the last ETA we recorded. Skip any row already marked delivered or closed.

Group the shipments by carrier so one browser handles every reference for that carrier rather than opening a new browser per shipment. For each carrier, use Steel Create Session with our saved browser profile, so the session arrives already logged in to that carrier's portal. The profile is set up once with the portal logins and reused on every run, so there is no sign-in step to automate here.

Inside the session, use Execute Computer Action to type each reference into the portal's tracking search and open the result, then use Scrape Webpage to read the milestone list, the current status, and the latest ETA from the result page. Every portal lays its tracking page out differently, so work from what is actually on the page instead of assuming a fixed structure.

Normalize the wildly different carrier wording into one shared vocabulary: gate in, loaded, discharged, customs hold, rolled, and delivered. Carriers describe the same milestone in their own language, so map the raw portal text onto these shared terms, and keep the carrier's original wording alongside the normalized value so a human can check the call.

Compare the normalized status and the ETA against the last recorded values for that row. Wherever something changed, write it back to that shipment's row with Update Values, stamping the new status, the new ETA, and the time of the check.

Release the browser with Release Session as soon as that carrier's shipments are done, so we are not billed for idle sessions. Release the session even when a lookup fails partway through, and carry on with the remaining carriers rather than abandoning the run.

Finish with a Slack message using Send a Message. Lead with genuine exceptions, meaning shipments that were rolled to a later vessel, held at customs, or whose ETA slipped by more than two days. For each exception give the reference, the carrier, what changed, and the new ETA. Follow that with a short count of everything that simply moved forward as expected, and finally name any reference that could not be found or checked, so nothing silently disappears from the list.

What does this prompt do?

  • Reads your open shipment list from Google Sheets: the container, bill of lading, or booking reference, the carrier, and the status you last recorded.
  • Signs in to each carrier and forwarder portal for you, searches every reference, and reads the milestone history, the current status, and the latest ETA.
  • Translates each carrier's own wording into one shared vocabulary, so gate in, loaded, discharged, customs hold, and delivered mean the same thing no matter who shipped it.
  • Writes every change back to the shipment's row with the time it was checked, so the sheet stays the single source of truth.
  • Posts a Slack update that leads with real exceptions, rolled sailings, customs holds, and ETA slips over two days, then counts everything that simply moved forward as expected.

What do I need to use this?

  • A Google Sheet of your open shipments, with a column for the reference, the carrier, and the last status you recorded
  • A Steel account for the browsing, plus your usual login details for each carrier or forwarder portal you track
  • A one-time setup where you sign in to each portal and save that signed-in state, so every run afterwards arrives already logged in
  • A Slack workspace and a channel where the shipment update should land

How can I customize it?

  • Change the timing: 7am and 1pm on weekdays suits most ops teams, but peak season often warrants hourly, and slower lanes are fine with one check a day.
  • Tune what counts as an exception: the two day ETA slip is the default, so tighten it to one day for tight delivery windows or loosen it for long ocean legs.
  • Adjust the status vocabulary to match the words your team already uses on the whiteboard, and add milestones like empty returned or customs cleared.
  • Split the output: send exceptions to an urgent channel and the everything-moved-forward count to a quieter one.

FAQs

Will this work with carriers that do not offer any tracking feed?
That is exactly what it is for. It reads the same portal pages a person would open, so any carrier or forwarder whose site you can log in to and search a reference in will work, even when there is no other way to get the data out.
Do I have to log in every time it runs?
No. You sign in to each portal once during setup and that signed-in state is saved, so every later run arrives already logged in. You only revisit it if a portal forces a password change or adds a new login step.
What counts as an exception worth flagging?
Three things lead the update: a shipment rolled to a later vessel, a shipment held at customs, and an ETA that slipped by more than two days. Everything else is rolled into a single count so the message stays short and the real problems stay visible.
What happens if a portal changes its layout or a reference cannot be found?
It reads each page the way a person would rather than following a fixed script, so small layout changes are handled. Anything it genuinely could not check is called out by name at the end of the Slack message instead of quietly disappearing.
Can it track ocean, air, and forwarder shipments in the same run?
Yes. The shipment list drives everything, so you can mix container lines, forwarders, and air waybills in one sheet as long as each row names the carrier the reference belongs to.
Will I be charged for browsers left running in the background?
No. The browser is closed as soon as each carrier's shipments have been checked, including when a lookup fails partway through, so nothing sits idle racking up time between runs.

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 checking carrier portals by hand.

Let this run twice a day and spend your attention only on the shipments that actually went wrong.