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

How to Assign Todoist Tasks from Slack Mentions with Zapier

When someone is @mentioned in a specific Slack channel, Zapier instantly creates a Todoist task assigned to that person with the message text as context.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Small teams (5–30 people) who assign work conversationally in Slack and need those commitments captured automatically in Todoist without manual copy-paste.

Not ideal for

Teams with complex task routing logic or more than 3–4 project channels — use Make instead, where you can branch on channel ID with a single Router module.

Sync type

real-time

Use case type

routing

Real-World Example

💡

A 12-person product agency uses dedicated Slack channels per client — #client-acme, #client-norton, #client-ridge. When a PM types '@dana please write copy for the landing page hero' in #client-acme, Zapier fires within 90 seconds and creates a Todoist task in the Acme project assigned to Dana with the full Slack message as the task description. Before this, tasks buried in Slack were forgotten by EOD at a rate the team estimated at 20–30% of action items per week.

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.

Slack account with admin or member access to the channels you want to monitor, and ability to invite bots to those channels
Todoist account — free plan works for basic task creation, but Todoist Business ($8/user/month) is required if you want native task assignment by user
Zapier account — free tier supports this Zap but caps at 100 tasks/month; Starter plan ($19.99/month) is needed above that volume
Zapier bot must be invited to every Slack channel you want to monitor — run '/invite @Zapier' in each channel
Todoist projects must already exist and be named — Zapier cannot create new projects on the fly, only add tasks to existing ones

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Content
Project
7 optional fields▸ show
Task Description
Assignee
Priority
Due Date
Slack Message Timestamp
Slack Channel Name
Mentioned User Display Name

Step-by-Step Setup

1

zapier.com > Create Zap > Trigger > Search Apps

Create a new Zap and connect Slack

Go to zapier.com and click the orange 'Create Zap' button in the top left. The Zap editor opens with a blank trigger step. In the search box labeled 'Search for apps', type 'Slack' and select it from the dropdown. You'll be prompted to choose an event — this determines what fires the Zap.

  1. 1Click the orange 'Create Zap' button in the left sidebar
  2. 2Click the 'Trigger' block in the canvas
  3. 3Type 'Slack' in the app search box
  4. 4Select 'Slack' from the results list
What you should see: Slack appears as your trigger app and you see a dropdown menu of available trigger events.
Common mistake — If you have multiple Slack workspaces connected to Zapier, make sure to select the correct account in the 'Choose account' step — mismatched workspaces are the #1 setup mistake here and won't throw an error, just silently miss messages.
2

Trigger > Event > New Mention

Set the trigger event to 'New Mention'

In the trigger event dropdown, scroll to find 'New Mention' and select it. This event fires any time your Zapier bot is @mentioned OR a specific user is @mentioned, depending on your configuration. Do not choose 'New Message Posted to Channel' — that fires on every message and you'll burn tasks fast. 'New Mention' scopes the trigger to only messages containing an @mention.

  1. 1Click the 'Event' dropdown
  2. 2Type 'mention' in the event search box
  3. 3Select 'New Mention' from the list
  4. 4Click 'Continue'
What you should see: The event field shows 'New Mention' and Zapier moves you to the 'Choose Account' section.
Zapier
+
click +
search apps
Slack
SL
Slack
Set the trigger event to 'Ne…
Slack
SL
module added
3

Trigger > Choose Account > Sign in to Slack

Connect your Slack account and authorize scopes

Click 'Sign in to Slack' and a popup window opens asking you to authorize Zapier. You must be logged into the correct Slack workspace in your browser before clicking. Zapier requests read access to messages and channel membership — both are required for this Zap. After clicking 'Allow', the popup closes and Zapier shows your workspace name with a green checkmark.

  1. 1Click 'Sign in to Slack'
  2. 2Select your workspace from the Slack authorization page
  3. 3Click 'Allow' to grant Zapier the required permissions
  4. 4Confirm the green checkmark appears next to your workspace name
What you should see: You see your Slack workspace name listed under 'Account' with a green connected indicator and a 'Change' link beside it.
Common mistake — Zapier's Slack integration requires the bot to be invited into the channels you want to monitor. If you skip this, the trigger will connect but return zero test results — not an error, just silence.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
4

Trigger > Configure > Channel

Configure the trigger to watch a specific channel

