See llms.txt for all machine-readable content.

Back to Templates

Manage PTO requests and approvals with Slack, Google Sheets and Calendar

Quick overview

This workflow collects PTO requests through an n8n form, validates them against a Google Sheets tracker, and routes approvals to managers in Slack. Approved requests update balances in Google Sheets, create all-day events in Google Calendar, and notify employees and the team via Gmail and Slack.

How it works

  1. Receives a PTO request from an n8n form submission or runs every weekday at 2 PM to process upcoming reminders.
  2. Loads PTO settings and reads the Employees and Requests tabs from Google Sheets to find the employee, manager, and existing requests.
  3. For new requests, calculates business days (excluding weekends and configured company holidays), checks the appropriate PTO/sick balance, and logs the request to the Requests sheet.
  4. Sends the manager a Slack message with Approve/Decline buttons and waits up to the configured number of days for a response, alerting HR in Slack if the request cannot be routed or if the manager does not respond.
  5. Records the manager’s decision back to Google Sheets and, when approved, updates the employee’s PTO/sick balance, creates an all-day “Out of office” event in a Google Calendar, emails the employee a confirmation checklist via Gmail, and posts an availability message to the team Slack channel.
  6. When declined, emails the employee via Gmail without changing balances, and when time off starts on the next workday, emails a day-before reminder with auto-reply text and posts the handoff notes to the team Slack channel, then marks the reminder as sent in Google Sheets.

Setup

  1. Create or copy a Google Sheets PTO tracker with Employees and Requests tabs, then set the correct spreadsheet in every Google Sheets node.
  2. Add Slack, Google Sheets, Google Calendar, and Gmail credentials in n8n.
  3. Populate the Employees sheet with each employee’s work email and their manager’s Slack member ID (plus balance columns like ptoBalanceDays and sickBalanceDays).
  4. Update the settings values (HR email/name, Slack channel names, PTO Google Calendar ID, company holidays, and approval wait days) in the workflow’s settings step.
  5. Activate the workflow and share the form’s production URL with employees so they can submit time-off requests.