

How to Post Todoist Task Summaries to Slack with Zapier
Every morning at a set time, Zapier pulls today's Todoist tasks and posts a formatted summary to a Slack channel so your team has standup context without anyone writing it manually.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small teams of 3–15 people who track individual work in Todoist and run async or quick daily standups in Slack.
Not ideal for
Teams using project-level task managers like Jira or Asana — the Todoist filter logic won't map cleanly to those data structures.
Sync type
scheduledUse case type
reportingReal-World Example
A 10-person product agency uses this to post each team member's Todoist tasks due today into #standup every weekday at 8:45 AM. Before the automation, the team lead spent 10 minutes before every standup copying task names from Todoist into Slack manually. Now the message is already there when people open Slack.
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 Content | ||
| Due Date | ||
| Slack Channel | ||
| Message Text | ||
| Scheduled Time | ||
5 optional fields▸ show
| Project ID | |
| Priority | |
| Assignee | |
| Task URL | |
| Bot Name |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap and name it
Log into zapier.com and click the orange 'Create Zap' button in the left sidebar. Give the Zap a name at the top — something like 'Todoist Daily Standup → #standup'. This name shows up in your Zap list and in error notification emails, so make it descriptive. You'll be dropped into the Zap editor with a blank trigger block on the left.
- 1Click 'Create Zap' in the left sidebar
- 2Click the default 'Untitled Zap' name at the top and type a descriptive name
- 3Press Enter to save the name
Zap Editor > Trigger > App & Event
Set the trigger to Schedule by Zapier
Click the trigger block and search for 'Schedule by Zapier' in the app search field — it's a Zapier-native app, not a third-party integration. Select it, then choose 'Every Day' as the trigger event. This fires the Zap once per day at a time you specify. Do not use Todoist as the trigger here; you want time-based execution, not task-event-based execution.
- 1Click the trigger block
- 2Type 'Schedule' in the app search field
- 3Select 'Schedule by Zapier' from the results
- 4Choose 'Every Day' as the trigger event
- 5Click 'Continue'
Zap Editor > Trigger > Configure
Configure the schedule time and days
In the schedule configuration, set the time to 15–30 minutes before your standup starts so the Slack message is ready when people arrive. Set 'Day of Week' to 'Mon, Tue, Wed, Thu, Fri' if you only want weekday standups — leave it as 'Every Day' only if your team runs weekend standups. Select your team's time zone from the dropdown. Click 'Continue' and then 'Test Trigger' to confirm it fires.
- 1Set 'Time of Day' to your desired standup prep time (e.g., 8:45 AM)
- 2Select your team's local time zone from the 'Time Zone' dropdown
- 3Set 'Day of Week' to weekdays only if applicable
- 4Click 'Continue'
- 5Click 'Test Trigger' to generate a sample payload
Zap Editor > Action 1 > App & Event
Add a Todoist action to get today's tasks
Click the '+' button below the trigger to add an action. Search for 'Todoist' and select it. Choose 'Find Tasks' as the action event — this queries Todoist for tasks matching a filter rather than waiting for a new task to be created. You'll need to connect your Todoist account if you haven't already; click 'Sign in to Todoist' and authorize in the popup window.
- 1Click the '+' button below the trigger block
- 2Search for 'Todoist' in the app search field
- 3Select 'Todoist' from the results
- 4Choose 'Find Tasks' as the action event
- 5Click 'Sign in to Todoist' and complete OAuth authorization
- 6Click 'Continue'
Zap Editor > Action 1 > Configure
Configure the Todoist task filter
In the 'Find Tasks' configuration, set the Filter field using Todoist's natural language filter syntax. Use 'today' to get all tasks due today across all projects, or 'today & #ProjectName' to scope it to a specific project. The Filter field accepts the same syntax as Todoist's own filter bar — you can test your filter directly in Todoist before pasting it here. Enable the 'Find All?' toggle so Zapier returns every matching task, not just the first one.
- 1Click into the 'Filter' field
- 2Type your Todoist filter query (e.g., 'today' or 'today & #Work')
- 3Enable the 'Find All?' toggle
- 4Click 'Continue'
- 5Click 'Test action' to verify tasks are returned
Zap Editor > Action 2 > Formatter by Zapier > Utilities
Add a Formatter step to build the task list text
The Todoist action returns an array of task objects, but Slack needs a single formatted text string. Add a new action and choose 'Formatter by Zapier', then select 'Utilities' as the event and 'Line Item to Text' as the transform. This converts the array of task content fields into a newline-separated list. Map the 'Content' field from your Todoist results into the Input field of the Formatter.
- 1Click '+' to add a new action step
- 2Search for and select 'Formatter by Zapier'
- 3Choose 'Utilities' as the event
- 4Select 'Line Item to Text' as the transform type
- 5Map the Todoist 'Content' line item field into the 'Input' field
- 6Set the separator to a newline character or '\n'
- 7Click 'Continue' then 'Test action'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action 3 > Code by Zapier > JavaScript
Add a Code by Zapier step to prefix bullet points
The plain list from Formatter has no visual structure. Add a 'Code by Zapier' action using JavaScript to prefix each task with a bullet character and add a header line with today's date. Map the Formatter output text as an input variable named 'task_list'. The code splits on newlines, adds '• ' to each line, and prepends a date header. This makes the Slack message scannable at a glance.
- 1Click '+' to add a new action
- 2Search for and select 'Code by Zapier'
- 3Choose 'Run JavaScript' as the event
- 4Add an input variable named 'task_list' and map it to the Formatter output text
- 5Paste the JavaScript code into the code editor
- 6Click 'Continue' then 'Test action'
Paste this into the 'Code by Zapier' (Run JavaScript) step in Action 3. Add one input variable named 'task_list' and map it to the Formatter output. The code builds a formatted Slack message with today's date header and bulleted task lines — it also handles edge cases like empty input so the Zap doesn't post a broken message.
JavaScript — Code Step// Input variable: task_list (mapped from Formatter output)▸ Show code
// Input variable: task_list (mapped from Formatter output) const raw = inputData.task_list || ''; // Build today's date header in readable format
... expand to see full code
// Input variable: task_list (mapped from Formatter output)
const raw = inputData.task_list || '';
// Build today's date header in readable format
const today = new Date();
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
const dateHeader = today.toLocaleDateString('en-US', options);
// Split tasks on newline and filter out empty lines
const lines = raw.split('\n').map(l => l.trim()).filter(l => l.length > 0);
// Guard: if no tasks, post a fallback message
if (lines.length === 0) {
output = [{ result: `*📋 Standup — ${dateHeader}*\n\n_No tasks due today. Enjoy the breathing room._` }];
} else {
// Prefix each task with a bullet point
const bulletedTasks = lines.map(task => `• ${task}`).join('\n');
const message = `*📋 Standup — ${dateHeader}*\n\n${bulletedTasks}`;
output = [{ result: message }];
}Zap Editor > Action 4 > App & Event
Connect your Slack account
Add a new action and select 'Slack'. Choose 'Send Channel Message' as the event. Click 'Sign in to Slack' — this opens an OAuth popup where you authorize Zapier to post to your Slack workspace. You must have permission to add apps to your Slack workspace; if you get a 'restricted' error, ask your Slack admin to approve the Zapier app in Slack's App Management settings.
- 1Click '+' to add a new action
- 2Search for and select 'Slack'
- 3Choose 'Send Channel Message' as the event
- 4Click 'Sign in to Slack'
- 5Select your workspace in the OAuth popup
- 6Click 'Allow' to grant Zapier posting permissions
- 7Click 'Continue'
Zap Editor > Action 4 > Configure
Configure the Slack message
Select the target Slack channel from the 'Channel' dropdown — type '#' to filter by channel name. In the 'Message Text' field, map the output from the Code by Zapier step. Set 'Bot Name' to something like 'Standup Bot' and optionally set a Bot Icon to a robot emoji or custom icon URL. Leave 'Send as a Bot?' set to 'Yes' so the message appears under the bot name rather than your personal Slack account.
- 1Select the target channel from the 'Channel' dropdown (e.g., #standup)
- 2Click into 'Message Text' and map the Code by Zapier output variable
- 3Set 'Bot Name' to 'Standup Bot' or your preferred display name
- 4Set 'Bot Icon' to ':robot_face:' or a custom icon URL
- 5Confirm 'Send as a Bot?' is set to 'Yes'
- 6Click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action 4 > Test
Test the full Zap end to end
Click 'Test action' on the Slack step. Zapier will immediately post a test message to your selected Slack channel using real data from your Todoist test. Open Slack and confirm the message appears in the correct channel with the right formatting. Check that task names are readable, the date header is correct, and the bot name shows up as expected. If anything looks off, go back to the relevant step and adjust.
- 1Click 'Test action' on the Slack configuration step
- 2Open Slack and navigate to your target channel
- 3Verify the message appears with correct formatting and task names
- 4Check the bot name and icon display correctly
- 5Return to Zapier if any corrections are needed
Zap Editor > Publish > Turn On
Turn on the Zap
Click 'Publish' in the top right corner of the Zap editor. Toggle the Zap to 'On' in the confirmation dialog. Zapier will now run this Zap automatically at the scheduled time every day. You can verify the Zap is active by checking the Zap list on your dashboard — it should show a green 'On' indicator and display the next scheduled run time.
- 1Click the 'Publish' button in the top right of the Zap editor
- 2Review the summary screen
- 3Click 'Turn on Zap' in the confirmation dialog
- 4Return to the Zap dashboard and confirm the green 'On' indicator is visible
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 has no technical resources and needs the workflow running in under an hour. The guided Zap builder walks you through each step, the Schedule trigger requires zero configuration beyond picking a time, and Slack + Todoist are both first-class integrations with no quirks. If your team already uses Make or n8n for other workflows, use one of those instead — this use case is simple enough that switching tools isn't worth it, but starting fresh in Zapier just for standups adds platform sprawl.
Real cost math: this Zap uses 5 tasks per run (Schedule, Find Tasks, Formatter, Code, Slack). At one run per weekday, that's 21–23 runs per month, meaning 105–115 tasks per month. Zapier's free plan caps at 100 tasks and doesn't support multi-step Zaps, so you're looking at the Starter plan at $19.99/month. Make handles the same workflow for free on its 1,000 operations/month free tier — and an operation in Make is roughly equivalent to a task in Zapier. If cost is the deciding factor, Make is $19.99/month cheaper for this exact use case.
Make handles text parsing better than Zapier here — its built-in Text Aggregator module collapses the task array into a formatted string in one step, skipping the two-step Formatter + Code workaround Zapier requires. n8n lets you run this self-hosted for free with a Function node that does the same transformation in 10 lines of JavaScript, and its Schedule trigger is more granular (supports cron expressions). Power Automate's Recurrence trigger and 'Post a message in a chat or channel' action cover this use case natively if your organization is already in Microsoft 365. Zapier is still the right call if you're a non-technical team that needs to be up and running fast and isn't already paying for another platform — the setup time is genuinely shorter, even if the per-task cost is higher.
Two things you'll hit after going live: first, Todoist's API rate limit is 450 requests per minute, but the Zapier integration doesn't expose this directly — if you build multiple standup Zaps for multiple team members triggering at the same time, you may see intermittent failures. Stagger the schedule triggers by 2–3 minutes per Zap. Second, Slack's Block Kit formatting (bold, headers, dividers) is not available in Zapier's 'Send Channel Message' action — you're limited to mrkdwn syntax (asterisks for bold, underscores for italic). If you want rich Block Kit formatting, you'd need to use Zapier's Webhooks action to POST directly to Slack's API, which adds complexity and requires a Slack app with incoming webhook configuration.
Ideas for what to build next
- →Add per-person task summaries with Todoist user filters — Modify the Todoist filter to scope tasks by assignee and run multiple Zap branches — one per team member — posting to individual Slack DMs instead of a single channel. This gives each person their own task brief without exposing everyone's workload publicly.
- →Post an end-of-day completion summary — Create a second Zap using the same architecture but triggered at 5:00 PM, pulling Todoist tasks with the filter 'today & completed' to post what actually got done. Pairing this with the morning summary gives your team a full daily loop.
- →Add a Slack thread for team acknowledgments — Use Zapier's 'Reply to Message in Thread' Slack action to automatically reply to the standup post with a prompt like 'Reply here with blockers'. This keeps standup conversation organized in threads rather than flooding the main channel.
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