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

How to Create Asana Tasks from Slack Messages with Make

When a client message in a shared Slack channel matches a keyword or emoji trigger, Make instantly creates an Asana task in the right project with the message text, sender, channel, and a priority level.

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 who share Slack channels with clients and need every reported issue captured as a tracked Asana task without manual copy-paste.

Not ideal for

Teams where clients submit requests through a form or email ticketing system — use a Typeform or Gmail trigger instead.

Sync type

real-time

Use case type

routing

Real-World Example

💡

A 12-person agency managing 6 client Slack channels uses this to turn client complaint or request messages into Asana tasks automatically. Before this automation, account managers checked Slack manually every few hours and urgent requests sat unactioned for up to 4 hours. Now every message containing 'issue', 'bug', 'broken', or ':red_circle:' creates a tagged Asana task in under 90 seconds.

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.

Slack workspace admin access or permission to install third-party apps — required to authorize Make's Slack integration and invite the bot to client channels
Asana account with edit access to the target project — the OAuth connection needs permission to create tasks and read custom fields in that specific project
Make account — free tier works for testing but Core plan ($9/month) is needed for production volume above ~200 Slack messages/month
Asana project already set up with a 'Priority' single-select custom field containing values: High, Normal — without this, the priority mapping step has nowhere to write
Slack bot invited to each client channel using /invite before activating — the trigger cannot read messages from channels the bot hasn't joined

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Namename
Projectprojects
Notes / Descriptionnotes
Slack Channel Namenotes
Slack Message Permalinknotes
5 optional fields▸ show
Due Datedue_on
Assigneeassignee
Priority (Custom Field)custom_fields
Reported By (Slack User)notes
Timestampnotes

Step-by-Step Setup

1

Make Dashboard > Scenarios > Create a new scenario

Create a new scenario in Make

Log in to 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 a blank canvas with a single empty module circle in the center. This is where you set the trigger. Click the circle to open the app search modal — every scenario starts here. Name your scenario something like 'Slack → Asana: Client Issue Tasks' using the pencil icon at the top left so you can find it later.

  1. 1Click 'Create a new scenario' in the top right
  2. 2Click the empty circle module in the canvas center
  3. 3Type 'Slack' in the search bar
  4. 4Select 'Slack' from the results
  5. 5Click the pencil icon top-left and rename the scenario
What you should see: You should see the Slack app module list open on the right panel, ready for you to pick a trigger event.
Common mistake — Make auto-saves scenario names only after you run or save manually. Use Ctrl+S immediately after naming or the name reverts.
2

Scenario Canvas > Slack Module > Watch Messages

Configure the Slack 'Watch Messages' trigger

From the Slack module list, select 'Watch Messages' — this uses a webhook-based connection and fires in real time when a new message lands in a channel. Click 'Add' next to Connection and authenticate with the Slack workspace where your shared client channels live. After connecting, set the Channel field to the specific shared client channel you want to monitor. You can only monitor one channel per scenario module, so if you have multiple client channels, you'll add a Router later — do not try to comma-separate channels here.

  1. 1Select 'Watch Messages' from the Slack trigger list
  2. 2Click 'Add' next to the Connection field
  3. 3Authorize Make in the Slack OAuth window that opens
  4. 4In the Channel dropdown, select the target client Slack channel
  5. 5Set 'Limit' to 1 to process one message at a time
What you should see: The Slack module should show your workspace name in green next to the connection and display your selected channel name in the Channel field.
Common mistake — The Slack app you authorize must already be installed in the target channel. If the channel doesn't appear in the dropdown, open Slack, go to the channel, and type /invite @Make.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
Make
+
click +
search apps
Slack
SL
Slack
Configure the Slack 'Watch M…
Slack
SL
module added
3

Scenario Canvas > Arrow between modules > Filter (wrench icon)

Add a Text Filter to catch client issue messages

