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

How to Send Google Calendar Meeting Reminders to Slack with N8n

Automatically send Slack messages 15 minutes before Google Calendar events with meeting title, link, and attendees.

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 custom reminder timing or process 1000+ calendar events monthly with complex notification logic.

Not ideal for

Small teams wanting zero-maintenance setup or those who need instant triggers when events are created.

Sync type

polling

Use case type

notification

Real-World Example

💡

A 25-person software consultancy uses this to remind project teams about client calls 15 minutes early in their #meetings channel. Before automation, 30% of team members joined calls 2-3 minutes late because they forgot to check their calendars between deep work sessions. The Slack reminders include the client name, meeting agenda link, and dial-in details so everyone arrives prepared and on time.

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.

Google account with Google Calendar containing scheduled meetings
Slack workspace where you can install apps and post to channels
Google Cloud Console project with Calendar API enabled
Slack app created with chat:write bot token scope permissions
N8n account (self-hosted or cloud) with workflow creation access

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Meeting Titlesummary
Start Timestart.dateTime
Event IDid
4 optional fields▸ show
Meeting LinkhangoutLink
Attendee Emailsattendees
Event Descriptiondescription
Meeting Locationlocation

Step-by-Step Setup

1

Dashboard > New Workflow

Install and access N8n

Set up N8n either through self-hosting or N8n Cloud. You'll need admin access to create workflows and connect external services.

  1. 1Go to n8n.io and click 'Get Started'
  2. 2Choose between self-hosted or cloud version
  3. 3Complete registration and verify your email
  4. 4Log into your N8n dashboard
What you should see: You should see the N8n workflow editor with a blank canvas and a plus button to add nodes.
2

Workflow Editor > + > Google Calendar > Trigger

Add Google Calendar trigger node

Set up the trigger that monitors your calendar for upcoming events. This will fire 15 minutes before each meeting starts.

  1. 1Click the + button on the canvas
  2. 2Search for 'Google Calendar' and select it
  3. 3Choose 'Trigger' from the node type options
  4. 4Select 'Event Updated' from the operation dropdown
What you should see: A Google Calendar node appears with configuration options for triggers and authentication.
Common mistake — Don't use 'Event Created' - you need 'Event Updated' to catch events approaching their start time.
n8n
+
click +
search apps
Google Calendar
GO
Google Calendar
Add Google Calendar trigger …
Google Calendar
GO
module added
3

Node Settings > Credentials > New

Configure Google Calendar authentication

Connect N8n to your Google account with proper calendar permissions. You'll need OAuth2 credentials for API access.

  1. 1Click 'Create New Credential' in the Google Calendar node
  2. 2Select 'Google Calendar OAuth2 API'
  3. 3Enter your Google Client ID and Client Secret
  4. 4Click 'Connect my account' and authorize calendar access
What you should see: Green checkmark appears next to credentials with your Google account email displayed.
Common mistake — Make sure your Google Cloud project has Calendar API enabled - the connection will fail silently otherwise.
4

Google Calendar Node > Parameters

Set calendar and time filter

Configure which calendar to monitor and set the 15-minute advance notification window. This prevents duplicate reminders.

  1. 1Select your target calendar from the 'Calendar' dropdown
  2. 2Set 'Watch Events' to 'Updates'
  3. 3In Additional Fields, add 'timeMin' with value '{{ $now.minus({minutes: 15}).toISO() }}'
  4. 4Add 'timeMax' with value '{{ $now.plus({minutes: 1}).toISO() }}'
What you should see: The node shows your selected calendar name and the time window configuration in Additional Fields.
Common mistake — The time window must be precise - too wide and you'll get multiple triggers for the same event.
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Slack
SL
notified
5

Workflow Editor > + > IF

Add time-based condition node

