

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-timeUse case type
routingReal-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.
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 | ||
| 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
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.
- 1Click 'Create' in the left sidebar
- 2Select 'Automated cloud flow'
- 3Enter flow name: 'Gmail Support to Slack Router'
- 4In the trigger search box type 'Gmail'
- 5Select the Gmail connector from the results
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.
- 1Select 'When a new email arrives (V3)' as the trigger
- 2Click 'Sign in' and authenticate with the support Gmail account
- 3Set 'Label/Mailbox' to INBOX
- 4Set 'To' filter to your support address (e.g. [email protected])
- 5Set 'Include Attachments' to No
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.
- 1Click '+ New step'
- 2Search 'Condition' and select it under Control
- 3Click the left value box and pick dynamic content 'From'
- 4Set operator to 'does not contain'
- 5Type 'noreply' in the right value box
- 6Click '+ Add' > 'Add row' and repeat with 'auto-reply'
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.
- 1Inside 'If yes', click '+ Add an action'
- 2Search 'Compose' and select 'Data Operation – Compose'
- 3Click into the Inputs field
- 4Type your message template (see field mapping below for exact tokens)
- 5Insert dynamic content: From, Subject, Received Time, Body Preview
channel: {{channel}}
ts: {{ts}}
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.
- 1Click '+ Add an action' above your message Compose
- 2Search 'Compose' and add a second Compose action
- 3Rename it 'Parse Sender Name' by clicking the three-dot menu > Rename
- 4In Inputs, switch to Expression tab and enter: if(contains(triggerOutputs()?['body/from'], '<'), trim(first(split(triggerOutputs()?['body/from'], '<'))), triggerOutputs()?['body/from'])
- 5Click OK
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.
- 1Click '+ Add an action'
- 2Search 'Slack' and select the Slack connector
- 3Choose 'Post message (V2)'
- 4Click 'Sign in' and authenticate your Slack workspace
- 5Set 'Channel Name' to your support channel (e.g. #support-inbox)
- 6In 'Message Text', pick the output of your message Compose from dynamic content
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.
- 1Click '+ Add an action' at the top of the 'If yes' branch
- 2Search 'SharePoint' and select 'Get items'
- 3Set Site Address and List Name to your deduplication tracking list
- 4Set Filter Query to: MessageId eq 'dynamic content: Message ID'
- 5Add a Condition below it: if 'value' length is greater than 0, skip (go to 'If no')
- 6At the end of your Slack post step, add SharePoint 'Create item' to log the Message ID
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.
- 1Click into your message Compose step
- 2Switch the Inputs field to Expression mode
- 3Enter the urgency prefix expression (see pro_tip_code below)
- 4Append your existing dynamic content tokens after the expression result
- 5Switch back to Dynamic Content mode and confirm tokens still appear as chips
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.
- 1Click 'Save' in the top right toolbar
- 2Click 'Test', select 'Manually', then click 'Test'
- 3Send a test email to your support address from a personal email
- 4Wait 1–5 minutes for the poll to trigger
- 5Click 'Run history' in the left sidebar to see the run detail
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.
- 1Go to 'My flows' in the left sidebar
- 2Find your flow and click the three-dot menu
- 3Select 'Settings'
- 4Under 'Run only users', confirm the support account has access
- 5Toggle on 'Send email notification when this flow fails'
- 6Click 'Done'
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
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 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.
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 topic — Extend 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 action — Build 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 tracker — Add 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
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