

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-timeUse case type
routingReal-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.
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 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
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.
- 1Click the orange 'Create Zap' button in the left sidebar
- 2Click the 'Trigger' block in the canvas
- 3Type 'Slack' in the app search box
- 4Select 'Slack' from the results list
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.
- 1Click the 'Event' dropdown
- 2Type 'mention' in the event search box
- 3Select 'New Mention' from the list
- 4Click 'Continue'
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.
- 1Click 'Sign in to Slack'
- 2Select your workspace from the Slack authorization page
- 3Click 'Allow' to grant Zapier the required permissions
- 4Confirm the green checkmark appears next to your workspace name
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.
- 1Click the 'Channel' dropdown
- 2Type the channel name or scroll to find it
- 3Select the target channel (e.g., #client-acme)
- 4Leave 'Trigger for' as 'Any mention' unless restricting to one user
- 5Click 'Continue'
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.
- 1Post a test @mention message in your target Slack channel
- 2Return to Zapier and click 'Test trigger'
- 3Expand the returned sample record
- 4Confirm 'Text', 'User', 'Mentioned Users', and 'Channel' fields are populated
- 5Click 'Continue with selected record'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}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.
- 1Click the '+' icon below the trigger block
- 2Search for 'Todoist' in the app search field
- 3Select 'Todoist' from the results
- 4Choose 'Create Task' from the event dropdown
- 5Click 'Sign in to Todoist' and complete the OAuth flow
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.
- 1Click '+' between the Slack trigger and Todoist action
- 2Search for 'Formatter by Zapier' and select it
- 3Choose 'Text' as the transform type
- 4Select 'Extract Pattern' from the Transform dropdown
- 5Set Input to the Slack 'Text' field from step 5
- 6Set Pattern to @(\w+) and click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}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.
- 1Click the 'Content' field and use the blue '+' icon to insert dynamic values
- 2Insert the Formatter output (extracted username) followed by the Slack message Text
- 3Click the 'Project' dropdown and select the matching Todoist project
- 4Set 'Description' to the full Slack message Text for context
- 5Optionally set 'Due Date' to today's date using Zapier's date formatting
- 6Click 'Continue'
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.
- 1Click the 'Priority' dropdown in the Todoist Configure section
- 2Select '2' for high priority (or '4' for urgent)
- 3Optionally insert a dynamic value from a Formatter step that returns priority based on keywords
- 4Click 'Continue'
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'.
- 1Click 'Test action' in the Todoist step
- 2Open Todoist in a new tab and navigate to your target project
- 3Confirm the test task appears with correct content, project, and priority
- 4Return to Zapier and click 'Publish Zap' if everything looks right
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.
- 1Confirm the Zap toggle shows 'On' (green) on your Zaps dashboard
- 2Post a real @mention message in the target Slack channel
- 3Wait up to 2 minutes
- 4Check Todoist for the new task
- 5If missing, go to Zap History and inspect the most recent run for errors
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
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.
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.
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 message — After 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 completion — Create 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 Router — If 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
How to Assign Todoist Tasks from Slack Mentions with Pipedream
~15 min setup
How to Assign Todoist Tasks from Slack Mentions with Power Automate
~15 min setup
How to Assign Todoist Tasks from Slack Mentions with n8n
~20 min setup
How to Assign Todoist Tasks from Slack Mentions with Make
~12 min setup
How to Send Weekly Todoist Reports to Slack with Pipedream
~15 min setup
How to Send Weekly Todoist Reports to Slack with Power Automate
~15 min setup