

How to Send Todoist Deadline Alerts to Slack with Make
Runs on a schedule, checks Todoist for tasks due today or overdue, and posts a formatted Slack alert to the right channel before deadlines are missed.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams who manage project milestones in Todoist and need the whole team notified in Slack before deadlines slip.
Not ideal for
If you need alerts within seconds of a task being created, use Make with a Todoist webhook trigger instead of this scheduled approach.
Sync type
scheduledUse case type
notificationReal-World Example
A 12-person product agency tracks client deliverables in Todoist with due dates on every task. Before this automation, PMs checked Todoist manually each morning and still missed same-day deadlines until late afternoon. Now Make runs every morning at 8 AM, pulls every task due that day or overdue, and posts a bulleted list into the project's dedicated Slack channel — the team sees exactly what's at risk before standup starts.
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Content (Name) | content | |
| Due Date | due.date | |
| Task URL | url | |
5 optional fields▸ show
| Project ID | project_id |
| Priority | priority |
| Assignee ID | assignee_id |
| Description / Notes | description |
| Label Names | labels |
Step-by-Step Setup
make.com > Scenarios > Create a new scenario
Create a new Make scenario
Log into Make at make.com and click the blue 'Create a new scenario' button in the top-right corner of the Scenarios dashboard. You'll land on a blank canvas with a large '+' icon in the center. This is where you'll add your first module. Give the scenario a name immediately — click the default name at the top-left and type something like 'Todoist Deadline Alerts → Slack'. Naming it now prevents confusion when you have multiple scenarios later.
- 1Click 'Create a new scenario' in the top-right
- 2Click the scenario name at the top-left and rename it to 'Todoist Deadline Alerts → Slack'
- 3Click the large '+' icon in the center of the canvas to add the first module
Canvas > + Module > Todoist > Search Tasks
Add the Todoist 'Search Tasks' module
In the module search dialog, type 'Todoist' and select the Todoist app. From the list of available actions, choose 'Search Tasks' — this is a scheduled pull, not a real-time event trigger, which is what you want here. You'll be prompted to connect your Todoist account if you haven't already. Click 'Add' next to the connection field and authorize Make via OAuth. Make will redirect you to Todoist's login page and back.
- 1Type 'Todoist' in the module search bar
- 2Click the Todoist app icon
- 3Select 'Search Tasks' from the action list
- 4Click 'Add' next to Connection and authorize via Todoist OAuth
- 5Click 'Save' after authorization redirects you back to Make
Canvas > Todoist Module > Edit > Filter field
Configure the task filter for due and overdue tasks
Inside the Search Tasks module configuration panel, you need to set the filter so only tasks due today or earlier are returned. In the 'Filter' field, type 'overdue' — Todoist's API accepts this as a natural-language filter that returns all tasks with a due date of today or any past date. Leave 'Project ID' blank to search across all projects, or paste a specific project ID if you want to scope alerts to one project. Set 'Limit' to 50 to avoid hitting the module's default cap of 2 records.
- 1Click on the Todoist Search Tasks module to open its settings
- 2In the 'Filter' field, type: overdue
- 3Leave Project ID blank (or paste your project ID for scoped alerts)
- 4Set the Limit field to 50
- 5Click OK to save the module settings
Canvas > Todoist Module > Right-click > Add Router
Add a Router to split today vs. overdue tasks
Click the small wrench icon on the right edge of the Todoist module and select 'Add a router'. The Router module splits the flow into two paths: one for tasks due exactly today (high priority alert) and one for tasks that are past due (urgent alert). This lets you send differently-worded Slack messages depending on severity. The Router appears as a small diamond shape on the canvas with two outgoing paths.
- 1Right-click the Todoist Search Tasks module on the canvas
- 2Select 'Add a router' from the context menu
- 3Confirm the Router appears as a diamond connected to the Todoist module
- 4Note the two empty outgoing path connectors labeled '1' and '2'
Canvas > Router > Path 1 > Filter icon
Set Router path 1 filter — due today
Click the filter icon (funnel symbol) on Router path 1. In the condition editor, set the left operand to 'Due Date' from the Todoist module output, set the operator to 'Equal to', and set the right operand using the 'now' date formula: formatDate(now; 'YYYY-MM-DD'). This matches only tasks whose due date is today's date. Click OK to save. Label this path 'Due Today' by clicking the path name and typing it — this makes the canvas readable.
- 1Click the funnel (filter) icon on Router path 1
- 2Set Condition A left operand to: {{1.due.date}} (Todoist Due Date field)
- 3Set operator to: Equal to
- 4Set right operand to: {{formatDate(now; 'YYYY-MM-DD')}}
- 5Click OK and rename the path 'Due Today'
Canvas > Router > Path 2 > Filter icon
Set Router path 2 filter — overdue tasks
Click the filter icon on Router path 2. Set the left operand to the Todoist Due Date field, set the operator to 'Less than', and the right operand to {{formatDate(now; 'YYYY-MM-DD')}}. This catches everything with a due date before today — meaning already overdue. Label this path 'Overdue'. Any task not matched by path 1 but matched here flows into a separate Slack message with more urgent language.
- 1Click the funnel icon on Router path 2
- 2Set left operand to: {{1.due.date}}
- 3Set operator to: Less than
- 4Set right operand to: {{formatDate(now; 'YYYY-MM-DD')}}
- 5Click OK and rename the path 'Overdue'
Canvas > Router Path 1 > + Module > Slack > Create a Message
Add Slack 'Create a Message' module to path 1 (due today)
Click the '+' at the end of Router path 1 and search for Slack. Select 'Create a Message'. Connect your Slack account via OAuth — Make will ask for permission to post messages. In the Channel field, type your channel name (e.g. #project-deadlines) or paste the channel ID for reliability. In the Text field, build your message using Todoist fields: start with '📅 *Due Today:* ' then map {{1.content}} for the task name, and on the next line map {{1.due.date}} and {{1.url}} for context.
- 1Click '+' at the end of Router path 1
- 2Search for 'Slack' and select 'Create a Message'
- 3Click 'Add' next to Connection and authorize Slack via OAuth
- 4In Channel, enter your channel name or ID (e.g. #project-deadlines)
- 5In Text, paste: 📅 *Due Today:* {{1.content}} — Due: {{1.due.date}} | {{1.url}}
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Canvas > Router Path 2 > + Module > Slack > Create a Message
Add Slack 'Create a Message' module to path 2 (overdue)
Repeat the same Slack module addition on Router path 2, but change the message text to reflect urgency. Start the message with '🚨 *OVERDUE:* ' so the team immediately knows this task is past due. Map the same fields: {{1.content}}, {{1.due.date}}, and {{1.url}}. You can optionally add {{1.assignee_id}} if you want to tag the responsible person — but note this outputs a numeric ID, not a username, so you'd need a lookup step to make it readable.
- 1Click '+' at the end of Router path 2
- 2Select Slack > Create a Message (reuse the existing connection)
- 3In Channel, use the same channel as path 1 or a different escalation channel
- 4In Text, paste: 🚨 *OVERDUE:* {{1.content}} — Was due: {{1.due.date}} | {{1.url}}
- 5Click OK to save
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Canvas > Todoist Module > Clock icon > Scheduling
Set the scenario schedule
Click the clock icon on the Todoist module (the first module in the scenario) to set the run schedule. Select 'At regular intervals' or 'At a specific time'. For most teams, 'At a specific time' with a daily run at 8:00 AM works best — this posts the alert before standup. If your team works across time zones, choose 8:00 AM in the timezone where most of the team starts their day, then set that timezone in the dropdown. Make runs scenarios in UTC by default unless you override it.
- 1Click the clock icon on the Todoist Search Tasks module
- 2Select 'At a specific time'
- 3Set time to 08:00 AM
- 4Set the correct timezone (e.g. America/New_York)
- 5Set repeat to 'Every day' and click Save
Canvas > Run once button (bottom toolbar)
Test the scenario with real data
Click 'Run once' at the bottom of the canvas. Make will execute one pass of the scenario immediately, regardless of the schedule. Go to your Todoist account and ensure at least one task is due today or overdue before running. Watch the canvas — each module turns green when it executes successfully, and you can click any module to inspect the exact data it received and sent. Check your Slack channel for the test message within 30 seconds.
- 1Confirm at least one Todoist task is due today or overdue
- 2Click 'Run once' in the bottom toolbar
- 3Watch modules turn green (or red on error)
- 4Click the Todoist module bubble to inspect what tasks were returned
- 5Check your Slack channel for the test alert message
Canvas > Toggle switch (bottom-left) > ON
Activate the scenario
Once the test passes, flip the toggle in the bottom-left from 'OFF' to 'ON'. The scenario is now live and will run on the schedule you set. Make shows the next scheduled run time in the scenario list on the dashboard. You can monitor execution history under 'History' — each run logs which modules fired, how many records processed, and any errors. Check the history after the first scheduled run the next morning to confirm real tasks are being caught.
- 1Click the ON/OFF toggle in the bottom-left of the canvas
- 2Confirm it switches to 'ON' (turns blue)
- 3Click 'Save' to lock in all changes
- 4Navigate to Scenarios dashboard and confirm 'Next run' shows tomorrow at 08:00
Paste this into a Make 'Set Variable' module placed between the Router and each Slack module. It builds a urgency label and a clean due date string, then formats the final Slack message text so you don't have to manually concatenate fields inside the Slack module's Text field.
JavaScript — Custom Function// Make Custom Function — paste into a Tools > Set Variable module▸ Show code
// Make Custom Function — paste into a Tools > Set Variable module // Place this between the Router path and the Slack module on each path // Variable 1: urgencyLabel
... expand to see full code
// Make Custom Function — paste into a Tools > Set Variable module
// Place this between the Router path and the Slack module on each path
// Variable 1: urgencyLabel
// Set to one of two values depending on which Router path is executing
if(
{{1.due.date}} = formatDate(now; 'YYYY-MM-DD');
'📅 *Due Today*';
'🚨 *OVERDUE*'
)
// Variable 2: formattedDueDate
// Converts raw date string to human-readable format for Slack display
formatDate(
{{1.due.date}};
'dddd, MMMM D YYYY'
)
// Variable 3: priorityLabel
// Maps Todoist numeric priority to a readable label
if(
{{1.priority}} = 1; '🔴 Urgent';
if(
{{1.priority}} = 2; '🟠 High';
if(
{{1.priority}} = 3; '🟡 Medium';
'⚪ Normal'
)
)
)
// Variable 4: slackMessageText
// Final assembled message — reference {{slackMessageText}} in the Slack module Text field
concatenate(
{{urgencyLabel}}; ': '; {{1.content}};
' — '; {{formattedDueDate}};
' | Priority: '; {{priorityLabel}};
' | '; {{1.url}}
)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 you want conditional logic controlling which tasks go to which Slack channels without writing a line of code. The Router module handles the 'due today vs. overdue' split visually — Zapier would require two separate Zaps to replicate this, doubling your task count and making changes harder to manage. Make is also the right call if your team is checking tasks across multiple Todoist projects and needs different Slack channels per project, since you can chain routers and set filter conditions on project ID in a single scenario. The one case where you'd skip Make: if you need alerts within seconds of a task being created or updated, Make's minimum 1-minute polling schedule (paid plan) may not be fast enough — n8n with a cron trigger and a direct Todoist API call would give you the same result with more control over timing.
The math on operations is simple. Each scenario run uses roughly 3 operations per task processed: one for the Todoist Search Tasks module, one for the Router evaluation, and one for the Slack Create a Message module. If you have an average of 8 tasks due or overdue per day and run once daily, that's 24 operations/day — about 720/month, comfortably inside Make's free tier of 1,000. If you run every 15 minutes instead, that's 96 runs/day × 24 operations = 2,304 operations/day, which blows past the free tier in less than 24 hours. The Core plan at $9/month gives you 10,000 operations and is the right fit for any team running this more than once daily.
Zapier can do this workflow in about 8 minutes of setup using its 'Schedule' trigger + Todoist 'Find Tasks' search + Slack 'Send Channel Message' action, but you'd need two separate Zaps for the due-today vs. overdue split, and Zapier's free tier caps you at 100 tasks/month — one busy week of deadline alerts will hit that ceiling. n8n handles the same conditional routing with an IF node and gives you full JavaScript access to build any message format you want, but you're self-hosting or paying $20/month on cloud and the setup takes 3x as long. Power Automate is a non-starter here unless your team is already in the Microsoft 365 ecosystem — Todoist's connector in Power Automate is community-built and has had reliability issues with the filter query parameter. Pipedream gives you the most flexibility with a Node.js step that can call the Todoist API directly with any filter Todoist supports, but the free tier limits to 100 workflow invocations/day. Make hits the best balance: visual routing, a real free tier for daily runs, and no code required.
Three things you'll run into after the scenario is live. First, Todoist returns tasks from shared projects only if the authorized account is a member — if a colleague owns a project and shares it with you, the API will return those tasks, but if they revoke access, the scenario silently returns fewer results with no error. Check membership quarterly. Second, Todoist's 'due.date' field returns a plain date string ('2024-03-15') for all-day tasks but a full ISO datetime ('2024-03-15T14:00:00Z') for time-specific tasks — if your team mixes both, your Router filter on formatDate comparison will behave inconsistently until you normalize both sides with formatDate(). Third, Slack will not deliver messages to archived channels and returns no error — the Make run logs as successful, the Slack module shows a message ID, and the channel is silent. If alerts stop appearing, the first thing to check is whether someone archived the target channel.
Ideas for what to build next
- →Add a Daily Digest Instead of Per-Task Messages — Instead of one Slack message per task, use Make's Array Aggregator module to collect all due/overdue tasks from the run and post a single bulleted Slack message. This cuts Slack noise significantly when 10+ tasks are due on the same day.
- →Escalate to a Manager Channel for High-Priority Overdue Tasks — Add a third Router path that filters for Todoist priority = 1 (Urgent) and posts to a separate #escalations Slack channel. This lets leadership see critical deadline misses without having to monitor every project channel.
- →Mark Notified Tasks in Todoist with a Label — After the Slack module fires, add a Todoist 'Update a Task' module to apply a 'notified' label to each task. This gives you an audit trail inside Todoist and can be used in future filter logic to suppress repeat notifications.
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