Live Slack updates for the jets on your Notion tail number roster
Watch a Notion list of tail numbers and post a clean Slack update the moment a jet lifts off, lands, gets delayed, or diverts.
Build me an agent workflow that watches a Notion database of aircraft tail numbers and posts a clean Slack update whenever a tracked jet's state changes. Built for executive assistants, family offices, charter brokers, and fractional-ownership programs that already keep a tail number list and want one living Slack channel for where each plane is right now.
Trigger: a cron schedule that runs every 15 minutes. AeroDataBox is not in the poll providers catalog, so the cron plus agent-side diffing pattern is the correct one here.
The Notion roster has one row per tail number (registration / N-number). Each row carries at minimum: tail_number, principal_name, slack_channel, and four last-known fields used as the dedupe key — last_status, last_eta, last_origin, last_destination. An optional delay_threshold_minutes column on the row overrides the default. The Notion database ID will be provided at setup time.
Each tick the agent should:
1. Call Notion Query a Data Source to read every row in the roster database.
2. For each row, call AeroDataBox Get Flight Status with searchBy=reg and the row's tail number to pull the nearest flight for that aircraft. Optionally call AeroDataBox Get Aircraft to enrich with aircraft type and image when those are missing from the row.
3. Compare the live status (off-blocks, airborne, landed, diverted, plus origin / destination / ETA) against the row's last_status, last_eta, last_origin, last_destination.
4. Decide whether the change is meaningful. A state transition (off-blocks, airborne, landed, diverted) always counts. A pure ETA change only counts when the delta exceeds the row's delay_threshold_minutes (default 20 minutes). Origin and destination changes count when they appear (filed flight plan changed).
5. If the change is meaningful, call Slackbot Send a Message to post a single plain-English summary to the row's configured channel. Example wording: "N123AB just lifted off from KTEB at 9:47 ET, ETA KPBI 12:34 ET, Citation Latitude." Include the principal name so the channel reader instantly knows which trip this is.
6. Call Notion Update a Page on that row to write the new status, ETA, origin, and destination back before the agent exits. The last_status field is the dedupe key, so writing it back is what makes the next tick idempotent — without it, retries will double-post.
7. If a row's lookup fails (blocked tail, no flight today, 404, rate-limited) do not page the channel. Append the row to an error list.
At the end of each tick, persist the error list and post a single daily digest of unresolved errors to a configurable digest channel — not on every tick. Once-a-day rollup, not paging.
Rows where nothing meaningful changed must produce no Slack messages at all. The channel should stay quiet on quiet days. The whole point is one living channel for where each plane is right now, without standing up FlightAware Business.
Integrations to wire up: Notion (Query a Data Source, Update a Page) for the roster. AeroDataBox (Get Flight Status with searchBy=reg, optional Get Aircraft) for live status. Slackbot (Send a Message) for the channel pings and the daily error digest.
Additional information
What does this prompt do?
- Every 15 minutes, checks each tail number in your Notion roster against the latest flight status.
- Posts a plain-English Slack message the moment a jet lifts off, lands, gets delayed, or diverts.
- Stays quiet by default. Nothing changes, nothing pings. Only meaningful moves hit the channel.
- Rolls one-off issues like blocked tails or no-flight-today into a single daily digest instead of paging every tick.
What do I need to use this?
- A Notion workspace with a database listing each tail number, the principal name, and the Slack channel that row should post to.
- A Slack workspace you can install the General Input bot into, with the channels you want it to post to ready.
- An AeroDataBox account on RapidAPI for tail number flight lookups (the free tier covers small fleets).
How can I customize it?
- Change how often the check runs. Every 15 minutes is the default, but every 5 or 30 works too.
- Set a per-row delay threshold so small schedule slips do not trigger a Slack ping.
- Pick which events count as worth posting: off-blocks, airborne, landed, diverted, or any delay swing past your threshold.
- Route each principal to a different Slack channel, or point everyone at one shared ops channel.
Frequently asked questions
Does every tail number need its own Slack channel?
Will this spam our channel when nothing is happening?
What if a tail number is not flying today, or the lookup fails?
Can I use this for airline flight numbers instead of tail numbers?
Does this work with the free tier of AeroDataBox?
Who is this built for?
Related templates
Stop refreshing FlightAware for every jet on your list.
Connect Notion, Slack, and AeroDataBox once, and Geni keeps one Slack channel live with every meaningful move across your fleet.