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

How to Post Todoist Standups to Slack with Make

Every morning at a scheduled time, Make pulls today's tasks from Todoist and posts a formatted summary to a designated Slack channel for team standups.

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 teams (5–30 people) already using Todoist for task tracking who want standup updates without anyone copy-pasting tasks into Slack each morning.

Not ideal for

Teams using project management tools like Linear, Jira, or Asana — those have dedicated Slack integrations that handle this natively without a middleware tool.

Sync type

scheduled

Use case type

reporting

Real-World Example

💡

A 12-person product team at a remote-first startup uses this to post each person's Todoist tasks due today into their #standup Slack channel at 9:00 AM. Before this, the team lead spent 10–15 minutes every morning pinging teammates and manually compiling updates. Now the channel populates automatically and async standups take under 3 minutes.

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 tasks assigned due dates (tasks without due dates won't appear in the 'today' filter)
Slack account with permission to add apps to your workspace (Workspace Admin or App Manager role required)
Todoist API access — available on Free plan and above, no additional scopes needed for task read
Slack bot scopes: chat:write (to post messages) and channels:read (to resolve channel names)
Make account — Free plan supports this workflow but caps at 1,000 operations/month; Core plan ($9/month) gives 10,000

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Content
Due Date
Priority
5 optional fields▸ show
Project Name
Assignee Name
Task URL
Labels
Section Name

Step-by-Step Setup

1

make.com > Scenarios > 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 corner of the Scenarios dashboard. You'll land on a blank canvas with a single empty module in the center. This is where you'll chain your Todoist and Slack modules together. Give the scenario a name right away — click the pencil icon near the top-left and type something like 'Daily Standup — Todoist to Slack'.

  1. 1Log in at make.com
  2. 2Click the blue 'Create a new scenario' button (top-right)
  3. 3Click the pencil icon top-left and rename the scenario to 'Daily Standup — Todoist to Slack'
  4. 4Click the large '+' circle on the canvas to open the module picker
What you should see: You should see an empty scenario canvas with the module search dialog open.
Common mistake — Make auto-saves scenario names infrequently. Name it immediately — if you close the tab before saving, the scenario is gone entirely.
2

Scenario Canvas > Module Picker > Core > Schedule

Add the Schedule trigger

In the module search dialog, type 'Schedule' and select the 'Schedule' module — it's listed under the Core apps section, not under Todoist. This module fires the scenario at a time you define. You are not setting up a Todoist trigger here — the schedule will be the entry point, and Todoist will be polled in the next step. Click 'Choose when to run' and set your preferred daily time.

  1. 1Type 'Schedule' in the module search box
  2. 2Select 'Schedule' from the Core section
  3. 3Click 'Choose when to run' in the module settings panel
  4. 4Set interval to 'Every day' and enter your standup time (e.g., 09:00 AM)
  5. 5Set the timezone to match your team's primary timezone
What you should see: The Schedule module should appear on the canvas showing your configured time (e.g., 'Every day at 9:00 AM').
Common mistake — Make runs schedules in UTC by default if you skip the timezone field. A 9:00 AM EST standup will fire at 2:00 PM if you leave this blank.
Make
+
click +
search apps
Slack
SL
Slack
Add the Schedule trigger
Slack
SL
module added
3

Scenario Canvas > Module Picker > Todoist > Search Tasks

Connect your Todoist account

Click the '+' button to the right of the Schedule module to add the next module. Search for 'Todoist' and select 'Search Tasks'. Make will immediately prompt you to connect a Todoist account — click 'Add' and authenticate via OAuth. Make redirects you to Todoist's permission screen. Grant access and you'll be returned to the Make canvas with the connection active.

  1. 1Click the '+' icon to the right of the Schedule module
  2. 2Type 'Todoist' in the search box
  3. 3Select 'Search Tasks' from the Todoist module list
  4. 4Click 'Add' next to the Connection dropdown
  5. 5Complete OAuth login in the Todoist popup window
  6. 6Confirm the connection name appears in the Connection field
What you should see: The Todoist 'Search Tasks' module appears on the canvas and the Connection dropdown shows your Todoist account email.
Common mistake — If you have multiple Todoist accounts (personal + work), double-check which account authenticated. The module will silently pull from whichever account completed OAuth — there's no warning if it's the wrong one.
Make settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Make
popup window
Connected
green checkmark
4

Todoist Module Settings > Filter

Configure the Todoist task filter

Inside the 'Search Tasks' module, you need to tell Todoist which tasks to return. Set the Filter field to 'today' — this is Todoist's native filter syntax that returns all tasks due on the current day. Optionally, add a Project ID if you only want tasks from a specific project. Leave 'Maximum number of returned results' at the default 100 unless your team has unusually high daily task volume.

  1. 1Click the 'Search Tasks' module to open its settings
  2. 2In the 'Filter' field, type: today
  3. 3Optional: click the 'Project ID' dropdown and select a specific project to scope the pull
  4. 4Leave 'Maximum number of returned results' at 100
  5. 5Click OK to save the module settings
What you should see: The module settings panel closes and the Search Tasks module shows 'today' as the active filter.
Common mistake — Todoist's 'today' filter returns tasks due today AND overdue tasks from previous days. If you only want tasks explicitly due today, use 'due: today' (with the prefix) in the filter field instead.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Todoist
TO
notified
5

Scenario Canvas > Module Picker > Flow Control > Text Aggregator

Add a Text Aggregator to build the message

The Search Tasks module returns one bundle per task — you need to combine them into a single Slack message. Click '+' after the Todoist module, search for 'Text aggregator', and select it from the Flow Control section. Set the Source Module to 'Todoist — Search Tasks'. In the Text field, build your row template: each task line should show the task content, due date, and priority. Use Make's mapping panel to insert variables.

  1. 1Click '+' after the Todoist module
  2. 2Search 'Text aggregator' and select it from Flow Control
  3. 3Set 'Source Module' to '3. Todoist — Search Tasks'
  4. 4In the 'Text' field, type: • {{content}} — Due: {{due.date}} | Priority: {{priority}}
  5. 5Set 'Row separator' to '\n' (new line)
  6. 6Click OK to save
What you should see: The Text Aggregator module appears on the canvas connected to the Todoist module. The text field shows your task row template with mapped variables highlighted in orange.
Common mistake — Todoist returns priority as a number (1=normal, 4=urgent), not a label. If you paste the raw {{priority}} variable, your Slack message will say 'Priority: 4' instead of 'Priority: Urgent'. Handle this in Step 6 with an if() formula.
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

Text Aggregator Module > Text Field > Formula Mode

Map priority numbers to readable labels

Inside the Text Aggregator's Text field, replace the raw {{priority}} variable with a Make if() formula that converts numbers to labels. Click the variable mapping icon next to the Priority placeholder and switch to formula mode using the 'T' toggle in the input field. This step prevents your Slack message from showing cryptic numeric priorities.

  1. 1Open the Text Aggregator module settings
  2. 2Click inside the Text field and locate the {{priority}} placeholder
  3. 3Click the 'T' (text/formula) toggle to enter formula mode
  4. 4Replace {{priority}} with the formula shown in the Pro Tip section
  5. 5Click OK to confirm
What you should see: The formula appears in the Text field with color-coded syntax. Priority will now render as 'Urgent', 'High', 'Medium', or 'Normal' in the Slack message.
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
7

Scenario Canvas > Module Picker > Slack > Create a Message

Connect your Slack account

Click '+' after the Text Aggregator to add the Slack module. Search for 'Slack' and select 'Create a Message'. Click 'Add' in the Connection dropdown to authenticate with Slack via OAuth. Make will redirect you to Slack's permission screen — you must approve the bot scopes including chat:write and channels:read. After approving, select the workspace where your standup channel lives.

  1. 1Click '+' after the Text Aggregator module
  2. 2Search 'Slack' and select 'Create a Message'
  3. 3Click 'Add' next to the Connection dropdown
  4. 4Authorize Make's Slack app in the OAuth popup
  5. 5Confirm your workspace name appears in the Connection field
What you should see: The Slack 'Create a Message' module appears on the canvas. The Connection field shows your workspace name (e.g., 'Acme Corp').
Common mistake — Make's Slack bot only posts to channels it has been invited to. If you see a 'channel_not_found' error during test runs, the bot hasn't been added to your standup channel yet — go to Slack, open the channel, type /invite @Make, and run the test again.
8

Slack Module Settings > Channel + Text

Configure the Slack message content

Inside the Slack 'Create a Message' module, set the Channel to your standup channel (e.g., #standup or #daily-updates). In the Text field, build the full message: start with a header line like '*📋 Daily Standup — {{formatDate(now; "dddd, MMMM D")}}*' then add a line break, then map the aggregated text from the Text Aggregator output. Set 'Link Names' to Yes so @mentions resolve correctly if you include assignee names.

  1. 1Click the 'Channel' dropdown and search for your standup channel name
  2. 2In the Text field, type the header: *📋 Daily Standup — * then use the mapping panel to insert formatDate(now; "dddd, MMMM D")
  3. 3Press Enter twice after the header to add spacing
  4. 4Click the mapping panel and insert the Text Aggregator's 'Text' output variable
  5. 5Set 'Link Names' to Yes
  6. 6Click OK to save
What you should see: The Slack module settings panel shows a Channel name, a formatted header with a date formula, and the aggregated task text mapped below it.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
9

Scenario Canvas > Right-click Todoist Module > Add Router

Add an error handler for empty task days

On days when nobody has tasks due, the Text Aggregator outputs an empty string and Slack receives a blank message. Prevent this by adding a Router after the Todoist module. Set Route 1 to continue to the Text Aggregator only if the task count is greater than 0. Set Route 2 to a Slack message that posts 'No tasks due today — enjoy the quiet.' This makes empty days graceful instead of broken.

  1. 1Right-click the connection line between the Todoist module and the Text Aggregator
  2. 2Select 'Add a router'
  3. 3On Route 1, click the filter icon and set condition: 'Total number of bundles' Greater than '0'
  4. 4On Route 2, add a Slack 'Create a Message' module posting a fallback message to the same standup channel
  5. 5Click OK on both routes
What you should see: The canvas shows a Router branching into two paths. Route 1 leads to the Text Aggregator and Slack post. Route 2 leads directly to a fallback Slack message.
Common mistake — The Router's bundle count filter checks bundles passed through the scenario at that point — it does not count Todoist API results directly. If the Todoist module returns 0 bundles (no tasks), the route condition will still evaluate as 0. Test this by temporarily changing the Todoist filter to a date with no tasks.
10

Scenario Canvas > Run once (bottom toolbar)

Run a test and verify the Slack output

Click 'Run once' in the bottom-left of the Make canvas to fire the scenario manually against today's real Todoist data. Make will highlight each module in blue as it executes, then show green checkmarks when complete. Click the bubble above the Slack module to inspect the exact message payload that was sent. Verify the date header, task list, and priority labels all render correctly in your Slack channel.

  1. 1Click the 'Run once' button in the bottom-left toolbar
  2. 2Watch each module highlight as the scenario executes
  3. 3Click the green bubble above the Slack module to open the output inspector
  4. 4Check your Slack standup channel to confirm the message appeared
  5. 5Verify task names, due dates, and priority labels are formatted correctly
What you should see: Your Slack standup channel shows a formatted message with today's date header and a bulleted list of Todoist tasks. Each task shows content, due date, and a readable priority label.
Make
▶ Run once
executed
Slack
Todoist
Todoist
🔔 notification
received
11

Scenario Canvas > Toggle switch (bottom-left) > ON

Activate the scenario and set scheduling

Once the test passes, toggle the scenario from OFF to ON using the switch in the bottom-left corner of the canvas. Make will now execute this scenario automatically at your configured schedule time. Confirm the schedule is correct by clicking the Schedule module and reviewing the time and timezone settings one final time before going live. Your scenario's next run time appears in the top metadata bar.

  1. 1Click the toggle switch in the bottom-left from OFF to ON
  2. 2Confirm the dialog that appears asking you to activate the scenario
  3. 3Click the Schedule module to verify the time and timezone one last time
  4. 4Note the 'Next run' timestamp in the scenario header bar
What you should see: The toggle shows ON (blue). The scenario header displays a 'Next run' timestamp matching your configured standup time in the correct timezone.
Common mistake — Make counts each scenario execution against your monthly operation quota — not just each task processed. If your team has 15 tasks due daily and runs 22 weekdays/month, that's 330+ operations from the Todoist module alone, plus aggregator and Slack operations on top.

Paste this formula into the Text Aggregator's Text field (in formula mode) to convert Todoist's numeric priority values to readable labels and include a clickable task link. Switch any input field to formula mode by clicking the 'T' toggle on the right side of the field in Make's module settings panel.

JavaScript — Custom Functionif(
▸ Show code
if(
  {{priority}} = 4;
  "Urgent";

... expand to see full code

if(
  {{priority}} = 4;
  "Urgent";
  if(
    {{priority}} = 3;
    "High";
    if(
      {{priority}} = 2;
      "Medium";
      "Normal"
    )
  )
)

// Full row template for the Text Aggregator 'Text' field:
// • `{{content}}` — Due: {{formatDate(due.date; "MMM D")}} | Priority: [paste formula above] | <{{url}}|View Task>

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 wants a visual, maintainable scenario that non-developers can actually edit later. Make's canvas makes the Todoist → Aggregate → Slack flow obvious at a glance — a new team member can open it and understand what's happening in under a minute. Make is also the right call if you need to add conditional logic (skip weekends, route by project, handle empty days) without writing code. The one scenario where you'd skip Make: if your team already pays for a Zapier Teams plan and the person setting this up has never touched Make before. The learning curve isn't steep, but it's real.

Cost

Here's the cost math. Each scenario run burns approximately 3–4 Make operations: one for the Schedule trigger, one per task from the Todoist module, one for the Text Aggregator, and one for the Slack module. A team with 10 tasks due daily running Monday–Friday burns roughly (10 + 3) × 22 = 286 operations per month. Make's Free plan gives you 1,000 operations/month — plenty for a single team. Scale to 3 teams with 10 tasks each and you hit 858 operations/month, still inside Free. Push to 5 teams or 20+ daily tasks and you'll want the Core plan at $9/month for 10,000 operations. Zapier's equivalent on a paid plan costs $19.99/month minimum. Make wins on cost here by a clear margin for this workflow.

Tradeoffs

Zapier's advantage: setup is genuinely faster. If you've never used either tool, Zapier's linear Zap editor gets you live in 8 minutes vs. Make's 20. The Zapier Slack + Todoist integration also has a pre-built template that requires almost no configuration. n8n's advantage: you can self-host it for $0 and write a JavaScript function node that handles priority conversion, date formatting, and grouping by assignee in one step — cleaner than Make's multi-module approach. Power Automate wins if your company is Microsoft-first and already has a Power Automate license — the Teams connector is more capable than Slack's and there's no extra cost. Pipedream handles this well if someone on your team codes; the Todoist + Slack workflow fits in 20 lines of Node.js with full async handling. Make is still the right call here for most teams because it hits the middle ground: no code required, handles conditional logic through the Router, and costs less than Zapier at meaningful team size.

Three things you'll hit after the first week. First: Todoist's 'today' filter includes overdue tasks from previous days. If someone has a task from last Tuesday that's still open, it shows up in today's standup looking like a current task. Use 'due: today' (exact syntax) in the filter field to exclude overdue items, or add a label-based filter to only surface tasks tagged 'standup'. Second: Make's Slack module doesn't support Slack Block Kit formatting — you get plain text or basic markdown, not the rich card-style messages Slack's own apps post. If your team wants section headers, buttons, or dividers, you'll need to switch the Slack module to an HTTP module and call Slack's chat.postMessage API directly with a Block Kit payload. Third: the scenario silently skips if Make has a platform outage during your scheduled run time. Make does not retry missed scheduled runs automatically — if your 9:00 AM run fails due to a Make service issue, the standup simply doesn't post that day. Enable Make's email notifications for failed scenarios so you catch this immediately.

Ideas for what to build next

  • Add per-person task groupingIf your team shares a single Todoist workspace, use a Make Iterator and Array Aggregator combo to group tasks by assignee before posting — each person's tasks appear as a named section in the standup message.
  • Post an end-of-day completed tasks summaryAdd a second scheduled scenario at 5:00 PM that pulls Todoist tasks with the 'completed today' filter and posts a done-list to the same Slack channel, creating a full daily loop without any manual reporting.
  • Route standups to per-team Slack channelsAdd a Router in Make that branches by Todoist project name — Engineering tasks go to #eng-standup, Marketing tasks go to #marketing-standup — so each team only sees their own work without a cluttered shared channel.

Related guides

Was this guide helpful?
Slack + Todoist overviewMake profile →