

How to Broadcast Todoist Task Completions in Slack with Zapier
When a task is marked complete in Todoist, Zapier instantly posts a message to a Slack channel announcing the win, who completed it, and which project it belonged to.
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 (5–30 people) who want visible progress on shared projects without asking for status updates in standup
Not ideal for
Teams completing 200+ tasks per day where Slack noise becomes a bigger problem than the lack of visibility
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person product agency uses this to post completed Todoist tasks into a #project-wins Slack channel shared with their client. Before this, the account manager sent a manual weekly update email summarizing progress — now the client sees completions within 90 seconds of a task being checked off. The agency cut weekly reporting time by about 2 hours.
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 Name | ||
6 optional fields▸ show
| Completed At | |
| Assignee Name | |
| Author Name | |
| Task URL | |
| Priority | |
| Due Date |
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 left sidebar. The Zap editor opens in a two-column layout — the left panel shows your step list, and the right panel shows configuration for the selected step. You'll build this Zap in order: trigger first, then action. Give your Zap a name at the top — something like 'Todoist Completions → Slack' keeps it easy to find later.
- 1Log into zapier.com
- 2Click 'Create Zap' in the left sidebar
- 3Click the name field at the top and type 'Todoist Completions → Slack'
- 4Click the Trigger step in the left panel to begin setup
Zap Editor > Trigger > App & Event
Set Todoist as the trigger app
In the right panel under 'Trigger', click the 'App' search box and type 'Todoist'. Select Todoist from the results — you'll see the official app with the red icon. Next, click the 'Event' dropdown and select 'Completed Task'. This is an instant trigger backed by Todoist's webhook system, so Zapier won't poll on a schedule — it fires within seconds of a task being checked off.
- 1Click the 'App' search field in the Trigger panel
- 2Type 'Todoist' and select the result with the red checkmark icon
- 3Click the 'Event' dropdown
- 4Select 'Completed Task'
- 5Click 'Continue'
Zap Editor > Trigger > Account
Connect your Todoist account
Click 'Sign in to Todoist'. A popup opens asking you to authorize Zapier. Log in with the Todoist account that owns or has access to the projects you want to monitor. After authorizing, the popup closes and Zapier shows your account email in the 'Account' field. If you manage multiple Todoist workspaces, confirm the correct account is selected before continuing.
- 1Click 'Sign in to Todoist'
- 2Log in with your Todoist credentials in the popup
- 3Click 'Allow' to grant Zapier access
- 4Confirm your account email appears in the Account field
- 5Click 'Continue'
Zap Editor > Trigger > Set up trigger
Configure the Todoist trigger filter
After connecting, Zapier shows a 'Project' dropdown under Trigger configuration. You can leave this set to 'All Projects' to catch every completed task across your workspace, or select a specific project to narrow the broadcast to one team's work. If you pick a specific project, only tasks completed inside that project will trigger the Zap. Choose 'All Projects' for now — you can add a Zapier Filter step later if you need to exclude certain projects.
- 1In the 'Project' dropdown, select 'All Projects' or choose a specific project name
- 2Click 'Continue'
Zap Editor > Trigger > Test trigger
Test the Todoist trigger
Click 'Test trigger'. Zapier pulls in a recently completed task from your Todoist account to use as sample data. If no tasks have been completed recently, you'll need to open Todoist, check off any task, then return to Zapier and click 'Test trigger' again. Look at the returned sample — you should see fields like task content, project name, completed date, and the assignee. Verify the data looks real and comes from the right project before moving on.
- 1Click 'Test trigger'
- 2Review the sample data fields returned
- 3Confirm 'Content' shows the task name and 'Project' shows the correct project
- 4Click 'Continue with selected record'
Zap Editor > Action > App & Event
Add Slack as the action app
Click the '+' icon below the trigger step to add an action. In the right panel, search for 'Slack' and select it. For the event, select 'Send Channel Message' — this posts a public message to a channel, which is what stakeholders will see. Do not select 'Send Direct Message' unless you want individual DMs instead of a shared channel broadcast.
- 1Click the '+' icon below the Trigger step
- 2Type 'Slack' in the app search field
- 3Select Slack from the results
- 4Click the 'Event' dropdown and select 'Send Channel Message'
- 5Click 'Continue'
Zap Editor > Action > Account
Connect your Slack workspace
Click 'Sign in to Slack'. A popup opens and shows a list of workspaces your Slack account belongs to. Select the correct workspace from the dropdown, then click 'Allow' to grant Zapier permission to post messages. Once connected, the popup closes and your workspace name appears in the Account field. If the Zap needs to post to a workspace where you're not an admin, you still don't need admin rights — posting to channels only requires standard member access.
- 1Click 'Sign in to Slack'
- 2Select the correct workspace from the dropdown in the popup
- 3Click 'Allow' to authorize Zapier
- 4Confirm the workspace name appears in the Account field
- 5Click 'Continue'
Zap Editor > Action > Set up action
Configure the Slack message
This is where you build the actual message. In the 'Channel' field, select the Slack channel where completions should post — type '#' to filter by channel name or search for it. In the 'Message Text' field, construct your message using Todoist data fields from the dropdown. Click inside the Message Text field, then click the purple data pill icon to insert dynamic values. A well-structured message covers: what was completed, which project it belongs to, and who completed it. See the field mapping section below for the exact fields to use.
- 1Click the 'Channel' field and search for your target channel (e.g., #project-wins)
- 2Click the 'Message Text' field
- 3Type '✅ Task completed: ' then click the data pill icon
- 4Select 'Content' from the Todoist fields list
- 5Continue building: ' | Project: ' then insert 'Project Name'
- 6Add ' | Completed by: ' then insert 'Assignee Name' or 'Author Name'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action > Set up action > Bot settings
Set optional Slack message formatting
Scroll down in the action setup to find additional fields. Set 'Bot Name' to something like 'TaskBot' or your company name so it's clear messages are automated. Set 'Bot Icon' to an emoji like ':white_check_mark:' for visual consistency. Under 'Send as Bot' confirm it's set to 'Yes' — this posts as an app rather than your personal account, which keeps the message format clean and avoids confusion about who sent it.
- 1Set 'Bot Name' to 'TaskBot' or your preferred name
- 2Set 'Bot Icon' to ':white_check_mark:'
- 3Confirm 'Send as Bot' is set to 'Yes'
- 4Click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action > Test action
Test the Slack action
Click 'Test action'. Zapier uses the sample Todoist data from Step 5 to send a real test message to your selected Slack channel right now. Open Slack and navigate to the channel — you should see the test message appear within 30 seconds. Read the message carefully: check that the task name, project, and assignee all display correctly. If any field is blank or shows an internal ID instead of readable text, return to the Message Text field in Step 8 and correct the data pill mapping.
- 1Click 'Test action'
- 2Open Slack and navigate to your target channel
- 3Read the test message to confirm all fields display correctly
- 4Return to Step 8 if any fields are blank or wrong
- 5Click 'Continue' once the message looks correct
Zap Editor > Publish > Zap History
Turn on the Zap
Click 'Publish' in the top right of the Zap editor. Zapier shows a confirmation dialog — click 'Publish & Turn On'. The Zap is now live. Go to Todoist and complete any task to trigger a real run. Return to Slack within 90 seconds and you should see the announcement in your channel. Check the Zap History page (left sidebar > Zap History) after the first real run to confirm it shows 'Success' and the correct data was passed through.
- 1Click 'Publish' in the top right corner
- 2Click 'Publish & Turn On' in the confirmation dialog
- 3Complete a task in Todoist to trigger the first real run
- 4Check #your-channel in Slack within 90 seconds
- 5Navigate to zapier.com > Zap History to confirm the run shows 'Success'
This Code by Zapier step runs between the Todoist trigger and the Slack action. Paste it into a 'Code by Zapier' step (choose 'Run Javascript'), add it as Step 2 in your Zap, and map its output fields into the Slack message instead of the raw Todoist fields. It formats the timestamp into a readable date and maps Todoist priority numbers to emoji flags so your Slack message is immediately readable without any manual lookup.
JavaScript — Code Step// Code by Zapier — paste into a 'Run Javascript' step between Todoist trigger and Slack action▸ Show code
// Code by Zapier — paste into a 'Run Javascript' step between Todoist trigger and Slack action // Input data from Todoist trigger: const content = inputData.content || 'Unnamed task';
... expand to see full code
// Code by Zapier — paste into a 'Run Javascript' step between Todoist trigger and Slack action
// Input data from Todoist trigger:
const content = inputData.content || 'Unnamed task';
const projectName = inputData.project_name || 'No project';
const assigneeName = inputData.assignee_name || inputData.author_name || 'Unknown';
const completedAt = inputData.completed_at || '';
const priority = inputData.priority || '4';
const taskUrl = inputData.url || '';
// Map Todoist priority (1=urgent, 4=none) to emoji
const priorityMap = { '1': '🔴', '2': '🟠', '3': '🔵', '4': '⚪' };
const priorityEmoji = priorityMap[priority] || '⚪';
// Format timestamp to human-readable date
let formattedDate = '';
if (completedAt) {
const d = new Date(completedAt);
formattedDate = d.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' });
}
// Build the Slack message string
const slackMessage = [
`✅ *${content}*`,
`📁 Project: ${projectName}`,
`👤 Completed by: ${assigneeName}`,
formattedDate ? `🕐 ${formattedDate}` : null,
priorityEmoji !== '⚪' ? `${priorityEmoji} Priority task` : null,
taskUrl ? `🔗 ${taskUrl}` : null
].filter(Boolean).join('\n');
output = [
{
slackMessage: slackMessage,
priorityEmoji: priorityEmoji,
formattedDate: formattedDate,
assigneeDisplay: assigneeName
}
];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 wants setup done in under 15 minutes with zero code. The guided builder makes the Todoist trigger and Slack action obvious — there's no JSON to write, no webhook URL to manually register, and no server to run. If you're at a company where the person setting this up is an operations manager or project coordinator rather than a developer, Zapier is the right call. The one scenario where you'd skip Zapier: if you need to fan out completions to multiple Slack channels based on project rules, or if you want a daily digest instead of per-task posts — both of those get messy in Zapier and are cleaner in Make.
The cost math is straightforward. Each completed task = 1 Zapier task. If your team completes 10 tasks per day across 22 working days, that's 220 tasks per month. Zapier's free tier caps at 100 tasks/month, so you'd need the Starter plan at $19.99/month. Make's free tier gives you 1,000 operations/month, which covers the same volume for $0. If your team completes fewer than 5 tasks per day, Zapier's free tier holds. Above that, Make saves you $20/month for an equivalent setup.
Make handles conditional routing better — you can build a single scenario that checks the project name and posts to different Slack channels without buying a higher Zapier plan (Paths in Zapier require the Professional plan at $49/month). n8n gives you more control over message formatting with JavaScript nodes and costs nothing if self-hosted, but it requires someone to maintain a server. Power Automate is the right pick if your team is already in Microsoft 365 and uses Microsoft To Do — the Todoist connector in Power Automate is functional but less polished than Zapier's. Pipedream is worth considering if you want to add logic like fetching the Todoist task's comments and including them in the Slack message — that's a multi-API call scenario where Pipedream's code steps shine. Zapier is still the right call here when the person running this workflow is not a developer and the use case is exactly one trigger and one action with no branching.
Three things you'll hit after setup. First: the Todoist webhook occasionally misses a task completion if the Todoist app is in an offline/sync state on the completing user's device — the task gets checked off locally and the webhook fires late, sometimes 5–10 minutes after the actual check-off. This is a Todoist API behavior, not a Zapier problem. Second: Slack's API rate limit is 1 message per second per channel. If your team checks off several tasks simultaneously (end of a sprint), the Zap runs will queue and succeed, but messages may appear in Slack 5–30 seconds apart rather than instantly. Third: the Todoist 'Completed Task' event doesn't return recurring task recurrence data — if a daily standup task is completed, the Slack message has no way to indicate it's a recurring task versus a one-time deliverable, which can confuse stakeholders seeing what looks like the same task completed every day.
Ideas for what to build next
- →Add a daily digest instead of per-task posts — Use a Schedule by Zapier trigger (daily at 5 PM) combined with Todoist's 'Get Completed Tasks' search action to batch all the day's completions into one Slack message — much less noise for active teams.
- →Route completions to different Slack channels by project — Add a Zapier Paths step after the trigger and create one path per Todoist project, each posting to a different Slack channel — so engineering wins go to #eng-wins and marketing wins go to #marketing-wins.
- →Log completions to a Google Sheet for reporting — Add a second action step in the same Zap that appends the completed task data to a Google Sheet row — gives you a running log that's easy to use for weekly reports or client billing without any extra Zaps.
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