In the 'Configure' section, you'll see a 'Channel' dropdown. Click it and search for or select the specific channel you want this Zap to watch — for example, #client-acme. Leave the 'Trigger for' field set to 'Any mention' unless you want to restrict it to mentions of one specific user. Each Zap watches one channel. If you have three project channels, you'll build three separate Zaps or use Make's Router instead.

  1. 1Click the 'Channel' dropdown
  2. 2Type the channel name or scroll to find it
  3. 3Select the target channel (e.g., #client-acme)
  4. 4Leave 'Trigger for' as 'Any mention' unless restricting to one user
  5. 5Click 'Continue'
What you should see: The Channel field shows your selected channel name and the Configure section collapses with a checkmark.
Common mistake — Public channels appear in the dropdown automatically. Private channels only appear if the Zapier bot has been invited — type '/invite @Zapier' in the private channel first.
5

Trigger > Test > Test trigger button

Test the Slack trigger with a real message

Click 'Test trigger' and Zapier pulls the most recent @mention from that channel. Go to Slack and post a test message in the target channel that includes an @mention — something like '@dana please review the mockups'. Wait 30 seconds, then click 'Test trigger' again. Zapier returns a sample record showing fields like 'Text', 'User', 'Channel', 'Timestamp', and 'Mentioned Users'. Check that 'Mentioned Users' contains the correct user ID — you'll map this to Todoist's assignee in a later step.

  1. 1Post a test @mention message in your target Slack channel
  2. 2Return to Zapier and click 'Test trigger'
  3. 3Expand the returned sample record
  4. 4Confirm 'Text', 'User', 'Mentioned Users', and 'Channel' fields are populated
  5. 5Click 'Continue with selected record'
What you should see: Zapier displays a green 'Test was successful' banner and shows a data record with at least 8 fields including the message text and a mentioned user ID like 'U04ABCDE123'.
Common mistake — The 'Mentioned Users' field returns a Slack user ID (e.g., U04ABCDE123), not a display name. Todoist's assignee field requires an email address — you'll need a lookup step or a Formatter step to handle this, covered in step 7.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
Zapier
▶ Turn on & test
executed
Slack
Todoist
Todoist
🔔 notification
received
6

Action > Search Apps > Todoist > Create Task

Add a Todoist action and connect your account

Click the '+' button below the trigger block to add an action. Search for 'Todoist' and select it. For the event, choose 'Create Task'. Click 'Sign in to Todoist' and a popup opens asking you to log in and authorize. Todoist's OAuth flow grants Zapier access to your projects and tasks. After authorizing, your Todoist account appears with a checkmark.

  1. 1Click the '+' icon below the trigger block
  2. 2Search for 'Todoist' in the app search field
  3. 3Select 'Todoist' from the results
  4. 4Choose 'Create Task' from the event dropdown
  5. 5Click 'Sign in to Todoist' and complete the OAuth flow
What you should see: Todoist shows as connected with your account email displayed and a green checkmark. The 'Configure' section expands showing task fields.
7

Action (between steps) > Formatter by Zapier > Text > Extract Pattern

Add a Formatter step to extract the assignee's name

Before configuring Todoist fields, insert a Zapier Formatter step between the Slack trigger and Todoist action. Click the '+' between the two blocks and search for 'Formatter by Zapier'. Choose the 'Text' transform type, then select 'Extract Pattern'. Use the pattern '@(\w+)' to pull the first @mention out of the Slack message text. This gives you a readable username string you can use in the Todoist task content so it's human-legible — Todoist's free assignee field actually takes a user email, so this extracted name goes into the task title for context.

  1. 1Click '+' between the Slack trigger and Todoist action
  2. 2Search for 'Formatter by Zapier' and select it
  3. 3Choose 'Text' as the transform type
  4. 4Select 'Extract Pattern' from the Transform dropdown
  5. 5Set Input to the Slack 'Text' field from step 5
  6. 6Set Pattern to @(\w+) and click 'Continue'
What you should see: The Formatter test returns the extracted username — for example, 'dana' — in the Output field. This value is now available to map into downstream fields.
Common mistake — If the Slack message contains multiple @mentions, this pattern returns only the first one. For messages with multiple assignees, you'd need Code by Zapier or a different platform like Make to split and route separately.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
8

Action > Todoist > Configure > Field Mapping

Map Slack fields to Todoist task fields

In the Todoist 'Configure' section, you'll see fields for Content, Description, Project, Assignee, Due Date, and Priority. Map 'Content' to a combination of the Formatter output and the Slack message — something like 'Task for @[Formatter Output]: [Slack Text]'. Set 'Project' to the Todoist project that corresponds to this Slack channel. Leave 'Assignee' blank unless your team is on Todoist Business, which is the only plan that supports task assignment by email.

  1. 1Click the 'Content' field and use the blue '+' icon to insert dynamic values
  2. 2Insert the Formatter output (extracted username) followed by the Slack message Text
  3. 3Click the 'Project' dropdown and select the matching Todoist project
  4. 4Set 'Description' to the full Slack message Text for context
  5. 5Optionally set 'Due Date' to today's date using Zapier's date formatting
  6. 6Click 'Continue'
What you should see: The Configure section shows populated fields with blue dynamic value pills for Content and Description, and a static project name selected.
Common mistake — Todoist's 'Assignee' field only appears if you're on Todoist Business ($8/user/month). On the free or Pro plan, this field is hidden and tasks can't be assigned — you'd need to encode the assignee in the task title instead.
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

Action > Todoist > Configure > Priority

Set task priority based on channel or keywords

In the Priority field, you can either hardcode a value (1=normal, 4=urgent) or make it dynamic. To flag urgent tasks, add another Formatter step before Todoist that checks if the Slack message contains words like 'urgent' or 'ASAP', and outputs '4' or '1' accordingly. For a simpler setup, just hardcode Priority to '2' (high) for all tasks from project channels — this distinguishes these auto-created tasks from manually added ones.

  1. 1Click the 'Priority' dropdown in the Todoist Configure section
  2. 2Select '2' for high priority (or '4' for urgent)
  3. 3Optionally insert a dynamic value from a Formatter step that returns priority based on keywords
  4. 4Click 'Continue'
What you should see: The Priority field shows your chosen value — either a static number or a dynamic pill referencing the Formatter output.
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.
10

Action > Todoist > Test > Test action

Test the full Zap end to end

Click 'Test action' in the Todoist step. Zapier sends a real task to Todoist using the sample data from your Slack trigger test. Open Todoist and navigate to the project you selected — you should see the new task appear within 10 seconds. Check that the Content field shows the @mention and message text correctly, the project is right, and priority is set. If the task looks correct, click 'Publish Zap'.

  1. 1Click 'Test action' in the Todoist step
  2. 2Open Todoist in a new tab and navigate to your target project
  3. 3Confirm the test task appears with correct content, project, and priority
  4. 4Return to Zapier and click 'Publish Zap' if everything looks right
What you should see: A real Todoist task appears in the correct project within 10 seconds of clicking 'Test action'. The task title contains the @mentioned username and the Slack message text.
11

zapier.com > Zaps > [Your Zap] > Zap History

Turn on the Zap and verify live in Slack

After publishing, send a real @mention message in your target Slack channel — wait up to 2 minutes (Zapier's webhook latency is typically 30–90 seconds for Slack). Check Todoist for the new task. If it doesn't appear within 3 minutes, go to zapier.com > Zap History and look for any failed runs — the error detail there is almost always enough to diagnose the problem without contacting support.

  1. 1Confirm the Zap toggle shows 'On' (green) on your Zaps dashboard
  2. 2Post a real @mention message in the target Slack channel
  3. 3Wait up to 2 minutes
  4. 4Check Todoist for the new task
  5. 5If missing, go to Zap History and inspect the most recent run for errors
What you should see: A Todoist task appears within 90 seconds of posting the Slack message. Zap History shows a green 'Success' entry for the run.

This Code by Zapier step runs after the Slack trigger and before the Todoist action. It parses the Slack message to extract all @mentioned usernames, detects urgency keywords, and builds a clean task title and priority value. Paste this into a 'Code by Zapier' action step (choose 'Run JavaScript'), and map inputData.messageText to the Slack Text field and inputData.channelName to the Slack Channel Name field.

JavaScript — Code Step// Code by Zapier — Run JavaScript
▸ Show code
// Code by Zapier — Run JavaScript
// Inputs: inputData.messageText, inputData.channelName, inputData.senderName
const messageText = inputData.messageText || '';

... expand to see full code

// Code by Zapier — Run JavaScript
// Inputs: inputData.messageText, inputData.channelName, inputData.senderName

const messageText = inputData.messageText || '';
const channelName = inputData.channelName || 'unknown-channel';
const senderName = inputData.senderName || 'Someone';

// Extract all @mentions (Slack encoded format: <@UXXXXXXX> or plain @name)
const encodedMentions = messageText.match(/<@(\w+)>/g) || [];
const plainMentions = messageText.match(/@([\w.]+)/g) || [];

// Use plain mentions for display if available, fallback to encoded IDs
const displayMentions = plainMentions.length > 0
  ? plainMentions.join(', ')
  : encodedMentions.map(m => m.replace(/<@|>/g, '')).join(', ');

// Detect urgency keywords
const urgencyKeywords = ['urgent', 'asap', 'immediately', 'critical', 'eod', 'today'];
const isUrgent = urgencyKeywords.some(kw => messageText.toLowerCase().includes(kw));
const priority = isUrgent ? 4 : 2;

// Strip Slack encoding from message for clean description
const cleanMessage = messageText.replace(/<@\w+>/g, (match) => {
  return match.replace(/<@|>/g, '@');
});

// Build task title
const taskTitle = displayMentions
  ? `Task for ${displayMentions}: ${cleanMessage.substring(0, 100)}`
  : `Task from ${senderName}: ${cleanMessage.substring(0, 100)}`;

// Build description with Slack context
const description = `From: #${channelName}\nAssigned by: ${senderName}\n\nFull message:\n${cleanMessage}`;

return {
  taskTitle: taskTitle,
  description: description,
  priority: priority,
  isUrgent: isUrgent,
  mentionedUsers: displayMentions
};

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 needs to be live in under 20 minutes. The guided Zap builder handles Slack's OAuth and Todoist's API without any JSON configuration — you pick dropdowns, map fields with a visual interface, and it works. Zapier is also the right call if you're only watching one or two Slack channels. The limitation kicks in at three or more channels: each channel needs its own Zap, and managing five separate Zaps for five project channels becomes a maintenance headache. At that point, use Make — one scenario with a Router module handles unlimited channels.

Cost

The math: each Slack @mention triggers one Zap run, which uses 2 tasks (one for the Formatter step, one for Todoist). If your team generates 60 @mention-worthy messages per month across one channel, that's 120 tasks/month. Zapier's free tier caps at 100 tasks/month, so you'd hit the limit. The Starter plan at $19.99/month includes 750 tasks — enough for roughly 375 channel mentions per month. Make's free tier handles 1,000 operations/month, and the Core plan ($9/month) gives you 10,000. For the same 375 monthly mentions on Make, you'd pay $9 versus $19.99 on Zapier. The difference is $132/year for identical functionality.

Tradeoffs

Make handles conditional channel routing in a single scenario — one trigger, a Router with branches per channel ID, and parallel Todoist task creation. That's genuinely better for multi-channel setups. n8n lets you self-host the entire workflow for near-zero cost and supports complex mention parsing with JavaScript nodes — better if you need to extract multiple assignees from one message or cross-reference a user database. Power Automate connects to Todoist only through HTTP connectors, not a native app, so setup takes 3x longer and breaks more often. Pipedream has a clean Slack source and handles async Todoist API calls well, but requires writing code — not right for non-technical teams. Zapier wins here when the team is small, the channel count is low, and nobody wants to touch code or maintain infrastructure.

Three things you'll hit after going live: First, Slack encodes @mentions as '<@U04ABCDE123>' in the message text, not '@dana'. If you paste the raw Text field into Todoist, your task titles look unreadable. Handle this with the Code by Zapier step above or a Formatter regex. Second, if the Zapier bot gets removed from a Slack channel — which happens when admins do channel cleanups — the Zap goes silent with no error. It doesn't fail, it just stops receiving events. Check Zap History weekly for channels with zero recent runs. Third, Todoist's API rate limit is 450 requests per 15 minutes. At normal team volumes this is fine, but if you're running multiple Todoist Zaps simultaneously during a busy period, you can hit it. Zapier doesn't retry gracefully on 429 errors — the run just fails and you have to check Zap History manually.

Ideas for what to build next

  • Add a Slack confirmation messageAfter creating the Todoist task, add a second Zapier action that posts a reply in the Slack thread confirming the task was created and linking directly to it. This closes the loop so the original message author knows the task was captured.
  • Build a reverse sync for task completionCreate a second Zap that triggers when a Todoist task is marked complete and posts a '✅ Done' reply in the original Slack channel. Requires storing the Slack channel and thread timestamp in the Todoist task description during creation.
  • Expand to multiple channels with Make's RouterIf you add more than 4 project channels, rebuild this workflow in Make with a single Slack trigger and a Router module that branches on channel ID. One scenario handles all channels instead of maintaining separate Zaps per channel.

Related guides

Was this guide helpful?
Slack + Todoist overviewZapier profile →