👥 Validate staff certifications for upcoming sessions with Google Calendar and Slack

⚡ 1 views · 👥 HR & Recruitment

Description

Quick overview

This workflow runs weekly to check upcoming Google Calendar sessions against a Google Sheets roster and staffing map, validates required certifications using rules from an n8n Data Table, then posts a coverage report to Slack and emails renewal reminders via Gmail.

How it works

  1. Runs weekly on a schedule and loads configuration values like the Google Sheet ID, Calendar ID, Slack channel ID, and lookahead window.
  2. Reads the staff roster (person, email, certification, expiry) and session staffing assignments from Google Sheets, and loads per-session coverage rules from an n8n Data Table.
  3. Fetches all Google Calendar events in the lookahead window (including expanded recurring instances) and extracts a bracketed session code (for example, [FA-101]) from each event title.
  4. Matches each event to staffing and rules using the session code, then compares each assigned staffer’s certification expiry date to the session date to calculate certified headcount and any shortfall.
  5. Generates a Slack-ready report that lists under-covered sessions with a minimal renewal plan, warns about unmatched events that cannot be validated, and summarizes fully covered sessions.
  6. Posts the report to Slack and sends one Gmail renewal email per staffer per lapsed certification, listing all affected upcoming sessions and the earliest renew-by date.

Setup

  1. Add OAuth credentials for Google Sheets, Google Calendar, Slack, and Gmail.
  2. Update the configuration values for rosterSheetId, calendarId, slackChannelId, and lookaheadWeeks.
  3. Create a Google Sheet with a Roster tab (columns: Person, Email, Certification, Expiry) and a Staffing tab (columns: SessionCode, Person), and ensure names and codes match exactly across tabs.
  4. Populate the “Certification Lapse Radar Rules” n8n Data Table with session_type, required_cert, and min_certified values, making sure required_cert matches the Certification text used in the roster.
  5. Ensure each relevant Google Calendar event title contains a [SESSIONCODE] token (for example, First Aid Refresher [FA-101]) so events can be matched and validated.

Requirements

Customization

Additional info

Nothing is written back to the Sheet, the calendar or the Data Table, and no state carries between runs, so a lapsed staffer receives the same notice on every run until their Expiry cell changes. Assigned people who are missing from the roster, missing a row for the required certification, or carrying an expiry date the parser cannot read all count against coverage but cannot be renewed, so they surface only as an instruction to assign more holders rather than as a named fix. Recurring events are expanded into one line per occurrence, so a long lookahead over a busy calendar produces a long post, and Slack will truncate or reject it past its message length limit. Both Slack and Gmail are set to continue on error, which keeps one bad address or a failed post from stopping the run, but also means nothing is retried and no failure is reported anywhere. Coverage is judged only against the people listed in the Staffing tab, a qualified holder who is not assigned to the session does not raise the certified count.

đź”— Nodes Used

Google Sheets, Slack, Google Calendar, Gmail, Schedule Trigger, Data table

📥 Import

Download workflow.json and import into n8n: Workflow menu → Import from File

📖 Importing guide · 🔑 Credential setup