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

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

scheduled

Use case type

notification

Real-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.

/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.

Google Workspace or personal Gmail account with calendar events
Slack workspace with channel posting permissions
Microsoft 365 account with Power Automate access
Admin or permission to install apps in target Slack workspace

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Event Summary
Start DateTime
6 optional fieldsβ–Έ show
End DateTime
Location
Meeting Organizer
Description
Attendees Count
Event Status

Step-by-Step Setup

1

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.

  1. 1Click My flows in the left sidebar
  2. 2Click New flow button
  3. 3Select Scheduled cloud flow
  4. 4Name the flow 'Daily Agenda Slack Post'
  5. 5Set repeat every 1 Day at 08:00
βœ“ What you should see: You should see the Recurrence trigger configured to run daily at 8am with your flow name displayed at the top.
⚠
Common mistake β€” Make sure to select your correct timezone from the dropdown or your posts will arrive at the wrong time.
2

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.

  1. 1Click New step below Recurrence
  2. 2Type 'Google Calendar' in search box
  3. 3Select Google Calendar connector
  4. 4Choose Get events (V3) action
βœ“ What you should see: The Google Calendar Get events action appears with empty configuration fields ready for setup.
3

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.

  1. 1Click Sign in button
  2. 2Select your Google account
  3. 3Click Allow to grant calendar permissions
  4. 4Wait for redirect back to Power Automate
βœ“ What you should see: Your Google email address should appear as the connected account in the Calendar ID dropdown.
⚠
Common mistake β€” If you have multiple Google accounts, make sure you select the one containing the calendar you want to share.
Power Automate settings
Connection
Choose a connection…Add
click Add
Google Calendar
Log in to authorize
Authorize Power Automate
popup window
βœ“
Connected
green checkmark
4

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.

  1. 1Select your email from Calendar ID dropdown
  2. 2Click in Time min field, select Expression tab
  3. 3Type utcNow() and click OK
  4. 4Click in Time max field, select Expression tab
  5. 5Type addDays(utcNow(), 1) and click OK
βœ“ What you should see: Time min shows utcNow() and Time max shows addDays(utcNow(), 1) in the parameter fields.
⚠
Common mistake β€” Don't use static dates here or you'll get the same day's events forever.
5

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.

  1. 1Click New step below Google Calendar action
  2. 2Search for 'Slack' in the connector list
  3. 3Select Slack connector
  4. 4Choose Post message action
βœ“ What you should see: The Slack Post message action appears with Channel, Message text, and other configuration options.
6

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.

  1. 1Click Sign in to Slack
  2. 2Select your Slack workspace from the list
  3. 3Review permissions and click Allow
  4. 4Wait for redirect confirmation
βœ“ What you should see: Your Slack workspace name appears in the connection field and channel dropdown populates with available channels.
⚠
Common mistake β€” You need admin permissions to connect Power Automate to your Slack workspace.
7

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.

  1. 1Click the Channel dropdown
  2. 2Select your target channel from the list
  3. 3Note the channel ID that appears
βœ“ What you should see: Your selected channel name displays in the Channel field with its corresponding ID.
⚠
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 Record: {{summary}} {{description}}
start.dateTime: {{start.dateTime}}
end.dateTime: {{end.dateTime}}
#sales
πŸ”” New Record: Jane Smith
Company: Acme Corp
8

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.

  1. 1Click in Message text field
  2. 2Type 'Today's Agenda - ' and add formatDateTime(utcNow(), 'dddd, MMMM d')
  3. 3Press Enter twice for spacing
  4. 4Add dynamic content for event details using calendar fields
βœ“ What you should see: Message text contains a mix of static text and dynamic content tokens from your Google Calendar events.
⚠
Common mistake β€” Power Automate automatically creates an Apply to each loop when you reference calendar event fields.
9

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.

  1. 1Click inside the Apply to each loop
  2. 2Add formatDateTime expression for start time
  3. 3Insert event Summary from dynamic content
  4. 4Add Location from dynamic content with condition check
  5. 5Add line break characters \n between fields
βœ“ What you should see: Each calendar event will display with formatted time, title, and location in a readable structure.
⚠
Common mistake β€” Not all events have locations, so wrap location in a condition to avoid empty fields.
10

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.

  1. 1Click Save button in top toolbar
  2. 2Click Test button
  3. 3Select 'Manually' option
  4. 4Click Test to run immediately
  5. 5Check Slack channel for the posted message
βœ“ What you should see: The test completes successfully and you see today's formatted agenda posted in your target Slack channel.
⚠
Common mistake β€” If the test fails, check that both Google and Slack connections are properly authenticated and you have calendar events for today.

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'
      )
    ),
    ''
  )
)
Power Automate
β–Ά Test flow
executed
βœ“
Google Calendar
βœ“
Slack
Slack
πŸ”” notification
received

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 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.

Cost

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.

Tradeoffs

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

Was this guide helpful?
← Google Calendar + Slack overviewPower Automate profile β†’