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

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

Use case type

routing

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

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

Power Automate account with a Microsoft 365 Business Basic or higher plan — the Slack and Asana connectors are standard (non-premium) connectors, so no Power Automate Premium license is required
Slack account with membership in all client channels you want to monitor, plus permission to authorize OAuth apps in your Slack workspace (workspace admin may need to approve the Power Automate app)
Asana account with Editor or higher access on the target project where tasks will be created
The Asana project must already exist and be associated with the correct client — Power Automate cannot create Asana projects, only tasks within existing ones
If monitoring private Slack channels, the authorizing Microsoft account's linked Slack user must be a member of those channels before setup begins

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Namename
Projectprojects
Notes / Descriptionnotes
Slack Sender Display Name
5 optional fields▸ show
Due Datedue_on
Assigneeassignee
Slack Message Timestamp
Slack Channel Name
Priority Custom Fieldcustom_fields

Step-by-Step Setup

1

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.

  1. 1Click 'Create' in the left sidebar
  2. 2Select 'Automated cloud flow' from the options
  3. 3Type a flow name: 'Slack Client Issue → Asana Task'
  4. 4In the trigger search box, type 'Slack' and select 'When a new message is posted to a channel' from the Slack connector
  5. 5Click 'Create'
What you should see: The flow canvas opens with the Slack trigger card at the top. You should see a prompt to connect your Slack account if no connection exists yet.
Common mistake — The Slack connector in Power Automate uses OAuth and requires the flow to be authorized by a Slack account that has access to the target channels. A personal Slack account works, but a service account or bot user is safer for production — individual OAuth tokens expire when the user's password changes.
2

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.

  1. 1Click 'Sign in' inside the Slack trigger card
  2. 2Approve the OAuth permissions in the Slack popup
  3. 3Wait for the 'Channel Name' dropdown to populate
  4. 4Select your target client channel (e.g. #client-acmecorp)
  5. 5Leave all other trigger fields at their defaults
What you should see: The trigger card shows your Slack workspace name and the selected channel name. No red error banners visible.
Common mistake — Private Slack channels require the authorizing account to be a member of that channel before the channel appears in the dropdown. If your target channel is missing, add the account to the channel in Slack first, then reload the dropdown.
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 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.

  1. 1Click '+ New step'
  2. 2Search 'Compose' and select 'Compose' under Data Operation
  3. 3Click inside the 'Inputs' field
  4. 4Click 'Add dynamic content' and insert: 'From: [User Name] | Channel: [Channel Name] | Time: [Message Timestamp]\n\n[Text]'
  5. 5Replace bracketed labels with the corresponding dynamic content tokens from the Slack trigger
What you should see: The Compose card shows a template string with the Slack dynamic tokens highlighted in blue pill shapes. No yellow warning triangles.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
4

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.

  1. 1Click '+ New step' and select 'Control > Condition'
  2. 2In the left field, insert the dynamic content token 'Text' from the Slack trigger
  3. 3Set the operator dropdown to 'contains'
  4. 4Type 'urgent' in the right field
  5. 5Click 'Add row' and repeat for 'broken', 'down', and 'critical' — set each new row to OR
What you should see: The Condition card shows four OR-linked rows. The 'If yes' and 'If no' branches are both visible below.
Common mistake — Power Automate's 'contains' operator on strings is case-sensitive by default. Wrap the 'Text' token inside a toLower() expression — toLower(triggerOutputs()?['body/text']) — to catch 'URGENT', 'Urgent', and 'urgent' alike.
Slack
SL
trigger
filter
Priority
matches criteria?
yes — passes through
no — skipped
Asana
AS
notified
5

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.

  1. 1Inside 'If yes', click '+ Add an action'
  2. 2Search 'Asana' and select 'Create a task'
  3. 3Click 'Sign in' in the Asana action card
  4. 4Approve the Asana OAuth permissions in the popup
  5. 5Confirm the connection name appears in the card header
What you should see: The Asana 'Create a task' card loads with empty field inputs and shows your Asana connection name (e.g. '[email protected]') in the top-left of the card.
Common mistake — The Asana connector in Power Automate requires the authorizing account to have 'Editor' or higher access on the target Asana project. 'Commenter'-level accounts can read tasks but cannot create them — the flow will fail silently at runtime if the permission is too low.
6

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.

  1. 1In 'Task Name', type '[URGENT] ' then insert the dynamic content token 'Text' (trim to 80 chars using substring())
  2. 2In 'Project', select your client Asana project from the dropdown
  3. 3In 'Notes', insert the 'Outputs' token from the Compose action
  4. 4In 'Due Date', switch to expression mode and enter: addDays(utcNow(), 1)
  5. 5If available, set a 'Priority' custom field to 'High'
What you should see: All required Asana fields are filled. The task name preview shows '[URGENT]' prefix with a blue dynamic token for the message text. No red required-field warnings.
Common mistake — Asana project IDs in the dropdown are workspace-scoped. If you have multiple Asana workspaces connected, the dropdown may show projects from the wrong workspace. Check the workspace name shown in the Asana connector header before selecting a project.
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
7

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.

  1. 1Inside 'If no', click '+ Add an action' and select Asana 'Create a task'
  2. 2In 'Task Name', insert the Slack 'Text' token directly (no prefix)
  3. 3In 'Project', select the same client Asana project
  4. 4In 'Notes', insert the Compose 'Outputs' token
  5. 5In 'Due Date', enter expression: addDays(utcNow(), 3)
What you should see: Both branches now have a fully configured Asana 'Create a task' action. The canvas shows a symmetrical split at the Condition step.
8

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.

  1. 1Hover between the Slack trigger and the Compose action to reveal '+ Insert a step'
  2. 2Click '+ Insert a step' and add a new action
  3. 3Search 'Slack' and select 'Get user info'
  4. 4In the 'User' field, insert the dynamic content token 'User' from the Slack trigger
  5. 5Go back to the Compose action and replace the 'User Name' token with 'Display Name' from the Get user info action
What you should see: The Compose action now references 'Display Name' from the Slack 'Get user info' step. The dynamic token pill changes label from 'User' to 'Display Name'.
Common mistake — The Slack 'Get user info' action counts as a separate API call and adds ~1-2 seconds of latency per run. At high message volumes (100+ messages/hour), this may push you toward Slack API rate limits (Tier 3: 50 requests/minute). If volume is high, consider caching user names in a SharePoint list instead.
9

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.

  1. 1Select all actions except the trigger by clicking each while holding Shift
  2. 2Right-click and select 'Add Scope', name it 'Main Logic'
  3. 3Click '+ New step' after the scope
  4. 4Add a Slack 'Send a message' action targeting your internal #ops or #errors channel
  5. 5Click the three dots on the alert action, select 'Configure run after', and check 'has failed' and 'has timed out'
What you should see: The canvas shows the scope box wrapping all main actions and a separate alert action below it with a red dashed connector indicating it only fires on failure.
Common mistake — If you skip this step and the Asana connection token expires, the flow will fail silently. Client messages will keep coming into Slack but zero tasks will be created — you won't know until a client escalates.
Power Automate
▶ Test flow
executed
Slack
Asana
Asana
🔔 notification
received
10

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.

  1. 1Click 'Save' in the top toolbar
  2. 2Click 'Test' and select 'Manually'
  3. 3Click 'Perform trigger action'
  4. 4Open your target Slack channel and post: 'The login page is broken for our users'
  5. 5Return to Power Automate and watch the run progress in real time
What you should see: All steps show green checkmarks. In Asana, a new task titled '[URGENT] The login page is broken for our users' appears in the correct project within 90 seconds of posting the Slack message.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
11

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.

  1. 1Click 'My flows' in the left sidebar
  2. 2Locate your flow and confirm the toggle shows 'On'
  3. 3Click the flow name to open the detail page
  4. 4Scroll to 'Run history' and verify the test run shows 'Succeeded'
  5. 5Set a reminder to review run history after 24 hours of live use
What you should see: The Run history table shows at least one 'Succeeded' entry with a timestamp matching your test. The flow toggle is green and labeled 'On'.
Common mistake — Power Automate stores run history for 28 days on standard plans. If you need longer audit trails of which client messages generated which Asana tasks, log each run to a SharePoint list or Azure Log Analytics from inside the flow.

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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 SlackAfter 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 channelRight 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 tasksBuild 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

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