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

How to Send Meeting Reminders with Pipedream

Automatically send Slack messages 15 minutes before Google Calendar events with meeting details and attendee lists.

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

Best for

Teams that miss meetings because they're buried in other work and need proactive Slack nudges.

Not ideal for

Teams already using Google Calendar desktop notifications or Slack's built-in calendar integration.

Sync type

scheduled

Use case type

notification

Real-World Example

šŸ’”

A 12-person marketing agency runs this workflow to ping their #general channel 15 minutes before client calls. Before automation, 30% of meetings started 5+ minutes late because team members were deep in creative work and missed calendar alerts. Now meeting punctuality improved to 95%.

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 Pipedream

Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. 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 Calendar with read access to the calendar containing meetings you want reminders for
Slack workspace admin permissions or ability to authorize apps to post messages
At least one upcoming meeting in the next hour to test the workflow properly
Pipedream account with execution credits available for scheduled workflows

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Meeting Title
Start Time
4 optional fieldsā–ø show
Meeting Link
Attendee List
Meeting Duration
Location

Step-by-Step Setup

1

Pipedream Dashboard > New > Workflow

Create new workflow in Pipedream

Log into pipedream.com and click the green New button in the top nav. Select Workflow from the dropdown menu. You'll land on the workflow builder with an empty canvas. Name your workflow 'Meeting Reminders' in the top left field.

  1. 1Click the green New button
  2. 2Select Workflow from dropdown
  3. 3Type 'Meeting Reminders' in the workflow name field
  4. 4Click Create workflow
āœ“ What you should see: You should see an empty workflow canvas with 'Meeting Reminders' as the title.
2

Workflow Canvas > Trigger > Schedule

Add scheduled trigger

Click the trigger step (first gray box) to configure when this runs. Select Schedule from the trigger options. Set it to run every 1 minute - this gives you the precision needed to catch events exactly 15 minutes before they start.

  1. 1Click the gray trigger box
  2. 2Select Schedule from the list
  3. 3Choose 'Cron scheduler' option
  4. 4Enter '* * * * *' for every minute
  5. 5Click Save
āœ“ What you should see: The trigger step shows 'Schedule - Every 1 minute' with a green checkmark.
⚠
Common mistake — Running every minute uses more execution credits but ensures you don't miss events - longer intervals risk timing gaps.
Pipedream
+
click +
search apps
Google Calendar
GO
Google Calendar
Add scheduled trigger
Google Calendar
GO
module added
3

Workflow Canvas > + > Google Calendar > List Events

Connect Google Calendar

Click the + button below the trigger to add a new step. Search for and select Google Calendar. Choose 'List Events' as the action - this pulls upcoming events to check timing. You'll be prompted to connect your Google account with calendar read permissions.

  1. 1Click the + button under the trigger
  2. 2Search for 'Google Calendar'
  3. 3Select 'List Events' action
  4. 4Click 'Connect Account'
  5. 5Authorize calendar access in the popup
āœ“ What you should see: You should see 'Connected Account' with your email address in the Google Calendar step.
4

Google Calendar Step > Configuration

Configure calendar query parameters

Set the calendar step to fetch events starting in the next 16-20 minutes. In the timeMin field, use the expression 'new Date(Date.now() + 15*60*1000).toISOString()' for 15 minutes from now. Set timeMax to 20 minutes out to catch events in your reminder window.

  1. 1Select your primary calendar from the Calendar ID dropdown
  2. 2Set timeMin to '{{new Date(Date.now() + 15*60*1000).toISOString()}}'
  3. 3Set timeMax to '{{new Date(Date.now() + 20*60*1000).toISOString()}}'
  4. 4Set maxResults to 10
  5. 5Enable singleEvents to expand recurring meetings
āœ“ What you should see: The step configuration shows your calendar selected with time range parameters filled in.
⚠
Common mistake — The 5-minute window (15-20 minutes) prevents duplicate reminders if your workflow runs slightly off schedule.
5

Workflow Canvas > + > Code > Node.js

Add filter step for upcoming events

Click + to add a Node.js code step that filters for events needing reminders. This step checks if any events were returned from the calendar query and processes only those starting in exactly 15 minutes. Without this filter, you'd send reminders constantly.

  1. 1Click + under the Google Calendar step
  2. 2Select Code > Node.js
  3. 3Name the step 'Filter Upcoming Events'
  4. 4Paste the filtering code in the editor
  5. 5Click Save
āœ“ What you should see: The code step shows 'Filter Upcoming Events' with syntax highlighting in the editor.
⚠
Common mistake — This filter is critical - without it, every scheduled run attempts to send Slack messages even when no meetings are coming up.
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Slack
SL
notified
6

Workflow Canvas > + > Slack > Send Message to Channel

Add Slack connection

Add another step and select Slack from the apps list. Choose 'Send Message to Channel' as the action. Connect your Slack workspace by clicking the authentication button. You'll need permissions to post messages to your target channel.

  1. 1Click + to add a new step
  2. 2Search for and select Slack
  3. 3Choose 'Send Message to Channel'
  4. 4Click 'Connect Account'
  5. 5Authorize your Slack workspace access
āœ“ What you should see: The Slack step shows 'Connected Account' with your workspace name displayed.
7

Slack Step > Message Configuration

Configure Slack message format

