

How to Send Todoist Deadline Alerts to Slack with Zapier
Automatically sends a Slack channel message whenever a Todoist task is due today or overdue, keeping teams aware of approaching deadlines without manual checking.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small project teams who manage deadlines in Todoist and need the whole team to see upcoming due dates in a shared Slack channel without checking Todoist manually.
Not ideal for
Teams with hundreds of tasks due daily — the noise will drown out real alerts; use a digest filter in Make instead.
Sync type
scheduledUse case type
notificationReal-World Example
A 10-person product agency uses this to post into #project-deadlines whenever a Todoist task tagged 'milestone' hits its due date. Before the automation, the project lead manually reviewed Todoist every morning and pinged teammates one by one — reminders were missed 2-3 times per sprint. Now the Slack alert fires within 15 minutes of the scheduled check and the whole team sees it without any manual work.
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.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Name | ||
| Due Date | ||
| Task URL | ||
5 optional fields▸ show
| Priority | |
| Project Name | |
| Assignee Name | |
| Description | |
| Label |
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 top-left sidebar. You'll land on the Zap editor, which shows a two-panel view: the step list on the left and the configuration panel on the right. The editor starts with a blank trigger step labeled '1. Trigger'. Every step below builds on this starting point. Name the Zap something clear like 'Todoist Deadline → Slack Alert' using the title field at the top.
- 1Log in at zapier.com
- 2Click 'Create Zap' in the left sidebar
- 3Click the title field at the top and type 'Todoist Deadline → Slack Alert'
- 4Click the '1. Trigger' step to open the trigger configuration panel
Zap Editor > Trigger > App & Event
Set Todoist as the trigger app
In the trigger panel, type 'Todoist' into the app search box and select it from the dropdown. Zapier will then ask you to pick a Trigger Event. Choose 'Task Due' from the list — this is the event that fires when a task's due date matches today's date according to Zapier's scheduled poll. Note that Zapier polls Todoist approximately every 15 minutes on paid plans and every 2 hours on the free tier, so this is not true real-time. Click 'Continue' after selecting the event.
- 1Type 'Todoist' in the app search field
- 2Select 'Todoist' from the results
- 3Click the 'Trigger Event' dropdown
- 4Select 'Task Due'
- 5Click 'Continue'
Zap Editor > Trigger > Account
Connect your Todoist account
Click 'Sign in to Todoist' in the account panel. A popup window will open asking you to authorize Zapier to access your Todoist account. Log in with your Todoist credentials and click 'Allow'. Once authorized, the popup closes and Zapier shows your Todoist account email in the connection dropdown. If you manage multiple Todoist accounts, verify the correct one is selected here before continuing.
- 1Click 'Sign in to Todoist'
- 2Log in with your Todoist email and password in the popup
- 3Click 'Allow' to grant Zapier access
- 4Confirm the correct account email appears in the connection dropdown
- 5Click 'Continue'
Zap Editor > Trigger > Configure
Configure the Todoist trigger filters
In the 'Configure' tab of the trigger step, Zapier will ask you which Todoist project to watch. Open the 'Project' dropdown and select the project containing your deadline-sensitive tasks. If you want to watch all projects, leave this set to 'All Projects', but be aware this will trigger on every task due across your entire Todoist account. You can also optionally filter by label — if you tag milestone tasks with a Todoist label like 'milestone', enter that label name in the Label field to reduce noise.
- 1Click the 'Project' dropdown
- 2Select a specific project or leave as 'All Projects'
- 3Optionally click the 'Label' dropdown and select a label like 'milestone'
- 4Click 'Continue'
Zap Editor > Trigger > Test
Test the Todoist trigger
Click 'Test trigger' to pull a sample task from Todoist. Zapier fetches up to 3 recent tasks matching your configuration and displays them as sample data. Check that the sample task has a 'Due Date' field populated — if it shows as blank or null, the task you're viewing in the sample has no due date set. Pick the sample record that best represents a real milestone task (one with a due date, priority, and project name) before proceeding. You'll use this sample data to map fields in the Slack step.
- 1Click 'Test trigger'
- 2Review the sample task data that appears
- 3Confirm the 'Due Date' field shows a real date value
- 4Click 'Choose' next to the sample record you want to use for mapping
- 5Click 'Continue with selected record'
Zap Editor > + > Filter by Zapier
Add a Filter step to catch overdue tasks
Click the '+' button below the trigger step and select 'Filter' from the built-in tools. This step prevents the Zap from firing on tasks that were already handled in a previous run. Set the filter condition to: 'Due Date' — 'Exists'. This ensures only tasks with an actual due date pass through. For catching overdue tasks (past due date), you'll add a second condition using 'Only continue if' — 'Due Date' — 'Is before' — use Zapier's date formatter with today's value or today. Without this filter, tasks without due dates will occasionally slip through and post confusing blank-date alerts to Slack.
- 1Click the '+' icon below the Trigger step
- 2Select 'Filter' from the list of built-in tools
- 3Set condition 1: field = 'Due Date', rule = 'Exists'
- 4Click '+ AND' to add a second condition
- 5Set condition 2: field = 'Due Date', rule = 'Is before or on', value = 'Today'
- 6Click 'Continue'
Zap Editor > + > Action > App & Event
Add Slack as the action app
Click the '+' button below the Filter step and search for 'Slack' in the action app search box. Select it and choose 'Send Channel Message' as the Action Event — this posts a message to a public or private Slack channel. Click 'Continue'. This action type is the right choice here because deadline alerts should be visible to the whole team in a shared channel, not sent as a direct message to one person.
- 1Click the '+' icon below the Filter step
- 2Type 'Slack' in the app search box
- 3Select 'Slack' from the results
- 4Click the 'Action Event' dropdown and select 'Send Channel Message'
- 5Click 'Continue'
Zap Editor > Action > Account
Connect your Slack workspace
Click 'Sign in to Slack'. A popup will ask you to select your Slack workspace from a dropdown or enter your workspace URL. Select the correct workspace and click 'Allow' to grant Zapier permission to post messages. Zapier requires the 'chat:write' and 'channels:read' OAuth scopes — if your Slack workspace has restrictions on app installations, a Slack admin must approve this before the connection will succeed. Once connected, your workspace name appears in the account dropdown.
- 1Click 'Sign in to Slack'
- 2Select your workspace in the popup
- 3Click 'Allow' to grant the required permissions
- 4Verify your workspace name appears in the account dropdown
- 5Click 'Continue'
Zap Editor > Action > Configure
Configure the Slack message
In the 'Configure' tab, select the target Slack channel from the 'Channel' dropdown — type the channel name to search. Then build the message text using Todoist data fields from the trigger. Click inside the 'Message Text' field and use the data picker (the blue '+' icon) to insert dynamic values. A clear message format works well here: start with an emoji prefix, then the task name, due date, priority, and a link to the task. Set 'Bot Name' to something like 'Deadline Bot' and optionally upload a clock emoji as the bot icon URL.
- 1Click the 'Channel' dropdown and select your target channel (e.g., #project-deadlines)
- 2Click inside the 'Message Text' field
- 3Type '⏰ *Deadline Alert:* ' then click the blue '+' to insert the 'Task Name' field
- 4Press Enter and type '*Due:* ' then insert the 'Due Date' field
- 5Press Enter and type '*Priority:* ' then insert the 'Priority' field
- 6Press Enter and type '*Link:* ' then insert the 'URL' field
- 7Set 'Bot Name' to 'Deadline Bot'
- 8Click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > + (between Filter and Slack) > Formatter by Zapier > Utilities > Lookup Table
Add a Formatter step to translate Priority numbers (optional but recommended)
Go back and insert a Zapier Formatter step between the Filter and the Slack action. Click the '+' between those two steps, choose 'Formatter by Zapier', then select 'Utilities' and the 'Lookup Table' transform. Map the input value to the Todoist 'Priority' field. Then enter four rows in the lookup table: input '1' → output 'P1 (Urgent)', '2' → 'P2 (High)', '3' → 'P3 (Medium)', '4' → 'No Priority'. After saving this step, go back to the Slack message and replace the raw Priority field with the Formatter output field instead.
- 1Click the '+' icon between the Filter step and the Slack step
- 2Search for 'Formatter by Zapier' and select it
- 3Choose 'Utilities' as the transform type
- 4Select 'Lookup Table' from the dropdown
- 5Set 'Lookup Value' to the Todoist 'Priority' field
- 6Add rows: 1 → P1 (Urgent), 2 → P2 (High), 3 → P3 (Medium), 4 → No Priority
- 7Click 'Continue', then test the step
- 8Return to the Slack step and swap the raw Priority field for the Formatter output
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action > Test > Publish
Test and activate the Zap
Click 'Test step' on the Slack action to send a real test message to the target channel. Check your Slack channel immediately — the message should appear within 30 seconds. Verify the task name, due date, priority label, and URL all appear correctly formatted. If everything looks right, click 'Publish Zap' in the top-right corner to turn the Zap on. Zapier will now poll Todoist on its scheduled interval and post to Slack automatically when tasks are due.
- 1Click 'Test step' on the Slack action
- 2Open Slack and check the target channel for the test message
- 3Verify all fields (task name, due date, priority, URL) look correct
- 4Click 'Publish Zap' in the top-right corner
- 5Confirm the Zap status shows 'On' in the Zapier dashboard
This Code by Zapier step runs after the trigger and before the Slack action. It calculates how many days until (or past) the task due date, formats a human-readable urgency label, and builds the full message string so you don't need multiple Formatter steps. Paste this into a 'Code by Zapier' (JavaScript) action step, and set the input data fields to map 'taskName', 'dueDate', 'priority', 'assignee', and 'taskUrl' from the Todoist trigger output.
JavaScript — Code Step// Input data from Zapier: taskName, dueDate, priority, assignee, taskUrl▸ Show code
// Input data from Zapier: taskName, dueDate, priority, assignee, taskUrl const taskName = inputData.taskName || 'Unnamed Task'; const dueDate = inputData.dueDate || '';
... expand to see full code
// Input data from Zapier: taskName, dueDate, priority, assignee, taskUrl
const taskName = inputData.taskName || 'Unnamed Task';
const dueDate = inputData.dueDate || '';
const rawPriority = parseInt(inputData.priority, 10) || 4;
const assignee = inputData.assignee || 'Unassigned';
const taskUrl = inputData.taskUrl || '';
// Priority lookup
const priorityMap = { 1: 'P1 (Urgent)', 2: 'P2 (High)', 3: 'P3 (Medium)', 4: 'No Priority' };
const priorityLabel = priorityMap[rawPriority] || 'Unknown';
// Days until/since due
const today = new Date();
today.setHours(0, 0, 0, 0);
const due = new Date(dueDate);
due.setHours(0, 0, 0, 0);
const diffMs = due - today;
const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24));
let urgencyLabel;
if (diffDays < 0) {
urgencyLabel = `🔴 OVERDUE by ${Math.abs(diffDays)} day(s)`;
} else if (diffDays === 0) {
urgencyLabel = '🟠 Due TODAY';
} else if (diffDays === 1) {
urgencyLabel = '🟡 Due TOMORROW';
} else {
urgencyLabel = `🟢 Due in ${diffDays} days`;
}
const message = [
`⏰ *Deadline Alert*`,
`*Task:* ${taskName}`,
`*Status:* ${urgencyLabel}`,
`*Due Date:* ${dueDate}`,
`*Priority:* ${priorityLabel}`,
`*Assigned to:* ${assignee}`,
`*Link:* ${taskUrl}`
].join('\n');
output = [{ message, urgencyLabel, priorityLabel, diffDays }];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, you need the workflow running within an hour, and you have fewer than 50 tasks hitting their due dates per day. The Zap editor guides you through every step with no code, the Todoist and Slack connections are pre-built and well-maintained, and the setup genuinely takes under 20 minutes. If you need alerts within 2 minutes of a task becoming due, or if you're managing hundreds of tasks across 10+ projects, switch to Make — its Todoist module supports more granular filtering and its scheduling is more configurable.
Real cost math: each Zap run here uses 3–4 tasks (trigger + filter + optional formatter + Slack action). At 20 deadline alerts per month, that's 80 tasks — well inside Zapier's free tier (100 tasks/month). At 100 alerts/month, you're at 400 tasks and need the Starter plan at $19.99/month. Make handles the same 100 alerts for free on its free tier (1,000 operations/month). If you're already paying for another Zapier workflow, this Zap fits inside your existing plan at no extra cost and the economics flip in Zapier's favor.
Make's Watch Tasks trigger is genuinely better here — it supports filtering by due date range (e.g., due within 3 days) natively, without a separate filter module, and its scheduling can be set to exact times like 8:00 AM daily. n8n's Todoist node supports the same polling approach but requires self-hosting or n8n Cloud ($20/month), which is overkill for a two-app notification. Power Automate has no native Todoist connector — you'd need a custom HTTP connector or a third-party premium connector, which adds 30+ minutes of setup time and cost. Pipedream's Todoist source is solid and fires faster than Zapier's polling, but it requires JavaScript familiarity. Zapier wins here not because it's technically superior but because it's the fastest path to a working, reliable alert for a team that doesn't want to maintain code or infrastructure.
Three things you'll discover after you go live: First, Todoist's Priority field returns integers (1 = urgent, 4 = none) — your first Slack message will say 'Priority: 1' and your team will have no idea what that means. Add the Lookup Table Formatter step before you publish. Second, if anyone on your team has Todoist tasks without due dates, those tasks will surface in the trigger's sample data during setup and cause confusing test results — always check that 'Due Date' is populated in your test sample before mapping fields. Third, on the free Zapier plan, the 2-hour polling delay means a task due at 9 AM might not alert until 11 AM. If your team expects same-morning alerts, this is a real operational gap — budget for the Starter plan or move to Make.
Ideas for what to build next
- →Add an Overdue Escalation to a Second Channel — Fork the Zap using a Paths step: tasks overdue by more than 2 days post to #escalations with an @channel mention, while same-day tasks go to the normal #project-deadlines channel. This separates routine reminders from genuine blockers.
- →Send a Daily Digest Instead of Per-Task Alerts — Swap the per-task Slack message for a Zapier Digest step that collects all due tasks during the day and posts one summary message to Slack each morning at 9 AM. This cuts Slack noise significantly for teams with 10+ tasks due per day.
- →Create a Todoist Task Automatically When a Slack Reminder is Acknowledged — Build a reverse Zap triggered by a Slack emoji reaction (e.g., ✅) on the deadline alert message that marks the corresponding Todoist task as complete. This closes the loop without teammates switching apps.
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