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

How to Send Gmail Lead Alerts to Slack with Power Automate

Monitors Gmail for high-priority emails from prospects, then posts a formatted Slack notification with sender name, subject, and email preview so sales teams can triage and assign follow-ups instantly.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Sales teams already inside the Microsoft 365 ecosystem who need instant Slack alerts when priority prospect emails land in Gmail.

Not ideal for

Teams that filter leads by CRM data or deal stage — use HubSpot or Salesforce native flows instead, where you already have structured contact data.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 12-person SaaS sales team routes all inbound prospect email to a shared Gmail inbox. Before this flow, reps refreshed Gmail manually between calls and routinely missed replies from warm leads for 2-3 hours. With this automation, every email matching a priority label hits #sales-leads in Slack within 60 seconds, with the sender, subject, and first 300 characters of the body so any available rep can claim it.

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 — the Google account must allow third-party app connections (not blocked by Google Workspace admin policy)
Gmail label created for priority prospects — create the label in Gmail before building the flow, the Power Automate connector cannot create labels
Slack workspace admin must have approved the 'Microsoft Power Automate' app — confirm this before starting OAuth in Step 6
Power Automate account with a license that includes premium connectors — the Gmail connector is premium and requires a Per User or Per Flow plan (not the free Microsoft 365 license)
Target Slack channel (#sales-leads or equivalent) already created with the relevant sales team members added

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
From (Sender)
Subject
Body Preview
Message ID
Slack Channel
3 optional fields▸ show
Received Date/Time
To (Recipient Address)
Has Attachments

Step-by-Step Setup

1

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

Open Power Automate and create an 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' at the top. Select 'Automated cloud flow' from the dropdown — this is the event-triggered type, which fires the moment Gmail receives a matching email rather than on a schedule. Give the flow a name like 'Gmail Priority Lead → Slack'.

  1. 1Navigate to make.powerautomate.com and sign in
  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 menu
  5. 5Enter a flow name and click 'Skip' on the trigger picker (you'll set it in the next step)
What you should see: You should see a blank flow canvas with a single empty trigger block labeled 'When would you like this to be triggered?'
Common mistake — Do not select 'Instant cloud flow' — that requires manual button clicks to run and won't fire automatically when email arrives.
2

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. In the search bar type 'Gmail' and select the Gmail connector. Choose the trigger 'When a new email arrives (V3)' — use V3, not the legacy V2, because V3 supports label filtering which you need to isolate priority leads. You'll be prompted to sign in to your Google account to create a Gmail Connection.

  1. 1Click the empty trigger block on the canvas
  2. 2Type 'Gmail' in the connector search bar
  3. 3Click the Gmail connector icon
  4. 4Select 'When a new email arrives (V3)' from the trigger list
  5. 5Click 'Sign in' and complete the Google OAuth flow in the popup window
What you should see: The trigger block should now show 'When a new email arrives (V3)' with a green checkmark on the Gmail connector icon and your Google account email displayed beneath it.
Common mistake — Power Automate's Gmail connector polls Gmail every 1-3 minutes despite being listed under Automated flows — it is not a true push webhook. For sub-60-second delivery, this is the practical ceiling on this platform.
Power Automate
+
click +
search apps
Slack
SL
Slack
Add the Gmail 'When a new em…
Slack
SL
module added
3

Flow canvas > Gmail trigger block > Label / To / Include Attachments fields

Configure the trigger to filter for priority emails

With the Gmail trigger open, set the 'Label' field to the Gmail label you use to mark priority prospects — for example, 'Prospects' or 'High-Priority'. Set 'Include Attachments' to No unless your team needs them. Set 'To' to your shared sales inbox address if you only want emails to that specific address. Leave 'From' blank here — you'll filter sender domains in a later step using a Condition action so you can handle multiple domains.

  1. 1Click the 'Label' dropdown and select your priority label (e.g. 'Prospects')
  2. 2Set 'Include Attachments' to 'No'
  3. 3Enter the shared inbox address in the 'To' field if applicable
  4. 4Leave 'From' blank — domain filtering happens in Step 5
  5. 5Click outside the trigger block to collapse it
What you should see: The trigger block shows your chosen label in the Label field. The block header reads 'When a new email arrives (V3) — Prospects'.
Common mistake — If the Gmail label doesn't exist yet, Power Automate won't create it for you. Create the label in Gmail first, then return here — the dropdown won't show a label that hasn't been created yet.
Slack
SL
trigger
filter
Priority
matches criteria?
yes — passes through
no — skipped
Gmail
GM
notified
4

Flow canvas > + New step > Data Operation > Compose

Add a Compose action to build the email body preview

Click '+ New step' below the trigger. Search for 'Compose' and select the 'Compose' action under the Data Operation connector. In the Inputs field, use the expression editor to truncate the email body to 300 characters. This prevents Slack messages from becoming unreadably long. Click 'Expression' in the dynamic content panel and enter the formula shown in the pro_tip_code section below.

  1. 1Click '+ New step'
  2. 2Type 'Compose' in the search bar
  3. 3Select 'Compose' under the 'Data Operation' connector
  4. 4Click inside the 'Inputs' field
  5. 5Click 'Expression' tab in the dynamic content popup
  6. 6Enter: substring(triggerBody()?['Body'], 0, 300)
What you should see: The Compose action shows the expression substring(triggerBody()?['Body'], 0, 300) in the Inputs field. The action is renamed 'Compose — Email Preview' for clarity.
5

Flow canvas > + New step > Control > Condition

Add a Condition to filter by sender domain

Click '+ New step' and search for 'Condition'. Select the 'Condition' control action. This step prevents internal emails or newsletters from triggering Slack alerts. In the left value field, click 'Expression' and enter the formula: contains(triggerBody()?['From'], '@yourprospectdomain.com'). Set the operator to 'is equal to' and the right value to 'true'. Repeat this pattern for additional domains by adding 'Or' rows.

  1. 1Click '+ New step'
  2. 2Search for 'Condition' and select it under the Control connector
  3. 3Click the left value field, then click 'Expression'
  4. 4Enter: contains(triggerBody()?['From'], '@prospect-domain.com')
  5. 5Set the middle operator dropdown to 'is equal to'
  6. 6Set the right value to: true
  7. 7Click '+ Add' > 'Add row' to add additional allowed domains with 'Or' logic
What you should see: The Condition block shows two branches: 'If yes' and 'If no'. Your domain expression is visible in the condition row.
Common mistake — The 'From' field in Gmail V3 returns a string like 'Jane Smith <[email protected]>' — not just the email address. Your contains() check works fine against this full string, but don't try to do an exact match against just the email address.
6

Flow canvas > Condition > If yes > Add an action > Slack > Post message (V2)

Connect Slack inside the 'If yes' branch

Inside the 'If yes' branch of the Condition, click 'Add an action'. Search for 'Slack' and select the Slack connector. Choose the action 'Post message (V2)'. You'll be prompted to create a Slack Connection — click 'Sign in' and authorize via Slack OAuth. Make sure you authorize the correct Slack workspace where your #sales-leads channel lives.

  1. 1Click 'Add an action' inside the 'If yes' branch
  2. 2Type 'Slack' in the search bar
  3. 3Select the Slack connector
  4. 4Choose 'Post message (V2)'
  5. 5Click 'Sign in' and complete the Slack OAuth authorization
  6. 6Confirm the correct workspace is selected in the OAuth screen
What you should see: The Slack action block appears inside the 'If yes' branch showing your Slack workspace name in small text below the connector icon.
Common mistake — Power Automate's Slack connector requires the Slack app 'Microsoft Power Automate' to be installed in your workspace. If your Slack admin hasn't approved third-party apps, the OAuth step will fail silently — check with your admin before starting this step.
7

Flow canvas > Slack > Post message (V2) > Channel Name / Message Text / Bot Name

Configure the Slack message with email details

With the Slack 'Post message (V2)' action open, set the Channel Name to your target channel — for example, #sales-leads. In the Message Text field, build the notification using dynamic content from the Gmail trigger and the Compose output. Use the format below to include sender, subject, and preview. Click 'Show advanced options' to set the Bot Name field to something recognizable like 'Lead Alert Bot' so reps know at a glance what triggered the message.

  1. 1Click the 'Channel Name' field and select or type your channel (e.g. #sales-leads)
  2. 2Click inside the 'Message Text' field
  3. 3Type '*New Lead Email* from ' then select 'From' from the Gmail dynamic content panel
  4. 4Press Enter, type '*Subject:* ' then select 'Subject' from dynamic content
  5. 5Press Enter, type '*Preview:* ' then select 'Outputs' from the Compose action (your 300-char preview)
  6. 6Click 'Show advanced options' and set Bot Name to 'Lead Alert Bot'
What you should see: The Message Text field shows a mix of static label text and blue dynamic content tokens for From, Subject, and the Compose output. The preview in the action block reads like a real Slack message.
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.
8

Flow canvas > Slack > Post message (V2) > Message Text > Expression editor

Add a direct reply link to the Gmail thread

Still inside the Slack message configuration, add a final line to the Message Text field that includes a direct link to the Gmail thread. This saves reps 30+ seconds of searching. In the message text, add a new line and type 'Open in Gmail: ' then click 'Expression' and enter the formula: concat('https://mail.google.com/mail/u/0/#inbox/', triggerBody()?['Id']). This constructs the direct thread URL using the Gmail message ID from the trigger.

  1. 1Click at the end of the Message Text field and press Enter
  2. 2Type 'Open in Gmail: '
  3. 3Click 'Expression' in the dynamic content panel
  4. 4Enter: concat('https://mail.google.com/mail/u/0/#inbox/', triggerBody()?['Id'])
  5. 5Click 'OK' to insert the expression as a token
What you should see: A fourth line appears in Message Text showing the static text 'Open in Gmail: ' followed by a blue expression token representing the constructed URL.
Common mistake — Gmail message IDs from the Power Automate trigger are the raw RFC message ID, not the thread ID. This link opens the specific message, not the full conversation thread. For thread links, you'd need the threadId property, which V3 does not expose directly — the message-level link is accurate enough for most sales triage workflows.
9

Flow canvas > Condition > If no > Add an action > Control > Terminate

Add a 'Do nothing' action in the 'If no' branch

Click 'Add an action' inside the 'If no' branch of the Condition. Search for 'Terminate' under the Control connector and select it. Set Status to 'Succeeded'. This tells Power Automate to exit cleanly when an email doesn't match your domain filter rather than treating the run as failed. Without this, your run history will be cluttered with ambiguous incomplete runs.

  1. 1Click 'Add an action' inside the 'If no' branch
  2. 2Search for 'Terminate' and select it under the Control connector
  3. 3Set the 'Status' dropdown to 'Succeeded'
  4. 4Leave Comment blank
What you should see: The 'If no' branch shows a Terminate action with Status set to Succeeded. The flow canvas now has a complete path for both matching and non-matching emails.
10

Flow canvas > Save > Test > Manually

Save and test the flow with a real email

Click 'Save' in the top toolbar. Once saved, click 'Test' in the top right and select 'Manually' — this lets you trigger a test by sending a real email to the monitored inbox. Send a test email from one of your approved prospect domains to the Gmail inbox with your priority label applied. Power Automate will poll Gmail and pick it up within 1-3 minutes.

  1. 1Click 'Save' in the top toolbar and wait for the save confirmation
  2. 2Click 'Test' in the top right corner
  3. 3Select 'Manually' and click 'Test'
  4. 4Open Gmail and send a test email from an approved domain to the monitored inbox
  5. 5Apply your priority label to the test email in Gmail
  6. 6Return to Power Automate and watch the test run progress in real time
What you should see: Each action in the flow canvas shows a green checkmark after the test run completes. The Slack channel receives a message with sender name, subject line, 300-character preview, and the Gmail link within 1-3 minutes of the test email.
Common mistake — If the test run shows the Condition taking the 'If no' path unexpectedly, open the run detail and inspect the 'From' field value — it will show you the exact string Power Automate received from Gmail, which is almost always 'Name <[email protected]>' format. Adjust your contains() expression accordingly.
Power Automate
▶ Test flow
executed
Slack
Gmail
Gmail
🔔 notification
received
11

make.powerautomate.com > My flows > [Flow name] > 28 day run history

Turn the flow on and monitor the first 24 hours

After a successful test, click 'Turn on' if the flow isn't already active. Go to 'My flows' and click into this flow to access the '28 day run history' panel on the right. Check it after the first few real emails arrive to confirm the Condition is routing correctly and Slack messages look right. Adjust the Message Text formatting or domain filter as needed — you can edit a live flow and save without turning it off.

  1. 1Click 'Turn on' in the flow toolbar if status shows 'Off'
  2. 2Navigate to 'My flows' in the left sidebar
  3. 3Click your flow name to open the flow detail page
  4. 4Scroll to the '28 day run history' section on the right panel
  5. 5Click individual run entries to inspect input/output values for each step
What you should see: The flow status shows 'On' with a green indicator. Run history entries appear within minutes of each incoming email, showing Succeeded or Failed status for each run.

Paste this expression into the Compose action's Inputs field (Step 4) using the Expression editor. It strips common HTML tags from the Gmail body before truncating to 300 characters, so your Slack preview shows clean readable text instead of raw markup. The replace() calls chain together to remove the most frequent offenders from Gmail's HTML output.

Copy this templatereplace(
▸ Show code
replace(
  replace(
    replace(

... expand to see full code

replace(
  replace(
    replace(
      replace(
        replace(
          substring(triggerBody()?['Body'], 0, 500),
          '<div>', ''
        ),
        '</div>', ''
      ),
      '<p>', ''
    ),
    '</p>', ' '
  ),
  '<br>', ' '
)

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 already pays for Microsoft 365 and wants to avoid adding another tool to the stack. Power Automate is included in Microsoft 365 Business plans at the basic level, though the Gmail connector is premium and requires a Per User plan at $15/user/month. The second reason to pick it: your IT team controls connections and governance through the Microsoft admin center, which matters in enterprise environments where shadow IT is a real concern. The one scenario where you'd go elsewhere is if your team is entirely outside the Microsoft ecosystem — the setup friction of Power Automate versus Make or Zapier is real, and you shouldn't pay the premium connector surcharge for a workflow that two free tools can handle.

Cost

The math on cost: a Per User Power Automate plan costs $15/user/month. At 200 lead emails per month, you're paying roughly $0.075 per notification. Zapier's equivalent on the Professional plan ($49/month) covers up to 2,000 tasks — at 200 runs that's $0.025 per notification, or roughly 3x cheaper per event. Make's free tier handles 1,000 operations/month, making this workflow free under that threshold. If only one person needs to own and manage this flow, Zapier or Make beats Power Automate on pure cost. Power Automate makes financial sense when you already have the Per User license for other Microsoft workflows — then the marginal cost of adding this flow is zero.

Tradeoffs

Zapier has a cleaner Gmail trigger UI and the filter step is built in as a native option — no separate Condition action needed. Make gives you a visual router module that handles multiple Slack channels based on conditions more elegantly than Power Automate's nested Condition blocks. n8n lets you self-host and write JavaScript directly in the node, which means zero polling delay if you deploy a Gmail push webhook via Google Pub/Sub — something none of the hosted platforms do out of the box. Pipedream has a native Gmail source that uses Gmail's actual push API, delivering emails to Slack in under 5 seconds with zero polling. Power Automate is still the right call when your organization's security policy requires all connections to be managed through Microsoft's admin center, or when this flow is one of a dozen Microsoft-ecosystem automations and you want everything in one place.

Three things you'll hit post-launch. First, the 1-3 minute polling delay is real and will frustrate reps who expected instant alerts — set the expectation upfront that this is near-real-time, not instant. Second, Gmail's 'From' field inconsistency: some senders appear as '[email protected]' with no display name, others as 'Name <[email protected]>', and your contains() expression needs to handle both — test with 10 real emails before going live. Third, Power Automate connections expire silently. The Gmail OAuth token will stop working after extended inactivity without any alert to the flow owner — the first sign is usually a sales rep asking why they haven't seen a Slack alert in two days. Set a recurring calendar reminder every 45 days to check connection health in the Connections panel.

Ideas for what to build next

  • Route alerts to different channels by deal size or domainAdd a second Condition inside the 'If yes' branch to check the subject line or sender domain, then post enterprise leads to #sales-enterprise and SMB leads to #sales-smb. This takes one additional Control > Condition step and two Slack actions.
  • Log every lead alert to a shared spreadsheetAdd an Excel Online or Google Sheets 'Add a row' action after the Slack step to create a running log of all lead emails with timestamp, sender, and subject. Gives your team a searchable record without touching a CRM.
  • Send a daily digest summary instead of per-email pingsBuild a second Scheduled cloud flow that runs at 8am daily, queries your Excel log from the step above, and posts a single digest message to Slack listing all leads from the previous day. Reduces notification noise for high-volume inboxes.

Related guides

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