Filter events to only process those starting in exactly 15 minutes. This prevents sending reminders for past or far-future events.

  1. 1Click the + button after the Google Calendar node
  2. 2Search for 'IF' and select the IF node
  3. 3Set condition to 'Date & Time'
  4. 4Configure: 'start.dateTime' is 'After' '{{ $now.plus({minutes: 14}) }}'
  5. 5Add second condition: 'start.dateTime' is 'Before' '{{ $now.plus({minutes: 16}) }}'
What you should see: IF node shows two date conditions with a 2-minute window around the 15-minute mark.
Common mistake — Use a 2-minute buffer (14-16 minutes) to account for polling delays in event detection.
6

IF True Branch > + > Slack > Send Message

Add Slack node

Connect the Slack messaging node to send the reminder. This will post to a specific channel when the time condition is met.

  1. 1Click + after the IF node's 'true' output
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Send Message' operation
  4. 4Set Authentication to 'OAuth2'
What you should see: Slack node appears with message composition fields and authentication options.
7

Slack Node > Credentials > New

Configure Slack authentication

Set up Slack app credentials to post messages. You'll need a Slack app with chat:write permissions in your workspace.

  1. 1Click 'Create New Credential' in the Slack node
  2. 2Select 'Slack OAuth2 API'
  3. 3Enter your Slack App's Client ID and Client Secret
  4. 4Add Bot Token Scope: 'chat:write'
  5. 5Authorize the connection to your Slack workspace
What you should see: Green checkmark with your Slack workspace name displayed in the credentials section.
Common mistake — Your Slack bot must be added to the target channel before it can post messages there.
8

Slack Node > Parameters > Message

Configure message content and channel

