

How to Broadcast Todoist Task Completions to Slack with Make
When a task is marked complete in Todoist, Make posts a formatted message to a Slack channel so your team sees project wins in real time.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small-to-mid-size teams who close tasks frequently and want stakeholders to see progress without opening Todoist.
Not ideal for
Teams completing 200+ tasks per day — the polling interval creates noticeable lag and chews through Make operations fast.
Sync type
scheduledUse case type
notificationReal-World Example
A 12-person product team uses this to post every completed sprint task to #product-updates in Slack. Before this automation, the PM manually copy-pasted task names into Slack standup threads each morning — now completion announcements appear within 15 minutes of the task being checked off. The team replaced a 20-minute daily ritual with zero effort.
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 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.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Name | content | |
| Project Name | project_id | |
| Completed At | completed_at | |
5 optional fields▸ show
| Assignee Name | responsible_uid |
| Task Description | description |
| Task URL | url |
| Priority | priority |
| Due Date | due |
Step-by-Step Setup
Dashboard > Create a new scenario
Create a new scenario in Make
Log into Make at make.com and click the blue 'Create a new scenario' button in the top right of your dashboard. You land on the visual canvas — a dark background with a single empty circle in the center. This circle is your trigger module. Click it to open the app search drawer on the right side of the screen. Type 'Todoist' and select it from the results.
- 1Click the blue 'Create a new scenario' button in the top right
- 2Click the empty circle in the center of the canvas
- 3Type 'Todoist' in the search field of the app drawer
- 4Click 'Todoist' in the results list
Scenario Canvas > Todoist Module > Watch Tasks
Configure the Todoist 'Watch Tasks' trigger
From the Todoist module list, select 'Watch Tasks' as your trigger. This is a polling trigger — Make will check Todoist every X minutes for newly completed tasks. In the trigger configuration panel, set the Filter field to 'Completed' so only finished tasks fire the scenario. Choose the project you want to watch, or leave it set to 'All Projects' if you want completions from your entire workspace to broadcast.
- 1Click 'Watch Tasks' from the Todoist trigger list
- 2Click 'Add' to create a new Todoist connection and authenticate with your account
- 3Set 'Filter' to 'Completed'
- 4Set 'Project' to your target project or leave as 'All Projects'
- 5Set 'Limit' to 10 (this caps how many completions are processed per polling run)
Scenario Canvas > Trigger Module > Clock Icon > Scheduling
Set the polling interval
Click the clock icon in the bottom-left corner of the trigger module on the canvas. This opens the scheduling options. Set the interval to every 15 minutes — this is the best balance between responsiveness and Make operation costs. You can go as low as 1 minute on paid plans, but for most teams broadcasting task wins, 15 minutes is more than fast enough.
- 1Click the small clock icon in the bottom-left of the Todoist trigger module
- 2Select 'At regular intervals' from the scheduling options
- 3Set the interval value to 15 and the unit to 'minutes'
- 4Click 'OK' to confirm
Scenario Canvas > Arrow between modules > Wrench icon > Set up a filter
Add a filter to exclude incomplete tasks
Even with the 'Completed' filter set on the trigger, it is smart to add an explicit Make filter between the trigger and Slack module to guard against edge cases. Click the small wrench icon on the arrow between the Todoist trigger and your next module. Set the condition to: is_completed Equal to true. This ensures a mistakenly re-opened task does not fire a Slack announcement.
- 1Hover over the arrow line between the Todoist trigger and the next module
- 2Click the wrench icon that appears on that arrow
- 3Click 'Set up a filter'
- 4Set Label to 'Only completed tasks'
- 5Set Condition: field =
is_completed, operator = 'Equal to', value =true - 6Click 'OK'
Scenario Canvas > + > Text Aggregator
Add a Text Aggregator to build the Slack message
Click the '+' button to the right of the Todoist module and search for 'Text Aggregator'. This module is not strictly required, but using it lets you format the task details — name, project, due date, assignee — into a clean single string before it reaches Slack. Map the following fields from the Todoist output: task content (the task name), project name, and completed date. Write a template like: ✅ *{{content}}* completed in _{{project_name}}_ on {{formatDate(completed_at, 'MMM D, YYYY')}}.
- 1Click the '+' circle to the right of the Todoist trigger module
- 2Search for 'Text Aggregator' and select it
- 3In the 'Source Module' field, select your Todoist trigger
- 4In the 'Text' field, type your message template using the variable picker to insert Todoist fields
- 5Set Row separator to 'New line'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Scenario Canvas > + > Slack > Create a Message
Add the Slack module and choose 'Create a Message'
Click the '+' to the right of the Text Aggregator (or Todoist module if you skipped aggregation). Search for 'Slack' and select it. From the Slack action list, choose 'Create a Message'. Click 'Add' to connect your Slack workspace — Make will open an OAuth popup where you authorize Make to post messages on your behalf. Grant the required permissions and return to Make.
- 1Click the '+' circle to the right of the previous module
- 2Type 'Slack' in the search drawer
- 3Select 'Slack' from the app list
- 4Click 'Create a Message' from the action list
- 5Click 'Add' next to the Connection field to start Slack OAuth
- 6Authorize Make in the Slack popup and return to Make
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Scenario Canvas > Slack Module > Configuration Panel
Configure the Slack message fields
With the Slack module open, set the Channel ID field to the channel where you want completions announced — type '#' followed by the channel name or paste the channel ID directly. In the Text field, map the output from the Text Aggregator (or build the message inline using Todoist fields if you skipped aggregation). Optionally set 'As User' to false and provide a username like 'Task Bot' and an emoji icon like ':white_check_mark:' to distinguish automated messages from human ones.
- 1Click inside the 'Channel ID' field and type or paste your target Slack channel
- 2Click inside the 'Text' field and map the output from the Text Aggregator using the variable picker
- 3Set 'As User' to false
- 4Set 'Username' to 'Task Bot'
- 5Set 'Icon Emoji' to ':white_check_mark:'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Scenario Canvas > Run once (bottom-left toolbar)
Run a test with sample Todoist data
Click 'Run once' in the bottom-left of the Make canvas. Make will poll Todoist immediately and return any tasks completed since the last run. If no tasks have been completed yet, go to Todoist, complete a test task, then click 'Run once' again. Watch the bubbles appear above each module — green means data passed through, red means an error. Click the bubble above the Slack module to confirm the message was sent.
- 1Complete a test task in Todoist before running
- 2Click the 'Run once' button in the bottom-left of the canvas
- 3Watch the green operation bubbles appear on each module
- 4Click the bubble on the Slack module to inspect the output payload
- 5Check your Slack channel to confirm the message appeared
Scenario Canvas > Toggle (bottom-left) > Rename at top of canvas
Enable the scenario and set it live
Once the test passes, click the toggle in the bottom-left of the canvas to switch the scenario from OFF to ON. Make will now run the scenario on your chosen schedule without manual triggering. Give the scenario a clear name by clicking the default name at the top of the canvas — something like 'Todoist Completions → Slack #team-wins' makes it easy to find later.
- 1Click the ON/OFF toggle in the bottom-left toolbar to activate the scenario
- 2Click the scenario name at the top of the canvas (defaults to 'New scenario')
- 3Type a descriptive name like 'Todoist Completions → Slack #team-wins'
- 4Press Enter to save the name
- 5Confirm the scenario status shows 'ON' in green
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 Make for this if your team has non-technical members who need to adjust the workflow occasionally without touching code, if you want visual branching (one scenario routing to five different Slack channels based on project), or if you're already paying for Make and don't want another tool. Make's visual canvas makes it easy to add a Router later when requirements grow. The one scenario where you'd skip Make: if your team completes 50+ tasks per day and needs sub-5-minute delivery — at that point you're burning operations fast and should look at n8n self-hosted instead.
The math here is real. Each scenario run costs 1 operation for the Todoist poll, plus 1 per task returned, plus 1 for the Slack post. At a 15-minute interval with an average of 3 completed tasks per poll, that is 5 operations per run × 96 runs/day × 30 days = 14,400 operations per month. Make's free tier gives you 1,000. You need at least the Core plan at $9/month (10,000 ops) or more likely the Pro plan at $16/month (10,000 ops with higher polling frequency). Zapier would handle this at its Starter tier ($19.99/month) but you'd pay more per month for the same result.
Zapier has one edge here: its Todoist integration includes a 'Task Completed' trigger that fires faster and requires zero filter configuration — you don't need to set up polling intervals manually. n8n gives you full control over message formatting with JavaScript directly in the node, which matters if your Slack messages need dynamic logic beyond what Make's formula editor handles. Power Automate has a Todoist connector, but it's a premium connector that costs extra on top of your Microsoft 365 plan and has fewer configuration options than Make's. Pipedream handles this easily with code steps and has a generous free tier, but requires JavaScript comfort. Make is still the right call for most teams because the visual canvas is faster to hand off to a non-developer and the Slack and Todoist modules are both well-maintained and reliable.
Three things you'll hit after setup. First, Todoist's completed tasks API does not return tasks completed by guest users on shared projects — guests exist outside the standard member API scope, so their wins simply won't broadcast. Second, Make's polling cursor occasionally gets stuck on error runs, causing the same task to fire the Slack module twice — this is why the data store deduplication step matters and is not optional for production. Third, Slack's rate limit for posting messages is 1 message per second per workspace. If you complete 20 tasks simultaneously and the poll catches them all in one run, Make will fire 20 Slack posts back-to-back and Slack will start rate-limiting after the first second, causing some messages to fail silently unless you add error handling and retry logic to the scenario.
Ideas for what to build next
- →Add a daily digest instead of real-time posts — Replace the 15-minute poll with a single daily run at 5pm and use a Text Aggregator to batch all completions into one Slack message — this reduces notification fatigue for teams that close dozens of tasks per day.
- →Route by project to different Slack channels — Add a Make Router module after the Todoist trigger with one path per project, sending engineering completions to #eng-wins and marketing completions to #marketing-wins instead of one catch-all channel.
- →Log completions to a Google Sheet for weekly reporting — Add a second branch to the scenario that writes each completed task — name, project, timestamp, assignee — to a Google Sheet row, giving you a running record you can use for sprint retrospectives or client reporting.
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