Click the small wrench icon on the arrow between the Slack module and where your next module will be — this opens Make's filter panel. Add a filter condition so the scenario only continues when the message actually contains a client issue keyword. Use the 'Text' operator 'Contains' and set the value to 'issue'. Add a second OR condition for 'bug', 'broken', 'urgent', and ':red_circle:'. This prevents every casual Slack message from creating an Asana task. Without this filter, a client saying 'Thanks!' generates a task.

  1. 1Click the wrench icon on the connector arrow after the Slack module
  2. 2Click 'Add AND condition' and set Field to 'Text' (the message body)
  3. 3Set operator to 'Contains (case insensitive)'
  4. 4Enter 'issue' as the first value
  5. 5Click 'Add OR condition' and repeat for 'bug', 'broken', 'urgent', ':red_circle:'
What you should see: The filter icon on the arrow turns orange, indicating an active filter. You'll see your conditions listed in the filter panel.
Common mistake — Make's filter 'Contains' is substring-based, so 'issue' also matches 'tissue' or 'reissue'. If false positives are a problem, switch to a regex match using the 'Matches pattern' operator with word boundaries like \bissue\b.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Asana
AS
notified
4

Scenario Canvas > + Add module > Flow Control > Router

Add a Router to assign priority by keyword

Click the '+' button after the filter to add the next module, then choose 'Flow Control > Router' instead of going straight to Asana. The Router lets you branch: one path for 'urgent' messages (High priority in Asana) and another path for everything else (Normal priority). Right-click each Router output arrow to name the routes 'High Priority' and 'Standard'. This is the step most people skip — they set a static priority in Asana and then clients complain urgent issues aren't flagged.

  1. 1Click '+' after the filter on the canvas
  2. 2Search for 'Router' and select 'Flow Control > Router'
  3. 3Right-click the top output arrow and label it 'High Priority'
  4. 4Right-click the bottom output arrow and label it 'Standard'
  5. 5Set a filter on the 'High Priority' route: message Text Contains 'urgent' OR Contains ':red_circle:'
What you should see: The canvas shows the Router module with two output arrows, each labeled and the top one showing an orange filter indicator.
5

Scenario Canvas > High Priority Route > + Add module > Asana > Create a Task

Add an Asana 'Create a Task' module on the High Priority route

Click '+' on the 'High Priority' Router output arrow and search for Asana. Select 'Create a Task'. Connect your Asana account via OAuth — Make will ask for a workspace and project. Set the Workspace to your Asana workspace and set the Project to the Asana project designated for client issues. In the Name field, type the Slack message text using the dynamic variable picker: click the field, then select the Slack module's 'Text' variable. Prefix it with '[HIGH] ' so tasks are visually flagged in Asana's list view.

  1. 1Click '+' on the High Priority Router output
  2. 2Search 'Asana' and select 'Create a Task'
  3. 3Click 'Add' next to Connection and authorize via Asana OAuth
  4. 4Set Workspace to your Asana workspace name
  5. 5Set Project to the client issues project
  6. 6In the Name field, type '[HIGH] ' then click the variable picker and select Slack Text
What you should see: The Asana module shows your workspace and project selected, and the Name field displays '[HIGH] {{1.text}}' with the Slack module reference.
Common mistake — Asana's API requires a project GID, not the project name. Make resolves this automatically in the dropdown — but if you're templating this scenario for multiple clients, you'll need a separate scenario per project or use a data store to map channel IDs to project GIDs.
6

Scenario Canvas > Asana Create Task Module > Notes / Due Date fields

Map client context fields in the Asana task

