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

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

scheduled

Use case type

notification

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

/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

Skip the setup

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.

Todoist account with at least one active project and permission to read completed tasks
Slack workspace where you have permission to post messages to the target channel
Make account — free tier works but limits polling to every 15 minutes and 1,000 operations/month
Todoist OAuth credentials ready — Make handles this via its built-in connection flow, no manual API key copy-paste needed

Optional

Slack channel ID for any private channels you want to post to (found under channel Settings > About in Slack)

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Namecontent
Project Nameproject_id
Completed Atcompleted_at
5 optional fields▸ show
Assignee Nameresponsible_uid
Task Descriptiondescription
Task URLurl
Prioritypriority
Due Datedue

Step-by-Step Setup

1

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.

  1. 1Click the blue 'Create a new scenario' button in the top right
  2. 2Click the empty circle in the center of the canvas
  3. 3Type 'Todoist' in the search field of the app drawer
  4. 4Click 'Todoist' in the results list
What you should see: The Todoist module list appears on the right side, showing available triggers and actions.
Common mistake — Make occasionally shows a 'Legacy' Todoist module alongside the current one. Pick the one labeled 'Todoist' without any legacy tag — the legacy version lacks the completed task filter.
2

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.

  1. 1Click 'Watch Tasks' from the Todoist trigger list
  2. 2Click 'Add' to create a new Todoist connection and authenticate with your account
  3. 3Set 'Filter' to 'Completed'
  4. 4Set 'Project' to your target project or leave as 'All Projects'
  5. 5Set 'Limit' to 10 (this caps how many completions are processed per polling run)
What you should see: The trigger module on the canvas shows 'Watch Tasks' with a clock icon, and the configuration panel shows your selected project and the Completed filter.
Common mistake — Todoist's API returns completed tasks only from projects where you have admin or member access. If you share tasks from a project owned by someone else, those completions will not appear unless they add your Todoist account as a member.
Make
+
click +
search apps
Slack
SL
Slack
Configure the Todoist 'Watch…
Slack
SL
module added
3

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.

  1. 1Click the small clock icon in the bottom-left of the Todoist trigger module
  2. 2Select 'At regular intervals' from the scheduling options
  3. 3Set the interval value to 15 and the unit to 'minutes'
  4. 4Click 'OK' to confirm
What you should see: The clock icon on the trigger module now shows a number indicating the interval, and the scheduling drawer closes.
Common mistake — Make's free plan locks polling to a minimum of 15 minutes. If you need sub-5-minute delivery, you need at least the Core plan at $9/month. There is no webhook option for Todoist task completions — polling is the only architecture available here.
4

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.

  1. 1Hover over the arrow line between the Todoist trigger and the next module
  2. 2Click the wrench icon that appears on that arrow
  3. 3Click 'Set up a filter'
  4. 4Set Label to 'Only completed tasks'
  5. 5Set Condition: field = is_completed, operator = 'Equal to', value = true
  6. 6Click 'OK'
What you should see: A small funnel icon appears on the arrow between modules, and hovering over it shows your filter condition.
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

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')}}.

  1. 1Click the '+' circle to the right of the Todoist trigger module
  2. 2Search for 'Text Aggregator' and select it
  3. 3In the 'Source Module' field, select your Todoist trigger
  4. 4In the 'Text' field, type your message template using the variable picker to insert Todoist fields
  5. 5Set Row separator to 'New line'
What you should see: The canvas shows a Text Aggregator module between Todoist and the next step, and the preview in the panel shows your formatted template string.
Common mistake — The Text Aggregator collapses multiple records into one text block — useful if several tasks complete before the poll fires. If you want one Slack message per task, skip this module and map the Todoist fields directly to the Slack module instead.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
6

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.

  1. 1Click the '+' circle to the right of the previous module
  2. 2Type 'Slack' in the search drawer
  3. 3Select 'Slack' from the app list
  4. 4Click 'Create a Message' from the action list
  5. 5Click 'Add' next to the Connection field to start Slack OAuth
  6. 6Authorize Make in the Slack popup and return to Make
What you should see: The Slack module appears on the canvas and the Connection field shows your Slack workspace name in green.
Common mistake — Make requires you to authorize as a user, not a bot token, unless you configure a custom Slack app. Messages will post under your personal name by default. If you want them to appear as a bot (e.g., 'Task Bot'), you need to create a Slack app, generate a bot token, and use the 'Other' connection type in Make — this takes an extra 10 minutes.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
7

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.

  1. 1Click inside the 'Channel ID' field and type or paste your target Slack channel
  2. 2Click inside the 'Text' field and map the output from the Text Aggregator using the variable picker
  3. 3Set 'As User' to false
  4. 4Set 'Username' to 'Task Bot'
  5. 5Set 'Icon Emoji' to ':white_check_mark:'
What you should see: The Slack module configuration panel shows your channel, a mapped text field, and the bot username. A preview of the text appears if you used static text.
Common mistake — Slack's channel ID and channel name are different. If you type '#general', Make resolves it — but for private channels, you must use the channel ID (found under channel settings in Slack > About > Channel ID). Using a name for a private channel causes a 'channel_not_found' error at runtime.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
Slack fields
text
user
channel
ts
thread_ts
available as variables:
1.props.text
1.props.user
1.props.channel
1.props.ts
1.props.thread_ts
8

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.

  1. 1Complete a test task in Todoist before running
  2. 2Click the 'Run once' button in the bottom-left of the canvas
  3. 3Watch the green operation bubbles appear on each module
  4. 4Click the bubble on the Slack module to inspect the output payload
  5. 5Check your Slack channel to confirm the message appeared
What you should see: A green bubble appears above the Slack module showing '1 bundle processed', and the formatted task completion message appears in your target Slack channel.
Common mistake — Make's 'Watch Tasks' trigger uses a cursor internally. The first 'Run once' will try to pull tasks from a default start point — if your test task was completed days ago, it may not appear. Mark a fresh task complete within the last hour for the most reliable test result.
Make
▶ Run once
executed
Slack
Todoist
Todoist
🔔 notification
received
9

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.

  1. 1Click the ON/OFF toggle in the bottom-left toolbar to activate the scenario
  2. 2Click the scenario name at the top of the canvas (defaults to 'New scenario')
  3. 3Type a descriptive name like 'Todoist Completions → Slack #team-wins'
  4. 4Press Enter to save the name
  5. 5Confirm the scenario status shows 'ON' in green
What you should see: The toggle shows green and the scenario name is updated. The scenario list on your dashboard shows this scenario with a green active indicator and the next scheduled run time.

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 Make for this workflow

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.

Cost

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.

Tradeoffs

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 postsReplace 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 channelsAdd 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 reportingAdd 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

Was this guide helpful?
Slack + Todoist overviewMake profile →