Beginner~12 min setupProductivity & CommunicationVerified April 2026
Google Calendar logo
Slack logo

How to Send Daily Google Calendar Agenda to Slack with Make

Automatically post your daily calendar agenda to a Slack channel every morning at 8am with meeting times, titles, and locations.

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

Best for

Teams that want formatted daily agenda posts with consistent 8am delivery and fallback handling for empty days.

Not ideal for

Users who only need simple event notifications or don't have regular daily meeting schedules to justify automation.

Sync type

scheduled

Use case type

notification

Real-World Example

💡

A 25-person marketing agency uses this to post daily agendas in their #general channel every morning at 8am. Before automation, their project managers manually checked calendars and typed agenda summaries 3-4 times per week, often forgetting on busy days. Now the team sees exactly what meetings are happening each day, with locations for client visits clearly marked.

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 Make

Copy the pre-built Make blueprint and paste it straight into Make. 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 events to test
Slack workspace where you can post messages
Admin access to the target Slack channel
Make account with available operations

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Event Titlesummary
Start Timestart.dateTime
4 optional fields▸ show
Locationlocation
All Day Flagstart.date
Event Descriptiondescription
Attendee Countattendees

Step-by-Step Setup

1

Dashboard > Create scenario > Schedule

Create New Scenario

Set up a new Make scenario to handle the daily calendar posting. This will be the container for all your automation modules.

  1. 1Click 'Create a new scenario' from your Make dashboard
  2. 2Click the gray '+' circle in the center of the canvas
  3. 3Search for 'Schedule' in the app list
  4. 4Select 'Schedule' > 'Every day'
What you should see: You should see a clock icon module on your canvas labeled 'Every day'.
2

Schedule module > Settings

Configure Daily Schedule

Set the trigger to fire at 8am daily. This timing ensures your team sees the agenda before their first meetings.

  1. 1Click on the Schedule module to open its settings
  2. 2Set 'Time' to '08:00'
  3. 3Select your timezone from the dropdown
  4. 4Leave 'Days' set to 'Every day'
What you should see: The module should show '08:00' and your timezone in the module preview.
Common mistake — Don't use 'Every X hours' - it won't respect the 8am timing you want.
3

Canvas > + > Google Calendar > Search Events

Add Google Calendar Module

Connect Google Calendar to fetch today's events. Make will pull all events from your primary calendar by default.

  1. 1Click the '+' button to the right of the Schedule module
  2. 2Search for 'Google Calendar' and select it
  3. 3Choose 'Search Events' from the action list
  4. 4Click 'Create a connection' and authenticate with Google
What you should see: You should see 'Connected' status and a green checkmark next to your Google account.
Common mistake — Use 'Search Events' not 'Watch Events' - you want to pull events on schedule, not react to changes.
4

Google Calendar module > Settings

Set Calendar Date Range

Configure the module to fetch only today's events. This prevents yesterday's or tomorrow's meetings from appearing in the daily agenda.

  1. 1Set 'Calendar ID' to 'primary' (or select your work calendar)
  2. 2In 'Time Min' field, click the function button and select 'formatDate(now; YYYY-MM-DD)'
  3. 3In 'Time Max' field, use 'formatDate(addDays(now;1); YYYY-MM-DD)'
  4. 4Set 'Max results' to 50
What you should see: The Time Min and Time Max fields should show today's date and tomorrow's date in YYYY-MM-DD format.
Common mistake — Don't hardcode dates - use the formatDate functions or your agenda will show the same day forever.
5

Canvas > + > Text parser > Replace

Add Text Formatter for Agenda

Create a text formatter to build the agenda message. This will combine all events into a readable Slack post.

  1. 1Click '+' after the Google Calendar module
  2. 2Search for 'Text parser' and select it
  3. 3Choose 'Replace' action
  4. 4Leave all fields empty for now - we'll configure in the next step
What you should see: A Text parser module should appear connected to Google Calendar.
Common mistake — Don't use 'Tools > Set variable' here - it won't handle multiple events properly.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
6

Text parser module > Settings

Build Agenda Template

Configure the text formatter to create a formatted agenda. This template will repeat for each calendar event.

  1. 1Click on the Text parser module
  2. 2In 'Text' field, enter: '{{1.summary}} - {{formatDate(1.start.dateTime; HH:mm)}} {{if(1.location; "at " + 1.location; "")}}'
  3. 3Leave 'Search for' empty
  4. 4Leave 'Replace with' empty
  5. 5Click 'OK'
