Intermediate~15 min setupCommunication & Project ManagementVerified April 2026
Slack logo
Asana logo

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-time

Use case type

routing

Real-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.

/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.

Slack account with the 'reactions:read' and 'channels:history' OAuth scopes available — these are granted automatically when you authorize via Power Automate's Slack connector
Asana account with 'tasks:write' access to the target project — the account used to authenticate must be a project member, not just a workspace member
Power Automate account — a Microsoft 365 work or school account works; a personal Microsoft account requires the Power Automate free plan which supports up to 750 flow runs/month
The target Slack channel must be a public channel or the connecting account must be a member of the private channel — Power Automate cannot access channels it has not been invited to
The Asana project GID or project name must be known before setup — have the Asana project open in a separate tab so you can confirm the correct project during field mapping

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Namename
Task Notesnotes
Projectprojects
Workspaceworkspace
Slack Message Text
Slack Permalink
Message Timestamp
Channel ID
2 optional fields▸ show
Reactor Display Name
Due Datedue_on

Step-by-Step Setup

1

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.

  1. 1Click 'My flows' in the left sidebar
  2. 2Click '+ New flow' and select 'Automated cloud flow'
  3. 3Enter a name like 'Slack Reaction → Asana Task'
  4. 4In the trigger search box, type 'Slack' and press Enter
  5. 5Select 'When a reaction is added to a message' from the Slack trigger list
What you should see: You should see the Slack trigger card open in the flow editor with fields for Channel and Reaction Name.
Common mistake — Power Automate creates Automated cloud flows for event-based triggers. If you accidentally pick 'Instant' or 'Scheduled', delete it and start over — you cannot change the flow type after creation.
2

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.

  1. 1Click the 'Sign in' button inside the trigger card
  2. 2In the Slack authorization popup, select the correct workspace from the dropdown
  3. 3Click 'Allow' to grant permissions
  4. 4Confirm the connection name appears in the trigger card header
What you should see: The trigger card should show your Slack workspace name next to a green checkmark, and the Channel and Reaction Name fields become editable.
Common mistake — The account you use to connect must be a member of every channel you want to monitor. If you use a bot or service account, it must be explicitly invited to those channels or the trigger will silently receive no events.
Power Automate settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Power Automate
popup window
Connected
green checkmark
3

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.

  1. 1Click the 'Channel' dropdown and select your target channel (e.g., #feedback)
  2. 2Click the 'Reaction Name' field and type the emoji name without colons (e.g., 'clipboard')
  3. 3Leave all other fields at their defaults
What you should see: The trigger card shows the selected channel name and your emoji name filled in. The card header reads 'When a reaction is added to a message (Slack)'.
Common mistake — The Reaction Name field is case-sensitive and uses Slack's internal emoji name, not the display name. Open Slack, hover over the emoji in any message, and it shows ':emoji_name:' — use only the text between the colons.
Power Automate
+
click +
search apps
Slack
SL
Slack
Configure the Slack trigger
Slack
SL
module added
4

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.

  1. 1Click '+ New step' below the trigger card
  2. 2Search for 'Slack' and select the 'Get message' action
  3. 3Click the 'Channel' field, then click the dynamic content lightning bolt and select 'Channel ID' from the trigger outputs
  4. 4Click the 'Message Timestamp' field and select 'Message Timestamp' from the trigger outputs
What you should see: The 'Get message' card shows both fields populated with dynamic content tokens shown in blue pill badges.
Common mistake — Do not use the 'Channel Name' token for the Channel field here — the Slack API requires the channel ID (starts with 'C0...'), not the human-readable name. Using the name will cause a channel_not_found error at runtime.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
5

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.

  1. 1Click '+ New step'
  2. 2Search for 'Slack' and select 'Get user profile'
  3. 3Click the 'User' field and select 'User ID' from the trigger's dynamic content
What you should see: The 'Get user profile' card shows the User field populated. In the dynamic content panel, you'll now see outputs like 'Display Name' and 'Email' available from this step.

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'
  )
)
6

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.

  1. 1Click '+ New step' and search for 'Asana'
  2. 2Select 'Create a task' from the action list
  3. 3Click 'Sign in' inside the Asana action card
  4. 4Complete the Asana OAuth popup and click 'Allow'
  5. 5Confirm the connection name shows your Asana account email
What you should see: The Asana 'Create a task' card shows your account name in the header and the task fields (Workspace, Project, Name, Notes, Due Date) become editable.
Common mistake — If your Asana account uses SSO (Google or SAML), the OAuth popup may fail silently in some browsers. Use Chrome or Edge in a non-incognito window and disable pop-up blockers for make.powerautomate.com.
7

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.

  1. 1Select your Asana Workspace from the dropdown
  2. 2Select your target Project from the dropdown
  3. 3Click the 'Name' field and enter: first(split(body('Get_message')?['text'], ' ')) to use the first line of the message as the task title
  4. 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']
  5. 5Leave Due Date blank or set a fixed offset using addDays(utcNow(), 3)
What you should see: Each field in the Asana task card shows either a static value, a dynamic content token, or an expression (shown with the 'fx' prefix in the field). No fields show red error borders.
Common mistake — Asana's task Name field has a 256-character limit. If your Slack messages are long, wrap the Name expression in substring() to truncate: substring(body('Get_message')?['text'], 0, min(length(body('Get_message')?['text']), 200))
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
8

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.

  1. 1Click '+ New step' and select 'Control', then 'Condition'
  2. 2Click the left value field and select 'Subtype' from 'Get message' dynamic content
  3. 3Set the operator dropdown to 'is not equal to'
  4. 4Type 'bot_message' in the right value field
  5. 5Drag or cut-paste the Asana 'Create a task' action into the 'If yes' branch
What you should see: The flow now shows a branching diamond shape. The 'If yes' branch contains the Asana task creation action. The 'If no' branch is empty, meaning bot-reacted messages are ignored.
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
Asana
AS
notified
9

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.

  1. 1Click 'Save' in the top toolbar of the flow editor
  2. 2Open Slack and add the configured reaction emoji to any message in the target channel
  3. 3Return to Power Automate and click on your flow name to open the detail page
  4. 4Click '28 day run history' and wait for a new entry to appear
  5. 5Click the run entry and expand each step to verify inputs and outputs
What you should see: The run history shows a green checkmark next to each step. The Asana 'Create a task' step output shows the new task's GID (a long numeric string like '1234567890123456'), confirming the task was created.
Common mistake — If the run history shows no entries after 60 seconds, the webhook may not have fired. Check that the Slack connection account is a member of the target channel and that you used the exact emoji name configured in Step 3.
Power Automate
▶ Test flow
executed
Slack
Asana
Asana
🔔 notification
received
10

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.

  1. 1Open app.asana.com and navigate to your target project
  2. 2Look for the new task at the top of the task list or in the 'Recently added' section
  3. 3Open the task and verify the Name, Notes, and any assignee fields match your expected values
  4. 4Click the Slack permalink in the Notes field to confirm it links back to the original message
What you should see: The Asana task exists in the correct project, the Notes field shows the full Slack message text plus the reactor's name, and the Slack permalink opens the original message in Slack.

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 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.

Cost

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.

Tradeoffs

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 keywordAdd 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 threadAdd 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 SlackBuild 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

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