Select your target channel from the dropdown (like #general or #meetings). In the message text field, reference the event data from the Google Calendar step. Format it with the event title, start time, meeting link if available, and attendee list for maximum usefulness.

  1. 1Select your target channel from the Channel dropdown
  2. 2Set message text with event details
  3. 3Reference {{steps.google_calendar.events[0].summary}} for meeting title
  4. 4Add {{steps.google_calendar.events[0].hangoutLink}} for video link
  5. 5Include attendee list from the events array
āœ“ What you should see: The message preview shows properly formatted text with dynamic event data placeholders.
⚠
Common mistake — Some calendar events don't have video links - your message template should handle empty hangoutLink fields gracefully.
8

Workflow Canvas > Test

Test the complete workflow

Click the Test button in the top right to run your workflow manually. Check that it correctly identifies upcoming events and sends properly formatted Slack messages. Look for any errors in the execution log and verify the Slack message appears in your channel.

  1. 1Click the green Test button
  2. 2Watch each step execute in sequence
  3. 3Check the execution log for errors
  4. 4Verify the Slack message was sent
  5. 5Confirm message formatting looks correct
āœ“ What you should see: All steps show green checkmarks and you see a test reminder message in your Slack channel.
Pipedream
ā–¶ Deploy & test
executed
āœ“
Google Calendar
āœ“
Slack
Slack
šŸ”” notification
received
9

Workflow Canvas > Deploy

Deploy workflow to production

Once testing looks good, click the Deploy button to activate the scheduled workflow. Pipedream will now run this every minute, checking for upcoming meetings and sending reminders as needed. Monitor the execution history for the first few hours to catch any issues.

  1. 1Click the Deploy button in the top right
  2. 2Confirm deployment in the popup
  3. 3Check the status changes to 'Active'
  4. 4Monitor the Executions tab for first few runs
  5. 5Watch for any failed executions
āœ“ What you should see: The workflow status shows 'Active' and you see regular executions in the history tab.
⚠
Common mistake — Monitor closely for the first day - calendar permission issues or Slack rate limits sometimes appear only after deployment.

This Node.js code goes in the filter step between Google Calendar and Slack. It checks for events starting in exactly 15 minutes and formats attendee data properly.

JavaScript — Code Stepexport default defineComponent({
ā–ø Show code
export default defineComponent({
  async run({ steps, $ }) {
    const events = steps.google_calendar?.events || [];

... expand to see full code

export default defineComponent({
  async run({ steps, $ }) {
    const events = steps.google_calendar?.events || [];
    
    if (events.length === 0) {
      $.flow.exit('No events found');
      return;
    }
    
    const now = new Date();
    const reminderTime = new Date(now.getTime() + 15 * 60 * 1000);
    const targetWindow = 2 * 60 * 1000; // 2 minute window
    
    const upcomingEvents = events.filter(event => {
      const eventStart = new Date(event.start.dateTime || event.start.date);
      const timeDiff = Math.abs(eventStart.getTime() - reminderTime.getTime());
      return timeDiff <= targetWindow;
    });
    
    if (upcomingEvents.length === 0) {
      $.flow.exit('No events in reminder window');
      return;
    }
    
    const event = upcomingEvents[0];
    const attendeeList = event.attendees 
      ? event.attendees.map(a => a.email).join(', ')
      : 'No attendees listed';
    
    const startTime = new Date(event.start.dateTime || event.start.date)
      .toLocaleTimeString('en-US', { 
        hour: 'numeric', 
        minute: '2-digit',
        hour12: true 
      });
    
    return {
      event: event,
      formattedTime: startTime,
      attendees: attendeeList,
      hasVideoLink: !!event.hangoutLink
    };
  }
});

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 Pipedream for this if you need precise timing control and custom formatting logic that basic automation tools can't handle. The every-minute scheduling gives you exact 15-minute warning timing, and Node.js code steps let you build complex filters for meeting types and attendee formatting. Skip Pipedream if you just need basic calendar notifications - Slack's native Google Calendar integration handles simple reminders without any setup.

Cost

This workflow costs about 1 credit per execution. Running every minute burns 43,800 credits monthly, or roughly $4.38 on Pipedream's paid plans. That's significantly more expensive than Zapier ($20/month unlimited) or Make ($9/month for 10,000 operations) for this high-frequency use case. The credit consumption comes from the scheduled trigger running constantly, not the actual meeting volume.

Tradeoffs

Make handles scheduled triggers more efficiently with 15-minute intervals that don't burn through quotas as fast. Zapier's Schedule trigger works similarly but caps at 15-minute frequencies on lower plans. N8n gives you the same Node.js flexibility as Pipedream but with unlimited local execution. Power Automate's recurrence triggers are clunky for sub-15-minute timing. Pipedream wins on webhook speed and debugging tools, but the constant polling makes it expensive for this particular workflow.

You'll hit Google Calendar API rate limits if you query too many calendars simultaneously - stick to 2-3 max per workflow. Meeting attendee data sometimes comes back incomplete for external participants due to privacy settings. Recurring meetings can create timing edge cases where the 15-minute window catches the same event multiple times, especially with all-day events that don't have precise start times.

Ideas for what to build next

  • →
    Add digest mode — Modify to send one message with multiple upcoming meetings instead of individual reminders for busy calendars.
  • →
    Filter by meeting type — Only send reminders for external meetings or specific calendar categories using event metadata.
  • →
    Custom reminder timing — Add different reminder windows based on meeting duration or importance using calendar event descriptions.

Related guides

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