Daily on-site visits briefing in Slack with mapped addresses

By General Input

Every weekday at 7am, get one Slack DM listing today's in-person meetings with cleaned addresses, map links, and the order to drive them.

Integrations

  • Google Calendar
  • OpenStreetMap Nominatim
  • Slack

Type

Agentic Task

Categories

  • Sales
  • Personal Productivity

Every weekday at 7am in my local time zone, send me one Slack DM that briefs me on today's in-person, on-site customer visits — and only those.

Trigger: cron, every weekday (Monday through Friday) at 7am local.

Step 1 — Pull today's events. Use Google Calendar's List Events on my primary calendar, scoped to today (start of day through end of day in my local time zone). Expand recurring events into single instances so each visit shows up on its own. Skip events I have declined and skip all-day events.

Step 2 — Decide which events are real on-site visits. Look at each event's location field and reason about whether it is an actual physical address. Keep it only if it looks like a street address (street + city, a venue with a real address, a postal code, etc.). Drop it if the location is a Zoom / Google Meet / Microsoft Teams / Webex link, a phone number or dial-in, an empty string, a meeting room name, or anything else that is clearly not a place I would drive to. If the location field is empty but the description contains an obvious mailing address, treat that as the address. When in doubt, drop the event rather than geocode noise.

Step 3 — Geocode each surviving address. For every kept event, call OpenStreetMap Nominatim's Search (Forward Geocode) operation with the address. Set a descriptive User-Agent that identifies this workflow and includes a contact email. Important: pace the calls at no more than one per second to stay inside Nominatim's fair-use limit — sleep at least 1000ms between requests. If Nominatim returns no match for an address, gracefully drop that single event and keep going; do not fail the whole run. Capture the cleaned display name (display_name from the response) and the lat/lon for each match.

Step 4 — Sort and number the visits. Order the kept events by start time, earliest first, and number them 1, 2, 3, … so I can see the order I'll hit them across the day.

Step 5 — Build the message. Send one consolidated Slack DM to me using Slack's Send a Message operation (open a DM with my own user first if needed). Use Slack mrkdwn formatting (single asterisks for bold, <url|text> for links). The message should have:

  • A short header like *Today's on-site visits — Tue, Jun 3* with the count of stops.

  • One block per visit, in order, showing: the stop number, the event title, the start time in my local time zone, the primary external attendee's name (or company) if one is on the invite, the cleaned address from Nominatim, and a Google Maps link built from the returned coordinates using https://www.google.com/maps/search/?api=1&query=<lat>,<lon>.

  • A one-line footer if any events were skipped because Nominatim could not match the address, so I know to double-check them manually.

If there are zero on-site visits today, send a single short DM that says I have no in-person visits today so I know the workflow ran. Do not send a message on weekends.

Integrations: Google Calendar (List Events), OpenStreetMap Nominatim (Search / Forward Geocode), Slack (Send a Message).

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredChat quality review board for LiveChat support leadsFront desk appointment confirmation board for the next 3 daysWin back no-show and cancelled appointments every morningLive Loop returns analytics with product-level drill-downNewsletter pre-flight and approval board for Mailjet sendsTurn a prospect spreadsheet into personalized sequence enrollmentsMailjet email delivery lookup console for support teamsCatch feature flags that never got switched on in production