

How to Forward Gmail Emails to Slack with Power Automate
Automatically posts matching Gmail messages — filtered by sender, subject, or label — to a designated Slack channel as soon as they arrive.
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 that already use Power Automate and need to surface vendor or customer emails in Slack without leaving their existing automation stack.
Not ideal for
Teams outside the Microsoft ecosystem — Zapier or Make will get this running faster with less credential overhead.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person e-commerce ops team receives 30-50 vendor shipping delay emails per day to a shared Gmail inbox. Before this flow, someone had to monitor the inbox and manually paste updates into #logistics on Slack — emails sat unseen for 2-3 hours on average. Now, any email from a @vendor-domain.com address tagged with the 'Shipping' label posts to #logistics within 3 minutes, with the sender, subject, and a truncated body visible directly in the Slack message.
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.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| From (Sender Address) | ||
| Subject | ||
| Slack Channel | ||
5 optional fields▸ show
| Body Preview | |
| Received Time | |
| Label Name | |
| Attachments (Has Attachment flag) | |
| Message ID |
Step-by-Step Setup
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 with your Microsoft account. In the left sidebar, click 'My flows', then click '+ New flow' in the top bar. Select 'Automated cloud flow' from the dropdown — this is the flow type that fires on an event, not a schedule. Give the flow a clear name like 'Gmail → Slack: Vendor Emails'.
- 1Navigate to make.powerautomate.com and sign in
- 2Click 'My flows' in the left sidebar
- 3Click '+ New flow' in the top-right area
- 4Select 'Automated cloud flow' from the menu
- 5Enter a flow name and click 'Skip' to open the canvas — you'll choose the trigger manually
Flow canvas > Trigger block > Search 'Gmail' > When a new email arrives (V3)
Add the Gmail 'When a new email arrives' trigger
Click the trigger block on the canvas and type 'Gmail' in the connector search bar. Select the Gmail connector from the results. Choose the trigger 'When a new email arrives (V3)' — use V3 specifically, as earlier versions lack label filtering. This trigger polls your Gmail inbox every 1-3 minutes depending on your plan.
- 1Click inside the empty trigger block
- 2Type 'Gmail' in the search bar
- 3Click the Gmail connector icon
- 4Select 'When a new email arrives (V3)' from the trigger list
Gmail trigger card > Sign in > Google OAuth popup
Authenticate your Gmail account
After selecting the trigger, Power Automate will prompt you to sign in to Gmail. Click 'Sign in' and complete the Google OAuth flow in the popup window. You'll need to grant Power Automate permission to read your Gmail messages. Once authenticated, your email address appears in the Connection dropdown at the top of the trigger card.
- 1Click 'Sign in' in the Gmail trigger card
- 2Select your Google account in the OAuth popup
- 3Click 'Allow' on the Google permissions screen
- 4Confirm your email address appears in the Connection field on the trigger card
Gmail trigger card > Label Name / From / Subject Filter fields
Configure Gmail trigger filters
Now set the filter criteria so only relevant emails fire the flow. In the trigger card, set 'Label Name' to the Gmail label you want to monitor (e.g., 'Vendor' or 'INBOX'). Use 'From' to restrict by sender domain (e.g., @supplierco.com) and 'Subject Filter' to match keywords (e.g., 'Urgent' or 'Invoice'). You can leave fields blank to match all — but blank From + blank Subject means every incoming email triggers the flow.
- 1Click the 'Label Name' dropdown and select your target label
- 2Type a sender address or domain in the 'From' field (optional)
- 3Type a subject keyword in the 'Subject Filter' field (optional)
- 4Leave 'Importance' as 'Any' unless you want to filter by priority
Flow canvas > + New step > Control > Condition
Add a Condition to filter emails in Power Automate
Click '+ New step' below the trigger. Search for 'Condition' and select the built-in Control action. This is where you handle multi-sender filtering or subject keyword logic that the Gmail trigger itself can't cover. In the left field of the condition, click inside and select 'From' from the dynamic content panel. Set the operator to 'contains' and enter your target domain or sender string in the right field.
- 1Click '+ New step'
- 2Search 'Condition' in the action picker
- 3Select 'Condition' under the Control group
- 4Click the left field of the condition and choose 'From' from the dynamic content panel
- 5Set the operator to 'contains' and type your filter value (e.g., '@supplierco.com')
Condition > Yes branch > Add an action > Slack > Post message (V2)
Build the Slack message in the 'Yes' branch
Inside the 'Yes' branch of the Condition, click 'Add an action'. Search for 'Slack' and select 'Post message (V2)'. This is the correct action for posting to a public or private channel — not 'Send a direct message'. Authenticate your Slack workspace when prompted. Then configure the Channel field and compose the message text using Gmail dynamic content tokens.
- 1Click 'Add an action' inside the Yes branch
- 2Search 'Slack' and select the Slack connector
- 3Choose 'Post message (V2)'
- 4Sign in to Slack and authorize Power Automate for your workspace
- 5Select your target channel from the Channel dropdown (e.g., #vendor-alerts)
Slack action card > Message Text field > Dynamic content panel
Compose the Slack message text with Gmail fields
Click inside the 'Message Text' field of the Slack action. Use the dynamic content panel to insert Gmail fields. A clear format: start with the sender, then subject, then a truncated body. Power Automate does not auto-truncate body text — if you send the full 'Body' field, long emails create wall-of-text Slack messages. Use an expression to cap it at 500 characters.
- 1Click inside the Message Text field
- 2Type '*From:* ' then select 'From' from the dynamic content panel
- 3Press Enter, type '*Subject:* ' then select 'Subject'
- 4Press Enter, type '*Preview:* ' then click 'Expression' tab and enter: substring(triggerOutputs()?['body/body'], 0, 500)
Slack action card > Show advanced options > Bot Name / Icon URL
Add the email Subject as the Slack message title
In the Slack 'Post message (V2)' action, look for the optional 'Bot Name' and 'Icon URL' fields — expand 'Show advanced options' to reveal them. Set Bot Name to something like 'Gmail Notifier' so Slack users know the message source. You can also set 'Title' by using Slack's mrkdwn format directly in the message body: prefix your subject line with *bold asterisks* to make it stand out.
- 1Click 'Show advanced options' at the bottom of the Slack action card
- 2Set Bot Name to 'Gmail Notifier' or your team's preferred label
- 3Optionally paste a public image URL in the Icon URL field
- 4Leave Thread Timestamp blank unless you want threaded replies
channel: {{channel}}
ts: {{ts}}
Flow canvas > Save > Test > Manually > Trigger the flow
Test the flow with a real email
Click 'Save' in the top bar, then click 'Test' (top right). Select 'Manually' and then send yourself a test email from the sender address you configured in Step 4 with a matching subject. Wait up to 3 minutes for the Gmail trigger to poll. Once the test email is detected, Power Automate runs the flow and shows a green checkmark on each action that succeeded.
- 1Click 'Save' in the top bar
- 2Click 'Test' in the top-right corner
- 3Select 'Manually' and click 'Test'
- 4Send a test email to your Gmail from a matching sender address
- 5Return to Power Automate and watch the run status update
make.powerautomate.com > My flows > [Your flow name] > Run history
Enable the flow and monitor run history
Once testing passes, the flow is already active — Power Automate enables Automated cloud flows by default after a successful test. Go to 'My flows', find your flow, and confirm the toggle shows 'On'. Click into the flow to see Run History. Each row shows whether the run succeeded, failed, or was skipped. Check this daily for the first week to catch any authentication expiry or Slack channel permission issues.
- 1Go to 'My flows' in the left sidebar
- 2Locate your flow and confirm the status toggle is 'On'
- 3Click the flow name to open the detail page
- 4Review Run History — look for any red failure rows
- 5Click a failed run to see which step errored and the raw error message
Paste this expression into a 'Compose' action inserted between the Gmail trigger and the Slack action. It strips HTML from the email body, truncates to 500 characters, and appends a direct Gmail link using the message ID — so Slack recipients can open the original email in one click.
JavaScript — Code Step// Add a 'Compose' action after the Gmail trigger.▸ Show code
// Add a 'Compose' action after the Gmail trigger. // In the Compose 'Inputs' field, switch to Expression mode and enter: concat(
... expand to see full code
// Add a 'Compose' action after the Gmail trigger.
// In the Compose 'Inputs' field, switch to Expression mode and enter:
concat(
'*From:* ', triggerOutputs()?['body/from'], '
',
'*Subject:* ', triggerOutputs()?['body/subject'], '
',
'*Received:* ', formatDateTime(triggerOutputs()?['body/receivedDateTime'], 'ddd MMM d, h:mm tt'), '
',
'*Preview:* ', substring(
replace(
replace(triggerOutputs()?['body/body'], '<[^>]+>', ''),
' ', ' '
),
0,
min(500, length(replace(replace(triggerOutputs()?['body/body'], '<[^>]+>', ''), ' ', ' ')))
), '
',
'<https://mail.google.com/mail/u/0/#inbox/', triggerOutputs()?['body/id'], '|Open in Gmail>'
)
// Then in the Slack 'Post message' action, set Message Text to:
// outputs('Compose')
// This posts clean plain-text previews with a clickable Gmail deep-link.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 Power Automate for this if your team is already inside the Microsoft 365 ecosystem. If your Slack workspace is connected to Azure AD, the bot authorization is smoother. If you're managing flows alongside other Power Automate work (SharePoint notifications, Teams alerts, Dataverse updates), keeping Gmail-to-Slack here avoids tool sprawl. The one scenario where you should go elsewhere: if your team has no existing Power Automate usage and you just need this one flow — setup overhead is higher here than on Zapier, where the same workflow takes 6 steps instead of 10.
Power Automate's free plan gives you 750 cloud flow runs per month. This flow uses one run per matching email. At 25 matching emails per day, you hit 750 runs in exactly 30 days — right at the free tier ceiling. The Power Automate per-user plan costs $15/user/month and gives you 40,000 runs/month, which covers virtually any realistic email forwarding volume. Compare that to Zapier, where the equivalent Starter plan runs $19.99/month for 750 tasks — same ceiling, higher price. Make's free tier gives you 1,000 operations/month, and their Core plan at $10.59/month covers 10,000 operations. For this specific workflow, Make is cheaper at every volume tier above the free plan.
Zapier has the fastest setup for this use case — their Gmail + Slack Zap template is pre-built and takes about 8 minutes to configure. The filter step is cleaner than Power Automate's Condition block. Make's scenario handles this well too, with a more visual filter module and better HTML-stripping tools built into its text parsing functions. n8n gives you the most control if you need complex routing logic — a Function node can parse the entire email and route to 10 different channels with conditional formatting. Pipedream's Gmail source fires on real webhooks via Gmail push notifications, not polling, so delivery is faster than any of the above. Power Automate wins if you need this flow to interact with Microsoft services downstream — writing to SharePoint, creating Planner tasks, or triggering Teams messages — because the connectors are native and authentication is shared across your tenant.
Three things you'll hit after go-live. First, the Gmail 'Body' field returns raw HTML — inline styles, div tags, reply chain formatting — and Slack renders none of it. Your messages will look broken until you add the HTML-stripping expression from the pro tip. Second, Google OAuth tokens issued to Power Automate silently expire when users change their passwords or when Google detects unusual access patterns. The flow just stops running with no alert unless you've configured failure notifications. Check run history weekly for the first month. Third, the Gmail trigger's 'From' filter is an exact string match — 'supplierco.com' does not match '[email protected]'. This catches a lot of people and results in the Condition block doing all the filtering work while the trigger passes everything through, which burns more runs than expected.
Ideas for what to build next
- →Route to multiple Slack channels by sender domain — Add a Switch control action after the Gmail trigger to evaluate the sender domain and post to different channels — #finance for billing@, #logistics for orders@, etc. This removes the need for separate flows per channel.
- →Save forwarded emails to a SharePoint list for audit logging — Add a 'Create item' SharePoint action in the Yes branch alongside the Slack post. Log the sender, subject, timestamp, and Slack channel. This gives you a searchable record of every email that was forwarded — useful for compliance or volume reporting.
- →Add a daily digest instead of real-time posts — Replace the Automated cloud flow with a Scheduled cloud flow that runs once per day. Use the Gmail 'Get emails' action with a query filter (e.g., after:yesterday) and loop through results to build a single Slack digest message — reduces Slack noise for lower-urgency email categories.
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