Still inside the Asana 'Create a Task' module, scroll down to fill in the remaining fields. Set the Notes field to a formatted block that includes the Slack channel name, the message author's display name, a link to the original Slack message, and a timestamp. Make provides all of these as variables from the Slack trigger: 'channel.name', 'user', 'permalink', and 'ts'. Set the Due Date to 'today + 1 day' using Make's formula: formatDate(addDays(now; 1); 'YYYY-MM-DD'). This gives the team a default deadline without requiring manual entry.

  1. 1Click the Notes field and build a multi-line text block using Slack variables
  2. 2Insert: 'Client: {{1.channel.name}}\nReported by: {{1.user}}\nOriginal message: {{1.permalink}}\nReported at: {{1.ts}}'
  3. 3Click the Due Date field
  4. 4Type the formula: formatDate(addDays(now; 1); 'YYYY-MM-DD')
  5. 5Set Assignee to the account manager's Asana user ID (copy from Asana profile URL)
What you should see: The Notes field shows a multi-variable text block with Slack references visible as purple token chips. The Due Date field shows the formula string.
Common mistake — The Slack 'user' field returns a user ID like U08ABCD1234, not a display name. To show the actual name in Asana notes, add a 'Get User Info' Slack module between the trigger and Asana, then map 'real_name' from that module into the Notes field.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
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
7

Asana Create Task Module > Custom Fields > Add item

Set task priority using Asana custom fields

Scroll further down in the Asana module to find 'Custom Fields'. If your Asana project has a Priority custom field (most teams add this manually), you can set it here. Click 'Add item', select your Priority field by name, and set the value to 'High' for this route. If your Asana project does not yet have a Priority custom field, go to Asana first: open the project, click the grid icon at top right, and add a single-select field named 'Priority' with values High, Medium, Low. Then return to Make and refresh the custom fields list.

  1. 1Scroll to 'Custom Fields' in the Asana module
  2. 2Click 'Add item'
  3. 3Select 'Priority' from the custom field dropdown
  4. 4Set the value to 'High'
  5. 5Save the module settings
What you should see: The Custom Fields section shows one row: Priority = High. Make will pass this value directly to the Asana API on each run.
Common mistake — Custom fields in Asana are project-specific. If you copy this scenario for a second client project, the custom field GIDs will differ and Make will silently skip them without error. Re-map custom fields for every new project.
8

Scenario Canvas > Standard Route > + Paste Asana Module

Duplicate the Asana module for the Standard priority route

Right-click the Asana 'Create a Task' module you just configured and select 'Copy'. Then click '+' on the Standard Router output arrow and paste the copied module. Change the Name field prefix from '[HIGH] ' to nothing (or '[REQ] ' if you want a visual tag). Change the Priority custom field value from 'High' to 'Normal'. Change the Due Date formula to give 3 days instead of 1: formatDate(addDays(now; 3); 'YYYY-MM-DD'). All other fields — Notes, Assignee, Project — stay the same.

  1. 1Right-click the High Priority Asana module and select 'Copy'
  2. 2Click '+' on the Standard Router output arrow
  3. 3Select 'Paste module' from the app search modal
  4. 4Update the Name field to remove '[HIGH] ' prefix
  5. 5Update Priority custom field to 'Normal'
  6. 6Update Due Date formula: formatDate(addDays(now; 3); 'YYYY-MM-DD')
What you should see: Both Router routes now end in an Asana 'Create a Task' module. The canvas shows a symmetric two-branch layout.
9

Scenario Canvas > After each Asana Module > + Add module > Slack > Post a Message

Add a Slack 'Post a Message' confirmation module

After each Asana module, add a final Slack 'Post a Message' module to send a confirmation back to the client channel. This closes the loop — clients see their request was captured without needing to ask. Set the Channel to the same channel variable from the trigger: '{{1.channel.id}}'. Set the message text to something like: 'Got it. I've logged this as an Asana task: {{asana_task.permalink_url}}'. The Asana module exposes 'permalink_url' as an output variable — use that so clients can click through.

  1. 1Click '+' after the High Priority Asana module
  2. 2Search 'Slack' and select 'Post a Message'
  3. 3Set Channel to '{{1.channel.id}}' from the Slack trigger variables
  4. 4Set Text to: 'Got it. Logged as a task: {{AsanaModuleNumber.permalink_url}}'
  5. 5Repeat for the Standard route Asana module
