

How to Turn Slack Messages into Todoist Tasks with Zapier
When a Slack message gets a specific emoji reaction (or contains a trigger keyword), Zapier instantly creates a Todoist task with the message text, sender, and channel — no copy-pasting required.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that make decisions in Slack but track work in Todoist and keep losing action items inside long threads.
Not ideal for
Teams needing two-way sync — if you want Todoist task updates to post back to Slack, this one-way setup won't cover that without a second Zap.
Sync type
real-timeUse case type
routingReal-World Example
A 12-person product team at a B2B SaaS company uses the 📌 reaction to flag action items during sprint planning in Slack. Before this Zap, someone had to manually copy each action item into Todoist after every meeting — they missed 3-5 tasks per sprint. Now any message reacted to with 📌 becomes a Todoist task within 30 seconds, assigned to the Inbox with the full message text and a link back to the Slack thread.
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 | ||
7 optional fields▸ show
| Project | |
| Description | |
| Assignee | |
| Due Date | |
| Priority | |
| Label | |
| Section |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap in Zapier
Log into zapier.com and click the orange 'Create Zap' button in the top-left sidebar. You'll land on the Zap editor — a two-panel view with a trigger block on the left and an empty action block below it. This is where you'll configure the full workflow. Give the Zap a name at the top (something like 'Slack Reaction → Todoist Task') so you can find it later.
- 1Log in at zapier.com
- 2Click 'Create Zap' in the left sidebar
- 3Click the name field at the top and type 'Slack Reaction → Todoist Task'
- 4Click the 'Trigger' block to begin setup
Zap Editor > Trigger > App & Event
Set Slack as the trigger app
In the trigger block, type 'Slack' into the search bar and select it from the results. You'll then be asked to choose a trigger event. Select 'New Reaction Added' — this fires every time any emoji reaction is added to any message in your workspace. This is the most reliable approach because it requires zero behavior change from your team; they just react to messages they want tracked.
- 1Type 'Slack' in the app search field
- 2Click Slack in the results
- 3Click the 'Event' dropdown
- 4Select 'New Reaction Added'
- 5Click 'Continue'
Zap Editor > Trigger > Account
Connect your Slack account
Click 'Sign in to Slack'. A popup will open asking you to authorize Zapier to access your Slack workspace. You must be a workspace member to connect — Zapier needs read access to messages and reaction events. If your workspace uses Single Sign-On, the popup may redirect through your SSO provider first. After authorization, you'll be returned to the Zap editor with your account listed.
- 1Click 'Sign in to Slack'
- 2Select your workspace in the Slack authorization popup
- 3Click 'Allow' to grant Zapier access
- 4Confirm the connected account appears in the dropdown
Zap Editor > Trigger > Configure
Configure the trigger — pick your reaction and channel
You'll see two fields: 'Reaction' and 'Channel'. In the Reaction field, type the emoji name without colons — for example, type 'pushpin' for the 📌 emoji or 'white_check_mark' for ✅. Leave this blank if you want ALL reactions to create tasks (not recommended — that's too noisy). In the Channel field, choose a specific channel to watch or leave it set to 'Any Channel' if your team uses multiple channels for work. Click 'Continue' when done.
- 1Type the emoji name (without colons) in the 'Reaction' field — e.g. 'pushpin'
- 2Click the 'Channel' dropdown and choose a specific channel or leave as 'Any Channel'
- 3Click 'Continue'
Zap Editor > Trigger > Test
Test the Slack trigger
Click 'Test trigger'. Zapier will pull the three most recent reactions matching your config from Slack. If no results appear, go into Slack right now, post a message in the configured channel, and add your chosen reaction to it — then come back and click 'Test trigger' again. You need real trigger data here because the field names from this test response are what you'll map to Todoist in the next steps.
- 1Click 'Test trigger'
- 2If no data loads, switch to Slack and react to a message with your chosen emoji
- 3Return to Zapier and click 'Find new records'
- 4Select one of the returned records to use as your test data
- 5Click 'Continue with selected record'
Zap Editor > + > Filter by Zapier
Add a Filter step to avoid junk tasks
Click the '+' button between the trigger and the eventual action to add a Filter step. Set the filter condition to: 'Message Text — Contains — (any characters)' — meaning only proceed if the message has actual text content. This blocks reactions on image-only posts, link previews, and bot messages from creating empty Todoist tasks. Without this filter, blank tasks will appear in your Todoist inbox whenever someone reacts to a GIF or file upload.
- 1Click the '+' icon between the trigger and action blocks
- 2Select 'Filter by Zapier'
- 3Set the left field to 'Message Text' from the Slack trigger data
- 4Set the condition to 'Text contains'
- 5Type a single space in the value field (to match any non-empty text)
- 6Click 'Continue'
Zap Editor > Action > App & Event
Add Todoist as the action app
Click the action block and search for 'Todoist'. Select it, then choose 'Create Task' as the action event. This creates one new task per trigger — no batching, no deduplication needed for this use case. Click 'Continue' to move to account connection.
- 1Click the Action block
- 2Type 'Todoist' in the search field
- 3Select Todoist from the results
- 4Choose 'Create Task' from the Event dropdown
- 5Click 'Continue'
Zap Editor > Action > Account
Connect your Todoist account
Click 'Sign in to Todoist'. A popup opens redirecting you to Todoist's OAuth page. Log in with the account that owns or has access to the project where tasks should land. Zapier uses OAuth 2.0 here — no API key required. After authorization, you'll return to the Zap editor with your Todoist account listed in the dropdown.
- 1Click 'Sign in to Todoist'
- 2Log into your Todoist account in the popup
- 3Click 'Agree' to authorize Zapier
- 4Confirm your Todoist email appears in the account dropdown
Zap Editor > Action > Configure
Map Slack data to Todoist task fields
This is the most important step. You'll see a form with Todoist task fields. For 'Task Content', click the field and insert the Slack 'Message Text' variable — optionally prefix it with something like 'Slack Task: ' for visual clarity in Todoist. For 'Project', choose a specific Todoist project from the dropdown or leave it as Inbox. For 'Description', insert the Slack 'Permalink' variable so every task links back to the original Slack message. Set 'Due Date' only if your team's convention is to always set deadlines — otherwise leave it blank.
- 1Click the 'Task Content' field and select 'Message Text' from the Slack trigger data
- 2Optionally prefix with static text like 'Slack: ' before the variable
- 3Click the 'Project' dropdown and choose your target Todoist project
- 4Click the 'Description' field and insert the 'Permalink' variable from Slack
- 5Leave 'Due Date' blank unless your team always sets deadlines on flagged items
- 6Click 'Continue'
Zap Editor > Action > Test
Test the action and verify the task in Todoist
Click 'Test action'. Zapier will fire against your connected Todoist account using the sample data from the trigger test. Switch to Todoist immediately after — open the project you mapped and confirm the task appeared with the correct message text and the Slack permalink in the description. If the task shows up blank or with wrong content, go back to step 9 and check the field mapping.
- 1Click 'Test action'
- 2Wait 5-10 seconds, then open Todoist in a new tab
- 3Navigate to the project you configured
- 4Confirm the task title matches the Slack message text
- 5Click the task and verify the description contains the Slack permalink
Zap Editor > Publish
Turn on the Zap
Click 'Publish' in the top right of the Zap editor. The toggle will switch from gray to blue, confirming the Zap is live. From this point, every time someone adds your configured emoji reaction to a Slack message in the watched channel, a Todoist task will be created within 30 seconds. Share the emoji convention with your team — pin a message in the channel explaining which reaction triggers a task.
- 1Click the 'Publish' button in the top right
- 2Confirm the Zap status shows 'On' with a blue toggle
- 3Go to Slack and post a message in the watched channel
- 4React to it with your configured emoji
- 5Check Todoist within 60 seconds to confirm the task was created
This Code by Zapier step extracts the @mention from the Slack message and appends it to the task title so the responsible person is visible at a glance in Todoist — without needing Todoist's assignee feature. Paste this into a 'Code by Zapier' step inserted between the Filter step and the Todoist action step. Set the input variable 'message' to the Slack Message Text field.
JavaScript — Code Step// Input variable: message (mapped from Slack Message Text)▸ Show code
// Input variable: message (mapped from Slack Message Text) const message = inputData.message || ''; // Extract the first @mention found in the message
... expand to see full code
// Input variable: message (mapped from Slack Message Text)
const message = inputData.message || '';
// Extract the first @mention found in the message
const mentionMatch = message.match(/@([a-zA-Z0-9._-]+)/);
const mention = mentionMatch ? mentionMatch[0] : null;
// Strip the @mention from the main task text to avoid redundancy
const cleanMessage = message.replace(/@([a-zA-Z0-9._-]+)/g, '').replace(/\s+/g, ' ').trim();
// Build the final task title
let taskTitle;
if (mention) {
taskTitle = `${cleanMessage} [Owner: ${mention}]`;
} else {
taskTitle = cleanMessage;
}
// Return both values for use in the Todoist action step
output = [
{
taskTitle: taskTitle,
extractedMention: mention || 'unassigned'
}
];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 doesn't want to touch code and you're capturing fewer than 300 action items per month. The setup takes under 20 minutes, the trigger fires in under 30 seconds via Slack's Event API, and everyone on the team can understand exactly how it works without reading documentation. The one scenario where you'd skip Zapier: if you need to route tasks to different Todoist projects based on channel, message content, AND user — that kind of branching logic requires Paths (Zapier's Professional plan at $49/month) and gets messy fast. Make handles multi-branch routing more cleanly at a lower price.
The cost math is straightforward. Each Slack reaction that passes the filter consumes 2 Zapier tasks: one for the Filter step, one for the Todoist action. At 100 action items flagged per month, that's 200 tasks. Zapier's Starter plan gives you 750 tasks/month for $19.99/month — you'd be well within that. At 400 flagged items/month (800 tasks), you'd need the Professional plan at $49/month. Make runs the same workflow for free up to 1,000 operations/month, and their paid plans start at $9/month. For this specific use case, Make is cheaper by $10-40/month depending on volume.
Make has one real edge here: its Slack module gives you access to the full raw message payload including thread metadata, which makes it easier to create tasks with parent/child context from threaded conversations. n8n lets you self-host the whole thing for free, and their Slack node supports custom webhook filtering at the node level — no separate Filter step needed. Power Automate's Slack connector is weaker (it uses polling, not webhooks, so there's a 1-5 minute delay per task creation) — skip it for this workflow. Pipedream gives you the most control over Slack event data with direct API access, but requires JavaScript. Zapier wins on speed-to-live for non-technical teams — you're in production today, not next week.
Three things people hit after the Zap goes live. First: the team doesn't adopt the emoji convention consistently because nobody told them which emoji to use — tasks stop appearing and everyone assumes the automation broke. Pin the instructions in every relevant channel. Second: Slack occasionally delivers duplicate webhook events during workspace connectivity issues, which creates duplicate tasks in Todoist. You'll notice this after outages. Add a note-to-self to check for duplicates after any Slack incident. Third: Todoist's API has a rate limit of 450 requests per minute — this won't affect a team of 15, but if you're running multiple Zaps that all write to Todoist simultaneously (e.g., a Slack Zap plus a calendar Zap plus a form Zap), you may hit sporadic 429 errors during busy periods. Stagger your Zaps with a 1-2 second delay step if this happens.
Ideas for what to build next
- →Add due date parsing from message text — Use a Zapier Formatter step (Text > Extract Pattern) to pull dates mentioned in the Slack message (e.g., 'by Friday' or 'before May 30') and map them to Todoist's Due Date field automatically.
- →Post a confirmation back to Slack — Add a second action step that posts a Slack reply in the message thread confirming the task was created, including a link to the Todoist task. This closes the loop so the team knows the item was captured.
- →Route tasks to different Todoist projects by channel — Add a Zapier Paths step (requires Professional plan) to send tasks from #engineering to an Engineering project, #marketing to a Marketing project, and so on — instead of everything landing in one generic project.
Related guides
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
How to Send Weekly Todoist Reports to Slack with n8n
~20 min setup
How to Send Weekly Todoist Reports to Slack with Zapier
~8 min setup
How to Send Weekly Todoist Reports to Slack with Make
~12 min setup
How to Assign Todoist Tasks from Slack Mentions with Pipedream
~15 min setup