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

How to Send Meeting Reminders with Power Automate

Send Slack messages 15 minutes before Google Calendar events with meeting title, link, and attendees to prevent tardiness.

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

Best for

Microsoft 365 teams who want meeting alerts in Slack without third-party scheduling tools

Not ideal for

Teams using multiple calendar systems or needing sub-minute precision timing

Sync type

scheduled

Use case type

notification

Real-World Example

šŸ’”

A 25-person marketing team at a SaaS company uses this to send #general Slack alerts 15 minutes before important client calls and team standups. Before automation, 3-4 people joined late to every meeting because they stayed buried in Slack and forgot to check their calendar.

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 Power Automate

Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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.

Microsoft 365 account with Power Automate license (included in most business plans)
Google Calendar with read permissions for the target calendar
Slack workspace membership with permission to add apps
Admin approval for Slack Power Automate integration in your workspace

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Meeting Subject
Start Time
Event ID
3 optional fieldsā–ø show
Meeting URL
Attendees
Location

Step-by-Step Setup

1

Create > Scheduled cloud flow

Create a scheduled cloud flow

Go to make.powerautomate.com and sign in with your Microsoft account. Click 'Create' in the left sidebar, then select 'Scheduled cloud flow'. Name it 'Meeting Reminders' and set it to run every 5 minutes. This frequency catches events 15 minutes before they start without missing any.

  1. 1Click 'Create' in the left navigation
  2. 2Select 'Scheduled cloud flow'
  3. 3Name: 'Meeting Reminders'
  4. 4Set repeat interval to 5 minutes
āœ“ What you should see: You should see a flow designer with a 'Recurrence' trigger set to every 5 minutes.
⚠
Common mistake — Don't set the interval longer than 5 minutes or you'll miss some meetings that need 15-minute warnings.
2

New step > Google Calendar > Get calendar view of events (V3)

Add Google Calendar connection

Click '+ New step' and search for 'Google Calendar'. Select 'Get calendar view of events (V3)'. You'll need to sign in to your Google account and grant calendar access. Choose the calendar you want to monitor - usually your primary calendar unless you have dedicated meeting calendars.

  1. 1Click '+ New step'
  2. 2Search 'Google Calendar' in the connector search
  3. 3Select 'Get calendar view of events (V3)'
  4. 4Sign in to Google and authorize access
āœ“ What you should see: You should see the Google Calendar action with connection established and calendar dropdown populated.
⚠
Common mistake — Use the V3 version specifically - the older V1 connector has timeout issues with busy calendars.
3

Get calendar view of events > Parameters

Set time window for upcoming events

Configure the calendar query to find events starting in exactly 15 minutes. Set 'Start time' to addMinutes(utcNow(),15) and 'End time' to addMinutes(utcNow(),16). This 1-minute window captures events that start 15 minutes from now. Set 'Max results' to 50 to handle busy calendars.

  1. 1Click in 'Start time' field
  2. 2Enter expression: addMinutes(utcNow(),15)
  3. 3Click in 'End time' field
  4. 4Enter expression: addMinutes(utcNow(),16)
  5. 5Set 'Max results' to 50
āœ“ What you should see: The time fields should show the addMinutes expressions, and Max results should display 50.
4

New step > Control > Condition

Add condition to check for events

Add a 'Condition' action to check if any events were found. Power Automate will still run every 5 minutes even with no events, so this prevents empty Slack messages. Set the condition to check if the length of the calendar events array is greater than 0.

  1. 1Click '+ New step'
  2. 2Search for 'Condition' under Control
  3. 3Select 'Condition'
  4. 4Set left value to length(outputs('Get_calendar_view_of_events_(V3)')?['body/value'])
  5. 5Set condition to 'is greater than'
  6. 6Set right value to 0
āœ“ What you should see: You should see a condition block with 'Yes' and 'No' branches.
⚠
Common mistake — The expression must reference the exact name of your calendar step - if you renamed it, update the expression accordingly.
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Slack
SL
notified
5

