Intermediate~20 min setupProductivity & CommunicationVerified April 2026
Google Calendar logo
Slack logo

How to Send Out-of-Office Alerts from Google Calendar to Slack with N8n

Automatically posts to #team-updates when someone adds an all-day 'OOO' or 'Vacation' event in Google Calendar.

Steps and UI details are based on platform versions at time of writing β€” check each platform for the latest interface.

Best for

Teams that need customizable OOO notifications with complex filtering rules and message formatting.

Not ideal for

Non-technical teams wanting a quick setup without building conditional logic flows.

Sync type

real-time

Use case type

notification

Real-World Example

πŸ’‘

A 30-person marketing agency uses this to post OOO alerts in their #general channel whenever someone blocks vacation time. Before automation, team leads manually announced time off in Monday meetings, but short-notice sick days and client calls often caught people off-guard when key team members were unavailable. Now everyone sees OOO notifications within 3 minutes of calendar updates.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently β€” Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured β€” you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Admin access to your team's shared Google Calendar
Permission to post in target Slack channel
N8n instance running (cloud or self-hosted)
Google Workspace account with Calendar API enabled

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Event Titlesummary
Start Datestart.date
End Dateend.date
3 optional fieldsβ–Έ show
Event Creatorcreator.email
Calendar Nameorganizer.displayName
Event IDid

Step-by-Step Setup

1

Dashboard > New Workflow

Create New Workflow

Start with a blank N8n workflow. This gives you a clean canvas to build your calendar-to-Slack automation.

  1. 1Click 'New Workflow' on the N8n dashboard
  2. 2Delete the default 'Start' node by selecting it and pressing Delete
  3. 3Save the workflow with name 'OOO Calendar Alerts'
βœ“ What you should see: You should see an empty workflow canvas with just the execution panel on the right.
2

Canvas > Add Node > Google Calendar Trigger

Add Google Calendar Trigger

Set up the calendar watcher that fires when events are created or updated. This monitors your team calendar for OOO events.

  1. 1Click the '+' button in the center of the canvas
  2. 2Search for 'Google Calendar' in the node list
  3. 3Select 'Google Calendar Trigger' from the results
  4. 4Choose 'Event Created' as the trigger type
βœ“ What you should see: The Google Calendar Trigger node appears on canvas with a red connection indicator.
⚠
Common mistake β€” Don't use 'Event Updated' β€” it fires on every calendar change including time adjustments and will spam your channel.
n8n
+
click +
search apps
Google Calendar
GO
Google Calendar
Add Google Calendar Trigger
Google Calendar
GO
module added
3

Google Calendar Node > Credentials > New

Connect Google Account

Authenticate with Google to access calendar data. N8n needs read access to detect new OOO events.

  1. 1Click 'Create New Credential' in the Calendar Trigger node
  2. 2Select 'Google Calendar OAuth2 API' from the dropdown
  3. 3Click 'Connect my account' and complete Google OAuth flow
  4. 4Select your target calendar from the 'Calendar' dropdown
βœ“ What you should see: Green 'Connected' badge appears next to the credential field and calendar list populates.
⚠
Common mistake β€” Make sure you select the shared team calendar, not your personal calendar β€” personal calendars won't show other people's OOO events.
n8n settings
Connection
Choose a connection…Add
click Add
Google Calendar
Log in to authorize
Authorize n8n
popup window
βœ“
Connected
green checkmark
4

Canvas > Add Node > IF

Add Title Filter

Filter events to only process OOO and vacation entries. This prevents the workflow from firing on regular meetings.

  1. 1Click '+' to add a new node after Google Calendar
  2. 2Search for 'IF' and select the 'IF' node
  3. 3Set 'Value 1' to '{{ $json.summary }}'
  4. 4Choose 'Contains' as the operation
  5. 5Set 'Value 2' to 'OOO'
βœ“ What you should see: IF node shows two output paths: 'True' (green) and 'False' (red).
⚠
Common mistake β€” Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends β€” a single capital letter difference will block everything.
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Slack
SL
notified
5

Canvas > False Branch > Add Node > IF

Add Vacation Filter

Create a second condition to catch 'Vacation' events too. This handles teams that use different OOO naming conventions.

  1. 1Click the 'False' output of the IF node
  2. 2Add another 'IF' node
  3. 3Set 'Value 1' to '{{ $json.summary }}'
  4. 4Choose 'Contains' as the operation
  5. 5Set 'Value 2' to 'Vacation'
βœ“ What you should see: Second IF node connects to the False branch with its own True/False outputs.
⚠
Common mistake β€” Use 'Contains' not 'Equals' β€” people write titles like 'John OOO - Family Trip' not just 'OOO'.
6

Canvas > True Branches > Add Node > IF

Check All-Day Event

Verify the event is all-day to avoid posting about short OOO blocks. This prevents notifications for 2-hour dentist appointments labeled 'OOO'.

  1. 1Add an IF node to both True branches from steps 4 and 5
  2. 2Set 'Value 1' to '{{ $json.start.date }}'
  3. 3Choose 'Is Not Empty' as the operation
  4. 4Leave 'Value 2' blank
βœ“ What you should see: Both OOO and Vacation branches now connect to all-day checkers.
⚠
Common mistake β€” Google Calendar uses 'date' field for all-day events and 'dateTime' for timed events β€” checking 'date' exists catches all-day only.
7

Canvas > True Branch > Add Node > Slack

Add Slack Connection

