InTouch Hub · Blue Isle Software

Appointment Reminder (Google Calendar)

Google Calendar-driven appointment reminders. Reads upcoming events directly from your Calendar (no CSV to maintain), sends 24-hour and 1-hour reminder emails to attendees, and tracks state in a Sheet so each event is reminded exactly once per window. Cross-platform (python runtime).

calendargmailsheetsreminderappointmentschedulingservice-business

appointment-reminder-gcal

Reads upcoming events directly from your Google Calendar (no CSV to maintain), sends a 24-hour and 1-hour reminder email to each event's attendees, and tracks per-event state in a Sheet so each event is reminded exactly once per window. Cross-platform: uses the python runtime env which InTouch auto-creates on Linux, macOS, AND Windows.

Use case

Service businesses (salons, repair shops, consultants, contractors, clinics) already maintain appointments in Google Calendar. Maintaining a separate CSV — the model the original appointment-reminder workflow uses — duplicates work and gets out of sync. This variant skips the CSV entirely: the calendar IS the source of truth. Add an event with the customer as an attendee, this workflow handles reminders.

Single-engine reminders (Calendar-resident automatic alerts) ping the user themselves, not the customer. This workflow sends to the customer.

Setup

  1. Credentials (Credentials view): - google-workspace — Google Workspace service-account JSON with domain-wide delegation
  2. Runtime environment (Runtime Environments view): - python — InTouch auto-creates this on Linux, macOS, AND Windows from the detected Python 3 install. No platform-specific setup.
  3. Google Calendar — use your primary calendar or any calendar you own. Add events with the customer as an attendee (their email is what gets the reminder). The event title becomes the reminder subject; the time becomes the body.
  4. Reminder-state Sheet (one-time): - Create a Sheet with a tab ReminderState and 4 columns: event_id | summary | reminded_24h | reminded_1h - Row 1 is the header; data starts at row 2. - The workflow manages it — do not edit manually. - Copy the spreadsheet ID from the URL.
  5. Edit workflow.yaml — replace the four placeholders: - <<CALENDAR_ID>>primary for your main calendar, or any calendar ID (looks like [email protected]) - <<REMINDER_STATE_SHEET_ID>> — the state Sheet ID - <<SHOP_NAME>> — your business name (used in the reminder signature) - <<OWNER_PUBLISHER>> — user name linked to your contact, for the "what was sent today" summary
  6. Schedule the workflow every hour. Higher frequency wastes API quota; lower may miss the narrow 0.5–1.5-hour window for the 1-hour reminder.

Pipeline

  1. processruntimeenv (python). Queries Calendar for events in the next 25 hours, joins against the ReminderState Sheet, and for any event with a 23–25-hour or 0.5–1.5-hour countdown that hasn't been reminded yet: sends an email to each attendee, then writes back the updated state row. Outputs a plain-text summary of who was reminded.
  2. notify-ownermessage. Sends the summary text to your owner user (so you can see, every hour, what went out — or "No reminders sent.").

Sample reminder

Subject: Reminder: AC Repair tomorrow

Hi,

This is a reminder about your appointment 'AC Repair' scheduled for
Wednesday, April 15 at 10:00 AM PDT.

If you need to reschedule, please reply to this email.

— Acme HVAC

Customization

Differences from the CSV-based appointment-reminder

appointment-reminder (CSV) appointment-reminder-gcal (Calendar)
Source of truth CSV file you maintain Google Calendar
Delivery channel SMS / WhatsApp (uses Anthropic to draft messages) Email to event attendees (templated, no AI)
Cost per run Anthropic Haiku call + SMS provider Zero AI cost; Gmail send only
State tracking reminded_24h / reminded_1h columns in the same CSV Separate ReminderState Sheet keyed by event_id
Cross-platform bash runtime (Linux/macOS; Windows needs Git Bash/WSL) python runtime (Linux, macOS, Windows out of the box)
Best fit Shops where appointments live in a database or a dedicated CSV Anyone already running their calendar in Google Workspace

Use either, not both, against the same set of appointments.

Verified

Flag/command syntax verified against the bundled gog v0.19.0 (2026-06-01). gog calendar events output shape (events return id, summary, start.dateTime, attendees[].email) should be re-verified on first run against your Workspace account. Email sends, Sheet append/update verified separately.

Source

See workflow.yaml.