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

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

Use case type

notification

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

/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 messages.readonly OAuth scope granted to Power Automate
Slack workspace where you have permission to add apps and post to the target channel
Microsoft Power Automate account (Microsoft 365 Business Basic or higher, or standalone Power Automate per-user plan)
Gmail labels already configured for project emails, or agreed-upon subject line keywords for filtering

Optional

Slack bot token with chat:write and channels:read scopes if using a bot account instead of personal auth

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Click 'My flows' in the left sidebar
  2. 2Click '+ New flow' near the top of the page
  3. 3Select 'Automated cloud flow'
  4. 4Type a name in the 'Flow name' field
  5. 5Click 'Skip' on the trigger picker — you'll add it manually next
What you should see: The flow canvas opens with an empty trigger block at the top labeled 'Add a trigger'.
Common mistake — Do NOT select 'Instant cloud flow' — that requires manual button clicks and won't run automatically on incoming email.
2

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.

  1. 1Click 'Add a trigger' on the canvas
  2. 2Type 'Gmail' in the connector search bar
  3. 3Select the Gmail connector (Google icon)
  4. 4Click 'When a new email arrives (V3)'
What you should see: A Gmail trigger card appears on the canvas with fields for Label, To, From, Subject Filter, and Include Attachments.
Common mistake — The Gmail connector polls every 3 minutes on most Power Automate plans — it is not a true push trigger. Emails won't appear in Slack instantly; expect a 1-3 minute lag.
Power Automate
+
click +
search apps
Slack
SL
Slack
Add the Gmail 'When a new em…
Slack
SL
module added
3

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.

  1. 1Click the 'Label' dropdown and select your project label
  2. 2Or type a keyword in the 'Subject Filter' field
  3. 3Set 'Include Attachments' to 'No'
  4. 4Leave 'To' and 'From' blank unless you want sender-specific filtering
What you should see: The trigger card shows your chosen label or subject filter with no red validation errors.
Common mistake — If you use both a Label filter and a Subject Filter at the same time, Power Automate applies AND logic — both conditions must match. An email with the right subject but missing the label will be skipped silently.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Gmail
GM
notified
4

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.

  1. 1Click 'Sign in' inside the Gmail trigger card
  2. 2Select the correct Google account in the popup
  3. 3Click 'Allow' to grant Power Automate read access
  4. 4Confirm the connection name shown matches your project inbox
What you should see: The trigger card header shows your Gmail address and a green checkmark next to the connection name.
Common mistake — Google OAuth tokens issued to Power Automate expire after 60 days of inactivity. If the flow stops firing, re-authenticate from Data > Connections in the left sidebar.
Power Automate settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Power Automate
popup window
Connected
green checkmark
5

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.

  1. 1Click '+ New step'
  2. 2Search for 'Condition' and select it under Control
  3. 3Click the left value field and pick 'From' from the Gmail dynamic content panel
  4. 4Set the dropdown operator to 'contains'
  5. 5Type your filter value in the right field (e.g., '@vendordomain.com')
What you should see: The canvas splits into a 'Yes' branch and a 'No' branch below the Condition card.
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 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.

  1. 1Click '+ Add an action' inside the 'No' branch
  2. 2Search 'Terminate' and select it under Control
  3. 3Set the 'Status' field to 'Succeeded'
What you should see: The No branch shows a Terminate card with Status: Succeeded.
Common mistake — Setting Terminate status to 'Failed' here will cause Power Automate to send you a failure email every time a non-matching email arrives. Keep it 'Succeeded'.
7

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.

  1. 1Click '+ Add an action' inside the 'Yes' branch
  2. 2Search 'Parse JSON' and select it under Data Operation
  3. 3Click inside 'Content' and select 'Body' from the Gmail dynamic content panel
  4. 4Click 'Generate from sample' and paste a sample email body
  5. 5Click 'Done' to generate the schema
What you should see: The Parse JSON card shows a valid JSON schema with no red error indicators.
Common mistake — Gmail bodies often arrive as HTML, not plain text. Use the 'Body Preview' dynamic value instead of 'Body' if you want the first 255 characters as readable text without stripping tags manually.
8

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.

  1. 1Click '+ Add an action' in the Yes branch
  2. 2Type 'Slack' in the search bar
  3. 3Select the Slack connector
  4. 4Click 'Post message (V2)'
  5. 5Click 'Sign in' and complete the Slack OAuth flow
What you should see: The Slack action card shows your workspace name and a 'Channel Name' dropdown that lists your Slack channels.
Common mistake — Post message V2 supports Block Kit formatting. Post message V1 does not. Always pick V2 — the V1 action is deprecated and will eventually be removed.
9

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.

  1. 1Click the 'Channel Name' dropdown and select your project channel
  2. 2Click inside 'Message Text'
  3. 3Type '📧 New project email:' as a header
  4. 4Insert 'Subject' dynamic value from Gmail on a new line
  5. 5Insert 'From' and 'Body Preview' dynamic values on separate lines
What you should see: The Message Text field shows a mix of static text and blue dynamic value tokens. No red validation errors on the card.
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.
Slack fields
text
user
channel
ts
thread_ts
available as variables:
1.props.text
1.props.user
1.props.channel
1.props.ts
1.props.thread_ts
10

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.

  1. 1Click 'Save' in the top right
  2. 2Click 'Test' then choose 'Manually'
  3. 3Click 'Trigger now' — do NOT send a test email yet
  4. 4Send a matching email to your Gmail inbox
  5. 5Watch the flow canvas highlight each step as it runs
What you should see: All steps show a green checkmark. The Slack channel displays the formatted email message within 3 minutes.
Common mistake — Power Automate's manual test mode uses live data, not mock data. The Slack message will actually post to the channel you configured. Use a test channel during this step, not #general.
Power Automate
▶ Test flow
executed
Slack
Gmail
Gmail
🔔 notification
received
11

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.

  1. 1Click 'Turn on' after a successful test
  2. 2Navigate to My flows and find your flow
  3. 3Click the three-dot menu and select 'Edit'
  4. 4Click the gear icon on the trigger card to open Settings
  5. 5Enable 'Send me an email when this flow fails'
What you should see: The flow shows 'On' status in My flows. You receive a confirmation email that the flow is active.
Common mistake — Run history only retains 28 days of logs on standard Power Automate plans. Export logs manually or connect to Azure Monitor if you need audit trails longer than 28 days.

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/>', ' '
      ),
      '<[^>]+>', ''
    ),
    '&nbsp;', ' '
  ),
  0,
  500
)

// Then in your Slack 'Message Text' field, reference:
// outputs('CleanBodyPreview')
// instead of the raw Gmail 'Body' dynamic value

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

Cost

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.

Tradeoffs

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 labelAdd 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 postsBuild 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 trailAdd 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

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