What you should see: Both branches now end in a Slack confirmation module. When you run a test, you should see the confirmation message appear in the Slack channel within seconds of the trigger firing.
Common mistake — If the Slack bot isn't a member of the client channel, 'Post a Message' will fail with 'not_in_channel'. Invite the Make Slack bot to each client channel with /invite before going live.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
10

Scenario Canvas > Run once (bottom left toolbar)

Run a test with a real Slack message

Click 'Run once' in the bottom left of the Make canvas. Switch to Slack and post a test message in your target channel containing the word 'urgent issue'. Return to Make — the scenario canvas will animate as each module fires. Green checkmarks appear on each module that succeeded. Click any module to inspect the exact data that passed through it. Verify in Asana that a new task appeared in the correct project with the correct priority, notes, and due date. Check the Slack channel for the confirmation message.

  1. 1Click 'Run once' in the bottom left toolbar
  2. 2Go to Slack and post: 'urgent issue — the login page is broken for our team'
  3. 3Return to Make and watch the modules animate
  4. 4Click each module bubble to verify data output
  5. 5Open Asana and confirm the task exists with correct fields
What you should see: Every module shows a green checkmark. Asana has a new task prefixed '[HIGH]' with the Slack message text in the name, client context in the notes, and High priority set. The Slack channel shows the confirmation reply with the Asana task link.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
Make
▶ Run once
executed
Slack
Asana
Asana
🔔 notification
received
11

Scenario Canvas > Toggle ON (bottom left) > Scheduling > Immediately

Activate the scenario and set scheduling to instant

Click the toggle switch in the bottom left of the canvas to turn the scenario ON. Make will prompt you to set a scheduling interval — select 'Immediately' so the webhook fires as soon as a Slack message lands rather than on a polling cycle. Confirm the scenario is active by checking the green status dot next to the scenario name on the Scenarios dashboard. The scenario now runs continuously without manual intervention. Monitor the first 20-30 live runs by checking the scenario History tab for any errors.

  1. 1Click the toggle switch in the bottom left to ON
  2. 2In the scheduling dialog, select 'Immediately'
  3. 3Click 'Save' to confirm
  4. 4Navigate to Scenarios dashboard and verify green status dot
  5. 5Click 'History' tab on the scenario to monitor early runs
What you should see: The scenario card on the dashboard shows a green active dot and 'Immediately' next to the scheduling label. The History tab shows run logs appearing within seconds of each Slack message.
Common mistake — Make's free plan caps at 1,000 operations per month. Each full scenario run through both Slack and Asana modules costs 4-5 operations. At 200+ client messages per month, you'll hit the cap. Upgrade to the Core plan ($9/month) before going live in a busy client channel.

Paste this formula into Make's Notes field using the formula editor (click the 'f(x)' button inside the field). It builds a clean, formatted notes block and falls back gracefully when the real_name field is empty — which happens when the Slack user is a bot or a deactivated account. The formatDate call normalizes the Slack epoch timestamp into a readable format.

