Beginner~12 min setupCommunication & Project ManagementVerified April 2026
Slack logo
Asana logo

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

Use case type

routing

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

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

Make account with an active scenario slot (free plan includes 2 active scenarios)
Slack workspace admin access or permission to install OAuth apps — needed to authorize Make's Slack connection with 'reactions:read' and 'channels:history' scopes
Asana account with access to the target project and 'tasks:write' permissions — personal Asana accounts work, but the target project must be shared with your user
A designated Slack channel where the emoji-to-task workflow will run — communicate this to your team before activating so they know which reactions are being tracked
The exact emoji name you'll use as the trigger (e.g. 'white_check_mark' for ✅) — confirm the name by right-clicking the emoji in Slack and selecting 'Copy emoji name'

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Namename
Task Notesnotes
Projectprojects
Workspaceworkspace
4 optional fields▸ show
External URLexternal.url
Assigneeassignee
Due Datedue_on
Task Comment — Slack Contexttext

Step-by-Step Setup

1

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.

  1. 1Log in at make.com and go to the Scenarios section in the left sidebar
  2. 2Click the blue 'Create a new scenario' button in the top right
  3. 3Click the large empty circle on the canvas
  4. 4Type 'Slack' in the app search box and select 'Slack'
What you should see: A panel opens on the right showing all available Slack triggers. You should see options including 'Watch Reactions', 'Watch Messages', and others.
Common mistake — Make's free plan allows 1,000 operations/month. Each scenario run counts as at least 2 operations (trigger + action). Plan accordingly before going live.
2

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.

  1. 1Select 'Watch Reactions' from the Slack trigger list
  2. 2Click 'Add' next to the Connection field and authorize Make with your Slack workspace
  3. 3In the Channel field, click the dropdown and select your target channel (e.g. #product-feedback)
  4. 4In the Reaction Name field, type 'white_check_mark' to filter for ✅ only
  5. 5Click OK to save the trigger configuration
What you should see: The trigger module shows your Slack workspace name and the selected channel. A small lightning bolt icon on the module confirms this is a real-time (instant) trigger.
Common mistake — The Slack OAuth scope 'reactions:read' must be granted during authorization. If you skip this, Make will connect but the trigger will never fire. Check your Slack app's OAuth scopes at api.slack.com/apps if you're using a custom Slack app.
Make
+
click +
search apps
Slack
SL
Slack
Configure the Slack 'Watch R…
Slack
SL
module added
3

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.

  1. 1Click the '+' circle to the right of the Watch Reactions module
  2. 2Search 'Slack' and select 'Get a Message'
  3. 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
  4. 4In the Message TS field, map 'Message Timestamp' from the trigger output
  5. 5Click OK to save
What you should see: The 'Get a Message' module appears connected to the trigger. When you run a test, it should return the full message text, the sender's user ID, and the timestamp.
Common mistake — Message TS (timestamp) in Slack doubles as the unique message ID. Do not confuse it with a human-readable date — it looks like '1698765432.123456'. Map it exactly as returned by the trigger.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
4

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.

  1. 1Click '+' after the 'Get a Message' module
  2. 2Search 'Slack' and select 'Get a User'
  3. 3In the User ID field, map the 'User' (sender ID) from the 'Get a Message' output
  4. 4Click OK to save
What you should see: The module returns fields including 'Real Name', 'Display Name', and 'Email'. You will use 'Real Name' in your Asana task name in the next steps.

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

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.

  1. 1Click '+' after the 'Get a User' module
  2. 2Search 'Flow Control' and select 'Router'
  3. 3Click the first route line coming out of the Router and click 'Set up a filter'
  4. 4Set the condition: 'Text' (from Get a Message) 'exists' — this ensures only messages with actual text proceed
  5. 5Label this route 'Has Text' and click OK
What you should see: The Router appears with two branches. The first branch shows a filter badge labeled 'Has Text'. The second branch is unfiltered and acts as your fallback path.
Common mistake — If you skip the Router and pass empty text to Asana, tasks get created with blank names. Asana accepts blank task names via API — it won't throw an error, it'll just create a useless task.
6

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.

  1. 1Click '+' on the first Router branch (the 'Has Text' path)
  2. 2Search 'Asana' and select 'Create a Task'
  3. 3In the Name field, click the formula icon (looks like 'fx')
  4. 4Enter the formula: concat('[', {{3.channel.name}}, '] ', substring({{2.text}}, 0, 80), ' — via ', {{4.real_name}})
  5. 5Verify the preview shows a readable task name in the formula editor
What you should see: The Name field preview shows something like: '[product-feedback] Add export to CSV to settings page — via Jordan Mehta'. If it shows raw variable names, the mapping is broken — re-select the fields from the data panel.
Common mistake — Make module numbers ({{2.text}}, {{3.channel}}) shift if you reorder modules. If you reorganize the scenario after building formulas, audit every mapped field — they may silently point to the wrong module.
7

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.

  1. 1Click 'Add' next to Connection and authorize Asana via OAuth
  2. 2Select your Workspace from the dropdown (e.g. 'Acme Corp')
  3. 3Select the target Project (e.g. 'Product Requests')
  4. 4In the Name field, confirm the formula from Step 6 is populated
  5. 5In the Notes field, map the full 'Text' output from the 'Get a Message' module
  6. 6In the External URL field, map the 'Permalink' from the 'Get a Message' module
What you should see: The Asana module shows your workspace name, project name, and mapped fields. The Name field shows the formula text (not a blank), and External URL shows a Slack URL pattern like 'https://yourteam.slack.com/archives/C...'.
Common mistake — Asana's API requires a Workspace GID or Project GID — Make resolves these automatically via the dropdowns. Never paste raw GIDs manually into these fields. If the dropdown is empty, your OAuth token may not have read access to that workspace.
8

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.

  1. 1Click '+' after the 'Create a Task' module
  2. 2Search 'Asana' and select 'Add a Comment to a Task'
  3. 3In the Task ID field, map the 'ID' from the 'Create a Task' output (this is the newly created task's GID)
  4. 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}}'
  5. 5Click OK to save
