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

How to Convert Slack Messages to Asana Tasks with Zapier

When a team member reacts to a Slack message with a specific emoji, Zapier instantly creates an Asana task with the message text, sender, 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 work in Slack but track execution in Asana and want zero copy-paste between the two.

Not ideal for

Teams needing two-way sync where Asana task updates should post back to Slack — use Make for that loop.

Sync type

real-time

Use case type

routing

Real-World Example

💡

A 12-person product team at a B2B SaaS company uses this to capture action items that surface in #product-feedback. Before this Zap, someone had to manually copy Slack messages into Asana at the end of standups — things got missed for days. Now, reacting with a 📋 emoji on any message creates a task in the Product Backlog project within 30 seconds, with the original message text as the task description and the reactor's name as the assignee.

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

Before You Start

Make sure you have everything ready.

Zapier account with access to multi-step Zaps (Starter plan or higher — free plan only supports 2-step Zaps, and this workflow uses 4 steps)
Slack account with permission to add the Zapier app to your workspace — workspace admins may need to approve third-party app installs
Asana account with Member access to the destination project — Guest accounts cannot create tasks via API in all project configurations
The Zapier Slackbot must be invited to any private channel you want to monitor — type /invite @Zapier in the channel before setting up the trigger
Decide on your trigger emoji before building — confirm the emoji name in Slack by hovering over it and noting the :name: label shown in the tooltip

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Name
Description
Projects
5 optional fields▸ show
Assignee
Message Permalink
Source Channel
Reaction Timestamp
Due Date

Step-by-Step Setup

1

zapier.com > Dashboard > Create Zap

Create a new Zap in Zapier

Log in at zapier.com and click the orange 'Create Zap' button in the left sidebar. You'll land on the Zap editor, which shows a two-panel layout: the step builder on the left and a live preview on the right. Give this Zap a name at the top — something like 'Slack Emoji → Asana Task' — so it's easy to find later. You're now ready to set the trigger.

  1. 1Log in at zapier.com
  2. 2Click 'Create Zap' in the left sidebar
  3. 3Click the name field at the top and type 'Slack Emoji → Asana Task'
  4. 4Click the '1. Trigger' block to begin
What you should see: You should see the Zap editor open with an empty trigger block selected and a search field for choosing an app.
2

Zap Editor > Trigger > App & Event > Slack > New Reaction Added

Set Slack as the trigger app with 'New Reaction Added'

In the trigger search field, type 'Slack' and select it from the results. Zapier will show you a list of Slack trigger events. Choose 'New Reaction Added' — this fires every time someone adds an emoji reaction to any message in the channels you specify. This is the most reliable trigger for emoji-based task capture because it uses Slack's Events API via webhook, not polling, so it fires within seconds. Do not choose 'New Message Posted to Channel' here unless you want every message to create a task.

  1. 1Type 'Slack' in the app search field
  2. 2Select 'Slack' from the dropdown
  3. 3Click the 'Event' dropdown
  4. 4Select 'New Reaction Added'
  5. 5Click 'Continue'
What you should see: You should see the event field display 'New Reaction Added' and a 'Continue' button become active.
Common mistake — Slack's 'New Reaction Added' trigger fires for ALL reactions in the selected channel, not just your designated emoji. You'll filter to a specific emoji in Step 4 using Zapier's Filter step — skipping that step means every reaction creates an Asana task.
Zapier
+
click +
search apps
Slack
SL
Slack
Set Slack as the trigger app…
Slack
SL
module added
3

Zap Editor > Trigger > Account > Sign in to Slack

Connect your Slack account

Click 'Sign in to Slack' and Zapier will open an OAuth popup. Select your workspace from the dropdown — if you manage multiple workspaces, make sure you pick the right one. Zapier needs permission to read messages and reaction events; approve both scopes when prompted. Once connected, Zapier will show your workspace name with a green checkmark. Select the specific channel you want to monitor from the 'Channel' dropdown — for example, #product-feedback.

  1. 1Click 'Sign in to Slack'
  2. 2Select your workspace in the OAuth popup
  3. 3Click 'Allow' to grant Zapier message and reaction read permissions
  4. 4Back in Zapier, select your target channel from the 'Channel' dropdown
  5. 5Click 'Continue'
What you should see: You should see your Slack workspace name appear with a green Connected badge, and the Channel field should show the name of the channel you selected.
Common mistake — Zapier's Slack integration can only monitor public channels and private channels where the Zapier Slackbot has been explicitly invited. If the channel doesn't appear in the dropdown, type /invite @Zapier in that channel first.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
4

Zap Editor > Trigger > Test > Test trigger

Test the Slack trigger

Click 'Test trigger' and Zapier will fetch the three most recent reactions from your selected channel. If the channel has no recent reactions, go add a reaction to any message in that channel right now, then come back and click 'Test trigger' again. Zapier will display the raw data it received: the reaction name (e.g., 'clipboard'), the message text, the user ID of the person who reacted, and the timestamp. Confirm the 'Reaction' field shows a real emoji name, then click 'Continue with selected record'.

  1. 1Click 'Test trigger'
  2. 2If no data loads, go to your Slack channel and add a 📋 reaction to any message
  3. 3Return to Zapier and click 'Test trigger' again
  4. 4Review the returned data and confirm 'Reaction' and 'Message Text' fields are populated
  5. 5Click 'Continue with selected record'
What you should see: You should see a data card showing fields like 'Reaction: clipboard', 'Message Text: [the message content]', and 'User: [user ID]'. All three rows should have real values, not empty strings.
Common mistake — The 'User' field returned here is a Slack user ID like U04XXXXX, not a display name. You'll need to resolve this to a name in Step 6 if you want the Asana task assignee to be human-readable.
Zapier
▶ Turn on & test
executed
Slack
Asana
Asana
🔔 notification
received
5

Zap Editor > + > Filter by Zapier > Only continue if...

Add a Filter step to target your specific emoji

Click the '+' button below the trigger step and select 'Filter' from the built-in tools. Set the condition to: 'Reaction' (from the Slack trigger data) 'Contains' 'clipboard'. This ensures only messages reacted to with 📋 create Asana tasks — not every thumbs-up or fire emoji. You can swap 'clipboard' for any emoji name Slack uses internally, like 'white_check_mark' for ✅ or 'pushpin' for 📌. Slack uses its own naming convention, not the Unicode name — check your test data from Step 4 to confirm the exact string.

  1. 1Click the '+' icon below the trigger block
  2. 2Select 'Filter' from the built-in tools list
  3. 3In 'Field', select 'Reaction' from the Slack trigger data
  4. 4Set the condition to '(Text) Contains'
  5. 5Type 'clipboard' (or your chosen emoji name) in the value field
  6. 6Click 'Continue'
What you should see: You should see a green 'Your Zap would have continued' confirmation, meaning the filter matched the emoji in your test data.
Common mistake — If you want to support multiple trigger emojis — say both 📋 and ✅ — add a second filter condition using 'OR' logic. Using 'AND' with two different emoji names will never match because one reaction can't be two emojis simultaneously.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Asana
AS
notified
6

Zap Editor > + > Action > Slack > Find User by Username

Add a 'Find User by Username' step to resolve the Slack user ID

The Slack trigger returns a raw user ID, not a name. Add a new Slack action step and select the event 'Find User by Username.' Map the 'User' field from the trigger data into the search input. This call hits Slack's users.info API and returns the user's display name, real name, and email address. You'll use the email or real name in the next step to either match or assign the Asana task correctly. This step adds about 1–2 seconds of latency but prevents 'Assigned to: U04XXXXX' tasks in Asana.

  1. 1Click '+' below the Filter step
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Find User by Username' as the action event
  4. 4Map the 'User' field from the trigger into the 'User Name or ID' input field
  5. 5Click 'Continue' and then 'Test action'
What you should see: You should see the user's real name, display name, and email returned in the test results. If you see 'User not found', the ID format may need the leading 'U' stripped — check the raw trigger data.

Paste this into a 'Code by Zapier' step inserted between the Filter step and the Asana action. It truncates the task name to 100 characters at a word boundary, strips Slack's markdown formatting characters, and builds the description block automatically. This prevents Asana from displaying garbled bold/italic Slack syntax in task titles.

JavaScript — Code Step// Code by Zapier — runs between Filter and Asana Create Task
▸ Show code
// Code by Zapier — runs between Filter and Asana Create Task
// Input data from previous steps:
// inputData.messageText — full Slack message text

... expand to see full code

// Code by Zapier — runs between Filter and Asana Create Task
// Input data from previous steps:
// inputData.messageText — full Slack message text
// inputData.permalink — Slack message permalink
// inputData.channelName — Slack channel name
// inputData.reactorName — resolved display name from user lookup

const rawText = inputData.messageText || '';
const permalink = inputData.permalink || '';
const channelName = inputData.channelName || 'unknown-channel';
const reactorName = inputData.reactorName || 'Unknown';

// Strip Slack markdown: bold (*text*), italic (_text_), code (`text`), strikethrough (~text~)
const cleanText = rawText
  .replace(/\*([^*]+)\*/g, '$1')
  .replace(/_([^_]+)_/g, '$1')
  .replace(/`([^`]+)`/g, '$1')
  .replace(/~([^~]+)~/g, '$1')
  .replace(/<[^|>]+\|([^>]+)>/g, '$1')  // Slack link format <url|label> → label
  .replace(/<[^>]+>/g, '')               // Remove remaining Slack user/channel mentions
  .trim();

// Truncate task name to 100 chars at last word boundary
let taskName = cleanText;
if (taskName.length > 100) {
  taskName = taskName.substring(0, 100);
  const lastSpace = taskName.lastIndexOf(' ');
  if (lastSpace > 60) {
    taskName = taskName.substring(0, lastSpace);
  }
  taskName = taskName + '...';
}

// Build structured description
const description = [
  cleanText,
  '',
  '---',
  `Source: #${channelName}`,
  `Flagged by: ${reactorName}`,
  `Slack thread: ${permalink}`
].join('\n');

output = {
  taskName: taskName,
  description: description
};
7

Zap Editor > + > Action > Asana > Create Task

Add Asana as the action app with 'Create Task'

Click '+' to add the next step and search for 'Asana'. Select 'Create Task' as the action event. Connect your Asana account via OAuth — Zapier will open a popup asking you to authorize access to your workspace. Once connected, select the Asana workspace and the destination project from the dropdowns. These are required fields. You won't see specific project sections at this stage; you'll configure those in the field mapping step.

  1. 1Click '+' below the Slack user lookup step
  2. 2Search for 'Asana' and select it
  3. 3Choose 'Create Task' as the action event
  4. 4Click 'Sign in to Asana' and approve the OAuth request
  5. 5Select your Asana Workspace from the dropdown
  6. 6Select the destination Project from the dropdown
  7. 7Click 'Continue'
What you should see: You should see your Asana workspace and project names populated in the dropdowns, with additional optional fields appearing below them.
Common mistake — Zapier's Asana integration requires the connected account to be a member of the destination project. If a project doesn't appear in the dropdown, check that the authenticated Asana user has access to it — admin-only projects won't show up.
8

Zap Editor > Action > Asana > Create Task > Set up action

Map Slack fields to Asana task fields

Now fill in the Asana task fields using data from the Slack trigger and the user lookup step. Set the Task Name to the first 80–100 characters of the Slack message text — you can truncate it later if needed, but Asana displays long task names awkwardly in list view. Map the Description to the full Slack message text plus the permalink, so anyone opening the task can jump back to the original conversation. Set the Assignee field using the email or name returned from the Slack user lookup in Step 6. Set the Due Date only if your team has a standard SLA — otherwise leave it blank rather than defaulting to today.

  1. 1In 'Task Name', click the field and select 'Message Text' from the Slack trigger, optionally wrapped in a Formatter truncation step
  2. 2In 'Description', map 'Message Text' and append 'Permalink' from the Slack trigger on a new line
  3. 3In 'Assignee', map 'Profile Real Name' from the Slack user lookup step
  4. 4In 'Projects', confirm your target project is still selected
  5. 5Leave 'Due Date' blank unless your team has a fixed turnaround policy
  6. 6Click 'Continue'
What you should see: All mapped fields should show dynamic pill values (blue tags) rather than static typed text. If any field shows a raw ID instead of a name, go back to the user lookup step and verify it returned real name data.
Common mistake — Asana's 'Assignee' field requires either an Asana user ID or a verified email address. If you pass a display name string, Asana will silently ignore the assignment and create the task with no assignee. Use the email returned from the Slack user lookup, not the name.
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
9

Zap Editor > Action > Asana > Create Task > Test action

Test the Asana action

Click 'Test action' and Zapier will make a live API call to Asana using your mapped data. This creates a real task in your selected project — it is not a sandbox. Open Asana in another tab and navigate to the project you selected. The task should appear within 10–15 seconds. Verify that the task name is readable, the description includes the original Slack message text and a working permalink, and the assignee is set correctly. If anything looks wrong, go back to Step 8 and adjust the field mapping before proceeding.

  1. 1Click 'Test action'
  2. 2Wait 10–15 seconds
  3. 3Open Asana and navigate to the destination project
  4. 4Find the newly created task and click it open
  5. 5Confirm the task name, description, and assignee all look correct
