

How to Assign Todoist Tasks from Slack Mentions with Power Automate
Automatically creates a Todoist task assigned to a specific team member whenever they are mentioned in a designated Slack channel, pulling the channel name and message text as task context.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams already inside the Microsoft 365 ecosystem who use Slack for project channels and Todoist for individual task tracking
Not ideal for
Teams that need bidirectional sync between Todoist and Slack — this flow only moves data one direction
Sync type
real-timeUse case type
routingReal-World Example
A 22-person product agency uses project-specific Slack channels like #client-acme and #client-globex. When a project manager types '@jordan please write the QA checklist for launch', the flow fires within 90 seconds and creates a Todoist task in the Agency Work project assigned to Jordan, with the full Slack message as the task description and the channel name as a label. Before this, Jordan missed roughly 3-4 task requests per week because they were buried in Slack threads.
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
Import this workflow directly into Power Automate
Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Content | content | |
| Project ID | project_id | |
| Slack User ID | ||
| Assignee Display Name | ||
| Slack Channel Name | ||
5 optional fields▸ show
| Task Description | description |
| Label | labels |
| Priority | priority |
| Due Date | due_date |
| Message Timestamp |
Step-by-Step Setup
make.powerautomate.com > My flows > + New flow > Automated cloud flow
Create a new Automated cloud flow in Power Automate
Go to make.powerautomate.com and sign in. In the left sidebar click 'My flows', then click '+ New flow' in the top menu. Select 'Automated cloud flow' from the dropdown — this is the correct type because the trigger is an external event, not a schedule. Give your flow a name like 'Slack Mention → Todoist Task' and click 'Create'.
- 1Click 'My flows' in the left sidebar
- 2Click '+ New flow' at the top of the page
- 3Select 'Automated cloud flow'
- 4Enter a flow name: 'Slack Mention → Todoist Task'
- 5Click 'Skip' on the trigger picker — you will set it in the next step
Flow canvas > Trigger block > Search: Slack > When a new message is posted to a channel
Add the Slack trigger: 'When a new message is posted to a channel'
Click the empty trigger block on the canvas. In the search bar type 'Slack' and select the Slack connector. Choose the trigger 'When a new message is posted to a channel'. This trigger uses a webhook registered by Power Automate directly with Slack's API — no polling interval to configure. You will be prompted to authenticate your Slack workspace if you have not connected it before.
- 1Click the trigger block labeled 'When this happens...'
- 2Type 'Slack' in the connector search bar
- 3Click the Slack connector card
- 4Select 'When a new message is posted to a channel' from the trigger list
- 5Click 'Sign in' and authenticate with your Slack workspace credentials
channel: {{channel}}
ts: {{ts}}
Flow canvas > Slack trigger > Channel Name dropdown
Select the target Slack channel
In the trigger configuration, click the 'Channel Name' dropdown. Power Automate will load the list of public channels your authenticated Slack user can see. Select the specific project channel you want to monitor, such as #client-acme. If you want to monitor multiple channels, you will need to either duplicate this flow per channel or use a filter in a later step after selecting a broad channel.
- 1Click the 'Channel Name' dropdown inside the trigger block
- 2Wait for the channel list to load (takes 3-5 seconds)
- 3Select your target channel, e.g., 'client-acme'
- 4Leave all other trigger fields at their defaults
Flow canvas > + New step > Control > Condition
Add a Condition to filter only messages containing an @mention
Not every message in the channel should create a task — only messages where a team member is mentioned. Click '+ New step', search for 'Condition', and select the 'Condition' control. In the left value field, insert the dynamic value 'Text' from the Slack trigger (this is the raw message text). Set the operator to 'contains'. In the right value field, type '<@' — this is how Slack encodes user mentions in its API payload (e.g., '<@U04XKBT2J>'). Only messages with at least one mention will pass through to the Yes branch.
- 1Click '+ New step' below the trigger
- 2Search for 'Condition' and select it from Control
- 3Click into the left value field and select dynamic value 'Text' from the Slack trigger
- 4Set the operator dropdown to 'contains'
- 5Type '<@' in the right value field
Flow canvas > Yes branch > Add an action > Data Operation > Compose
Parse the mentioned user ID from the message text
Inside the 'Yes' branch, click 'Add an action'. Search for 'Compose' and add a Data Operation > Compose action. You will use a Power Automate expression to extract the user ID from the raw Slack mention string. In the Inputs field, click 'Expression' tab and enter the formula shown in the pro tip section. This extracts the string between '<@' and '>' to get the raw Slack user ID (e.g., U04XKBT2J). You will map this to the Todoist assignee in a later step.
- 1Click 'Add an action' inside the Yes branch
- 2Search for 'Compose' and select 'Data Operation > Compose'
- 3Click into the Inputs field
- 4Switch to the 'Expression' tab in the dynamic content panel
- 5Enter the extraction expression (see pro tip) and click OK
Flow canvas > Yes branch > Add an action > Slack > Get user profile
Look up the Slack user's display name
The Compose step outputs a Slack user ID like U04XKBT2J, which is not human-readable. Add a new action: search for 'Slack' and choose 'Get user profile'. Pass in the output of the Compose step (Outputs from the previous action) as the User ID field. This API call returns the user's display name, real name, and email. You will use the display name as the assignee label on the Todoist task.
- 1Click 'Add an action' below the Compose step
- 2Search for 'Slack' in the connector search
- 3Select 'Get user profile'
- 4In the User ID field, insert the dynamic value 'Outputs' from the previous Compose step
Flow canvas > Yes branch > Add an action > Todoist > Sign in
Connect your Todoist account
Add a new action and search for 'Todoist'. Select 'Todoist' from the connector list. Power Automate will immediately prompt you to sign in — click 'Sign in' and authenticate with the Todoist account that owns the project you want tasks created in. This creates a Connection entry in your Power Automate Connections list. The connection is tied to a single Todoist account, so tasks will appear in that account's projects.
- 1Click 'Add an action' below the Slack user profile step
- 2Search for 'Todoist' in the connector search bar
- 3Select any Todoist action temporarily to trigger authentication
- 4Click 'Sign in' in the connection prompt
- 5Authenticate with your Todoist credentials in the popup window
Flow canvas > Yes branch > Todoist > Create task
Add the Todoist 'Create task' action and map fields
With Todoist connected, change the action to 'Create task'. The action form shows fields for Content, Project ID, Due Date, Priority, and Labels. Map the fields as follows: set Content to a combination of the Slack message Text dynamic value; set Project ID by clicking the dropdown and selecting your target project; set Labels to the Slack Channel Name dynamic value from the trigger so each task is tagged with its source channel. Leave Due Date blank unless your team uses a standard SLA.
- 1Change or set the Todoist action to 'Create task'
- 2Click the Content field and insert dynamic value 'Text' from the Slack trigger
- 3Click the Project ID dropdown and select your target Todoist project
- 4Click the Labels field and insert dynamic value 'Channel Name' from the Slack trigger
- 5Optionally set Priority to 2 (high) for mention-based tasks
Flow canvas > Yes branch > Todoist > Create task > Description field
Add a task description with channel and sender context
The Todoist 'Create task' action has a Description field (sometimes labeled 'Note'). Click it and build a context string using dynamic values: insert 'Channel Name' from the Slack trigger, then the Slack message 'Text', then 'Message Timestamp' formatted as a readable date. This gives the assignee full context without needing to open Slack. The description should read something like: 'From #client-acme on [timestamp]: [full message text]'.
- 1Click the Description field inside the Create task action
- 2Type 'From #' then insert the dynamic value 'Channel Name'
- 3Type ' on ' then insert dynamic value 'Message Timestamp'
- 4Press Enter and insert dynamic value 'Text' from the Slack trigger
This expression goes in the Inputs field of the Compose action (Step 5). It extracts the Slack user ID from the raw mention string format '<@USERID>'. Paste it in the Expression tab of the dynamic content panel — do not type it in the regular field editor or the syntax will break.
JavaScript — Code Step// Power Automate Expression — paste into the Compose action's Inputs field▸ Show code
// Power Automate Expression — paste into the Compose action's Inputs field // Extracts Slack user ID from mention format: <@U04XKBT2J> substring(
... expand to see full code
// Power Automate Expression — paste into the Compose action's Inputs field
// Extracts Slack user ID from mention format: <@U04XKBT2J>
substring(
triggerBody()?['text'],
add(indexOf(triggerBody()?['text'], '<@'), 2),
sub(
indexOf(triggerBody()?['text'], '>'),
add(indexOf(triggerBody()?['text'], '<@'), 2)
)
)
// Result: 'U04XKBT2J'
// Use 'Outputs' from this Compose step as the User ID input in Get user profile
// Bonus: readable timestamp expression for the task description field
// Paste this separately in the Description field expression editor:
formatDateTime(
addSeconds('1970-01-01T00:00:00Z', int(first(split(triggerBody()?['ts'], '.')))),
'yyyy-MM-dd HH:mm'
)
// Result: '2024-04-12 14:00'Flow canvas > Yes branch > Add an action > Slack > Post message
Post a confirmation message back to Slack
Add one final action inside the Yes branch: search for Slack and select 'Post message'. Set the Channel to the same channel from the trigger. In the Message Text field, type 'Task created for ' and then insert the 'Real Name' dynamic value from the 'Get user profile' step. This closes the loop so the team knows the task was captured without checking Todoist manually.
- 1Click 'Add an action' below the Todoist Create task step
- 2Search for 'Slack' and select 'Post message'
- 3Set Channel to the same channel from the trigger using the dynamic value 'Channel Name'
- 4In Message Text type 'Task created for ' and insert dynamic value 'Real Name' from Get user profile
- 5Click Save
Flow canvas > Save > Test > Manually
Test the flow end-to-end and turn it on
Click 'Save' in the top menu, then click 'Test' and select 'Manually'. Go to the target Slack channel and post a message that includes a @mention, such as '@jordan please review the landing page copy'. Return to Power Automate — the test panel will show each step either green (success) or red (failure) with the actual data passed. Verify the Todoist task appeared in the correct project and the Slack confirmation message posted. Once confirmed, the flow is already live — no additional activation step is needed after a successful test save.
- 1Click 'Save' in the top toolbar
- 2Click 'Test' then select 'Manually'
- 3Go to your Slack channel and post a message with a @mention
- 4Return to Power Automate and watch the test run panel
- 5Check Todoist to confirm the task was created in the correct project
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 Power Automate for this if your organization is already on Microsoft 365 and your team's IT department manages data residency or compliance requirements — Power Automate keeps the flow execution inside your Microsoft tenant, which matters for some industries. It is also the right call if you are building this alongside other internal Microsoft tools like Teams, SharePoint, or Dataverse and want one unified automation platform. The one scenario where you should pick something else: if your team has no Microsoft 365 presence at all, the premium connector cost for Slack alone makes Power Automate the most expensive option for what is a simple webhook-to-API task.
Power Automate's pricing for this flow works out to roughly 0.002 USD per run (cloud flows with premium connectors cost 15 USD/month per user for unlimited runs under fair-use limits, or 0.001 USD per API call if you are on the pay-per-use plan). At 200 Slack mentions per month — a realistic number for a 10-person team across 3 channels — you are looking at $0.20/month on pay-per-use, or flat-rate covered under a Microsoft 365 E3/E5 license you likely already own. Zapier would charge you $19.99/month minimum for multi-step Zaps at this volume. Make handles 200 operations free. If cost is your primary concern, Make wins by a wide margin.
Make handles this specific use case more cleanly — it has a dedicated Slack 'Watch Mentions' trigger that fires only on actual @mentions, saving you the Condition filter step entirely. Zapier has a cleaner Todoist integration with a native 'Create Task' Zap that exposes more fields in the UI without expression formulas. n8n lets you write JavaScript directly to parse the mention string and handle multi-assignee messages in a single node — no separate Compose step needed. Pipedream gives you the fastest iteration cycle with live code execution and better error visibility than Power Automate's run history UI. Power Automate is still the right answer here when the decision is made at the IT level, not the ops level — enterprise governance and existing licensing override the UX advantages of the other platforms.
Three things you will hit after setup. First, Slack's API delivers message edits as new events — if someone edits a message containing a mention, your flow creates a second duplicate task. Add a condition checking that the Slack trigger's 'Previous Message' field is empty to block edits from triggering. Second, the Todoist Power Automate connector occasionally returns a 429 rate-limit error during rapid bursts — it uses Todoist's REST API v2 which allows 450 requests per minute, but Power Automate's retry logic defaults to 3 attempts with exponential backoff, so you rarely see data loss, just delayed task creation. Third, if you rename a Todoist project, the numeric Project ID stays the same and the flow keeps working — but if you delete and recreate a project, the ID changes and the flow silently starts failing until you update the dropdown selection manually.
Ideas for what to build next
- →Add due date parsing from message text — Use Power Automate's AI Builder text recognition or a simple contains() expression to detect date phrases like 'by Friday' in the Slack message and map them to the Todoist due_date field automatically.
- →Route tasks to different Todoist projects by channel — Add a Switch control after the Condition step that checks the Channel Name value and sets a different Project ID variable for each channel — so #client-acme tasks go to the Acme project and #client-globex tasks go to the Globex project.
- →Post a daily digest of open tasks back to each channel — Build a second Scheduled cloud flow that runs at 9am, queries Todoist for incomplete tasks with a specific channel label, and posts a formatted summary to that Slack channel — closing the loop so the whole team sees what's outstanding.
Related guides
How to Assign Todoist Tasks from Slack Mentions with Pipedream
~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 Zapier
~8 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