Beginner~8 min setupCommunication & Project ManagementVerified April 2026
Slack logo
Todoist logo

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-time

Use case type

notification

Real-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.

/mo
505005K50K

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.

Todoist account with at least one project containing tasks — free tier works, but you need tasks that can be completed to test the trigger
Todoist account must have OAuth access enabled — API token found under Todoist Settings > Integrations > Developer
Slack account with permission to add apps to your workspace — check with your Slack admin if you're on a paid plan with restricted app installs
Permission to post in the target Slack channel — you must be a member of private channels; public channels work without special access
Zapier account — free tier supports this workflow but caps at 100 tasks/month; at 5 task completions per weekday, you'll hit the limit in about 4 weeks

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Log into zapier.com
  2. 2Click 'Create Zap' in the left sidebar
  3. 3Click the name field at the top and type 'Todoist Completions → Slack'
  4. 4Click the Trigger step in the left panel to begin setup
What you should see: You should see the Zap editor with a blank Trigger step selected and the right panel prompting you to choose an app.
Common mistake — If you see the legacy Zap editor (gray background, single column), click 'Try the new editor' in the top banner. The steps below reference the current editor only.
2

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.

  1. 1Click the 'App' search field in the Trigger panel
  2. 2Type 'Todoist' and select the result with the red checkmark icon
  3. 3Click the 'Event' dropdown
  4. 4Select 'Completed Task'
  5. 5Click 'Continue'
What you should see: You should see 'Completed Task' confirmed as the event, and Zapier will prompt you to connect your Todoist account.
Common mistake — Do not select 'New Task' by mistake — that fires when a task is created, not completed. The two events look similar in the dropdown.
Zapier
+
click +
search apps
Slack
SL
Slack
Set Todoist as the trigger app
Slack
SL
module added
3

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.

  1. 1Click 'Sign in to Todoist'
  2. 2Log in with your Todoist credentials in the popup
  3. 3Click 'Allow' to grant Zapier access
  4. 4Confirm your account email appears in the Account field
  5. 5Click 'Continue'
What you should see: Your Todoist account email should appear with a green checkmark next to the Account field.
Common mistake — Zapier requests full Todoist access, including read and write. If your company has an SSO policy on Todoist, you may need an admin to pre-authorize the Zapier OAuth app before this step works.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
4

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.

  1. 1In the 'Project' dropdown, select 'All Projects' or choose a specific project name
  2. 2Click 'Continue'
What you should see: The setup panel should show your project selection confirmed, and a 'Test trigger' button becomes active.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Todoist
TO
notified
5

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.

  1. 1Click 'Test trigger'
  2. 2Review the sample data fields returned
  3. 3Confirm 'Content' shows the task name and 'Project' shows the correct project
  4. 4Click 'Continue with selected record'
What you should see: You should see a green 'Test was successful' banner and a list of data fields pulled from a real completed Todoist task.
Common mistake — Zapier sometimes pulls an old completed task from weeks ago as sample data. The data is fine for field mapping purposes, but confirm the project field matches your expectations before proceeding.
Zapier
▶ Turn on & test
executed
Slack
Todoist
Todoist
🔔 notification
received
6

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.

  1. 1Click the '+' icon below the Trigger step
  2. 2Type 'Slack' in the app search field
  3. 3Select Slack from the results
  4. 4Click the 'Event' dropdown and select 'Send Channel Message'
  5. 5Click 'Continue'
What you should see: You should see 'Send Channel Message' confirmed as the action event, and Zapier prompts you to connect a Slack workspace.
7

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.

  1. 1Click 'Sign in to Slack'
  2. 2Select the correct workspace from the dropdown in the popup
  3. 3Click 'Allow' to authorize Zapier
  4. 4Confirm the workspace name appears in the Account field
  5. 5Click 'Continue'
What you should see: Your Slack workspace name should appear with a green checkmark next to the Account field.
Common mistake — If your Slack workspace has restricted app installations (common in Enterprise Grid plans), an admin must approve the Zapier app in Slack's App Management settings before this authorization will complete.
8

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.

  1. 1Click the 'Channel' field and search for your target channel (e.g., #project-wins)
  2. 2Click the 'Message Text' field
  3. 3Type '✅ Task completed: ' then click the data pill icon
  4. 4Select 'Content' from the Todoist fields list
  5. 5Continue building: ' | Project: ' then insert 'Project Name'
  6. 6Add ' | Completed by: ' then insert 'Assignee Name' or 'Author Name'
What you should see: The Message Text field should show a mix of static text and purple data pills referencing Todoist fields. It will look like: '✅ Task completed: [Content] | Project: [Project Name]'
Common mistake — The 'Assignee Name' field is only populated if the task was explicitly assigned to someone in Todoist. If your team uses unassigned tasks, that field returns empty — use 'Author Name' instead to capture who created or completed the task.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
9

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.

  1. 1Set 'Bot Name' to 'TaskBot' or your preferred name
  2. 2Set 'Bot Icon' to ':white_check_mark:'
  3. 3Confirm 'Send as Bot' is set to 'Yes'
  4. 4Click 'Continue'
What you should see: The setup panel should show your bot name and icon confirmed. These settings will appear on the Slack message instead of your personal profile photo and name.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
10

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.

  1. 1Click 'Test action'
  2. 2Open Slack and navigate to your target channel
  3. 3Read the test message to confirm all fields display correctly
  4. 4Return to Step 8 if any fields are blank or wrong
  5. 5Click 'Continue' once the message looks correct
What you should see: You should see a real message in your Slack channel from 'TaskBot' (or your chosen name) showing the task name, project, and assignee from the Todoist sample.
Common mistake — The test message is a real Slack post, not a preview. Delete it from Slack after confirming it looks right so stakeholders don't see test data in the channel.
11

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.

  1. 1Click 'Publish' in the top right corner
  2. 2Click 'Publish & Turn On' in the confirmation dialog
  3. 3Complete a task in Todoist to trigger the first real run
  4. 4Check #your-channel in Slack within 90 seconds
  5. 5Navigate to zapier.com > Zap History to confirm the run shows 'Success'
What you should see: Zap History should show a green 'Success' status for the first run, and your Slack channel should display a clean, formatted task completion message.

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

VerdictWhy Zapier for this workflow

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.

Cost

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.

Tradeoffs

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 postsUse 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 projectAdd 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 reportingAdd 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

Was this guide helpful?
Slack + Todoist overviewZapier profile →