

How to Create Asana Tasks from Slack with Zapier
When a message is posted in a client Slack channel, Zapier instantly creates a tagged Asana task with the message text, sender, channel name, and a direct link back to the Slack thread.
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 that use shared Slack channels and need issues captured in Asana without relying on anyone to remember to file a task manually.
Not ideal for
Teams with high message volume in client channels — every message will create a task unless you add a filter, which burns Zapier task quota fast.
Sync type
real-timeUse case type
routingReal-World Example
A 12-person agency manages 20+ client accounts in dedicated Slack channels like #client-acme and #client-globex. Before this automation, account managers copy-pasted issues into Asana manually — or forgot entirely. Now any client message containing a keyword like 'broken', 'urgent', or 'question' auto-creates a tagged Asana task in the right project within 30 seconds, with the Slack permalink attached so the team can jump straight to context.
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 | ||
| Task Notes | ||
| Project | ||
| Slack Sender (User Name) | ||
| Slack Permalink | ||
5 optional fields▸ show
| Slack Channel Name | |
| Due Date | |
| Priority (Custom Field) | |
| Assignee | |
| Tags |
Step-by-Step Setup
zapier.com > Create > Zaps > Trigger > Search Apps
Create a new Zap and connect Slack
Go to zapier.com and click the orange 'Create' button, then select 'Zaps'. In the trigger search box, type 'Slack' and select it from the list. You'll be prompted to choose a trigger event — this is where you define what Slack activity kicks off the Zap. Zapier uses Slack's Events API (webhook-based), so your trigger fires within seconds of a message being posted.
- 1Click the orange 'Create' button at the top left of your Zapier dashboard
- 2Select 'Zaps' from the dropdown
- 3In the trigger panel, click the app search field and type 'Slack'
- 4Select 'Slack' from the results list
Zap Editor > Trigger > Trigger Event > New Message Posted to Channel
Choose the trigger event and channel
In the 'Trigger Event' dropdown, select 'New Message Posted to Channel'. This event fires every time a message lands in a specific channel. After selecting it, you'll connect your Slack account via OAuth — click 'Sign in to Slack', approve the permissions, and return to the editor. Then use the 'Channel' dropdown to select the client Slack channel you want to monitor.
- 1In the 'Trigger Event' dropdown, select 'New Message Posted to Channel'
- 2Click 'Sign in to Slack' and complete the OAuth flow in the popup window
- 3Return to the Zap editor and click the 'Channel' dropdown
- 4Select the specific client channel (e.g., #client-acme) from the list
Zap Editor > Trigger > Test Trigger
Test the Slack trigger
Click 'Test trigger' at the bottom of the trigger panel. Zapier pulls the three most recent messages from the channel you selected. Review the sample data carefully — you'll see fields like 'Text', 'User', 'Timestamp', 'Channel', and 'Permalink'. These are the values you'll map into Asana. If the channel is new and has no messages, post a test message in Slack first, then click 'Test trigger' again.
- 1Click the 'Test trigger' button at the bottom of the trigger configuration panel
- 2Wait for Zapier to fetch sample messages from your channel
- 3Click through each sample record to review the available fields
- 4Confirm you can see 'Text', 'User Name', 'Permalink', and 'Channel Name' in the data
Zap Editor > + Icon between steps > Filter
Add a filter to catch only client messages
Click the '+' button between the trigger and your next step, then select 'Filter'. This prevents every message in the channel from becoming an Asana task. Set the filter condition on the 'Text' field — for example, 'Text Contains' one of your trigger words: 'issue', 'broken', 'urgent', 'help', 'question', or 'request'. You can add multiple OR conditions. Alternatively, filter on 'User Name Does Not Contain' your team members' names to only capture client messages.
- 1Click the '+' icon that appears between the Slack trigger and the action area
- 2Select 'Filter' from the options that appear
- 3In the filter panel, set the field to 'Text' and condition to '(Text) Contains'
- 4Type your first trigger keyword (e.g., 'urgent') in the value field
- 5Click 'Add OR condition' to add additional keywords like 'broken', 'issue', 'help'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action > Search Apps > Asana > Create Task
Add Asana as the action app
Click the '+' button after your filter step to add an action. Search for 'Asana' and select it. In the 'Action Event' dropdown, choose 'Create Task'. This creates a new task in a specific Asana project every time the filter passes. You'll connect your Asana account next via OAuth — Zapier requests access to your workspaces and projects.
- 1Click the '+' icon after the filter step
- 2Type 'Asana' in the app search box and select it
- 3In the 'Action Event' dropdown, select 'Create Task'
- 4Click 'Sign in to Asana' and approve the OAuth permissions
- 5Confirm your Asana account appears in the account selector with a checkmark
Zap Editor > Asana Action > Workspace > Project
Configure the Asana workspace and project
In the Asana action panel, start with the 'Workspace' dropdown — select the workspace where your client projects live. Once selected, the 'Project' dropdown will populate with available projects. Choose the specific Asana project for this client (e.g., 'Acme Corp — Support'). If you're routing messages from multiple channels to different projects, you'll need separate Zaps per client channel, or use Make/n8n with conditional routing instead.
- 1Click the 'Workspace' dropdown and select your client-facing Asana workspace
- 2Wait for the 'Project' dropdown to load available projects
- 3Select the target Asana project for this client channel
- 4Optionally set a 'Section' within the project (e.g., 'Incoming Requests')
Zap Editor > Asana Action > Name / Notes fields
Map Slack message fields to the Asana task
Now map the Slack data into Asana fields. Click the 'Name' field and insert dynamic data: type something like 'Client issue: ' then use the insert button to add the Slack 'Text' field (first 60 characters make a good task title). In the 'Notes' field, build a block that includes the full message text, the sender's name, the channel name, and the Slack permalink. This gives whoever picks up the task full context without leaving Asana.
- 1Click into the 'Name' field and type 'Client issue: '
- 2Click the insert icon (lightning bolt or '+') and select 'Text' from the Slack trigger data
- 3Click into the 'Notes' field and build a multi-line block using the insert button
- 4Insert: 'From: [User Name]', new line, 'Channel: [Channel Name]', new line, 'Message: [Text]', new line, 'Slack link: [Permalink]'
- 5Set the 'Assignee' field if you want tasks auto-assigned to a specific team member
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Asana Action > Custom Fields
Set task priority using a custom field
If your Asana project has a custom 'Priority' field (Low / Medium / High / Urgent), you can set it here. Click the 'Custom Fields' section in the Asana action panel — Zapier pulls in all custom fields from your selected project. Map priority based on keywords: if the Slack message text contains 'urgent' or 'broken', you want 'High'. This requires a Formatter step or a simple text match — see the pro tip below for a Code by Zapier approach that reads the message and assigns priority automatically.
- 1Scroll down in the Asana action panel to the 'Custom Fields' section
- 2Find your 'Priority' custom field in the list
- 3Click the field and either type a static value like 'High' or insert a dynamic value from an upstream Formatter step
- 4If no Priority field exists, set the 'Tags' field to 'client-request' for filtering in Asana
Zap Editor > Asana Action > Due Date
Set the due date
In the 'Due Date' field, click the insert button and select 'Timestamp' from the Slack trigger data. Slack sends a Unix timestamp (e.g., '1712345678.123456') — Zapier automatically converts this to a readable date format for Asana. If you want tasks due 24 hours after the message, add a Formatter step before this action to add 86400 seconds to the timestamp and convert it to YYYY-MM-DD format.
- 1Click into the 'Due Date' field in the Asana action panel
- 2Click the insert button and select 'Timestamp' from the Slack trigger step
- 3If you want a relative due date (e.g., tomorrow), add a Formatter step before this action using 'Date/Time > Format Date' to offset the timestamp
Zap Editor > Asana Action > Test Step
Test the full Zap
Click 'Test step' in the Asana action panel. Zapier uses your sample Slack message data and attempts to create a real task in Asana. This creates an actual task — go into your Asana project immediately after and verify it. Check that the task name looks right, the Notes block has all four pieces of context (sender, channel, message, permalink), the custom Priority field is set, and the Slack link is clickable.
- 1Click the 'Test step' button at the bottom of the Asana action panel
- 2Wait for the green success message confirming the task was created
- 3Open your Asana project in a separate tab and find the newly created task
- 4Click the Slack permalink in the task notes and confirm it opens the correct message thread
Zap Editor > Publish button (top right)
Turn on the Zap
Click 'Publish' in the top right of the Zap editor. The Zap status changes from Draft to On. Post a test message in your client Slack channel that matches your filter keywords and watch for the Asana task to appear within 30 seconds. Check the Zap history in your Zapier dashboard (left sidebar > Zap History) after the first real trigger fires to confirm the task data looks correct in production.
- 1Click the 'Publish' button in the top right of the Zap editor
- 2Confirm the Zap status badge shows 'On' in green
- 3Post a message in your client Slack channel using one of your filter keywords
- 4Check your Asana project within 30 seconds for the new task
- 5Go to zapier.com > Zap History to confirm the run logged successfully
This Code by Zapier step reads the Slack message text and returns a priority level string ('High', 'Medium', or 'Low') based on keyword matching. Add it as a step between your Slack trigger and the Asana action, then map its output 'priority' to the Asana Priority custom field. Paste this code into a 'Run Python' Code by Zapier step and set the input variable 'message_text' to the Slack Text field from step 1.
JavaScript — Code Step# Input: message_text (mapped from Slack 'Text' field)▸ Show code
# Input: message_text (mapped from Slack 'Text' field)
message = input_data.get('message_text', '').lower()
# Define keyword groups by priority level... expand to see full code
# Input: message_text (mapped from Slack 'Text' field)
message = input_data.get('message_text', '').lower()
# Define keyword groups by priority level
high_keywords = ['urgent', 'broken', 'down', 'critical', 'asap', 'emergency', 'not working', 'outage']
medium_keywords = ['issue', 'problem', 'error', 'bug', 'incorrect', 'wrong', 'failing']
low_keywords = ['question', 'request', 'feature', 'suggestion', 'when', 'can we', 'could you']
# Check from highest to lowest priority
if any(keyword in message for keyword in high_keywords):
priority = 'High'
elif any(keyword in message for keyword in medium_keywords):
priority = 'Medium'
elif any(keyword in message for keyword in low_keywords):
priority = 'Low'
else:
priority = 'Medium' # Default fallback
# Output available to next Zapier steps
output = {'priority': priority, 'matched_message_length': len(message)}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 has no technical resources and you're monitoring a small number of client channels (under 5). Setup takes under 20 minutes, the trigger is webhook-based so it fires within 30 seconds, and no code is required for the core flow. The Zap editor guides you through each step with dropdowns — there's nothing to misconfigure at the infrastructure level. The one scenario where you'd skip Zapier: if you're managing 10+ client channels and need to route each one to a different Asana project. That requires 10+ separate Zaps, and at 200 messages/month per channel you're looking at 2,000 tasks/month — deep into Zapier's paid tiers.
The math on cost: each Zap run with a Filter step counts as 2 tasks in Zapier's usage model (one for the trigger, one for the action — the filter doesn't add a task). At 300 qualifying messages per month across 5 channels, that's 600 tasks/month. Zapier's free tier covers 100 tasks; the Starter plan ($19.99/month) covers 750. If you hit 1,000 tasks/month you'll need the Professional plan at $49/month. Make handles the same volume — 5 channels, 300 messages/month — for free on its 1,000 operations/month free tier, since a message-to-task workflow uses roughly 2-3 operations per run.
Make does conditional routing better: one scenario, a Router module, and you can send messages from #client-acme to the Acme Asana project and #client-globex to the Globex project without duplicating anything. n8n does text parsing better — you can write JavaScript directly in the node to extract structured data from messy Slack messages and build a clean task description. Power Automate has a native Asana connector in Teams environments, which matters if your company already runs on Microsoft 365 and wants everything in one admin console. Pipedream lets you call the Asana API directly and handle complex conditional logic in Node.js with full error handling. Zapier is still right here when the team who owns this workflow is non-technical and will need to update the filter keywords, change the Asana project, or troubleshoot runs without engineering help — Zapier's UI makes all of that self-serve.
Three things you'll hit after go-live: First, Slack's 'New Message' trigger in Zapier also catches threaded replies in the channel (not just top-level messages). If your team uses threads to discuss client issues, every reply creates a new Asana task. Add a filter condition on 'Thread TS Is Empty' to exclude replies. Second, Asana has a rate limit of 1,500 API requests per minute per user — not a problem at normal message volumes, but if you ever bulk-import old messages or test with rapid-fire messages, you'll hit 429 errors and tasks will queue in Zapier's retry system. Third, Slack message text from mobile clients sometimes includes formatting characters like `*bold*` or `_italic_` as literal asterisks and underscores. These show up verbatim in your Asana task notes — not a blocker, but worth knowing so your team doesn't think the notes are corrupted.
Ideas for what to build next
- →Post a Slack confirmation when the Asana task is created — Add a second Asana action step that posts a message back to the original Slack channel with the Asana task URL, confirming the request was logged. Clients see immediate acknowledgment and your team has a record in both places.
- →Route messages to different Asana projects based on channel — If you have 10+ client channels all feeding into different Asana projects, consider moving this workflow to Make (formerly Integromat), which handles conditional routing in a single scenario using a Router module — cleaner than maintaining 10 separate Zaps.
- →Send a daily digest of open client tasks to a Slack channel — Build a second Zap (or a scheduled Make scenario) that runs every morning, pulls all incomplete Asana tasks tagged 'client-request' created in the last 24 hours, and posts a formatted summary to your team's internal #client-ops Slack channel.
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