What you should see: A second Asana module appears connected to 'Create a Task'. When you run a test, the task in Asana should have one comment with the Slack channel, the reactor's name, and a formatted date.
9

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.

  1. 1Click the clock icon at the bottom left of the canvas
  2. 2In the scheduling modal, select 'Immediately'
  3. 3Click Save
  4. 4Click the disk icon (Save scenario) in the top right
What you should see: The scheduling badge at the bottom of the canvas shows 'Immediately' instead of a time interval. The scenario is saved but not yet active — you'll activate it after testing.
Common mistake — If 'Immediately' is greyed out, Make may not have successfully registered the Slack webhook. Go back to Step 2, open the trigger module, and re-save it — this forces Make to re-register the webhook with Slack.
10

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.

  1. 1Click 'Run once' at the bottom of the Make canvas
  2. 2Switch to your Slack workspace
  3. 3Find a text message in your configured channel (e.g. #product-feedback)
  4. 4React to it with the ✅ emoji
  5. 5Switch back to Make and watch the module bubbles light up
What you should see: All modules show green bubbles. The Asana 'Create a Task' module bubble shows '1 bundle processed'. Check Asana — the task should appear in your target project within 30 seconds with a name, notes, permalink, and comment.
Common mistake — If the Router module shows '0 bundles' on the 'Has Text' path, the message you reacted to might be an image or a Slack bot message with no 'text' field. React to a plain text message to confirm the filter works before adjusting the filter logic.
Make
▶ Run once
executed
Slack
Asana
Asana
🔔 notification
received
11

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.

  1. 1Click the OFF/ON toggle in the bottom left of the canvas
  2. 2Confirm the toggle turns blue and reads 'ON'
  3. 3Click the 'Activity' tab in the top menu to see run history
  4. 4After your first real reaction in Slack, check Activity to confirm a successful run
What you should see: The toggle is blue and shows 'ON'. The scenario status on your Scenarios dashboard changes from 'Inactive' to 'Active'. The next ✅ reaction in Slack should create an Asana task automatically with no manual intervention.

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 Make for this workflow

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.

Cost

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.

Tradeoffs

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 userUse 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 createdAdd 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 reactionsAdd 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

Was this guide helpful?
Slack + Asana overviewMake profile →