

How to analyze Slack message sentiment with Power Automate
Monitor a Slack feedback channel and automatically classify each message as positive, neutral, or negative using OpenAI GPT.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
Teams that need instant sentiment tracking on customer feedback without manual review
Not ideal for
High-volume channels with 100+ messages daily due to OpenAI API costs
Sync type
real-timeUse case type
enrichmentReal-World Example
A 25-person B2B SaaS company monitors their #customer-feedback channel and automatically tags each message with sentiment. Before automation, product managers spent 30 minutes daily manually categorizing feedback. Now they get instant sentiment scores and can prioritize negative feedback within minutes.
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Message Text | ||
| User ID | ||
| GPT Model | ||
| Sentiment Result | ||
3 optional fieldsβΈ show
| User Name | |
| Channel | |
| Timestamp |
Step-by-Step Setup
My flows > + New flow > Automated cloud flow
Create new automated flow
Go to make.powerautomate.com and sign in with your Microsoft account. Click 'My flows' in the left sidebar, then the blue '+ New flow' button. Select 'Automated cloud flow' from the dropdown menu. Name your flow 'Slack Sentiment Analysis' and search for 'Slack' in the trigger search box.
- 1Click 'My flows' in the left sidebar
- 2Click the blue '+ New flow' button
- 3Select 'Automated cloud flow'
- 4Enter 'Slack Sentiment Analysis' as the flow name
- 5Search for 'Slack' in the trigger picker
Trigger > Slack > When a message is posted to a channel
Configure Slack message trigger
Select 'When a message is posted to a channel' from the Slack triggers. Power Automate will prompt you to create a connection to Slack. Click 'Sign in' and authorize the connection in the popup window. After connecting, you'll see a dropdown for Team and Channel. Select your workspace and choose the #feedback channel you want to monitor.
- 1Click 'When a message is posted to a channel'
- 2Click 'Sign in' to connect Slack
- 3Authorize Power Automate in the Slack popup
- 4Select your Slack workspace from Team dropdown
- 5Choose '#feedback' from Channel dropdown
New step > Control > Condition
Add condition to filter bot messages
Click '+ New step' below the Slack trigger. Search for 'Condition' and select the Control connector's Condition action. In the left value box, click 'Add dynamic content' and select 'User ID' from the Slack trigger. Set the condition to 'is not equal to' and leave the right value empty. This filters out system messages that have null User IDs.
- 1Click '+ New step' below the trigger
- 2Search for 'Condition' and select it
- 3Click the left value box and select 'User ID' from dynamic content
- 4Set dropdown to 'is not equal to'
- 5Leave the right value box empty
Condition Yes > Add an action > HTTP
Add OpenAI GPT action
In the 'Yes' branch of the condition, click 'Add an action'. Search for 'OpenAI' and you'll see the HTTP connector since there's no native OpenAI connector. Select 'HTTP' and choose 'HTTP' action. Set the method to POST and the URI to 'https://api.openai.com/v1/chat/completions'. We'll configure headers and body in the next steps.
- 1Click 'Add an action' in the Yes branch
- 2Search for 'HTTP' and select the HTTP connector
- 3Choose the 'HTTP' action
- 4Set Method dropdown to 'POST'
- 5Enter 'https://api.openai.com/v1/chat/completions' in URI field
HTTP action > Show advanced options > Headers
Configure OpenAI authentication headers
In the HTTP action, click 'Show advanced options'. In the Headers section, add a new header by typing 'Authorization' in the key field and 'Bearer YOUR_API_KEY' in the value field (replace with your actual OpenAI API key). Add another header with key 'Content-Type' and value 'application/json'. Your API key should start with 'sk-' if it's valid.
- 1Click 'Show advanced options' in the HTTP action
- 2Click 'Enter key' in Headers section
- 3Type 'Authorization' as the key
- 4Type 'Bearer sk-YOUR_API_KEY' as the value
- 5Add another header with key 'Content-Type' and value 'application/json'
HTTP action > Body
Build OpenAI request body
In the Body field of the HTTP action, you need to construct a JSON payload for the OpenAI API. Click in the Body field and build this JSON structure. Set the model to 'gpt-3.5-turbo' for cost efficiency. Create a system message that instructs GPT to classify sentiment, then include the actual Slack message text as the user message. Use dynamic content to insert the 'Text' field from the Slack trigger.
- 1Click in the Body field
- 2Start typing the JSON structure with model and messages
- 3Set system message with sentiment analysis instructions
- 4Click 'Add dynamic content' for the user message
- 5Select 'Text' from the Slack trigger dynamic content
Add action > Data Operation > Parse JSON
Parse OpenAI API response
Add another action below the HTTP step. Search for 'Parse JSON' and select it from the Data Operation connector. In the Content field, select 'body' from the HTTP action's dynamic content. You'll need to provide a schema that matches OpenAI's response structure. The key field you want is choices[0].message.content which contains the sentiment classification.
- 1Click 'Add an action' below the HTTP step
- 2Search for 'Parse JSON' and select it
- 3Click Content field and select 'body' from HTTP dynamic content
- 4Click 'Generate from sample' to create schema
- 5Paste a sample OpenAI API response to generate the schema
Add action > Slack > Post message
Post sentiment result back to Slack
Add a final Slack action to post the sentiment analysis result. Search for Slack and select 'Post message' action. Choose the same channel or a different channel like #sentiment-alerts. In the message text, combine the original message text with the parsed sentiment result. Format it clearly so your team can quickly see both the original feedback and its classification.
- 1Click 'Add an action' after Parse JSON
- 2Search for 'Slack' and select 'Post message'
- 3Select your target channel from the dropdown
- 4Click in Message field and add dynamic content
- 5Combine original Text and parsed sentiment result
Save > Test in Slack channel > Check run history
Test the complete flow
Save your flow by clicking the 'Save' button in the top toolbar. Post a test message in your monitored Slack channel - try something clearly positive like 'Great job on the new feature!' The flow should trigger automatically, call OpenAI's API, and post the sentiment result back to Slack. Check the run history to debug any failures.
- 1Click 'Save' in the top toolbar
- 2Go to your monitored Slack channel
- 3Post a test message with clear sentiment
- 4Wait 30-60 seconds for the flow to complete
- 5Check run history in Power Automate for success/errors
Add this expression in the HTTP Body field to create a more robust JSON payload with proper escaping and token limits for the OpenAI API call.
Copy this template{βΈ Show code
{
"model": "gpt-3.5-turbo",
"messages": [... expand to see full code
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "Classify the sentiment of user feedback as exactly one word: positive, negative, or neutral. Only respond with that single word."
},
{
"role": "user",
"content": "@{replace(replace(triggerBody()?['text'], '"', '\\"'), char(10), ' ')}"
}
],
"max_tokens": 10,
"temperature": 0.3
}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 Microsoft Power Automate for this if you're already deep in the Microsoft ecosystem and want native integration with Teams, SharePoint, or other Microsoft services. Power Automate handles the Slack webhook registration automatically and includes built-in retry logic for API failures. Skip it if you need advanced data transformation or complex conditional logic - Make handles those scenarios much better.
Real costs add up fast. Each sentiment analysis costs $0.002-0.004 with gpt-3.5-turbo. At 100 messages daily, expect $6-12 monthly in OpenAI fees plus your Power Automate premium license ($15/user/month). Zapier costs similar for the automation but charges per task, making it $30+ monthly for the same volume. n8n self-hosted is cheapest at just the OpenAI costs.
Make beats Power Automate with better JSON handling and built-in OpenAI connector that handles authentication automatically. Zapier's Formatter tools make text preprocessing easier than Power Automate's limited expression functions. n8n offers the most control with custom JavaScript for prompt engineering and response parsing. Pipedream gives you full Node.js access for building sophisticated sentiment scoring. Power Automate wins on ease of setup and Microsoft integration, but lags on flexibility.
You'll hit rate limits at 200+ messages per hour with OpenAI's default quotas. Power Automate doesn't queue requests intelligently, so bursts of Slack activity can cause failures. JSON parsing breaks when Slack messages contain special characters or exceed 4000 characters. The biggest gotcha: Power Automate's HTTP connector doesn't handle OpenAI's streaming responses, so you're stuck with basic completions that take 3-5 seconds per message.
Ideas for what to build next
- βAdd confidence scoring β Modify the GPT prompt to return confidence levels with each sentiment classification for better decision making.
- βCreate sentiment dashboard β Use Power BI to visualize sentiment trends over time by connecting to a database that stores the classified results.
- βSet up escalation alerts β Add logic to immediately notify managers in Slack when negative sentiment is detected in customer feedback.
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