

How to Broadcast Gmail Project Updates to Slack with Power Automate
Automatically posts Gmail messages matching project-related labels or subject filters into the correct Slack channel, keeping distributed teams informed without anyone forwarding emails manually.
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 loop in Slack users on vendor or stakeholder emails without manual forwarding.
Not ideal for
Teams outside the Microsoft ecosystem — Zapier or Make will get you set up faster with fewer connector quirks.
Sync type
real-timeUse case type
notificationReal-World Example
A 22-person construction firm uses this to pipe vendor emails tagged 'Project-Riverside' in Gmail straight into the #riverside-site Slack channel. Before this, the project manager forwarded 8-12 emails per day manually and updates still arrived hours late. Now the crew sees vendor confirmations and change orders within 3 minutes of receipt.
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 | ||
| Email Subject | ||
| From Address | ||
| Body Preview | ||
| Slack Channel Name | ||
4 optional fields▸ show
| Received Date/Time | |
| To Address | |
| Message ID | |
| Labels |
Step-by-Step Setup
make.powerautomate.com > My flows > + New flow > Automated cloud flow
Create a new Automated cloud flow
Go to make.powerautomate.com and sign in with your Microsoft 365 account. 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 the flow fire the moment Gmail receives a matching email. Give the flow a name like 'Gmail Project Updates to Slack' so it's easy to find later.
- 1Click 'My flows' in the left sidebar
- 2Click '+ New flow' near the top of the page
- 3Select 'Automated cloud flow'
- 4Type a name in the 'Flow name' field
- 5Click 'Skip' on the trigger picker — you'll add it manually next
Flow canvas > Add a trigger > Search: Gmail > When a new email arrives (V3)
Add the Gmail 'When a new email arrives' trigger
Click the empty trigger block on the canvas. In the search bar type 'Gmail' and select the Gmail connector from the results. Choose the trigger named 'When a new email arrives (V3)' — use V3 specifically, the older versions have fewer filter options. You'll be prompted to sign in to your Google account immediately.
- 1Click 'Add a trigger' on the canvas
- 2Type 'Gmail' in the connector search bar
- 3Select the Gmail connector (Google icon)
- 4Click 'When a new email arrives (V3)'
Flow canvas > Gmail trigger card > Label / Subject Filter / Include Attachments
Configure the Gmail trigger filters
Inside the trigger card, set the filters that isolate project-related emails. In the 'Label' dropdown choose the Gmail label you use for project emails (e.g., 'Project-Riverside'). If you filter by subject instead, leave Label blank and type your keyword in 'Subject Filter' (e.g., 'Project Update' or the vendor name). Set 'Include Attachments' to 'No' unless you plan to forward files — attachments bloat message payloads and can cause Slack post failures on large files.
- 1Click the 'Label' dropdown and select your project label
- 2Or type a keyword in the 'Subject Filter' field
- 3Set 'Include Attachments' to 'No'
- 4Leave 'To' and 'From' blank unless you want sender-specific filtering
Flow canvas > Gmail trigger card > Sign in
Connect your Gmail account
After saving the trigger configuration, Power Automate will prompt you to authenticate. Click 'Sign in' and complete the Google OAuth flow in the popup window. Make sure you sign in with the Gmail account that actually receives the project emails — not a personal account. Once authenticated, the connection name appears in the trigger card header.
- 1Click 'Sign in' inside the Gmail trigger card
- 2Select the correct Google account in the popup
- 3Click 'Allow' to grant Power Automate read access
- 4Confirm the connection name shown matches your project inbox
Flow canvas > + New step > Control > Condition
Add a Condition to filter by sender domain or keyword
Click '+ New step' below the trigger. Search for 'Condition' and select the built-in Control action called 'Condition'. This step lets you route only genuine external stakeholder emails and skip internal noise. In the left value field, insert the dynamic value 'From' from the Gmail trigger. Set the operator to 'contains'. In the right field, type your vendor domain or keyword (e.g., '@acmecorp.com' or 'project update'). The 'Yes' branch proceeds to Slack; the 'No' branch terminates.
- 1Click '+ New step'
- 2Search for 'Condition' and select it under Control
- 3Click the left value field and pick 'From' from the Gmail dynamic content panel
- 4Set the dropdown operator to 'contains'
- 5Type your filter value in the right field (e.g., '@vendordomain.com')
Flow canvas > Condition > No branch > + Add an action > Control > Terminate
Add 'Terminate' action to the No branch
Inside the 'No' branch click '+ Add an action'. Search for 'Terminate' and select the Control action. Set Status to 'Succeeded'. This cleanly ends the run for emails that don't match rather than letting them error out — a failed termination inflates your error count and triggers alert emails from Power Automate.
- 1Click '+ Add an action' inside the 'No' branch
- 2Search 'Terminate' and select it under Control
- 3Set the 'Status' field to 'Succeeded'
Flow canvas > Condition > Yes branch > + Add an action > Data Operation > Parse JSON
Parse email body with Parse JSON (optional but recommended)
Inside the 'Yes' branch, click '+ Add an action'. Search 'Parse JSON' and select the Data Operation action. In the 'Content' field insert the 'Body' dynamic value from the Gmail trigger. In the Schema field, click 'Generate from sample' and paste a representative email body. This breaks the raw HTML body into clean text fields you can reference downstream. Skip this step only if you plan to post the raw body directly — raw Gmail HTML looks ugly in Slack.
- 1Click '+ Add an action' inside the 'Yes' branch
- 2Search 'Parse JSON' and select it under Data Operation
- 3Click inside 'Content' and select 'Body' from the Gmail dynamic content panel
- 4Click 'Generate from sample' and paste a sample email body
- 5Click 'Done' to generate the schema
Flow canvas > Yes branch > + Add an action > Slack > Post message (V2)
Connect your Slack account
Click '+ Add an action' below Parse JSON. Search 'Slack' and select the Slack connector. Choose the action 'Post message (V2)'. Click 'Sign in' to authenticate. Use a Slack bot token or your personal Slack account — bot tokens are preferred in production because they don't break if an employee leaves. After signing in, the connection name appears at the top of the Slack action card.
- 1Click '+ Add an action' in the Yes branch
- 2Type 'Slack' in the search bar
- 3Select the Slack connector
- 4Click 'Post message (V2)'
- 5Click 'Sign in' and complete the Slack OAuth flow
Flow canvas > Slack action card > Channel Name + Message Text
Configure the Slack message fields
In the Slack 'Post message (V2)' card, select the destination channel from the 'Channel Name' dropdown (e.g., #project-riverside). In the 'Message Text' field build your message using dynamic values from Gmail: start with a header like '📧 New project email:' then insert 'Subject', 'From', 'To', and 'Body Preview' on separate lines. Keep the message under 3,000 characters — Slack truncates longer text without warning.
- 1Click the 'Channel Name' dropdown and select your project channel
- 2Click inside 'Message Text'
- 3Type '📧 New project email:' as a header
- 4Insert 'Subject' dynamic value from Gmail on a new line
- 5Insert 'From' and 'Body Preview' dynamic values on separate lines
Flow canvas > Save > Test > Manually > Trigger now
Test the flow with a real email
Click 'Save' in the top right, then click 'Test' and select 'Manually'. Send a real email to your Gmail inbox that matches your trigger filters. Wait up to 3 minutes for the poll cycle. In the test panel you'll see each step turn green as it executes. Check the Slack channel for the posted message. If the Condition step took the No branch unexpectedly, click that step to inspect the 'From' value that was evaluated.
- 1Click 'Save' in the top right
- 2Click 'Test' then choose 'Manually'
- 3Click 'Trigger now' — do NOT send a test email yet
- 4Send a matching email to your Gmail inbox
- 5Watch the flow canvas highlight each step as it runs
My flows > [Your Flow] > ... > Settings > Send email on failure
Enable the flow and set run history alerts
After a successful test, click 'Turn on' to activate the flow. Go to My flows, find your flow, and click the three-dot menu > 'Edit'. Under Settings (gear icon on the trigger card) enable 'Send me an email when this flow fails' — this catches token expiry and connector outages before your team notices emails are missing. Check the Run history tab after 24 hours to confirm consistent green runs.
- 1Click 'Turn on' after a successful test
- 2Navigate to My flows and find your flow
- 3Click the three-dot menu and select 'Edit'
- 4Click the gear icon on the trigger card to open Settings
- 5Enable 'Send me an email when this flow fails'
Paste this expression into a Compose action placed between the Gmail trigger and the Slack step. It strips HTML tags from the email body and truncates to 500 characters, giving you a clean Slack preview without the Parse JSON setup. Reference the Compose output ('Outputs') in your Slack message field instead of 'Body Preview'.
Copy this template// Add a Compose action before the Slack step▸ Show code
// Add a Compose action before the Slack step // Name it: CleanBodyPreview // Paste this into the Compose 'Inputs' field:
... expand to see full code
// Add a Compose action before the Slack step
// Name it: CleanBodyPreview
// Paste this into the Compose 'Inputs' field:
substring(
replace(
replace(
replace(
replace(
triggerOutputs()?['body/body'],
'<br>', ' '
),
'<br/>', ' '
),
'<[^>]+>', ''
),
' ', ' '
),
0,
500
)
// Then in your Slack 'Message Text' field, reference:
// outputs('CleanBodyPreview')
// instead of the raw Gmail 'Body' dynamic valueGoing 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 organization is already inside the Microsoft 365 ecosystem and your IT team controls connector access through the Power Platform admin center. The Gmail and Slack connectors are pre-certified and don't require custom API keys — your admin can approve them in minutes rather than managing OAuth apps manually. It's also the right call if you need this flow to eventually connect to SharePoint, Teams, or Dataverse alongside Slack, because cross-Microsoft data sharing has zero additional connector cost. If your team is outside Microsoft 365 entirely, skip Power Automate — Make runs this same workflow on a free plan and has a cleaner UI for non-technical builders.
Power Automate pricing for this flow: the Gmail trigger counts as one action per poll cycle. Each email that passes the Condition and posts to Slack costs roughly 4 actions (trigger poll, condition check, compose, Slack post). At 100 project emails per month, that's around 400 actions. The Microsoft 365 Business Basic plan includes 6,000 actions per month per user at no extra charge. If you're on the standalone Power Automate per-user plan at $15/month, 6,000 actions is the same included limit. You won't pay extra for this workflow unless you exceed 6,000 actions across all your flows combined — which takes roughly 1,500 emails per month on this specific automation. Make's equivalent flow costs $0 on the free tier up to 1,000 operations per month.
Zapier has a near-identical setup but its Gmail trigger also polls (every 1-15 minutes depending on plan) — no advantage there. The real Zapier edge is the Zap editor's filter UI, which is more intuitive for non-technical users than Power Automate's Condition card. Make handles this use case best for teams who want sub-1-minute polling and the ability to parse email body HTML using Make's built-in text functions without a separate Parse JSON step — meaningful if you're cleaning up messy vendor emails. n8n wins on raw flexibility: you can write a JavaScript function node that parses the Gmail payload and conditionally routes to different Slack channels based on regex matches in the subject line, all in one node. Pipedream is strong if your team wants this as part of a larger event-driven system with custom Node.js logic. Power Automate is still the right call here when your IT governance requires Microsoft-managed connectors and your team's other automations already live in Power Automate — consolidation matters more than marginal feature advantages.
Three things you'll hit after go-live. First, the Gmail connector will occasionally fire twice for the same email within the same poll window — this is a known quirk, not a configuration error. Build the deduplication step using Message ID from day one or you'll be manually deleting duplicate Slack posts within a week. Second, if the email sender uses reply-all threads, Power Automate sees each reply as a new email — your Slack channel will fill up with the full thread history on active vendor conversations. Add a subject-line Condition that checks for 'RE:' or 'FWD:' and either strips it or routes replies to a thread rather than a new post. Third, the Slack connector's 'Post message V2' action has a 3,000-character limit on the message body — Gmail bodies from verbose vendors routinely exceed this. Truncate explicitly with a substring expression before the Slack step, or the post will silently fail with no error visible in the run history.
Ideas for what to build next
- →Route emails to different Slack channels by project label — Add a Switch control action after the Gmail trigger to map each Gmail label (e.g., 'Project-Riverside', 'Project-Harbor') to a different Slack channel, so one flow handles all projects without duplicate automation.
- →Add a daily digest instead of per-email posts — Build a second Scheduled cloud flow that runs every day at 5pm, queries Gmail for that day's project-labeled emails using the Gmail 'Search emails' action, and posts a summary list to Slack — reduces channel noise for high-volume projects.
- →Log all forwarded emails to a SharePoint list for audit trail — Add a SharePoint 'Create item' action after the Slack post that writes the email subject, sender, timestamp, and Slack channel to a SharePoint list — gives project managers a searchable record of every external communication that was broadcast.
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