

How to Post Daily Agenda to Slack with Power Automate
Automatically posts your Google Calendar events 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 automatic morning agenda visibility without checking individual calendars
Not ideal for
Teams needing real-time calendar updates or complex meeting room integrations
Sync type
scheduledUse case type
notificationReal-World Example
A 12-person marketing team uses this to post the day's meetings to #general every morning at 8am. Before automation, team members had to check each other's calendars manually to see who was available for impromptu calls. Now everyone sees the day's schedule at a glance.
What Will This Cost?
Drag the slider to your expected monthly volume.
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
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Event Summary | ||
| Start DateTime | ||
6 optional fieldsβΈ show
| End DateTime | |
| Location | |
| Meeting Organizer | |
| Description | |
| Attendees Count | |
| Event Status |
Step-by-Step Setup
My flows > New flow > Scheduled cloud flow
Create scheduled flow
Navigate to make.powerautomate.com and click My flows in the left sidebar. Click New flow in the top toolbar, then select Scheduled cloud flow from the dropdown. Name it 'Daily Agenda Slack Post' and set the recurrence to Daily at 8:00 AM in your timezone.
- 1Click My flows in the left sidebar
- 2Click New flow button
- 3Select Scheduled cloud flow
- 4Name the flow 'Daily Agenda Slack Post'
- 5Set repeat every 1 Day at 08:00
Flow > New step > Google Calendar > Get events (V3)
Add Google Calendar connector
Click New step below the Recurrence trigger. Search for 'Google Calendar' in the connector search box and select it. Choose the 'Get events (V3)' action from the list. This action will fetch today's calendar events.
- 1Click New step below Recurrence
- 2Type 'Google Calendar' in search box
- 3Select Google Calendar connector
- 4Choose Get events (V3) action
Get events (V3) > Sign in
Connect Google account
Click Sign in to authenticate your Google account. A popup window will open asking for Google permissions. Grant access to view your calendar events. After successful authentication, you'll see your email address displayed in the connection field.
- 1Click Sign in button
- 2Select your Google account
- 3Click Allow to grant calendar permissions
- 4Wait for redirect back to Power Automate
Get events (V3) > Parameters
Configure calendar query
Set Calendar ID to your primary calendar (usually your email). For Time min, click the expression tab and enter utcNow() to get today's date. For Time max, use addDays(utcNow(), 1) to get tomorrow's date. This pulls all events from today only.
- 1Select your email from Calendar ID dropdown
- 2Click in Time min field, select Expression tab
- 3Type utcNow() and click OK
- 4Click in Time max field, select Expression tab
- 5Type addDays(utcNow(), 1) and click OK
Flow > New step > Slack > Post message
Add Slack connector
Click New step and search for Slack. Select the Slack connector and choose the 'Post message' action. This will send your formatted agenda to a Slack channel of your choice.
- 1Click New step below Google Calendar action
- 2Search for 'Slack' in the connector list
- 3Select Slack connector
- 4Choose Post message action
Post message > Sign in
Authenticate Slack workspace
Click Sign in to connect your Slack workspace. A new window opens asking which workspace to connect and what permissions to grant. Select your target workspace and click Allow. The connection will show your workspace name once complete.
- 1Click Sign in to Slack
- 2Select your Slack workspace from the list
- 3Review permissions and click Allow
- 4Wait for redirect confirmation
Post message > Channel
Select target channel
Choose the Slack channel where you want daily agendas posted from the Channel dropdown. Popular choices are #general, #team, or a dedicated #calendar channel. The dropdown shows all channels the connected user has access to.
- 1Click the Channel dropdown
- 2Select your target channel from the list
- 3Note the channel ID that appears
start.dateTime: {{start.dateTime}}
end.dateTime: {{end.dateTime}}
Post message > Message text
Build message format
Click in the Message text field and build your agenda format. Start with static text like 'Today's Agenda:' then add dynamic content. Use formatDateTime() to show readable dates and loop through calendar events to display title, start time, and location for each meeting.
- 1Click in Message text field
- 2Type 'Today's Agenda - ' and add formatDateTime(utcNow(), 'dddd, MMMM d')
- 3Press Enter twice for spacing
- 4Add dynamic content for event details using calendar fields
Apply to each > Message formatting
Format event details
Within the automatically created Apply to each loop, format each event's details. Use expressions like formatDateTime(items('Apply_to_each')?['start']?['dateTime'], 'h:mm tt') for readable times. Include event summary (title) and location if available. Add line breaks between events.
- 1Click inside the Apply to each loop
- 2Add formatDateTime expression for start time
- 3Insert event Summary from dynamic content
- 4Add Location from dynamic content with condition check
- 5Add line break characters \n between fields
Flow > Save > Test > Manually
Test the flow
Click Save in the top toolbar, then click Test. Choose 'Manually' and click Test again. The flow will run immediately and post today's agenda to your selected Slack channel. Check the run history to see if any errors occurred and verify the message appeared in Slack.
- 1Click Save button in top toolbar
- 2Click Test button
- 3Select 'Manually' option
- 4Click Test to run immediately
- 5Check Slack channel for the posted message
Add this expression in the Message text field to create a cleaner agenda format with conditional location display and meeting duration calculations.
JavaScript β Code Stepconcat(βΈ Show code
concat( 'Today\'s Agenda - ', formatDateTime(utcNow(), 'dddd, MMMM d'), '\n\n', join(
... expand to see full code
concat(
'Today\'s Agenda - ', formatDateTime(utcNow(), 'dddd, MMMM d'), '\n\n',
join(
select(
body('Get_events_(V3)')?['value'],
concat(
formatDateTime(item()?['start']?['dateTime'], 'h:mm tt'),
' - ',
item()?['summary'],
if(
empty(item()?['location']),
'',
concat('\nπ ', item()?['location'])
),
'\n\n'
)
),
''
)
)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
Use Microsoft Power Automate for this if you're already in the Microsoft ecosystem and want native integration with Outlook/Teams calendars alongside Google Calendar. The scheduled trigger is reliable and the expression builder handles date formatting well. Skip Power Automate if you need sub-minute precision or complex calendar filtering logic β n8n handles those better.
The math is simple: this runs once daily, so 30 runs per month. Power Automate includes 2,000 runs free with Microsoft 365, making this essentially free. Zapier's cheapest plan gives you 750 runs for $20/month, so Power Automate saves you $240 annually on this workflow alone.
Make has better calendar filtering with more granular date controls and visual debugging when your agenda format breaks. Zapier's Formatter handles timezone conversion more intuitively than Power Automate's convertTimeZone expressions. n8n gives you full JavaScript control for complex agenda layouts and can batch multiple days into one message. Pipedream excels at parsing attendee data and creating rich Slack message formatting. But Power Automate wins if you need approval workflows for meeting changes or integration with Microsoft Bookings.
You'll hit timezone confusion within the first week β Google returns UTC while Slack users expect local time. All-day events break your time formatting because they don't have dateTime properties, only date strings. The Apply to each loop can timeout if someone has 100+ events in a day, and Power Automate doesn't batch calendar API calls efficiently.
Ideas for what to build next
- βAdd weekend skip logic β Modify the flow to skip posting on Saturdays and Sundays when most teams don't have meetings.
- βInclude meeting attendee names β Expand the message format to show who's attending each meeting for better coordination.
- βCreate weekly summary version β Build a separate flow that posts the full week's agenda every Sunday evening for planning ahead.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup