

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-timeUse case type
routingReal-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.
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Name | ||
| Description | ||
| Projects | ||
5 optional fields▸ show
| Assignee | |
| Message Permalink | |
| Source Channel | |
| Reaction Timestamp | |
| Due Date |
Step-by-Step Setup
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.
- 1Log in at zapier.com
- 2Click 'Create Zap' in the left sidebar
- 3Click the name field at the top and type 'Slack Emoji → Asana Task'
- 4Click the '1. Trigger' block to begin
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.
- 1Type 'Slack' in the app search field
- 2Select 'Slack' from the dropdown
- 3Click the 'Event' dropdown
- 4Select 'New Reaction Added'
- 5Click 'Continue'
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.
- 1Click 'Sign in to Slack'
- 2Select your workspace in the OAuth popup
- 3Click 'Allow' to grant Zapier message and reaction read permissions
- 4Back in Zapier, select your target channel from the 'Channel' dropdown
- 5Click 'Continue'
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'.
- 1Click 'Test trigger'
- 2If no data loads, go to your Slack channel and add a 📋 reaction to any message
- 3Return to Zapier and click 'Test trigger' again
- 4Review the returned data and confirm 'Reaction' and 'Message Text' fields are populated
- 5Click 'Continue with selected record'
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.
- 1Click the '+' icon below the trigger block
- 2Select 'Filter' from the built-in tools list
- 3In 'Field', select 'Reaction' from the Slack trigger data
- 4Set the condition to '(Text) Contains'
- 5Type 'clipboard' (or your chosen emoji name) in the value field
- 6Click 'Continue'
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.
- 1Click '+' below the Filter step
- 2Search for 'Slack' and select it
- 3Choose 'Find User by Username' as the action event
- 4Map the 'User' field from the trigger into the 'User Name or ID' input field
- 5Click 'Continue' and then 'Test action'
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
};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.
- 1Click '+' below the Slack user lookup step
- 2Search for 'Asana' and select it
- 3Choose 'Create Task' as the action event
- 4Click 'Sign in to Asana' and approve the OAuth request
- 5Select your Asana Workspace from the dropdown
- 6Select the destination Project from the dropdown
- 7Click 'Continue'
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.
- 1In 'Task Name', click the field and select 'Message Text' from the Slack trigger, optionally wrapped in a Formatter truncation step
- 2In 'Description', map 'Message Text' and append 'Permalink' from the Slack trigger on a new line
- 3In 'Assignee', map 'Profile Real Name' from the Slack user lookup step
- 4In 'Projects', confirm your target project is still selected
- 5Leave 'Due Date' blank unless your team has a fixed turnaround policy
- 6Click 'Continue'
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.
- 1Click 'Test action'
- 2Wait 10–15 seconds
- 3Open Asana and navigate to the destination project
- 4Find the newly created task and click it open
- 5Confirm the task name, description, and assignee all look correct
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.
- 1Click the 'Publish' button in the top right
- 2Review the validation summary — fix any errors flagged
- 3Confirm the Zap toggle shows 'On' (blue)
- 4Go to your Slack channel and add a 📋 reaction to any message
- 5Check Zap History after 60 seconds 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 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.
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.
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 created — Add 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 channel — Add 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 Slack — Build 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
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