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

How to Route Gmail Support Emails to Slack with Power Automate

When a new email arrives in a Gmail support inbox, Power Automate parses the subject, sender, and body snippet, then posts a formatted summary card to a designated Slack channel so your team can coordinate a response.

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

Best for

Support teams already inside the Microsoft 365 ecosystem who want Gmail-to-Slack ticket routing without paying for a third-party tool

Not ideal for

Teams needing instant sub-60-second routing — Power Automate polls Gmail every 1–5 minutes, so use Make or Zapier if latency matters

Sync type

real-time

Use case type

routing

Real-World Example

💡

A 12-person e-commerce support team receives 80–120 emails per day at [email protected]. Before this flow, a team lead manually forwarded urgent emails to Slack, which took 10–20 minutes and got skipped on busy days. Now every inbound email posts to #support-inbox within 3 minutes with sender name, subject, and a 300-character body preview, and teammates thread their response drafts before anyone hits reply.

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 for the support inbox with OAuth access granted — a shared Google Workspace account works, but whoever authorizes the Power Automate connection must have full Gmail access (not view-only)
Slack workspace with permission to install apps or add incoming webhooks — you need at least 'Manage apps' permission in Slack settings
Power Automate account with a license that includes Premium connectors — the Gmail connector is Premium tier, so a Microsoft 365 Business Standard license alone will not work; you need Power Automate Per User or Per Flow plan
Target Slack channel already created (e.g. #support-inbox) with the authenticating Slack user as a member

Optional

SharePoint site with a custom list for deduplication tracking — the list needs a single-line text column named 'MessageId'

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Sender Email (From)
Sender Display Name
Email Subject
Received Time
Message ID
Slack Channel Name
3 optional fields▸ show
Body Preview
Has Attachments
Urgency Tag

Step-by-Step Setup

1

make.powerautomate.com > Create > 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 'Create', then select 'Automated cloud flow' from the three options presented. Give the flow a name like 'Gmail Support to Slack Router'. You will be prompted to choose a trigger immediately — search for 'Gmail' in the search box. This is an Automated flow, meaning it runs every time the trigger condition is met rather than on a schedule.

  1. 1Click 'Create' in the left sidebar
  2. 2Select 'Automated cloud flow'
  3. 3Enter flow name: 'Gmail Support to Slack Router'
  4. 4In the trigger search box type 'Gmail'
  5. 5Select the Gmail connector from the results
What you should see: A modal dialog appears showing available Gmail triggers. You should see 'When a new email arrives (V3)' listed.
Common mistake — Do not choose 'Instant cloud flow' or 'Scheduled cloud flow'. Instant requires a manual button press and Scheduled runs on a timer — neither fits event-driven email routing.
2

Flow canvas > Trigger: When a new email arrives (V3)

Configure the Gmail trigger for your support inbox

Select the trigger 'When a new email arrives (V3)'. Power Automate will immediately prompt you to sign in to a Gmail account — use the shared support inbox account, not your personal Gmail. Once connected, set the 'Label/Mailbox' field to 'INBOX' and the 'From' field to a filter like '[email protected]' if you only want emails sent to that alias, or leave it blank to catch all inbound. Set 'Include Attachments' to No unless your team needs file visibility in Slack.

  1. 1Select 'When a new email arrives (V3)' as the trigger
  2. 2Click 'Sign in' and authenticate with the support Gmail account
  3. 3Set 'Label/Mailbox' to INBOX
  4. 4Set 'To' filter to your support address (e.g. [email protected])
  5. 5Set 'Include Attachments' to No
What you should see: The trigger card shows a green checkmark and your Gmail address is displayed as the connected account. The 'To' filter field shows your support email address.
Common mistake — The Gmail connector polls every 1–5 minutes — Power Automate does not use Gmail push notifications. Do not promise your team sub-minute response times based on this flow.
Power Automate
+
click +
search apps
Slack
SL
Slack
Configure the Gmail trigger …
Slack
SL
module added
3

Flow canvas > + New step > Control > Condition

Add a Condition to filter out automated/noreply emails

Click '+ New step', search for 'Condition', and select the 'Condition' Control action. This prevents bot emails, auto-replies, and newsletter subscriptions from flooding your Slack channel. Set the left value to the dynamic content 'From' from the Gmail trigger. Set the condition to 'does not contain' and enter 'noreply' in the right field. Add a second row with 'From does not contain auto-reply' using an 'And' operator. If the condition is true, subsequent steps fire. If false, the flow terminates.

  1. 1Click '+ New step'
  2. 2Search 'Condition' and select it under Control
  3. 3Click the left value box and pick dynamic content 'From'
  4. 4Set operator to 'does not contain'
  5. 5Type 'noreply' in the right value box
  6. 6Click '+ Add' > 'Add row' and repeat with 'auto-reply'
What you should see: The condition card shows two rows connected by 'And', with a 'If yes' and 'If no' branch below. The 'If no' branch should be left empty so the flow stops silently.
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.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Gmail
GM
notified
4

Flow canvas > If yes branch > + Add an action > Data Operation > Compose

Add a Compose action to build the formatted Slack message

Inside the 'If yes' branch, click '+ Add an action', search for 'Compose', and select the 'Data Operation – Compose' action. This is where you assemble the message text before sending to Slack. In the Inputs field, type your message template and insert dynamic content tokens from the Gmail trigger. Use a format your team can scan quickly: the sender name, subject, time received, and a trimmed body preview. You will reference the output of this Compose step in the Slack action next.

  1. 1Inside 'If yes', click '+ Add an action'
  2. 2Search 'Compose' and select 'Data Operation – Compose'
  3. 3Click into the Inputs field
  4. 4Type your message template (see field mapping below for exact tokens)
  5. 5Insert dynamic content: From, Subject, Received Time, Body Preview
What you should see: The Compose card shows your message template with dynamic content tokens rendered as blue pill-shaped chips. The Inputs field should contain no raw curly-brace expressions — all tokens appear as visual chips.
Common mistake — Body Preview in Gmail's V3 trigger is capped at ~255 characters. If you need more context, use the 'Body' field — but strip HTML first using a separate Compose with the expression: replace(triggerOutputs()?['body/body'], '<[^>]+>', ''). Pasting raw HTML into Slack looks broken.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
5

Flow canvas > If yes branch > + Add an action > Data Operation > Compose (Name Parser)

Parse the sender's display name from the From field

The Gmail 'From' field returns a string like 'Jane Doe <[email protected]>'. To show only the display name in Slack, add another Compose action before your message Compose. In the Inputs field, use a Power Automate expression to extract just the name portion. This makes your Slack message read 'From: Jane Doe' instead of 'From: Jane Doe <[email protected]>', which looks messy in a formatted card.

  1. 1Click '+ Add an action' above your message Compose
  2. 2Search 'Compose' and add a second Compose action
  3. 3Rename it 'Parse Sender Name' by clicking the three-dot menu > Rename
  4. 4In Inputs, switch to Expression tab and enter: if(contains(triggerOutputs()?['body/from'], '<'), trim(first(split(triggerOutputs()?['body/from'], '<'))), triggerOutputs()?['body/from'])
  5. 5Click OK
What you should see: The Compose card shows the expression. When you test the flow, the output of this step should be just 'Jane Doe' with no email address or angle brackets.
Common mistake — Some automated senders use formats like '<[email protected]>' with no display name. The expression above returns an empty string in that case. Add a second if() to fall back to the email address: wrap the outer if() so that if trim() returns empty, it outputs the full From string instead.
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
6

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

Connect to Slack and add the Post Message action

Click '+ Add an action' after your message Compose step. Search 'Slack' and select the Slack connector. Choose the action 'Post message (V2)'. Power Automate will prompt you to sign in to Slack — use a bot token or sign in with the Slack account that owns the bot you want to post as. Set 'Channel Name' to your target support channel (e.g. #support-inbox). In the 'Message Text' field, select the output of your message Compose step from dynamic content.

  1. 1Click '+ Add an action'
  2. 2Search 'Slack' and select the Slack connector
  3. 3Choose 'Post message (V2)'
  4. 4Click 'Sign in' and authenticate your Slack workspace
  5. 5Set 'Channel Name' to your support channel (e.g. #support-inbox)
  6. 6In 'Message Text', pick the output of your message Compose from dynamic content
What you should see: The Slack action card shows your workspace name and the target channel. The Message Text field shows the blue chip referencing your Compose output.
Common mistake — The Power Automate Slack connector posts as the authenticated user, not a custom bot name. If you want messages to appear from 'Support Bot', you need a Slack incoming webhook URL instead — use the HTTP connector to POST to it rather than the Slack connector.
7

Flow canvas > If yes branch > + Add an action > SharePoint > Get items

Add a unique identifier to prevent duplicate posts

Power Automate's Gmail polling can occasionally fire twice for the same email, especially during service hiccups. To guard against this, add a 'Create item' action to a SharePoint list or use a Compose + Condition pattern to check whether the email Message ID has already been processed. At minimum, log the Gmail Message ID to a SharePoint list before posting to Slack, then add a condition at the top of the 'If yes' branch that checks if that ID already exists in the list. If it does, skip the Slack post.

  1. 1Click '+ Add an action' at the top of the 'If yes' branch
  2. 2Search 'SharePoint' and select 'Get items'
  3. 3Set Site Address and List Name to your deduplication tracking list
  4. 4Set Filter Query to: MessageId eq 'dynamic content: Message ID'
  5. 5Add a Condition below it: if 'value' length is greater than 0, skip (go to 'If no')
  6. 6At the end of your Slack post step, add SharePoint 'Create item' to log the Message ID
What you should see: Your flow now has a deduplication gate. The SharePoint Get items step returns zero records for new emails and one record for already-processed ones.
Common mistake — This requires a SharePoint site with a list containing at least one text column named 'MessageId'. If your organization does not use SharePoint, you can use an Azure Table Storage action or a small Excel table in OneDrive instead — the logic is identical.
8

Flow canvas > If yes branch > Compose (Message Template) > Inputs

Format the Slack message with urgency tagging

Go back to your message Compose step and update the template to include a priority tag based on subject keywords. Use a Power Automate expression to check if the subject contains words like 'urgent', 'down', or 'broken' and prepend a red emoji to the message. This gives your team an instant visual cue without any manual triage. The expression runs inside your Compose Inputs field.

  1. 1Click into your message Compose step
  2. 2Switch the Inputs field to Expression mode
  3. 3Enter the urgency prefix expression (see pro_tip_code below)
  4. 4Append your existing dynamic content tokens after the expression result
  5. 5Switch back to Dynamic Content mode and confirm tokens still appear as chips
What you should see: The Compose Inputs field shows the urgency expression followed by your message fields. When tested with a subject containing 'urgent', the Slack post shows a 🔴 prefix.
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.
9

Flow canvas > Test (top right) > Manually > Send email > Check Run history

Test the flow end-to-end with a real email

Click 'Save' in the top right, then click 'Test' and select 'Manually' to trigger a test run. Send a real email to your support inbox from an external address. Wait up to 5 minutes for the Gmail poll to fire. Watch the flow run detail panel — each step turns green on success or red on failure. Verify the Slack message lands in the correct channel with correct sender name, subject, received time, and body preview.

  1. 1Click 'Save' in the top right toolbar
  2. 2Click 'Test', select 'Manually', then click 'Test'
  3. 3Send a test email to your support address from a personal email
  4. 4Wait 1–5 minutes for the poll to trigger
  5. 5Click 'Run history' in the left sidebar to see the run detail
What you should see: The run detail shows all steps with green checkmarks. The Slack channel shows a formatted message with the correct sender name, subject, and body preview.
Common mistake — If the test run shows a Gmail authentication error, your connected account session may have expired. Delete the existing Gmail connection from Data > Connections in the left sidebar and re-add it. OAuth tokens for Gmail expire if the authorizing account changes its password or revokes access.
Power Automate
▶ Test flow
executed
Slack
Gmail
Gmail
🔔 notification
received
10

My flows > [Flow name] > three-dot menu > Settings

Set the flow to run automatically and monitor with alerts

Your flow is already live once saved and tested — Automated cloud flows run continuously without any further toggle. To get notified of failures, click the three-dot menu on the flow card in 'My flows' and select 'Edit run-only users' to confirm ownership. Then go to 'Manage > Analytics' and enable 'Send email notifications on flow failure' in Flow settings. This sends a failure alert to the flow owner's email within 30 minutes of a failed run.

  1. 1Go to 'My flows' in the left sidebar
  2. 2Find your flow and click the three-dot menu
  3. 3Select 'Settings'
  4. 4Under 'Run only users', confirm the support account has access
  5. 5Toggle on 'Send email notification when this flow fails'
  6. 6Click 'Done'
What you should see: The flow card in 'My flows' shows status 'On' with a green indicator. Under Settings, the failure notification toggle shows as enabled.

Paste this expression into the Inputs field of your urgency-tagging Compose action (Step 8). It checks the subject for urgency keywords and returns a formatted Slack message header with a color-coded emoji prefix. Switch the Inputs field to Expression mode by clicking the 'fx' button on the right side of the field before pasting.

JavaScript — Code Stepif(
▸ Show code
if(
  or(
    contains(toLower(triggerOutputs()?['body/subject']), 'urgent'),

... expand to see full code

if(
  or(
    contains(toLower(triggerOutputs()?['body/subject']), 'urgent'),
    contains(toLower(triggerOutputs()?['body/subject']), 'down'),
    contains(toLower(triggerOutputs()?['body/subject']), 'broken'),
    contains(toLower(triggerOutputs()?['body/subject']), 'critical'),
    contains(toLower(triggerOutputs()?['body/subject']), 'outage')
  ),
  concat(
    '🔴 *URGENT* Support Email\n',
    '*From:* ', outputs('Parse_Sender_Name'), ' (', triggerOutputs()?['body/from'], ')\n',
    '*Subject:* ', triggerOutputs()?['body/subject'], '\n',
    '*Received:* ', formatDateTime(triggerOutputs()?['body/receivedDateTime'], 'MMM dd, yyyy h:mm tt UTC'), '\n',
    '*Preview:* ', substring(replace(triggerOutputs()?['body/bodyPreview'], '\r\n', ' '), 0, min(300, length(triggerOutputs()?['body/bodyPreview'])))
  ),
  concat(
    'New Support Email\n',
    '*From:* ', outputs('Parse_Sender_Name'), ' (', triggerOutputs()?['body/from'], ')\n',
    '*Subject:* ', triggerOutputs()?['body/subject'], '\n',
    '*Received:* ', formatDateTime(triggerOutputs()?['body/receivedDateTime'], 'MMM dd, yyyy h:mm tt UTC'), '\n',
    '*Preview:* ', substring(replace(triggerOutputs()?['body/bodyPreview'], '\r\n', ' '), 0, min(300, length(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 organization is already paying for Microsoft 365 and wants to avoid adding another SaaS tool to the stack. The Gmail connector is Premium tier, but if you have a Power Automate Per User plan ($15/month), there are no per-run costs on top of that — you can process 10,000 support emails a month for the same price as 10. The second reason to use it here: if your team already uses SharePoint for deduplication or logging, the integration is built-in with no extra connectors needed. The one scenario where you should pick something else: if your team needs sub-90-second routing, Power Automate's polling approach will frustrate you. Use Make in that case.

Cost

Cost math: Power Automate Per User is $15/month per user and includes unlimited Premium connector runs for flows owned by that user. If one person owns this flow, the total cost is $15/month regardless of email volume. Compare that to Zapier, which charges per task — at 3,000 support emails/month, Zapier's Professional plan ($49/month) gives you 2,000 tasks, meaning you'd overflow and need the Team plan at $69/month. Make's Core plan at $9/month gives you 10,000 operations and covers the same 3,000 emails with headroom. Power Automate wins on cost at high volume but requires a Microsoft account to get started.

Tradeoffs

Honest competitor comparison: Zapier has a cleaner Gmail trigger setup — the 'New Email Matching Search' trigger lets you write Gmail search syntax (from:customer.com has:attachment) directly in the UI, which Power Automate cannot match without a Condition chain. Make fires the Gmail trigger via push notification instead of polling, cutting latency from 3 minutes to under 15 seconds — that matters for urgent ticket routing. n8n lets you self-host and run unlimited operations for the cost of a $5 VPS, and its Gmail node supports full message body HTML stripping out of the box. Pipedream's Gmail source uses Google's Pub/Sub API for real-time delivery with no polling at all. Power Automate is still the right call if your organization has Microsoft 365 licensing locked in, IT requires everything to run inside Azure, or the person building this is a business analyst who is already comfortable with Power Automate and does not want to learn another tool.

Three things you will hit after go-live: First, the Gmail OAuth token expires when the authorizing account's password changes or when Google flags unusual activity on the account — plan for the flow to break every few months and document the re-auth steps somewhere your team can find them. Second, Slack's message formatting in Power Automate's connector does not support Block Kit (Slack's structured card format) — you get plain text with basic markdown only. If you need buttons or dropdowns in the Slack message, you must switch to the HTTP connector and POST directly to a Slack incoming webhook with a Block Kit JSON payload. Third, if your support inbox receives emails with very large HTML bodies (newsletters, auto-formatted CRM emails), the Body field in Power Automate can exceed the connector's 256KB action output limit and the flow step will fail with a truncation error — always use Body Preview or strip HTML and truncate to 500 characters before passing it downstream.

Ideas for what to build next

  • Add multi-channel routing by topicExtend the flow with a Switch action that reads the email subject or sender domain and posts to different Slack channels — #support-billing, #support-technical, #support-enterprise — based on keyword matching.
  • Create a Slack reply-to-Gmail actionBuild a second flow triggered by a Slack message in a thread that uses the Gmail 'Reply to email (V2)' action to send the threaded response back to the customer, closing the coordination loop without leaving Slack.
  • Log tickets to a SharePoint or Excel trackerAdd a SharePoint 'Create item' or Excel 'Add a row' action at the end of the flow to build a timestamped ticket log with sender, subject, and assigned channel — gives you a searchable record and basic reporting without a dedicated helpdesk tool.

Related guides

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