Condition Yes branch > Apply to each

Add Apply to each loop

In the 'Yes' branch, add an 'Apply to each' control to process multiple events. Set the input to the calendar events array from the previous step. This handles cases where multiple meetings start at the same 15-minute mark.

  1. 1Click 'Add an action' in the Yes branch
  2. 2Search for 'Apply to each'
  3. 3Select 'Apply to each' under Control
  4. 4Set output from previous step as input
āœ“ What you should see: You should see an 'Apply to each' loop inside the Yes branch.
6

Apply to each > New step > Slack > Post message

Connect to Slack

Inside the Apply to each loop, add a new step and search for Slack. Select 'Post message' action. Sign in to your Slack workspace and authorize the connection. You'll need to be a Slack admin or have the workspace owner approve the Power Automate app.

  1. 1Click 'Add an action' inside Apply to each
  2. 2Search for 'Slack'
  3. 3Select 'Post message'
  4. 4Sign in to Slack and authorize
āœ“ What you should see: You should see the Slack Post message action with channel dropdown populated.
⚠
Common mistake — If you don't see all channels, the Slack connection might need admin approval in your workspace.
7

Post message > Message configuration

Configure the reminder message

Select your target Slack channel from the dropdown. Build the message using dynamic content from the calendar event. Include the meeting subject, start time, meeting URL if available, and attendee list. Format it clearly so people can quickly see what meeting is starting and who should attend.

  1. 1Select channel from dropdown
  2. 2Click in 'Message' field
  3. 3Add dynamic content for Subject, Start time
  4. 4Include Join URL and Attendees if present
  5. 5Format with line breaks and emojis
āœ“ What you should see: The message field should show a mix of static text and dynamic calendar fields.
⚠
Common mistake — Test with a meeting that has no URL or attendees - empty fields will show as blank, not error.
8

Apply to each > Compose > Post message

Add duplicate prevention

Add a 'Compose' action before the Slack message to create a unique identifier for each event. Use the event ID and start time to prevent duplicate notifications if the flow runs multiple times for the same event. Store this in a SharePoint list or variable for checking.

  1. 1Add 'Compose' action before Slack
  2. 2Set input to concat event ID and start time
  3. 3Add condition to check if this combo was processed
  4. 4Only send Slack message if not duplicate
āœ“ What you should see: You should see deduplication logic that prevents the same meeting reminder twice.
⚠
Common mistake — Without deduplication, delayed flow runs can send multiple reminders for the same meeting.
9

Save > Test > Manually

Test with upcoming meeting

Create a test calendar event 20 minutes from now. Save and manually run your flow to test the logic. Check that it finds no events (since it looks for 15-minute window). Then wait until 15 minutes before your test meeting and let it run automatically.

  1. 1Click 'Save' in top right
  2. 2Click 'Test' button
  3. 3Select 'Manually' and click 'Test'
  4. 4Create a calendar event 20 minutes out
  5. 5Run the test and verify no message sent
āœ“ What you should see: The test run should complete successfully but send no Slack message since no events are 15 minutes away.
Power Automate
ā–¶ Test flow
executed
āœ“
Google Calendar
āœ“
Slack
Slack
šŸ”” notification
received
10

Flow details > Turn on > Run history

Enable and monitor the flow

Turn on the flow and monitor it for the first few runs. Check the run history to see successful executions and any failures. Watch for calendar permissions issues or Slack rate limiting with busy schedules. Set up email notifications for flow failures so you know when reminders stop working.

  1. 1Click 'Turn on' to activate the flow
  2. 2Go to 'Run history' tab
  3. 3Monitor first few executions
  4. 4Set up failure notifications in Settings
āœ“ What you should see: You should see regular successful runs every 5 minutes in the run history.
⚠
Common mistake — Monitor closely for the first day - calendar time zone issues can cause reminders to fire at wrong times.

