

How to Create Asana Tasks from Slack with Power Automate
When a message is posted in a client Slack channel, Power Automate instantly creates an Asana task with the message text, sender name, channel, and a priority label derived from keywords in the message.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Client-facing teams already in the Microsoft 365 ecosystem who need client Slack messages turned into trackable Asana tasks without manual copy-paste.
Not ideal for
Teams outside Microsoft 365 — Make or Zapier will get you to the same result faster with less licensing overhead.
Sync type
real-timeUse case type
routingReal-World Example
A 22-person digital agency shares dedicated Slack channels with each retainer client. Before this flow, account managers screenshotted client messages and manually created Asana tasks — a step that got skipped under deadline pressure. After setup, every message in a #client- prefixed channel becomes an Asana task in under 90 seconds, tagged with the client name and flagged urgent if the word 'broken' or 'down' appears.
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 | |
| Project | projects | |
| Notes / Description | notes | |
| Slack Sender Display Name | ||
5 optional fields▸ show
| Due Date | due_on |
| Assignee | assignee |
| Slack Message Timestamp | |
| Slack Channel Name | |
| Priority Custom Field | custom_fields |
Step-by-Step Setup
make.powerautomate.com > Create > Automated cloud flow
Sign in to Power Automate and start a new Automated flow
Go to make.powerautomate.com and sign in with your Microsoft 365 account. Click 'Create' in the left sidebar, then select 'Automated cloud flow' — this is the event-triggered flow type, not scheduled. Give your flow a name like 'Slack Client Issue → Asana Task'. You will be prompted to choose a trigger immediately in this dialog before the canvas loads.
- 1Click 'Create' in the left sidebar
- 2Select 'Automated cloud flow' from the options
- 3Type a flow name: 'Slack Client Issue → Asana Task'
- 4In the trigger search box, type 'Slack' and select 'When a new message is posted to a channel' from the Slack connector
- 5Click 'Create'
Flow canvas > When a new message is posted to a channel > Channel Name dropdown
Connect your Slack account and configure the trigger channel
Click 'Sign in' inside the trigger card to authorize the Slack connection. Power Automate will open a Slack OAuth popup — approve the requested permissions. Once connected, a 'Channel Name' dropdown appears. Select the specific client channel you want to monitor (e.g. #client-acmecorp). If you manage multiple client channels, note that this single trigger watches one channel; you will handle multiple channels in a later step.
- 1Click 'Sign in' inside the Slack trigger card
- 2Approve the OAuth permissions in the Slack popup
- 3Wait for the 'Channel Name' dropdown to populate
- 4Select your target client channel (e.g. #client-acmecorp)
- 5Leave all other trigger fields at their defaults
Flow canvas > + New step > Data Operation > Compose
Add a Compose action to extract and format message context
Click the '+ New step' button below the trigger. Search for 'Compose' and select the 'Compose' action from the Data Operation connector. This action will build the task description string you will pass to Asana. In the Inputs field, construct a string that combines the Slack sender name, timestamp, channel, and message text using dynamic content tokens. This avoids dumping a raw JSON object into the Asana task description.
- 1Click '+ New step'
- 2Search 'Compose' and select 'Compose' under Data Operation
- 3Click inside the 'Inputs' field
- 4Click 'Add dynamic content' and insert: 'From: [User Name] | Channel: [Channel Name] | Time: [Message Timestamp]\n\n[Text]'
- 5Replace bracketed labels with the corresponding dynamic content tokens from the Slack trigger
channel: {{channel}}
ts: {{ts}}
Flow canvas > + New step > Control > Condition
Add a Condition to detect priority keywords
Click '+ New step' and search for 'Condition'. Add a Condition control action. This checks the Slack message text for urgent keywords like 'broken', 'down', 'urgent', or 'critical'. Set the left side of the condition to the dynamic content token 'Text' from the Slack trigger. Set the operator to 'contains'. Set the right side to 'urgent'. You will add additional keyword checks using 'Add row' with OR logic.
- 1Click '+ New step' and select 'Control > Condition'
- 2In the left field, insert the dynamic content token 'Text' from the Slack trigger
- 3Set the operator dropdown to 'contains'
- 4Type 'urgent' in the right field
- 5Click 'Add row' and repeat for 'broken', 'down', and 'critical' — set each new row to OR
Flow canvas > Condition > If yes > + Add an action > Asana > Create a task
Connect your Asana account
Inside the 'If yes' branch, click '+ Add an action'. Search 'Asana' and select 'Create a task' from the Asana connector. Click 'Sign in' inside the Asana action card. Power Automate opens an Asana OAuth popup — approve it. The connection is saved globally in your Power Automate Connections and reused by the 'If no' branch automatically. You do not need to re-authenticate for the second branch.
- 1Inside 'If yes', click '+ Add an action'
- 2Search 'Asana' and select 'Create a task'
- 3Click 'Sign in' in the Asana action card
- 4Approve the Asana OAuth permissions in the popup
- 5Confirm the connection name appears in the card header
Flow canvas > Condition > If yes > Asana: Create a task
Map fields for the high-priority Asana task (If yes branch)
Inside the 'If yes' Asana 'Create a task' action, fill in the task fields. Set 'Task Name' to a combined string like '[URGENT] ' followed by the first 80 characters of the Slack message text. Set 'Project' to your client project ID (selected from the dropdown). Set 'Notes' to the Outputs token from your Compose action in Step 3. Set 'Due Date' to the expression addDays(utcNow(), 1) for a next-day deadline. Add a tag or custom field for priority if your Asana workspace has one configured.
- 1In 'Task Name', type '[URGENT] ' then insert the dynamic content token 'Text' (trim to 80 chars using substring())
- 2In 'Project', select your client Asana project from the dropdown
- 3In 'Notes', insert the 'Outputs' token from the Compose action
- 4In 'Due Date', switch to expression mode and enter: addDays(utcNow(), 1)
- 5If available, set a 'Priority' custom field to 'High'
Flow canvas > Condition > If no > + Add an action > Asana > Create a task
Map fields for the standard Asana task (If no branch)
Click inside the 'If no' branch and add another Asana 'Create a task' action. It will automatically use the same Asana connection. Configure it identically to Step 6 but without the '[URGENT]' prefix and with a due date of addDays(utcNow(), 3) for a 3-day window. Set the priority custom field to 'Normal' if applicable. This branch handles all messages that do not match your priority keywords.
- 1Inside 'If no', click '+ Add an action' and select Asana 'Create a task'
- 2In 'Task Name', insert the Slack 'Text' token directly (no prefix)
- 3In 'Project', select the same client Asana project
- 4In 'Notes', insert the Compose 'Outputs' token
- 5In 'Due Date', enter expression: addDays(utcNow(), 3)
Flow canvas > Between Trigger and Compose > + Insert a step > Slack > Get user info
Add a Parse JSON action to extract the Slack user display name
The Slack trigger returns the message author as a user ID (e.g. U04XXXXXX), not a display name. To get a readable name for the Asana task notes, add a 'Parse JSON' action before the Compose step. Use the Slack 'Get user info' action instead — search 'Slack' in the action picker and add 'Get user info', passing the 'User' token from the trigger. Then reference the display name output in your Compose string from Step 3 by going back and updating it.
- 1Hover between the Slack trigger and the Compose action to reveal '+ Insert a step'
- 2Click '+ Insert a step' and add a new action
- 3Search 'Slack' and select 'Get user info'
- 4In the 'User' field, insert the dynamic content token 'User' from the Slack trigger
- 5Go back to the Compose action and replace the 'User Name' token with 'Display Name' from the Get user info action
Flow canvas > Select all actions > Right-click > Add Scope > + New step after Scope > Configure run after
Add error handling with a Scope and Configure run after
Select all actions after the Slack trigger by holding Shift and clicking each one, then right-click and select 'Add Scope'. Name the scope 'Main Logic'. After the scope, add a new action — search 'Send an email (V2)' from the Office 365 Outlook connector or a Slack 'Send message' action to alert your team when the flow fails. Click the three dots on this alert action and select 'Configure run after'. Check 'has failed' and 'has timed out' only.
- 1Select all actions except the trigger by clicking each while holding Shift
- 2Right-click and select 'Add Scope', name it 'Main Logic'
- 3Click '+ New step' after the scope
- 4Add a Slack 'Send a message' action targeting your internal #ops or #errors channel
- 5Click the three dots on the alert action, select 'Configure run after', and check 'has failed' and 'has timed out'
Flow canvas > Save > Test > Manually > Perform trigger action
Test the flow with a real Slack message
Click 'Save' in the top toolbar. Then click 'Test' (top right) and select 'Manually' — this lets you trigger the test by actually posting a message in your Slack channel. Open the target Slack channel and post a test message like 'The login page is broken for our users'. Return to Power Automate and watch the flow run animation. Each step shows a green check when successful or a red X with an error detail when it fails.
- 1Click 'Save' in the top toolbar
- 2Click 'Test' and select 'Manually'
- 3Click 'Perform trigger action'
- 4Open your target Slack channel and post: 'The login page is broken for our users'
- 5Return to Power Automate and watch the run progress in real time
make.powerautomate.com > My flows > [Flow Name] > Run history
Enable the flow and monitor the run history
After a successful test, the flow is already active. Confirm its status by returning to 'My flows' in the left sidebar — the flow should show a green 'On' toggle. Click the flow name to open its detail page and check 'Run history' at the bottom. Each Slack message that triggers the flow logs a run entry with a status of 'Succeeded' or 'Failed'. Bookmark this page and check it after the first full business day of live traffic.
- 1Click 'My flows' in the left sidebar
- 2Locate your flow and confirm the toggle shows 'On'
- 3Click the flow name to open the detail page
- 4Scroll to 'Run history' and verify the test run shows 'Succeeded'
- 5Set a reminder to review run history after 24 hours of live use
Paste this expression into the 'Task Name' field of the Asana 'Create a task' action (switch the field to Expression mode). It trims long Slack messages to 80 characters and appends an ellipsis so Asana task names stay readable in list view without truncating mid-word.
JavaScript — Code Stepif(▸ Show code
if( greater(length(triggerOutputs()?['body/text']), 80), concat(
... expand to see full code
if(
greater(length(triggerOutputs()?['body/text']), 80),
concat(
substring(triggerOutputs()?['body/text'], 0, 80),
'...'
),
triggerOutputs()?['body/text']
)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 Microsoft 365. The Slack and Asana connectors are both standard (non-premium), meaning you pay nothing beyond your existing Microsoft 365 Business subscription. Power Automate also integrates directly with SharePoint and Teams, so if you want to log client requests to a SharePoint list or escalate via Teams in addition to Asana, you add one action — no additional platform account required. The one scenario where you pick something else: if your team has no Microsoft 365 footprint at all. Setting up a Microsoft account just to run this flow adds unnecessary overhead. Use Make or Zapier instead.
The cost math is straightforward. A Microsoft 365 Business Basic plan ($6/user/month) includes 2,000 flow runs per user per month at no additional charge. Each Slack message triggers one flow run. That covers 2,000 client messages per user per month — most agencies never get close. If you do hit the limit, Power Automate's standalone plan adds $15/month per user for 5,000 runs. By comparison, Zapier's equivalent setup (watching a Slack channel and creating an Asana task) costs $19.99/month on the Starter plan for 750 tasks — and each flow run that includes the 'Get user info' call counts as two Zap steps, cutting your effective task count in half. Power Automate is cheaper at every volume tier if you already have Microsoft 365.
Here is how the competitors compare for this specific use case. Make handles the priority keyword detection more cleanly — its Router module lets you define 5 keyword conditions in a single visual branch without nesting Condition controls. Zapier has a faster initial setup: the Slack-to-Asana Zap template is pre-built and takes 8 minutes to configure versus 35 minutes for this Power Automate flow. n8n gives you a JavaScript Function node where you can parse the entire Slack message payload, extract any field you want, and build complex routing logic in one step — no Compose workarounds needed. Pipedream lets you write async code to hit the Asana API directly, bypassing connector limitations entirely. Power Automate wins here only if you need native Microsoft 365 integration or your IT department requires everything to stay inside the Microsoft ecosystem.
Three things you will hit after setup. First, the Slack connector does not filter bot messages — every automated notification in a client channel generates an Asana task unless you add the Sub Type check. Agencies monitoring active channels with Jira or GitHub integrations find this immediately. Second, the 'Get user info' action adds a real API call per message. At 100+ messages per hour, you will start seeing Slack API Tier 3 rate limit errors (50 requests/minute). Cache user names in a SharePoint lookup list if volume is that high. Third, Power Automate's expression language for string manipulation is verbose. Trimming a message to 80 characters and adding an ellipsis requires a nested if/greater/substring/concat expression — something Make does in one formatText() call and n8n does in a single line of JavaScript. Budget time to test expressions carefully before going live.
Ideas for what to build next
- →Add Asana task URL back to Slack — After the Asana task is created, post a threaded reply in the original Slack message with the Asana task URL so the client and your team can see the request was captured. Add a Slack 'Reply to a message' action at the end of the flow using the Asana task's permalink output.
- →Route tasks to the right project by channel — Right now the flow watches one channel and targets one Asana project. Add a Switch control after the trigger that maps each #client- channel name to its corresponding Asana project ID. This turns one flow into a multi-client router without duplicating the whole flow.
- →Send a daily digest of open client tasks — Build a second Scheduled cloud flow that runs at 8am each weekday, queries Asana for incomplete tasks tagged as client-sourced, and posts a summary to your internal #account-management Slack channel. This gives account managers a daily snapshot without logging into Asana.
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