Set up the reminder message format with meeting details. Include the title, start time, join link, and attendee list for easy access.

  1. 1Set Channel to your target Slack channel (e.g., #general)
  2. 2In Message field, enter: '🔔 Meeting in 15 minutes: {{ $node["Google Calendar"].json["summary"] }}'
  3. 3Add new line: 'Time: {{ $node["Google Calendar"].json["start"]["dateTime"] | formatDateTime("h:mm a") }}'
  4. 4Add: 'Join: {{ $node["Google Calendar"].json["hangoutLink"] || "No link provided" }}'
  5. 5Add: 'Attendees: {{ $node["Google Calendar"].json["attendees"].map(a => a.email).join(", ") }}'
What you should see: Message preview shows formatted reminder with placeholders for meeting data from Google Calendar.
Common mistake — Test the hangoutLink field - some calendar events use conferenceData.entryPoints instead of hangoutLink.
9

Workflow Settings > Error Handling

Add error handling

Configure what happens when the workflow fails. Set up retry logic and error notifications to avoid missing reminders.

  1. 1Click on the workflow settings gear icon
  2. 2Go to 'Error Workflow' section
  3. 3Set 'On Error' to 'Continue'
  4. 4Add HTTP Request node after Slack for error logging
  5. 5Configure retry attempts: 3 tries with 2-minute delays
What you should see: Workflow settings show error handling configuration with retry logic enabled.
10

Workflow Editor > Execute Workflow

Test the workflow

Run a manual test with a real calendar event. Create a test meeting 16 minutes in the future to verify the timing logic works.

  1. 1Create a test calendar event starting in 16 minutes
  2. 2Click 'Execute Workflow' button in N8n
  3. 3Wait 1 minute and execute again
  4. 4Check Slack channel for the reminder message
  5. 5Verify all fields populate correctly (title, time, link, attendees)
What you should see: Slack message appears with properly formatted meeting details when the event is 15 minutes away.
Common mistake — Manual execution ignores the time trigger - you need to wait for real-time testing or adjust the test event timing.
n8n
▶ Run once
executed
Google Calendar
Slack
Slack
🔔 notification
received
11

Workflow Editor > Active Toggle

Activate workflow automation

Turn on the workflow to run automatically. Set the polling interval for checking calendar events and monitoring system status.

  1. 1Click the 'Inactive' toggle in the top right
  2. 2Confirm activation in the popup dialog
  3. 3Set polling interval to 'Every 5 minutes'
  4. 4Save the workflow with a descriptive name
What you should see: Toggle shows 'Active' in green and the workflow begins monitoring your calendar automatically.
Common mistake — 5-minute polling means reminders could be 1-2 minutes late - decrease to 1 minute for precise timing but higher execution usage.

Drop this into an n8n Code node.

JavaScript — Code Node// Format attendee list with RSVP status
▸ Show code
// Format attendee list with RSVP status
const attendees = $node["Google Calendar"].json["attendees"] || [];
const formattedList = attendees

... expand to see full code

// Format attendee list with RSVP status
const attendees = $node["Google Calendar"].json["attendees"] || [];
const formattedList = attendees
  .filter(a => a.responseStatus !== 'declined')
  .map(a => {
    const status = a.responseStatus === 'accepted' ? '✅' : '❓';
    return `${status} ${a.email.split('@')[0]}`;
  })
  .join(', ');
return formattedList || 'No attendees listed';

Scaling Beyond 200+ meetings/day+ Records

If your volume exceeds 200+ meetings/day records, apply these adjustments.

1

Implement batch processing

Group multiple calendar checks into single API calls using N8n's HTTP Request node with batch parameters. This reduces API calls from 200+ to 10-15 per polling cycle.

2

Add intelligent filtering

Use code nodes to filter out recurring standup meetings or events without attendees. This prevents reminder spam and reduces Slack message volume by 40-60% in most organizations.

3

Split workflows by calendar

Create separate workflows for different team calendars instead of monitoring all calendars in one workflow. This isolates failures and makes debugging easier when one team's calendar has issues.

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 need custom reminder logic or handle more than 1000 calendar events per month. N8n's code nodes let you build complex time calculations and custom message formats that Zapier can't match. The polling trigger gives you precise control over when reminders fire. Skip N8n if you want zero maintenance - Zapier's Google Calendar integration handles OAuth refreshes automatically while N8n requires occasional credential updates.

Cost

This workflow burns about 2 executions per reminder (1 for calendar check, 1 for Slack message). At 100 meetings per month, that's 200 executions total. N8n cloud starts at $20/month for 5000 executions, so you've got plenty of headroom. Make would cost $10.59/month for the same volume on their Core plan. Zapier Professional runs $49/month. N8n costs twice as much as Make but includes unlimited workflow complexity.

Tradeoffs

Make's Google Calendar trigger fires instantly when events are created or updated, while N8n polls every few minutes. That's a real advantage for time-sensitive reminders. Zapier has better error handling with automatic retries and clear failure notifications in their dashboard. N8n's error messages require digging into execution logs. But N8n wins on customization - you can build complex conditional logic, format messages with code, and add features like attendee-specific reminders that neither competitor handles well.

You'll hit Google's API rate limits if you poll too aggressively - stick to 5-minute intervals maximum or Google blocks requests for an hour. The Calendar API sometimes returns events with inconsistent time zones, especially for recurring meetings. Add timezone conversion code or reminders for Pacific meetings will fire at wrong times for Eastern attendees. Slack's chat:write permission expires if your app isn't used for 30+ days, breaking the workflow silently until you reauthorize.

Ideas for what to build next

  • Add post-meeting follow-up automationCreate a second workflow that sends meeting recap templates to Slack 5 minutes after calls end, with action items and next steps prompts.
  • Build attendee-specific reminder routingSend DMs to specific attendees based on their role or meeting importance instead of broadcasting to channels. Use attendee email domains to determine notification priority.
  • Connect meeting analytics trackingLog reminder delivery success, meeting attendance rates, and on-time arrival stats to Google Sheets for team productivity reporting and calendar optimization insights.

Related guides

Was this guide helpful?
Google Calendar + Slack overviewn8n profile →