

How to Convert Slack Messages to Asana Tasks with Power Automate
Watches for a specific emoji reaction on any Slack message and instantly creates a corresponding Asana task with the message text, sender, and a link back to the original conversation.
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 already using Power Automate who want to capture action items from Slack without switching to a third-party tool.
Not ideal for
Teams that need to parse message keywords rather than emoji reactions — Zapier's Slack trigger handles keyword filtering natively without extra expression logic.
Sync type
real-timeUse case type
routingReal-World Example
A 22-person product team uses this to turn customer feedback flagged in #feedback with a 📋 reaction into Asana tasks in their 'Customer Requests' project. Before, a PM manually copied messages into Asana twice a day and context was always lost — no link back to the Slack thread, no record of who flagged it. Now every flagged message becomes a task in under 30 seconds with the original message text, the Slack permalink, and the reactor's name as the assignee lookup.
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 | ||
| Task Name | name | |
| Task Notes | notes | |
| Project | projects | |
| Workspace | workspace | |
| Slack Message Text | ||
| Slack Permalink | ||
| Message Timestamp | ||
| Channel ID | ||
2 optional fields▸ show
| Reactor Display Name | |
| Due Date | due_on |
Step-by-Step Setup
make.powerautomate.com > My flows > + New flow > Automated cloud flow
Create a new Automated cloud flow
Go to make.powerautomate.com and sign in. In the left sidebar, click 'My flows', then click '+ New flow' at the top and select 'Automated cloud flow'. Name the flow something like 'Slack Reaction → Asana Task'. You'll be prompted to choose a trigger — search for 'Slack' in the trigger search box.
- 1Click 'My flows' in the left sidebar
- 2Click '+ New flow' and select 'Automated cloud flow'
- 3Enter a name like 'Slack Reaction → Asana Task'
- 4In the trigger search box, type 'Slack' and press Enter
- 5Select 'When a reaction is added to a message' from the Slack trigger list
Flow editor > Slack trigger card > Sign in
Connect your Slack workspace
Click 'Sign in' inside the Slack trigger card. A popup will open asking you to authorize Power Automate to access your Slack workspace. Use an account that has access to the channels you want to monitor. Power Automate stores this as a named Connection you can reuse across flows.
- 1Click the 'Sign in' button inside the trigger card
- 2In the Slack authorization popup, select the correct workspace from the dropdown
- 3Click 'Allow' to grant permissions
- 4Confirm the connection name appears in the trigger card header
Flow editor > Slack trigger card > Channel + Reaction Name fields
Configure the Slack trigger
In the 'Channel' field, select the Slack channel you want to watch from the dropdown — for example, #feedback. In the 'Reaction Name' field, type the emoji name without colons, such as 'clipboard' for the 📋 emoji. Power Automate will fire this flow every time that specific reaction is added to any message in that channel.
- 1Click the 'Channel' dropdown and select your target channel (e.g., #feedback)
- 2Click the 'Reaction Name' field and type the emoji name without colons (e.g., 'clipboard')
- 3Leave all other fields at their defaults
Flow editor > + New step > Slack > Get message
Add a 'Get message' action to retrieve the full message text
The reaction trigger only gives you the message timestamp and channel ID — not the actual message text. Click '+ New step', search for 'Slack', and add the 'Get message' action. Map the Channel field to the Channel ID from the trigger output, and map the Message Timestamp field to the Message Timestamp from the trigger output. This fetches the full message content so you can use it in the Asana task.
- 1Click '+ New step' below the trigger card
- 2Search for 'Slack' and select the 'Get message' action
- 3Click the 'Channel' field, then click the dynamic content lightning bolt and select 'Channel ID' from the trigger outputs
- 4Click the 'Message Timestamp' field and select 'Message Timestamp' from the trigger outputs
channel: {{channel}}
ts: {{ts}}
Flow editor > + New step > Slack > Get user profile
Add a 'Get user profile' action to resolve the reactor's display name
The trigger output includes a User ID for whoever added the reaction, but that's not useful in an Asana task description. Add another Slack action: 'Get user profile'. Map the User field to the 'User ID' from the trigger output. This returns the reactor's real name and email, which you can embed in the Asana task notes for context.
- 1Click '+ New step'
- 2Search for 'Slack' and select 'Get user profile'
- 3Click the 'User' field and select 'User ID' from the trigger's dynamic content
This expression goes in the 'Notes' field of the Asana 'Create a task' action. Open the expression editor (click the 'fx' button in the Notes field), paste this in, and click OK. It handles null message text, truncates task names safely, and builds a clean multi-line notes block from the Slack data.
Copy this templateconcat(▸ Show code
concat( 'Flagged by: ', coalesce(
... expand to see full code
concat(
'Flagged by: ',
coalesce(
outputs('Get_user_profile')?['body']?['display_name'],
triggerOutputs()?['body']?['user'],
'Unknown'
),
'
Channel: #',
triggerOutputs()?['body']?['channel'],
'
Message:
',
coalesce(
body('Get_message')?['text'],
body('Get_message')?['attachments']?[0]?['text'],
'(no text content)'
),
'
Slack link: ',
coalesce(
body('Get_message')?['permalink'],
'permalink unavailable'
)
)Flow editor > + New step > Asana > Create a task > Sign in
Connect your Asana account
Click '+ New step', search for 'Asana', and select the 'Create a task' action. Click 'Sign in' inside the action card. Power Automate will redirect you to Asana's OAuth flow. Sign in with the Asana account that has access to the project where tasks should be created. After authorization, the connection is saved and you return to the flow editor.
- 1Click '+ New step' and search for 'Asana'
- 2Select 'Create a task' from the action list
- 3Click 'Sign in' inside the Asana action card
- 4Complete the Asana OAuth popup and click 'Allow'
- 5Confirm the connection name shows your Asana account email
Flow editor > Asana: Create a task card > field mapping
Map Slack message data to Asana task fields
Fill in the Asana 'Create a task' fields using dynamic content from the previous steps. Set Workspace to your Asana workspace, set Project to your target project (e.g., 'Customer Requests'), and set the task Name to the first 100 characters of the Slack message text. In the Notes field, combine the message text, the reactor's display name, and the Slack permalink. Use Power Automate's expression editor for any text truncation or concatenation.
- 1Select your Asana Workspace from the dropdown
- 2Select your target Project from the dropdown
- 3Click the 'Name' field and enter: first(split(body('Get_message')?['text'], ' ')) to use the first line of the message as the task title
- 4Click the 'Notes' field and combine: 'Flagged by: ' + outputs('Get_user_profile')?['body']?['display_name'] + ' Message: ' + body('Get_message')?['text'] + ' Slack link: ' + triggerOutputs()?['body']?['permalink']
- 5Leave Due Date blank or set a fixed offset using addDays(utcNow(), 3)
Flow editor > + New step > Control > Condition
Add a condition to skip bot messages
Slack bots can also receive reactions, which would create junk Asana tasks. Add a 'Condition' control step before the Asana action. Set the left value to the 'Subtype' field from the 'Get message' output. Set the operator to 'is not equal to'. Set the right value to 'bot_message'. Put the Asana 'Create a task' action inside the 'If yes' (true) branch only.
- 1Click '+ New step' and select 'Control', then 'Condition'
- 2Click the left value field and select 'Subtype' from 'Get message' dynamic content
- 3Set the operator dropdown to 'is not equal to'
- 4Type 'bot_message' in the right value field
- 5Drag or cut-paste the Asana 'Create a task' action into the 'If yes' branch
make.powerautomate.com > My flows > [Your flow] > 28 day run history
Test the flow with a real Slack reaction
Click 'Save' at the top of the flow editor. Go to your Slack workspace, find any message in the configured channel, and add the configured emoji reaction to it. Return to Power Automate, click '28 day run history' in the flow detail page, and wait up to 30 seconds for a run to appear. Click the run to inspect each step's inputs and outputs.
- 1Click 'Save' in the top toolbar of the flow editor
- 2Open Slack and add the configured reaction emoji to any message in the target channel
- 3Return to Power Automate and click on your flow name to open the detail page
- 4Click '28 day run history' and wait for a new entry to appear
- 5Click the run entry and expand each step to verify inputs and outputs
app.asana.com > [Your Project] > task list
Verify the task in Asana
Open Asana and navigate to the project you selected in the field mapping step. Look for a new task at the top of the list. Confirm that the task name matches the first line of your Slack message, the notes contain the reactor's display name and the Slack permalink, and the task is assigned to the correct project section.
- 1Open app.asana.com and navigate to your target project
- 2Look for the new task at the top of the task list or in the 'Recently added' section
- 3Open the task and verify the Name, Notes, and any assignee fields match your expected values
- 4Click the Slack permalink in the Notes field to confirm it links back to the original message
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 team is already inside the Microsoft 365 ecosystem. The Slack and Asana connectors are pre-built and maintained by Microsoft, authentication is handled through your existing M365 credentials, and IT departments that manage Conditional Access policies will have an easier time approving this than a third-party tool. It's also the right call if you want to extend this flow later to write task data into SharePoint lists or send Teams notifications alongside the Asana task — those connections cost nothing extra. The one scenario where you should pick something else: if your team needs to trigger on message keywords rather than reactions, Zapier's Slack 'New Message Matching Search' trigger handles that without any expression gymnastics. Power Automate has no equivalent keyword-filter trigger built in.
The cost math is straightforward. Each time the flow runs, it executes 4–5 actions (trigger, Get message, Get user profile, Condition, Create task). Power Automate counts each action as one run against your quota. On the Microsoft 365 plan bundled with most business subscriptions, you get 2,000 flow runs per user per month at no additional cost. At 20 flagged Slack messages per day, you're spending roughly 100 action executions per day — about 3,000 per month — which puts you just over the included quota. The Power Automate standalone plan at $15/user/month gives you 5,000 runs/month. Zapier's equivalent at comparable volume runs $49/month on the Professional plan. Power Automate wins on cost if you're already paying for Microsoft 365.
Here's the honest comparison. Zapier handles keyword triggers natively — the 'New Message Matching Search' trigger is a real differentiator for teams who don't want to use emoji reactions. Make gives you more control over error handling with its built-in error routes and scenario history is easier to read than Power Automate's run logs. n8n lets you self-host the entire thing for free if you have a server, and its Slack node exposes more raw event fields than Power Automate's connector does. Pipedream lets you write Node.js inline and handle edge cases like multi-line message parsing or block kit content in ways that Power Automate expressions get clunky doing. Power Automate is still the right call here if Microsoft 365 licensing is already in play and you want IT-approved, auditable flows with minimal procurement friction. If none of that applies, Make at $9/month is cheaper and easier to debug.
Three things you'll hit after setup. First, Slack's API rate limit for users.profile.get is 50 requests per minute per workspace. If your team reacts to messages in bursts during standups, Power Automate will queue flows correctly but you may see delayed profile lookups or occasional 429 errors — add a 'Configure run after' failure handler on that step. Second, Slack messages that contain only a file attachment or a Giphy have an empty 'text' field — your task name expression will produce a blank Asana task name if you don't add a coalesce() fallback. Third, Asana's 'Create a task' API call will succeed even if the project you selected in Power Automate has since been archived — the task gets created in a limbo state not visible in normal project views. Check that your target Asana project is active before going live, and re-test if anyone archives or renames projects later.
Ideas for what to build next
- →Assign tasks based on channel or keyword — Add a Switch control step after the condition check to route tasks to different Asana projects or assignees based on which Slack channel the message came from. A message flagged in #bugs goes to the Engineering project; one from #sales-feedback goes to Product.
- →Post a confirmation reply in the Slack thread — Add a Slack 'Reply to message' action at the end of the flow to post a confirmation like '✅ Task created in Asana: [task URL]' in the original message thread. This closes the loop for the person who added the reaction so they know it was captured.
- →Sync Asana task completion back to Slack — Build a second flow that triggers on the Asana 'Task completed' event and posts a completion notice to the original Slack channel. Use the Slack permalink stored in the task notes to tie the two together.
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