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

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

scheduled

Use case type

reporting

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

/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 tasks due today — at least one task must exist when you test or Zapier returns an empty result
Slack account with permission to add apps to your workspace — you need 'Manage Apps' permission or admin approval
Zapier account on a paid plan — Schedule by Zapier and multi-step Zaps require at least the Starter plan ($19.99/month)
A dedicated Slack channel for standup posts — create #standup or similar before setup so it appears in the Zapier channel dropdown

Optional

Todoist filter syntax knowledge — test your filter (e.g., 'today' or 'today & #ProjectName') in Todoist's filter bar before pasting it into Zapier

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Click 'Create Zap' in the left sidebar
  2. 2Click the default 'Untitled Zap' name at the top and type a descriptive name
  3. 3Press Enter to save the name
What you should see: You should see the Zap editor with a trigger block labeled 'Trigger' and your new Zap name displayed at the top of the page.
2

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.

  1. 1Click the trigger block
  2. 2Type 'Schedule' in the app search field
  3. 3Select 'Schedule by Zapier' from the results
  4. 4Choose 'Every Day' as the trigger event
  5. 5Click 'Continue'
What you should see: You should see a configuration panel showing time zone and time-of-day fields for the schedule.
Common mistake — Schedule by Zapier uses UTC by default. If you set 9:00 AM and your team is in EST, the message will fire at 4:00 AM EST. Set your time zone explicitly in the schedule configuration panel.
Zapier
+
click +
search apps
Slack
SL
Slack
Set the trigger to Schedule …
Slack
SL
module added
3

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.

  1. 1Set 'Time of Day' to your desired standup prep time (e.g., 8:45 AM)
  2. 2Select your team's local time zone from the 'Time Zone' dropdown
  3. 3Set 'Day of Week' to weekdays only if applicable
  4. 4Click 'Continue'
  5. 5Click 'Test Trigger' to generate a sample payload
What you should see: After testing, you should see a sample payload containing a timestamp and date field — this confirms the schedule trigger is working.
Common mistake — The 'Test Trigger' button fires immediately regardless of the time you configured. The schedule only applies when the Zap is live.
4

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.

  1. 1Click the '+' button below the trigger block
  2. 2Search for 'Todoist' in the app search field
  3. 3Select 'Todoist' from the results
  4. 4Choose 'Find Tasks' as the action event
  5. 5Click 'Sign in to Todoist' and complete OAuth authorization
  6. 6Click 'Continue'
What you should see: You should see a green 'Connected' badge next to your Todoist account name, and a configuration form for the Find Tasks action.
Common mistake — Zapier's 'Find Tasks' action returns only one task by default. To get multiple tasks, you need to enable 'Find All' — this option appears as a toggle labeled 'Find All?' in the action configuration. It is off by default and easy to miss.
5

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.

  1. 1Click into the 'Filter' field
  2. 2Type your Todoist filter query (e.g., 'today' or 'today & #Work')
  3. 3Enable the 'Find All?' toggle
  4. 4Click 'Continue'
  5. 5Click 'Test action' to verify tasks are returned
What you should see: After testing, you should see a list of task objects in the results panel, each containing fields like 'Content', 'Due Date', 'Project ID', and 'Priority'.
Common mistake — If you have no tasks due today when you test, Todoist returns an empty result and Zapier may show an error or halt. Add at least one test task in Todoist due today before clicking 'Test action'.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Todoist
TO
notified
6

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.

  1. 1Click '+' to add a new action step
  2. 2Search for and select 'Formatter by Zapier'
  3. 3Choose 'Utilities' as the event
  4. 4Select 'Line Item to Text' as the transform type
  5. 5Map the Todoist 'Content' line item field into the 'Input' field
  6. 6Set the separator to a newline character or '\n'
  7. 7Click 'Continue' then 'Test action'
What you should see: The test result should show a single text block with each task name on its own line, like: 'Review Q3 report\nUpdate homepage copy\nClient call prep'.
Common mistake — Formatter's 'Line Item to Text' only works with line item fields — the ones with an array icon next to them in the field picker. If you accidentally map a plain text field, you'll get only one task in the output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
7

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.

  1. 1Click '+' to add a new action
  2. 2Search for and select 'Code by Zapier'
  3. 3Choose 'Run JavaScript' as the event
  4. 4Add an input variable named 'task_list' and map it to the Formatter output text
  5. 5Paste the JavaScript code into the code editor
  6. 6Click 'Continue' then 'Test action'
What you should see: The output should show a 'result' field containing a formatted string with a date header and each task prefixed by a bullet point.

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 }];
}
8

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.

  1. 1Click '+' to add a new action
  2. 2Search for and select 'Slack'
  3. 3Choose 'Send Channel Message' as the event
  4. 4Click 'Sign in to Slack'
  5. 5Select your workspace in the OAuth popup
  6. 6Click 'Allow' to grant Zapier posting permissions
  7. 7Click 'Continue'
What you should see: You should see a green 'Connected' badge next to your Slack workspace name.
Common mistake — If you have multiple Slack workspaces, confirm which one appears in the connected account dropdown. Zapier defaults to the first one you authorized, which may not be the right workspace.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
9

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.

  1. 1Select the target channel from the 'Channel' dropdown (e.g., #standup)
  2. 2Click into 'Message Text' and map the Code by Zapier output variable
  3. 3Set 'Bot Name' to 'Standup Bot' or your preferred display name
  4. 4Set 'Bot Icon' to ':robot_face:' or a custom icon URL
  5. 5Confirm 'Send as a Bot?' is set to 'Yes'
  6. 6Click 'Continue'
What you should see: The preview should show your bot name, icon, and the formatted task list text in the message preview panel.
Common mistake — Slack channel names in Zapier are case-sensitive in some workspace configurations. If your channel doesn't appear in the dropdown, type the exact channel name including the # symbol.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
10

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.

  1. 1Click 'Test action' on the Slack configuration step
  2. 2Open Slack and navigate to your target channel
  3. 3Verify the message appears with correct formatting and task names
  4. 4Check the bot name and icon display correctly
  5. 5Return to Zapier if any corrections are needed
What you should see: You should see a Slack message in your channel with a date header and a bulleted list of today's Todoist tasks, posted by your bot name.
Common mistake — This test posts a real message to your real Slack channel. If it's a shared team channel, give your team a heads up before testing, or temporarily point the channel to a private test channel.
Zapier
▶ Turn on & test
executed
Slack
Todoist
Todoist
🔔 notification
received
11

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.

  1. 1Click the 'Publish' button in the top right of the Zap editor
  2. 2Review the summary screen
  3. 3Click 'Turn on Zap' in the confirmation dialog
  4. 4Return to the Zap dashboard and confirm the green 'On' indicator is visible
What you should see: Your Zap list should show the Zap as 'On' with the next scheduled run time displayed beneath the Zap name.

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

Cost

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.

Tradeoffs

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 filtersModify 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 summaryCreate 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 acknowledgmentsUse 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

Was this guide helpful?
Slack + Todoist overviewZapier profile →