Connect your Slack workspace to post messages. This establishes the authentication for channel posting.

  1. 1Add a Slack node to the True output of the all-day checker
  2. 2Select 'Post Message' as the operation
  3. 3Click 'Create New Credential' for Slack
  4. 4Choose 'Slack OAuth2 API' and complete workspace authorization
βœ“ What you should see: Slack node appears with credential connected and channel dropdown populated.
8

Slack Node > Configuration

Configure Channel and Message

Set the target channel and craft the notification message. This determines where OOO alerts appear and what information they contain.

  1. 1Select '#team-updates' from the Channel dropdown
  2. 2Set message text to ':calendar: {{ $json.summary }} ({{ $json.start.date }} - {{ $json.end.date }})'
  3. 3Check 'Link Names' to enable @mentions in messages
  4. 4Set username to 'OOO Bot'
βœ“ What you should see: Slack configuration shows channel selected and message preview with calendar variables.
⚠
Common mistake β€” Use {{ $json.start.date }} not {{ $json.start.dateTime }} β€” all-day events only have date fields, not time fields.
9

Toolbar > Execute Workflow

Test the Workflow

Run a test execution to verify the complete flow works. This validates your calendar connection, filters, and Slack posting.

  1. 1Click 'Execute Workflow' button in the top toolbar
  2. 2Create a test all-day event in Google Calendar titled 'Test OOO'
  3. 3Wait 2-3 minutes for Google Calendar webhook to fire
  4. 4Check #team-updates channel for the notification
βœ“ What you should see: Execution log shows green success indicators and Slack message appears in channel.
⚠
Common mistake β€” If no execution triggers, check that your calendar is public or shared with the service account β€” private calendars block webhook access.
n8n
β–Ά Run once
executed
βœ“
Google Calendar
βœ“
Slack
Slack
πŸ”” notification
received
10

Toolbar > Activate Toggle

Activate Production Mode

Enable the workflow to run automatically on live calendar events. This switches from manual testing to continuous monitoring.

  1. 1Click the 'Inactive' toggle in the top right to turn it 'Active'
  2. 2Verify the Google Calendar trigger shows 'Listening for events'
  3. 3Save the workflow one final time
  4. 4Delete your test OOO event from calendar
βœ“ What you should see: Workflow status shows 'Active' with green indicator and trigger displays listening status.

Drop this into an n8n Code node.

Copy this template{{ new Date($json.start.date).toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric' }) }}
β–Έ Show code
{{ new Date($json.start.date).toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric' }) }}

... expand to see full code

{{ new Date($json.start.date).toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric' }) }}

Scaling Beyond 100+ OOO events/month+ Records

If your volume exceeds 100+ OOO events/month records, apply these adjustments.

1

Add Deduplication Logic

Use a Set node to store processed event IDs and filter out duplicates. Google Calendar sends duplicate webhooks when events are rapidly edited.

2

Implement Rate Limiting

Add a Wait node with 2-second delays between Slack posts to avoid hitting API limits. Slack allows 1 message per second sustained.

3

Switch to Webhook Trigger

Replace the polling trigger with Google Calendar's push notifications for instant updates. Configure webhook endpoint in N8n and register it with Google Calendar API.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you want complete control over the message format and filtering logic. The IF node chains let you build complex conditions like 'OOO OR Vacation AND all-day AND not weekends' that other platforms can't handle in their basic triggers. You can also add custom code nodes to parse dates, extract employee names from calendar titles, or integrate with HRIS systems. Pick Zapier instead if you need this running in 10 minutes with zero technical setup β€” their Google Calendar trigger includes built-in OOO detection.

Cost

This workflow burns 1 execution per calendar event created. A 25-person team creates roughly 40 OOO events per month (vacation days, sick leave, conferences). That's 40 executions monthly, well under N8n Cloud's 5,000 execution limit at $20/month. Zapier would cost $20/month for their Team plan to handle the same volume. Make starts at $9/month but limits you to 1,000 operations β€” you'd hit that limit with a larger team.

Tradeoffs

Zapier's Google Calendar trigger includes a built-in 'Event Type' filter that catches OOO events automatically without building IF chains. Make's calendar integration updates faster β€” their polling runs every 5 minutes vs N8n's 15-minute default. But N8n wins on message customization. You can write JavaScript to extract names from event descriptions, calculate OOO duration in business days, or cross-reference with Slack user directories to tag the right people. That flexibility matters when your team grows beyond basic notifications.

Google Calendar's webhook delivery isn't instant β€” expect 2-5 minute delays between creating an event and N8n execution. The API sometimes sends duplicate events if someone edits the OOO entry multiple times quickly, so add a 'Set' node to deduplicate based on event ID. Calendar permissions are tricky: the OAuth account needs 'Make changes and manage sharing' access to shared calendars, not just view access. Test with a personal calendar first, then migrate to the team calendar once the flow works.

Ideas for what to build next

  • β†’
    Add Return Date Reminders β€” Create a second workflow that posts 'Welcome back' messages when OOO periods end using calendar event completion triggers.
  • β†’
    Integrate with HRIS Systems β€” Connect to BambooHR or Workday to cross-reference calendar OOO with approved time-off requests and flag discrepancies.
  • β†’
    Create OOO Coverage Assignments β€” Parse OOO event descriptions for coverage assignments and automatically notify backup team members via Slack DM when someone goes out.

Related guides

Was this guide helpful?
← Google Calendar + Slack overviewn8n profile β†’