Intermediate~15 min setupCommunication & EmailVerified April 2026
Slack logo
Gmail logo

How to Forward Gmail Meeting Notes to Slack with Power Automate

Monitors Gmail for emails containing meeting notes or action items and forwards them to the appropriate Slack channel so your team stays informed without being CC'd.

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 receive external meeting confirmations and notes via Gmail and need those updates visible in Slack without manual forwarding.

Not ideal for

Teams using Outlook instead of Gmail — use the Outlook connector in Power Automate instead, which has native webhook support and fires faster.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 20-person consulting firm receives external meeting recaps from clients via Gmail — project managers were manually copying notes into Slack channels, which took 5-10 minutes per email and often happened hours late. After this flow, any email tagged 'meeting-notes' hits #project-updates in under 3 minutes with the sender, subject, and body snippet included. The team stopped missing action items buried in inboxes.

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.

Gmail account with OAuth access — must be able to authorize third-party apps (check Google Workspace admin settings if on a company account)
Slack workspace admin or permission to install apps — required to authorize the Power Automate Slack connector
Power Automate account — free tier works but limits polling to every 3 minutes; Plan 1 ($15/user/month) enables 1-minute polling
Gmail label or consistent subject naming convention for meeting-related emails — needed for the trigger filter to work accurately
Target Slack channel created and the Power Automate bot added to it before the flow runs

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Message ID
Subject
From
Received Time
Body Preview
Slack Channel Name
Compose Output (formatted message)
1 optional field▸ show
To

Step-by-Step Setup

1

make.powerautomate.com > My flows > + New flow > Automated cloud flow

Open Power Automate and create a new Automated cloud flow

Go to make.powerautomate.com and sign in. In the left sidebar, click 'My flows', then click '+ New flow' at the top. Select 'Automated cloud flow' from the dropdown — this is what lets Gmail trigger the flow when a new email arrives. Give the flow a name like 'Gmail Meeting Notes to Slack' so it's easy to find later.

  1. 1Sign in at make.powerautomate.com
  2. 2Click 'My flows' in the left sidebar
  3. 3Click '+ New flow' at the top of the page
  4. 4Select 'Automated cloud flow' from the dropdown
  5. 5Enter a flow name and click 'Skip' on the trigger picker to set it manually
What you should see: You should see the flow designer canvas open with an empty trigger block at the top labeled 'Choose a trigger'.
Common mistake — Do not select 'Instant cloud flow' — that requires manual triggering. You need 'Automated cloud flow' for Gmail to fire this automatically.
2

Flow Designer > Trigger block > Search 'Gmail' > When a new email arrives (V3)

Add the Gmail trigger for new emails

Click the empty trigger block and type 'Gmail' in the connector search bar. Select the Gmail connector from the results. Choose the trigger 'When a new email arrives (V3)' — this is the most current version and supports label and subject filters. Power Automate polls Gmail on a schedule; the minimum interval on most plans is 1 minute.

  1. 1Click the trigger block labeled 'Choose a trigger'
  2. 2Type 'Gmail' in the search bar
  3. 3Select the Gmail connector
  4. 4Click 'When a new email arrives (V3)'
What you should see: A trigger configuration panel opens on the right side with fields for Label, Subject Filter, From, and other options.
Common mistake — The V2 trigger still appears in search results but lacks label filtering. Always pick V3.
Power Automate
+
click +
search apps
Slack
SL
Slack
Add the Gmail trigger for ne…
Slack
SL
module added
3

Trigger config panel > Sign in > Google OAuth popup

Connect your Gmail account

After selecting the trigger, Power Automate will prompt you to sign in to Gmail. Click 'Sign in' and complete Google's OAuth flow in the popup window. If your Google Workspace enforces OAuth app restrictions, you may need an admin to whitelist Power Automate's app ID before this step works. Once connected, the connection will appear under 'Connections' in the left sidebar for reuse.

  1. 1Click 'Sign in' in the Gmail trigger config panel
  2. 2Select your Google account in the popup
  3. 3Click 'Allow' to grant Power Automate access to Gmail
  4. 4Return to the flow designer — the trigger panel should now show your email address
What you should see: Your Gmail address appears in the trigger config panel and the connection is listed as active.
Common mistake — If your org uses a Google Workspace account with restricted OAuth, the popup will fail silently. Check Google Admin Console > Security > API controls > App Access Control before debugging Power Automate.
Power Automate settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Power Automate
popup window
Connected
green checkmark
4

Flow Designer > Gmail trigger config panel > Label / Subject Filter / Include Attachments / Fetch Only Unread

Configure Gmail trigger filters