What you should see: The module should show your template with Google Calendar field references.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
message template
🔔 New Record: {{summary}} {{description}}
start.dateTime: {{start.dateTime}}
end.dateTime: {{end.dateTime}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
7

Canvas > + > Tools > Array aggregator

Add Array Aggregator

Use an aggregator to combine multiple events into a single message. Without this, Slack would receive separate messages for each meeting.

  1. 1Click '+' after the Text parser
  2. 2Search for 'Tools' and select it
  3. 3Choose 'Array aggregator'
  4. 4Set 'Source Module' to the Google Calendar module
  5. 5In 'Text' field, map the output from Text parser
What you should see: The aggregator should show it will collect data from Google Calendar and combine text outputs.
Common mistake — Always set Source Module to Google Calendar, not Text parser, or the aggregation won't work correctly.
8

Canvas > + > Slack > Create a Message

Add Slack Connection

Connect Slack to post the formatted agenda. Make will need permission to post to your selected channel.

  1. 1Click '+' after the Array aggregator
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Create a Message'
  4. 4Click 'Create a connection' and authorize Make with Slack
What you should see: You should see your Slack workspaces listed and a 'Connected' status.
9

Slack module > Settings

Configure Slack Message

Set up the Slack message with your agenda content. This formats the final post your team will see each morning.

  1. 1Select your target channel from the 'Channel' dropdown
  2. 2In 'Text' field, enter: 'Today\'s Agenda:\n{{join(4.array; "\n")}}'
  3. 3Leave 'Username' and other fields as default
  4. 4Set 'Parse' to 'Full'
What you should see: The message preview should show 'Today's Agenda:' followed by your aggregated events.
Common mistake — Use double backslashes (\\n) for line breaks in the text field - single backslash won't format properly.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
10

Connection line > Add router > +

Add No Events Handler

Create a fallback for days with no meetings. Without this, Make throws an error on empty days.

  1. 1Right-click the line between Google Calendar and Text parser
  2. 2Select 'Add router'
  3. 3Click the '+' on the new router path
  4. 4Add another Slack > Create a Message module
What you should see: You should see a router diamond with two paths - one to your existing flow, one to a new Slack module.
Common mistake — Add the router on the connection AFTER Google Calendar, not before, or it won't detect empty results.
11

Second Slack module > Settings

Configure Empty Day Message

Set up the alternate Slack message for days without events. This keeps your team informed even on meeting-free days.

  1. 1Click on the new Slack module
  2. 2Select the same channel as your main message
  3. 3In 'Text' field, enter: 'No meetings scheduled for today! 🎉'
  4. 4Click 'OK'
What you should see: The second Slack module should be configured with your empty day message.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
12

Router path > Filter settings

Set Router Filters

Add filters to control which path executes based on event count. This ensures the right message goes out.

  1. 1Click the wrench icon on the path to your main flow
  2. 2Set condition: 'Google Calendar: Total number of bundles > 0'
  3. 3Click the wrench on the path to the empty message
  4. 4Set condition: 'Google Calendar: Total number of bundles = 0'
What you should see: Both paths should show filter icons with your conditions.
Common mistake — Use 'Total number of bundles' not 'items' count - bundles is the correct Make terminology here.

Drop this into a Make custom function.

JavaScript — Custom Function{{if(1.start.date; 1.summary + " (All day)"; 1.summary + " - " + formatDate(1.start.dateTime; "HH:mm") + if(1.location; " at " + 1.location; ""))}}
▸ Show code
{{if(1.start.date; 1.summary + " (All day)"; 1.summary + " - " + formatDate(1.start.dateTime; "HH:mm") + if(1.location; " at " + 1.location; ""))}}

... expand to see full code

{{if(1.start.date; 1.summary + " (All day)"; 1.summary + " - " + formatDate(1.start.dateTime; "HH:mm") + if(1.location; " at " + 1.location; ""))}}
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Slack
SL
notified

Scaling Beyond 50+ events per day+ Records

If your volume exceeds 50+ events per day records, apply these adjustments.

1

Add Pagination Handling

Google Calendar API returns 50 events max per request. Add an iterator module after Google Calendar to handle multiple pages of results automatically.

2

Filter Event Types

Add filters to exclude declined events or specific calendar types. Use Google Calendar's 'Single Value Retriever' to check attendee status before processing events.

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 Make for this workflow

Use Make for this if you want reliable daily scheduling and complex text formatting. Make's array aggregator handles multiple calendar events better than Zapier's formatter, and the built-in date functions make timezone handling automatic. The visual router makes it easy to handle days with no meetings. Skip Make if you just want basic notifications - Zapier's calendar trigger is simpler for single-event alerts.

Tradeoffs

This workflow uses about 4-6 operations per day: 1 for the schedule trigger, 1 for Google Calendar search, 2-3 for text processing and aggregation, and 1 for Slack posting. That's roughly 150 operations monthly, fitting comfortably in Make's free tier (1,000 ops/month). Zapier's free tier only gives you 100 tasks monthly, so you'd hit limits in 3 weeks. N8n is free but requires hosting.

Zapier's Google Calendar trigger fires faster and has better timezone detection out of the box. N8n offers more text manipulation functions and can handle complex date math without formula syntax. But Make's visual router system makes the no-events fallback much cleaner to build and debug. The array aggregator is also more reliable than Zapier's line item handling for multiple events.

Google Calendar's API sometimes returns events in unexpected timezones, especially for imported calendars from other systems. All-day events come through with different field structures (start.date vs start.dateTime) that can break your formatting. If you have more than 50 events in a day, you'll need pagination handling. Make's text parser also struggles with special characters in meeting titles - emoji and accented characters sometimes render as question marks in Slack.

Ideas for what to build next

  • Add Weekly SummaryCreate a second scenario that posts a weekly agenda every Sunday evening showing the upcoming week's major meetings and deadlines.
  • Meeting Room ConflictsBuild a follow-up automation that checks for double-booked conference rooms and posts warnings to a facilities channel when conflicts are detected.
  • Attendance TrackingConnect to your video conferencing platform to track which daily agenda meetings actually happened and post end-of-week attendance summaries.

Related guides

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