JavaScript — Custom Function// Make Formula — paste into Asana 'Notes' field using the f(x) formula editor
▸ Show code
// Make Formula — paste into Asana 'Notes' field using the f(x) formula editor
// Requires: Slack 'Watch Messages' module (module 1) + Slack 'Get User Info' module (module 2)
if(

... expand to see full code

// Make Formula — paste into Asana 'Notes' field using the f(x) formula editor
// Requires: Slack 'Watch Messages' module (module 1) + Slack 'Get User Info' module (module 2)

if(
  isEmpty(2.real_name);
  concat(
    "Client Channel: "; 1.channel.name; "\n";
    "Reported by: Unknown User (ID: "; 1.user; ")\n";
    "Message: "; 1.text; "\n";
    "Link: "; 1.permalink; "\n";
    "Reported at: "; formatDate(1.ts * 1000; "MMMM D, YYYY [at] h:mm A"; "UTC")
  );
  concat(
    "Client Channel: "; 1.channel.name; "\n";
    "Reported by: "; 2.real_name; "\n";
    "Message: "; 1.text; "\n";
    "Link: "; 1.permalink; "\n";
    "Reported at: "; formatDate(1.ts * 1000; "MMMM D, YYYY [at] h:mm A"; "UTC")
  )
)

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 needs conditional logic — specifically, routing high-priority messages to a different Asana task configuration than standard ones. Make's visual Router module handles this in about 3 minutes of setup; in Zapier you'd need a separate Zap per priority tier or a Formatter step with path logic that's harder to read and maintain. Also use Make if you want the 'Get User Info' Slack lookup in the same visual flow — Make chains modules cleanly without needing a separate workflow. The one scenario where you'd pick something else: if you want AI-based priority classification instead of keyword matching. n8n's OpenAI node inside a workflow is faster to configure for that than Make's HTTP module calling the OpenAI API manually.

Cost

The math is straightforward. Each run costs 5 operations: Slack trigger (1) + Get User Info (1) + Router (1) + Asana Create Task (1) + Slack Post confirmation (1). At 200 client messages per month that match your keywords, that's 1,000 operations — exactly the free plan limit. Anything above 200 matched messages per month requires Make Core at $9/month (10,000 operations). At 1,000 matched messages/month you're at 5,000 operations, still within Core. Zapier's equivalent at 1,000 tasks/month costs $19.99/month on the Starter plan. Make is cheaper by $10.99/month at that volume for identical functionality.

Tradeoffs

Zapier has one real advantage here: the Slack trigger fires faster. In testing, Zapier's Slack webhook resolves in under 30 seconds consistently; Make averages 60-90 seconds on the Core plan. For urgent client issues, that 60-second gap matters. n8n, self-hosted, has no operation limits and lets you write JavaScript directly in the workflow to do regex-based priority classification — that beats Make's formula editor for complex parsing. Power Automate connects natively to Teams but its Slack connector is limited and Asana's connector is community-maintained with known reliability gaps — avoid Power Automate for this specific pair. Pipedream is faster to code and free for low volume, but the visual builder is less intuitive than Make's canvas for a non-developer team that needs to modify the keyword list every few weeks. Make is still the right call because the visual Router is readable by account managers who don't code, and the Asana module's custom field support is solid.

Three things you'll hit after setup. First: Slack's 'user' field is always a raw user ID — if you skip the Get User Info lookup module, every Asana task says 'Reported by: U08ABCD1234' and your team will immediately complain. Add the lookup step before launch. Second: Make occasionally throws 'incomplete execution' errors when Slack sends a message event but the Asana API responds slowly — this creates a Slack trigger record with no matching Asana task. Enable 'Allow storing incomplete executions' in scenario settings so you can replay these manually from the Incomplete Executions tab. Third: Asana rate-limits API writes to 150 requests per minute per user token. This only matters if multiple Slack channels fire simultaneously in a burst — if you have a major incident and 10 clients all post in 2 minutes, some Asana tasks will fail with a 429 error. Add a Make error handler module on the Asana step that waits 5 seconds and retries once.

Ideas for what to build next

  • Add Asana-to-Slack status updatesBuild a second scenario that watches for Asana task completions in the client issue projects and posts a resolution message back to the originating Slack channel — closes the loop for clients without manual follow-up.
  • Route to multiple client projects automaticallyUse a Make Data Store to map Slack channel IDs to their corresponding Asana project GIDs — this replaces duplicated scenarios with a single lookup-driven flow that handles any number of client channels.
  • Add a daily digest to SlackCreate a scheduled Make scenario that runs every morning at 9 AM, queries open Asana tasks tagged as client issues, and posts a summary to an internal #client-issues Slack channel — gives the team a daily triage view without opening Asana.

Related guides

Was this guide helpful?
Slack + Asana overviewMake profile →