In the trigger config panel, set 'Label' to a Gmail label you use for meeting notes (e.g., 'meeting-notes') or leave it as 'INBOX' to catch all incoming mail. Set 'Subject Filter' to a keyword like 'meeting' or 'action items' — Power Automate checks if the subject contains this string. Set 'Include Attachments' to No unless you need to forward files. Set 'Fetch Only Unread Emails' to Yes to avoid reprocessing old messages.

  1. 1Set 'Label' to 'meeting-notes' or 'INBOX'
  2. 2Enter a subject keyword like 'meeting' in the Subject Filter field
  3. 3Set 'Include Attachments' to No
  4. 4Set 'Fetch Only Unread Emails' to Yes
  5. 5Set 'Importance' to Any
What you should see: Trigger config panel shows your chosen label and subject filter saved. No errors or yellow warning icons.
Common mistake — The Subject Filter is a contains match, not regex. If you type 'meeting', it will also trigger on emails like 'Marketing meeting canceled'. Use a dedicated Gmail label instead for precision.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Gmail
GM
notified
5

Flow Designer > + New step > Control > Condition

Add a Condition to validate meeting-related content

Click '+ New step' below the trigger. Search for 'Condition' and select it under the Control category. This lets you add a second filter on top of the Gmail trigger — specifically checking the email body for keywords like 'action item', 'follow-up', or 'recap'. This prevents generic emails that happen to mention 'meeting' in the subject from flooding your Slack channel.

  1. 1Click '+ New step' below the Gmail trigger
  2. 2Type 'Condition' in the search bar
  3. 3Select 'Condition' under the Control connector
  4. 4In the left value field, click inside and select 'Body' from the Gmail dynamic content panel
  5. 5Set the operator to 'contains'
  6. 6Type 'action item' in the right value field
What you should see: A Condition block appears with a 'Yes' branch and a 'No' branch. The left value shows the Gmail Body dynamic token.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
6

Flow Designer > Condition > Yes branch > + Add an action > Data Operation > Compose

Add a Compose action to build the Slack message

Inside the 'Yes' branch of the Condition, click '+ Add an action' and search for 'Compose'. Select 'Compose' under the Data Operation connector. Use this step to build a clean, formatted message string before it hits Slack. Reference dynamic content from the Gmail trigger: Subject, From, Body Preview, and Received Time. Keeping this in a Compose step makes debugging much easier — you can see the formatted output in the run history.

  1. 1Click '+ Add an action' inside the Yes branch
  2. 2Search for 'Compose' and select it under Data Operation
  3. 3Click in the Inputs field
  4. 4Type: '📅 *Meeting Follow-up* | ' then insert the Subject dynamic token
  5. 5Press Enter and type 'From: ' then insert the From dynamic token
  6. 6Press Enter and type 'Received: ' then insert the Received Time dynamic token
  7. 7Press Enter and type 'Preview: ' then insert the Body Preview dynamic token
What you should see: The Compose action shows a multi-line template with Gmail dynamic tokens embedded. Tokens appear as highlighted pills in the input field.
Common mistake — Gmail's 'Body' field returns full HTML. Use 'Body Preview' (plain text, first 255 chars) for Slack messages unless you add an HTML-to-text conversion step. Raw HTML posted to Slack looks broken.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
7

Flow Designer > Yes branch > + Add an action > Slack > Post message (V2)

Add the Slack action to post the message

Below the Compose step, click '+ Add an action' and search for 'Slack'. Select the Slack connector and choose the action 'Post message (V2)'. Connect your Slack workspace when prompted via OAuth. In the 'Channel Name' field, enter the target channel (e.g., '#meeting-followups' or '#project-updates'). In the 'Message Text' field, select the 'Outputs' dynamic token from the Compose step above.

  1. 1Click '+ Add an action' below the Compose step
  2. 2Search for 'Slack' and select the Slack connector
  3. 3Choose 'Post message (V2)'
  4. 4Click 'Sign in' and authorize Power Automate in your Slack workspace
  5. 5Set 'Channel Name' to your target channel (e.g., meeting-followups)
  6. 6Click in 'Message Text' and select 'Outputs' from the Compose step in the dynamic content panel
What you should see: The Slack action shows your workspace name, the target channel, and the Compose Outputs token in the message field.
Common mistake — The Slack connector requires the bot to be added to the target channel manually. Go to the channel in Slack, type /invite @Power Automate, or the post action will return a 'channel_not_found' error even if the channel exists.
8

Flow Designer > + New step > Control > Scope > Configure run after

Add error handling with a Scope and Configure Run After