Use Power Fx expressions to format attendee emails into readable names and handle missing meeting URLs gracefully. Add this in a Compose action before your Slack message.

JavaScript — Code Step// Format attendees list
ā–ø Show code
// Format attendees list
if(empty(items('Apply_to_each')?['attendees']), 
  'No attendees listed',

... expand to see full code

// Format attendees list
if(empty(items('Apply_to_each')?['attendees']), 
  'No attendees listed',
  join(
    select(
      items('Apply_to_each')?['attendees'],
      if(contains(item()?['displayName'], '@'),
        first(split(item()?['displayName'], '@')),
        item()?['displayName']
      )
    ),
    ', '
  )
)

// Handle meeting URLs with fallback
if(not(empty(items('Apply_to_each')?['hangoutLink'])),
  concat('šŸŽ„ ', items('Apply_to_each')?['hangoutLink']),
  if(not(empty(items('Apply_to_each')?['location'])),
    concat('šŸ“ ', items('Apply_to_each')?['location']),
    'šŸ“… Check calendar for details'
  )
)

Scaling Beyond 20+ meetings per day across team calendars+ Records

If your volume exceeds 20+ meetings per day across team calendars records, apply these adjustments.

1

Implement smart batching

Group multiple meeting reminders starting within the same 5-minute window into one Slack message. Prevents notification fatigue when people have back-to-back calls.

2

Add rate limiting protection

Track how many reminders you've sent per hour and pause the flow if it exceeds 50 messages. Prevents hitting Slack's message rate limits during conference-heavy days.

3

Use calendar filtering

Only process calendars from key team members or filter by meeting importance. Processing every employee's calendar creates unnecessary API calls and reminder noise.

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 Microsoft Power Automate for this if your team already lives in the Microsoft ecosystem and wants native integration with Outlook/Teams calendars alongside Google Calendar. The 5-minute scheduled trigger works well for meeting reminders where exact timing isn't critical. You get unlimited runs on most business plans, making it cost-effective for active teams. Skip Power Automate if you need sub-minute precision or complex calendar logic - Make handles conditional triggers better.

Cost

Real math: each flow run consumes 1 API call to Google Calendar plus 1 to Slack per meeting found. A team with 15 meetings/day runs 288 times daily (every 5 minutes) but only sends ~15 Slack messages. That's roughly 300 API calls/day, well within Power Automate's generous limits. Zapier would cost $20/month for the same volume while Power Automate includes this in most $5/user Office plans.

Tradeoffs

Make beats Power Automate on complex calendar filtering - it can check attendee domains, parse meeting descriptions, and handle multiple calendar sources in one scenario. Zapier has better Slack formatting options with their Formatter tool. n8n gives you precise timing control down to the minute instead of 5-minute intervals. But Power Automate wins on ease of use and Microsoft 365 integration. Non-technical teams can build and modify this flow without learning webhook concepts or complex expressions.

You'll hit Google Calendar's time zone complexity first - events stored in UTC but displayed in local time zones cause reminders to fire at wrong hours. The attendees array often lacks display names, showing email addresses instead of readable names in Slack. Power Automate's 5-minute minimum interval means you can't achieve perfect 15-minute timing - some reminders arrive 14-19 minutes early depending on when the flow runs. Slack's threading gets messy if you send reminders to busy channels with lots of concurrent conversations.

Ideas for what to build next

  • →
    Add snooze functionality — Let people react with ā° emoji to get another reminder in 5 minutes if they're still busy.
  • →
    Filter by calendar importance — Only send reminders for meetings marked as 'Busy' or 'Important' to reduce notification noise.
  • →
    Include agenda from meeting notes — Parse the event description to extract agenda items and include key points in the Slack reminder.

Related guides

Was this guide helpful?
← Google Calendar + Slack overviewPower Automate profile →