What you should see: You should see a new Asana task in your project with the Slack message text as the task name, the full message plus a Slack permalink in the description, and the correct person assigned.
10

Zap Editor > Publish > Zap History

Turn on the Zap

Click 'Publish' in the top right corner of the Zap editor. Zapier will do a final validation check on all steps. If everything passes, the Zap status changes to 'On' and the toggle turns blue. The Zap is now live. Go to your Slack channel and react to a message with your designated emoji — Asana should have a new task within 30–60 seconds. Check the Zap History tab (accessible from the left sidebar under your Zap name) to see the first successful run.

  1. 1Click the 'Publish' button in the top right
  2. 2Review the validation summary — fix any errors flagged
  3. 3Confirm the Zap toggle shows 'On' (blue)
  4. 4Go to your Slack channel and add a 📋 reaction to any message
  5. 5Check Zap History after 60 seconds to confirm a successful run
What you should see: The Zap History should show one completed run with a green checkmark, and the Asana project should contain the new task.
Common mistake — Zapier pauses Zaps automatically if they hit errors on 5 consecutive runs. Set up error notifications under 'Settings > Notifications' so you're emailed if the Zap goes down — otherwise you may not notice it stopped working for hours.

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

Use Zapier for this if your team is non-technical and you want the workflow running in under 20 minutes without touching a config file. The guided Zap builder handles the Slack OAuth, the Asana connection, and the field mapping in a single interface — no JSON, no code required. It's also the right call if you're monitoring one or two channels and creating fewer than 200 tasks per month, which keeps you comfortably within the Starter plan limits. If you're building this for a team that already runs n8n or Make, use that instead — the native integrations are comparable and you won't pay for a redundant tool.

Cost

At 100 emoji reactions per month that pass the filter, this Zap consumes roughly 400 Zapier tasks (trigger + filter + user lookup + Asana action = 4 tasks per run). The Zapier Starter plan costs $19.99/month and includes 750 tasks — that covers you at this volume. Scale to 250 reactions/month and you're at 1,000 tasks, which pushes you to the Professional plan at $49/month. Make handles the same workflow for $9/month on the Core plan with 10,000 operations, making it roughly 5x cheaper at medium volume.

Tradeoffs

Make's biggest advantage here is its scenario canvas — you can visually see the Slack module, the filter, the user lookup, and the Asana module as connected nodes, which makes debugging field mapping failures much faster. n8n gives you the most control: you can write JavaScript directly in a Function node to strip Slack markdown, truncate task names, and construct the description in one step instead of chaining a Code step separately. Power Automate has a native Asana connector but it's shallow — the 'Create Task' action doesn't expose custom fields, which matters if your Asana project uses them. Zapier is still the right pick here specifically because of the 'New Reaction Added' trigger: it's webhook-based, fires in under 30 seconds, and doesn't require any manual configuration of Slack's Events API.

Three things you'll hit after going live. First, Slack's 'New Reaction Added' trigger includes the reaction count at the time of the event, but it's not perfectly reliable for deduplication — if two people react within the same second, both events may report count=1. Handle this with a short delay or accept occasional duplicates and clean them in Asana. Second, Asana's Create Task action via Zapier doesn't support adding a task to multiple projects simultaneously — you can only specify one project per action step. If your team uses Asana's multi-homing feature, you'll need to add a second Asana step to assign the task to the additional project. Third, long Slack messages with code blocks or bulleted lists will pass through with Slack's markup characters intact (backticks, asterisks, dashes) unless you clean them in a Formatter or Code step — the pro tip code above handles this, and it's worth implementing before your team sees their first garbled Asana task description.

Ideas for what to build next

  • Post a Slack confirmation when the task is createdAdd a final Zapier step that sends a Slack DM or channel reply confirming the Asana task was created, including a direct link to it. This closes the loop for the person who reacted so they know the task landed.
  • Route tasks to different Asana projects by channelAdd Zapier Paths to branch on the Slack channel name — messages from #engineering go to the Engineering Sprint project, messages from #design go to the Design Backlog. Each path maps to a separate Asana Create Task action with its own project setting.
  • Sync Asana task completion back to SlackBuild a second Zap that triggers on 'Task Completed' in Asana and posts a message to the original Slack channel with the task name and who completed it. This requires storing the channel ID in an Asana custom field during task creation.

Related guides

Was this guide helpful?
Slack + Asana overviewZapier profile →