Wrap your Compose and Slack actions inside a Scope block for clean error handling. Click '+ New step' before the Compose action, search for 'Scope', and drag your existing actions inside it. Then add a second Scope below the first. Right-click the second Scope, select 'Configure run after', and check 'has failed' and 'has timed out'. Inside this error scope, add a 'Send an email (V2)' or 'Post message' action to alert you when the flow breaks.

  1. 1Click '+ New step' and add a Scope block (Control > Scope)
  2. 2Drag the Compose and Slack actions inside the first Scope
  3. 3Add a second Scope block below the first
  4. 4Right-click the second Scope's header and select 'Configure run after'
  5. 5Check 'has failed' and 'has timed out', then click Done
  6. 6Inside the second Scope, add a Gmail 'Send email (V2)' action to notify yourself of failures
What you should see: You should see two Scope blocks: the first labeled something like 'Main' containing your Compose and Slack steps, and the second labeled 'Error Handler' with a failure notification action inside.
Common mistake — If you skip this step, failed runs are silent — Power Automate won't alert you and emails will be dropped without any notification.
Power Automate
▶ Test flow
executed
Slack
Gmail
Gmail
🔔 notification
received
9

Flow Designer > Save > Test > Manually > Trigger now

Test the flow with a real Gmail message

Click 'Save' in the top right, then click 'Test' and select 'Manually' to trigger an immediate test run. Send yourself a Gmail email with your configured subject keyword and body text (include 'action item' in the body so the Condition passes). Within 1-3 minutes, Power Automate should detect the email and post to Slack. Click 'Flow checker' before testing to catch any configuration errors.

  1. 1Click 'Save' in the top right corner
  2. 2Click 'Test' next to the Save button
  3. 3Select 'Manually' and click 'Test'
  4. 4Send a test Gmail to yourself with 'meeting' in the subject and 'action item' in the body
  5. 5Return to Power Automate and click 'Run flow'
  6. 6Watch the run history — green checkmarks indicate success on each step
What you should see: Each step in the flow shows a green checkmark in the run history. The Slack channel receives a formatted message with the email subject, sender, received time, and body preview.
Common mistake — Power Automate's Gmail trigger polls every 1 minute on Plan 1 and every 3 minutes on the free tier. If nothing fires, wait 3 minutes before assuming something is broken.
10

Flow Designer > Yes branch > After Slack action > + Add an action > Gmail > Mark email as read

Mark processed emails to prevent duplicates

Add a final action after the Slack post: use the Gmail 'Mark email as read' action, passing in the Message ID dynamic token from the trigger. This prevents the same email from triggering the flow again on the next poll cycle. The trigger is set to 'Fetch Only Unread Emails', so marking as read is your deduplication mechanism.

  1. 1Click '+ Add an action' after the Slack Post message step
  2. 2Search for 'Gmail' and select 'Mark email as read'
  3. 3In the 'Message Id' field, select the Message ID dynamic token from the Gmail trigger
  4. 4Click Save
What you should see: The Gmail Mark as read action appears after the Slack step. In your Gmail inbox, processed emails will show as read after the flow runs.
11

make.powerautomate.com > My flows > [Your flow] > 28 day run history

Turn on the flow and monitor the first 24 hours

Go to 'My flows' and confirm the flow toggle is set to On. Click into the flow and open the '28 day run history' panel to monitor for errors. For the first day, check after each known meeting to confirm emails are hitting Slack. If any runs show 'Failed', click into the run to see exactly which step broke and what error message appeared.

  1. 1Go to My flows and verify the flow status shows 'On'
  2. 2Click into the flow to open the detail page
  3. 3Open the '28 day run history' panel on the right
  4. 4After your next real meeting email arrives, check the run history for a new entry
  5. 5Click any run to expand the step-by-step execution log
What you should see: The run history shows entries with timestamps and 'Succeeded' status. Each entry expands to show inputs and outputs for every step.

Paste this expression into the Inputs field of a Compose action placed immediately after the Gmail trigger. It extracts the sender's domain, formats the received timestamp into a readable date, and lowercases the subject for consistent keyword matching in your Condition step. Use the outputs of this Compose as input tokens throughout the rest of the flow.

JavaScript — Code Step// Power Automate expressions — paste each into a Compose action's Inputs field
▸ Show code
// Power Automate expressions — paste each into a Compose action's Inputs field
// or reference them directly in field value boxes
// 1. Extract sender domain from From field (e.g. 'acmecorp.com' from '[email protected]')

... expand to see full code

// Power Automate expressions — paste each into a Compose action's Inputs field
// or reference them directly in field value boxes

// 1. Extract sender domain from From field (e.g. 'acmecorp.com' from '[email protected]')
last(split(triggerOutputs()?['body/from'], '@'))

