

How to Convert Slack Messages to Asana Tasks with Make
When a team member reacts to a Slack message with a specific emoji (e.g. ✅), Make instantly creates an Asana task with the message text, sender name, and channel as context.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that triage action items in Slack and need those items tracked in Asana without leaving the conversation.
Not ideal for
Teams who need bidirectional sync — if Asana task updates should post back to Slack, this one-way setup won't cover that without a second scenario.
Sync type
real-timeUse case type
routingReal-World Example
A 12-person product team uses a ✅ emoji reaction in #product-feedback to flag customer requests as Asana tasks. Before this automation, a PM manually copied messages into Asana at the end of the day — items sat untracked for 6-8 hours on average. Now tasks appear in Asana within 30 seconds of the reaction, with the original Slack message permalink attached.
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 Make
Copy the pre-built Make blueprint and paste it straight into Make. 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 | |
4 optional fields▸ show
| External URL | external.url |
| Assignee | assignee |
| Due Date | due_on |
| Task Comment — Slack Context | text |
Step-by-Step Setup
Make Dashboard > Scenarios > Create a new scenario
Create a new scenario in Make
Log into Make at make.com and click the blue 'Create a new scenario' button in the top right of the Scenarios dashboard. You'll land on the visual canvas with a single empty circle in the center — that's your trigger slot. Click it to open the app search panel. Type 'Slack' and select it from the list.
- 1Log in at make.com and go to the Scenarios section in the left sidebar
- 2Click the blue 'Create a new scenario' button in the top right
- 3Click the large empty circle on the canvas
- 4Type 'Slack' in the app search box and select 'Slack'
Scenario Canvas > Slack > Watch Reactions
Configure the Slack 'Watch Reactions' trigger
Select 'Watch Reactions' as your trigger — this fires every time any user adds an emoji reaction to a message. In the trigger configuration panel, connect your Slack workspace by clicking 'Add' next to the Connection field and authorizing Make via OAuth. Set the Channel field to the specific Slack channel you want to monitor (e.g. #product-feedback). Leave 'Reaction Name' blank to catch all reactions, or type a specific emoji name like 'white_check_mark' to filter for only ✅ reactions.
- 1Select 'Watch Reactions' from the Slack trigger list
- 2Click 'Add' next to the Connection field and authorize Make with your Slack workspace
- 3In the Channel field, click the dropdown and select your target channel (e.g. #product-feedback)
- 4In the Reaction Name field, type 'white_check_mark' to filter for ✅ only
- 5Click OK to save the trigger configuration
Scenario Canvas > + > Slack > Get a Message
Fetch the original Slack message content
The 'Watch Reactions' trigger gives you the reaction data and a reference to the message, but it does not include the full message text. Add a second Slack module to retrieve the message. Click the '+' icon after the trigger module. Search for Slack again and choose 'Get a Message'. This module calls the conversations.history API to pull the full text of the reacted-to message.
- 1Click the '+' circle to the right of the Watch Reactions module
- 2Search 'Slack' and select 'Get a Message'
- 3In the Channel ID field, map the channel ID from the trigger output: click in the field and select 'Channel ID' from the trigger's data panel
- 4In the Message TS field, map 'Message Timestamp' from the trigger output
- 5Click OK to save
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Scenario Canvas > + > Slack > Get a User
Resolve the Slack user ID to a display name
The 'Get a Message' module returns a user ID like 'U04AB12CD', not a readable name. Add a 'Get a User' Slack module to resolve this to a display name you can pass to Asana as the task context. This keeps the Asana task readable without requiring the assignee to cross-reference Slack IDs.
- 1Click '+' after the 'Get a Message' module
- 2Search 'Slack' and select 'Get a User'
- 3In the User ID field, map the 'User' (sender ID) from the 'Get a Message' output
- 4Click OK to save
This formula goes in the Name field of Make's 'Create a Task' Asana module. It trims the message to 80 characters, capitalizes the first letter, and appends the sender and channel so every task name is scannable. Click the fx icon in the Name field and paste this — do not type it as plain text or Make will treat it as a literal string.
JavaScript — Custom Function{{-- Paste in: Asana > Create a Task > Name field (via fx formula editor) --}}▸ Show code
{{-- Paste in: Asana > Create a Task > Name field (via fx formula editor) --}}
concat(
'[',... expand to see full code
{{-- Paste in: Asana > Create a Task > Name field (via fx formula editor) --}}
concat(
'[',
{{3.channel.name}},
'] ',
if(
greater(length({{2.text}}), 80),
concat(
substring(
{{2.text}},
0,
80
),
'...'
),
{{2.text}}
),
' — via ',
{{4.real_name}}
)
{{-- For the Due Date field, use this to set a 3-business-day deadline --}}
formatDate(
addDays(now, 3),
'YYYY-MM-DD'
)Scenario Canvas > + > Flow Control > Router
Add a Router to handle edge cases
Not every reacted-to message will have actionable text — some might be images, bot messages, or thread replies you don't want as tasks. Add a Router module after 'Get a User' to branch logic. One path handles valid text messages. A second path can log or ignore everything else. Click the wrench icon on the Router to add filter conditions to each path.
- 1Click '+' after the 'Get a User' module
- 2Search 'Flow Control' and select 'Router'
- 3Click the first route line coming out of the Router and click 'Set up a filter'
- 4Set the condition: 'Text' (from Get a Message) 'exists' — this ensures only messages with actual text proceed
- 5Label this route 'Has Text' and click OK
Scenario Canvas > Asana Module > Name Field > Formulas
Build the Asana task name with a text formula
Before adding the Asana module, use Make's built-in tools to construct a clean task name. You'll do this directly inside the Asana module's Name field using Make's formula syntax. A good format is: '[Channel] Message from [Real Name]: [first 80 chars of text]'. This gives Asana task names enough context without being overwhelming. Make formulas run inline — no separate module needed.
- 1Click '+' on the first Router branch (the 'Has Text' path)
- 2Search 'Asana' and select 'Create a Task'
- 3In the Name field, click the formula icon (looks like 'fx')
- 4Enter the formula: concat('[', {{3.channel.name}}, '] ', substring({{2.text}}, 0, 80), ' — via ', {{4.real_name}})
- 5Verify the preview shows a readable task name in the formula editor
Scenario Canvas > Asana > Create a Task
Configure the Asana 'Create a Task' module
With the Asana module open, connect your Asana account via OAuth by clicking 'Add' next to the Connection field. Select the Workspace and the target Project from the dropdowns — Make will load these from your Asana account. Fill in the remaining fields: set Notes to the full message text, set the Due Date if your team uses one (you can leave it blank), and paste the Slack message permalink into the External URL field so anyone viewing the task can jump back to the original Slack thread.
- 1Click 'Add' next to Connection and authorize Asana via OAuth
- 2Select your Workspace from the dropdown (e.g. 'Acme Corp')
- 3Select the target Project (e.g. 'Product Requests')
- 4In the Name field, confirm the formula from Step 6 is populated
- 5In the Notes field, map the full 'Text' output from the 'Get a Message' module
- 6In the External URL field, map the 'Permalink' from the 'Get a Message' module
Scenario Canvas > + > Asana > Add a Comment to a Task
Add a comment to the Asana task with full Slack context
After the task is created, add an 'Add a Comment to a Task' Asana module to attach structured context. This is where you include the channel name, the reactor's name (the person who added the emoji), and the original message timestamp. Linking back to the exact Slack message saves the assignee from hunting through channel history later.
- 1Click '+' after the 'Create a Task' module
- 2Search 'Asana' and select 'Add a Comment to a Task'
- 3In the Task ID field, map the 'ID' from the 'Create a Task' output (this is the newly created task's GID)
- 4In the Text field, type your comment template — e.g. 'Flagged in #{{3.channel.name}} by {{triggerUser}} on {{formatDate(1.event_ts, 'MMMM D, YYYY')}}. Original message: {{permalink}}'
- 5Click OK to save
Scenario Canvas > Clock Icon > Scheduling > Immediately
Set the scenario schedule to 'Immediately'
Make scenarios using instant triggers (like Slack's Watch Reactions) must be set to run immediately — not on a schedule. Click the clock icon at the bottom left of the scenario canvas and confirm the scheduling is set to 'Immediately'. If it defaults to a polling interval (like every 15 minutes), your scenario will not fire in real time. Save the scenario using the disk icon before activating.
- 1Click the clock icon at the bottom left of the canvas
- 2In the scheduling modal, select 'Immediately'
- 3Click Save
- 4Click the disk icon (Save scenario) in the top right
Scenario Canvas > Run Once > Test in Slack
Run a live test with a real Slack reaction
Click 'Run once' at the bottom of the canvas — this puts Make in listening mode for one scenario run. Go to your Slack workspace, find a message in the configured channel, and react to it with your configured emoji (✅). Watch the Make canvas — each module will show a bubble with the number of records processed. Green bubbles mean success. Click any bubble to inspect the exact data passed through that module.
- 1Click 'Run once' at the bottom of the Make canvas
- 2Switch to your Slack workspace
- 3Find a text message in your configured channel (e.g. #product-feedback)
- 4React to it with the ✅ emoji
- 5Switch back to Make and watch the module bubbles light up
Scenario Canvas > Toggle > ON
Activate the scenario
Once the test passes, flip the toggle in the bottom left of the canvas from OFF to ON. The scenario is now live and will fire automatically every time someone reacts with ✅ in your configured channel. Make will show you the scenario's run history in the Activity tab — check it after your first real-world trigger to confirm everything is working without manual intervention.
- 1Click the OFF/ON toggle in the bottom left of the canvas
- 2Confirm the toggle turns blue and reads 'ON'
- 3Click the 'Activity' tab in the top menu to see run history
- 4After your first real reaction in Slack, check Activity to confirm a successful run
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 Make for this if your team wants conditional logic without writing code. The Router module handles edge cases (bot messages, image-only posts, duplicate reactions) visually — you can see exactly what gets through and what doesn't without reading a filter array in JSON. Make's visual canvas also makes it easy to hand this off to someone else on the team; they can open the scenario and understand the flow in under 5 minutes. The one scenario where you'd skip Make: if your team already runs a self-hosted n8n instance. The per-operation cost math tips in n8n's favor at scale, and n8n's Slack integration supports the same reaction triggers.
The cost math is straightforward. Each scenario run costs 4-5 Make operations: 1 for Watch Reactions, 1 for Get a Message, 1 for Get a User, 1 for Create a Task, 1 for Add a Comment. Call it 5 operations per flagged message. Make's free plan gives you 1,000 operations/month — that covers 200 Slack reactions/month before you hit the ceiling. Make's Core plan ($9/month) gives you 10,000 operations — that's 2,000 reactions/month for $9. Zapier's equivalent on its Starter plan ($19.99/month) gives you 750 tasks/month and costs more than double. For teams flagging under 500 items/month, Make's Core plan is the cheapest fully-hosted option by a clear margin.
Zapier has one real advantage here: its Slack trigger for reactions is simpler to configure and doesn't require the extra 'Get a Message' step — Zapier pulls message context directly in the trigger payload. That's 1 fewer step and 1 fewer operation per run. n8n's Slack node handles both the reaction event and message fetch in a single node configuration, and because it's self-hosted, there's no operation cap — relevant if your team is reacting to 1,000+ messages per month. Power Automate has a Slack connector, but it's limited to polling (minimum 1-minute intervals), so tasks appear in Asana with a delay — not real-time. Pipedream's Slack source is excellent for developers who want to write the Asana API call directly, skipping the abstraction layer entirely. Make wins for non-technical teams who need the logic to be auditable and editable by people who don't write code.
Three things you'll hit after setup. First, Slack rate-limits the conversations.history API to 50 requests per minute per workspace. If your team has a burst of emoji reactions during a busy meeting, some 'Get a Message' calls will fail with a 429 error — Make will retry automatically, but tasks can arrive in Asana 2-3 minutes late during bursts. Second, Asana's API enforces a 'notes' field limit of 100,000 characters — not a practical issue for Slack messages, but long Slack threads copied in full can occasionally hit this. Third, if your Slack workspace upgrades from Free to Pro, all channel IDs are reassigned. Your scenario will stop firing because the stored channel ID in the trigger config no longer matches. Go back to the Watch Reactions module, reselect your channel from the dropdown, and save — a 30-second fix, but it will catch you off guard on a Monday morning.
Ideas for what to build next
- →Assign tasks to Asana users based on Slack user — Use a Make datastore to map Slack user IDs to Asana user GIDs. When a message is flagged, look up the sender's Asana account and auto-assign the task — eliminates the manual triage step entirely.
- →Post a Slack confirmation when the Asana task is created — Add a Slack 'Create a Message' module at the end of the scenario that replies in-thread to the original message with the Asana task URL. The person who flagged it gets instant confirmation without leaving Slack.
- →Watch for keyword triggers in addition to emoji reactions — Add a second Make scenario using the Slack 'Watch Messages' trigger with a keyword filter (e.g. messages containing 'ACTION:' or 'TODO:'). Run both scenarios in parallel so teams can flag tasks by emoji or by text convention — different teams prefer different methods.
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