Daily on-site visits briefing in Slack with mapped addresses

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.

Agentic Task
Google CalendarOpenStreetMap NominatimSlackSalesPersonal ProductivityDaily DigestsMeeting Workflows
PromptCreate

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).

What does this prompt do?

  • Scans today's Google Calendar and pulls out only the meetings with a real street address, skipping Zoom links, phone numbers, and virtual rooms.
  • Cleans each address and adds a tap-to-open Google Maps link so you can route straight from the message.
  • Sorts the day in visit order with start times and attendee names, so you know who is first and what is next.
  • Sends the whole rundown as a single Slack DM, so you walk into the day already mapped out.

What do I need to use this?

  • A Google account with the calendar that holds your customer visits.
  • A Slack workspace where the briefing can be sent to you as a direct message.
  • A list of meetings with the location filled in (street address). Zoom links and phone numbers are ignored automatically.

How can I customize it?

  • Change the send time or days. Run it at 6am, push it to weekends, or skip Fridays.
  • Pick which calendar to read. Personal, shared team calendar, or a dedicated field calendar.
  • Decide what counts as on-site. By default it ignores Zoom, Google Meet, Teams, and phone numbers. Tighten or loosen the filter to your taste.
  • Swap the destination. Send the briefing to a partner, an assistant, or a shared field-ops channel instead of your own DM.

FAQs

What if a meeting has no address, just a Zoom link?
It is skipped. The briefing only lists meetings that have a real street address in the location field, so virtual meetings, phone calls, and meeting room names stay out.
What happens if an address cannot be found on a map?
That meeting is quietly dropped from the briefing. You will still see the rest of the day so you are never left without a rundown.
Does this work for personal calendars, not just work?
Yes. Point it at any Google Calendar you can see. Field sales reps, account managers, consultants, home service providers, and real estate agents all use the same setup.
Can I send it somewhere other than my Slack DM?
Yes. The same briefing can go to a Slack channel, a partner's DM, or your assistant. Just say where you want it delivered when you set it up.
What time zone does the schedule use?
Your local time zone. If you set it for 7am, it fires at 7am where you are, every weekday.

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
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
Chat quality review board for LiveChat support leads

Score last week's finished live chats against one rubric, let an AI grader draft the notes with quotes, and send coaching straight to the agent.

LiveChat
Slack
General Input Database
App
Front desk appointment confirmation board for the next 3 days

Open one board every morning, see every upcoming appointment with its confirmation status, and text the clients who have not replied yet.

LoopMessage
Google Calendar
Google Sheets
App
Win back no-show and cancelled appointments every morning

Every weekday morning, every appointment that fell through yesterday gets a personal text or email inviting them to rebook, plus a task for the right rep.

LeadConnector
Google Sheets
Slack
Agentic Task
Live Loop returns analytics with product-level drill-down

Pick any date range up to 120 days and see return volume, refund versus exchange mix, and the products behind every number, recalculated each time you open it.

Loop Returns
Google Sheets
Slack
App

Walk into every customer visit already mapped.

Connect Google Calendar and Slack once, and Geni will send you a clean, in-order on-site briefing every weekday at 7am.