// 2. Format received timestamp to readable date-time (e.g. '14 Nov 2024, 2:32 PM')
formatDateTime(triggerOutputs()?['body/receivedDateTime'], 'dd MMM yyyy, h:mm tt')

// 3. Lowercase subject for case-insensitive keyword matching in Condition
tolower(triggerOutputs()?['body/subject'])

// 4. Strip HTML tags from body using replace (basic — use Content Conversion for full HTML)
replace(replace(triggerOutputs()?['body/body'], '<br>', ' '), '<div>', '')

// 5. Build full formatted Slack message in one Compose
concat(
  '📅 *', triggerOutputs()?['body/subject'], '*',
  ' | From: ', triggerOutputs()?['body/from'],
  ' | ', formatDateTime(triggerOutputs()?['body/receivedDateTime'], 'dd MMM yyyy h:mm tt'),
  '
', triggerOutputs()?['body/bodyPreview']
)

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 Power Automate for this if your team already runs on Microsoft 365. The Gmail and Slack connectors are both first-class in Power Automate, the Condition block handles keyword filtering without code, and your IT department already manages Power Automate licenses. If your company uses Outlook instead of Gmail, drop Gmail entirely and use the Outlook connector — it supports push triggers (not polling), which means sub-30-second delivery instead of 1-3 minutes. If your team doesn't have any Microsoft licenses, use Zapier instead: the setup is faster and the Gmail trigger works the same way.

Cost

The cost math is straightforward. Each meeting email that flows through uses roughly 5 API calls (poll, condition, compose, Slack post, mark as read). Power Automate's free tier gives 750 API calls per month — that's 150 meeting emails before you hit the cap. A team receiving 10 meeting follow-ups per day (300/month) needs Plan 1 at $15/user/month, which gives 40,000 calls. Zapier's equivalent would cost $29.99/month for the Starter plan and handles the same volume with a simpler per-task model. Make's free tier gives 1,000 operations/month — enough for 200 meeting emails — and the Core plan at $9/month handles 10,000 operations. Make is cheaper for this specific workload. Power Automate only wins on cost if you're already paying for a Microsoft 365 Business plan, where Power Automate Plan 1 is included.

Tradeoffs

Zapier handles this workflow in 5 steps and fires within 1 minute of email arrival — its Gmail trigger is more reliable than Power Automate's polling in practice. Make's Router module lets you split emails to multiple Slack channels in one flow without nested conditions, which is cleaner than Power Automate's Switch block. n8n gives you full control over HTML parsing with a Code node, so stripping email HTML before posting to Slack is trivial — Power Automate's HTML-to-text workaround is clunky. Pipedream runs this as a Node.js function with zero polling delay using Gmail push notifications via Google Pub/Sub. Power Automate is still the right call when your org already has it licensed, your IT team manages connectors centrally, and you need this flow auditable in the Microsoft ecosystem — the run history and admin center integration are genuinely better than competitors for enterprise compliance.

Three things you'll hit post-setup. First, the Slack bot silently fails on private channels — it posts fine to public channels but returns 'channel_not_found' on private ones unless explicitly invited. Run /invite @Power Automate before your first real email arrives. Second, Gmail's 'Body' field is HTML. If you build your Slack message from Body instead of Body Preview, your #meeting-followups channel will fill up with raw div tags and inline styles. Use Body Preview or add the Content Conversion HTML-to-text step. Third, Google OAuth tokens tied to a personal account expire or break when that person changes their password or leaves the company. For production use, create a dedicated Google service account or shared Gmail account and authorize the Power Automate connection from that account — not someone's personal login.

Ideas for what to build next

  • Route emails to different Slack channels by sender domainAdd a Switch control block after the Condition step. Use the sender domain expression (last(split(from, '@'))) to route emails from acmecorp.com to #acme-meetings and emails from riverdalemedia.com to #riverdale-meetings. This replaces one generic channel with targeted channel routing.
  • Create a daily Slack digest instead of per-email postsSwitch from an Automated flow to a Scheduled flow that runs at 5pm daily. Use the Gmail 'Get emails (V3)' action with a date filter for today's messages, loop through results with an Apply to each block, and post a single compiled Slack message. This cuts Slack noise from 10 individual posts to one summary.
  • Log meeting follow-ups to a SharePoint list or Excel tableAfter the Slack post step, add a SharePoint 'Create item' action or an Excel 'Add a row into a table' action. Map Subject, From, Received Time, and Body Preview to columns. You get a searchable archive of all meeting follow-ups that doesn't live only in Slack where it gets buried.

Related guides

Was this guide helpful?
Slack + Gmail overviewPower Automate profile →