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

How to Send Weekly Todoist Reports to Slack with Make

Every Friday at 5pm, Make pulls completed Todoist tasks for the week, counts them by project, and posts a formatted summary message to a Slack channel for leadership review.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Teams using Todoist for task tracking who need a consistent weekly summary posted to a Slack channel without manual copy-pasting.

Not ideal for

Teams needing real-time task notifications as tasks complete — use a webhook-based trigger for that instead.

Sync type

scheduled

Use case type

reporting

Real-World Example

💡

A 12-person product team at a SaaS company uses this to post a Friday 5pm summary to #weekly-wins in Slack, showing how many tasks each project completed that week. Before this automation, the project manager spent 20-30 minutes every Friday pulling numbers from Todoist manually and pasting them into Slack. Now leadership gets a consistent, formatted report without anyone touching it.

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 Pro or Business account — the completed tasks API endpoint is not available on the free plan
Todoist account connected to Make with OAuth access granted (read access to tasks and projects)
Slack account with permission to install apps in your workspace — or admin pre-approval if your workspace restricts app installs
Slack bot/app granted the chat:write scope so Make can post to channels on its behalf
Make account with an active plan — the free tier allows 1,000 operations/month, which covers this workflow for about 4 weekly runs at 200 tasks each

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Content
Project Name
Completed Date
Total Completed Count
Report Date
Slack Channel ID
2 optional fields▸ show
Assignee Name
Task Due Date

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 the visual canvas with a large plus-circle in the center — this is where your first module goes. Give the scenario a name immediately by clicking the default name at the top ('New Scenario') and typing something like 'Weekly Todoist → Slack Report'. Naming it now saves confusion when you have multiple scenarios running.

  1. 1Click 'Create a new scenario' (top right, blue button)
  2. 2Click the pencil icon next to 'New Scenario' at the top
  3. 3Type a name like 'Weekly Todoist → Slack Report'
  4. 4Press Enter to save the name
What you should see: You should see the empty visual canvas with a single plus-circle module placeholder and your new scenario name displayed at the top of the page.
Common mistake — Make auto-saves scenario structure but does NOT auto-save module configurations. If you close the browser mid-setup before clicking 'OK' inside a module, that module's settings are lost.
2

Canvas > + Module > Schedule

Add the Schedule trigger

Click the plus-circle on the canvas to open the module picker. Search for 'Schedule' and select it — this is Make's built-in clock trigger, not a Todoist module. Set it to run every week. You'll configure the exact day and time in the next step, but selecting 'Schedule' here locks in the weekly cadence as your trigger type.

  1. 1Click the large plus-circle in the canvas center
  2. 2Type 'Schedule' in the search bar
  3. 3Click 'Schedule' under the Tools category
  4. 4Select 'Every week' from the interval dropdown
What you should see: A clock icon module labeled 'Schedule' appears on the canvas with a settings panel open on the right side showing interval options.
Common mistake — Make's Schedule trigger runs based on UTC time by default. If your team expects a Friday 5pm report, calculate the UTC equivalent for your timezone — a Friday 5pm EST run requires setting the trigger to Friday 22:00 UTC.
Make
+
click +
search apps
Slack
SL
Slack
Add the Schedule trigger
Slack
SL
module added
3

Schedule Module > Settings > Advanced scheduling

Set the day and time for the weekly run

Inside the Schedule module settings, set 'Day of week' to Friday and 'Time' to your desired UTC time. The 'Advanced scheduling' toggle lets you pick specific days rather than just intervals. Double-check the UTC offset — this is the most common reason teams get reports on Saturday morning instead of Friday evening. Click 'OK' to save the module.

  1. 1Toggle on 'Advanced scheduling' inside the Schedule module panel
  2. 2Set 'Day of week' to Friday
  3. 3Set 'Time' to your target UTC time (e.g., 22:00 for 5pm EST)
  4. 4Click 'OK' to save
What you should see: The Schedule module on the canvas should show 'Weekly on Friday' in its label, confirming the cadence is set correctly.
Make
▶ Run once
executed
Slack
Todoist
Todoist
🔔 notification
received
4

Canvas > + > Todoist > Search Tasks

Add Todoist — Search Tasks module

Click the plus icon to the right of the Schedule module to add the next module. Search for 'Todoist' and connect your Todoist account when prompted — you'll need to authorize Make via OAuth. Once connected, select the 'Search Tasks' action. This module will fetch tasks filtered by completion status and date range, giving you only the tasks completed in the past 7 days.

  1. 1Click the right-side plus icon on the Schedule module
  2. 2Search for 'Todoist' in the module picker
  3. 3Click 'Todoist' and select 'Search Tasks'
  4. 4Click 'Add' to connect a new Todoist account via OAuth
  5. 5Authorize Make in the Todoist OAuth popup that appears
What you should see: You should see a green 'Connected' indicator next to your Todoist email address inside the module, and the Search Tasks configuration fields appear below it.
Common mistake — Todoist's API does not support filtering completed tasks by a relative date range like 'last 7 days' directly. You must use Make's date functions to calculate the start-of-week date dynamically — covered in Step 5.
5

Todoist Module > Search Tasks > Filter / Since / Until fields

Configure the Todoist filter for completed tasks

In the Search Tasks module, set the 'Filter' field to target completed tasks from the past week. Todoist's filter syntax uses 'overdue', 'today', or date-specific strings. For completed task history, you'll use the Todoist 'Get Completed Tasks' endpoint instead — if your Make Todoist module version offers it, select that action. Set the 'Since' field using Make's date formula: formatDate(addDays(now; -7); 'YYYY-MM-DD') to dynamically calculate 7 days back. Set 'Until' to formatDate(now; 'YYYY-MM-DD').

  1. 1In the 'Since' field, click the formula icon (fx) and type: formatDate(addDays(now; -7); 'YYYY-MM-DD')
  2. 2In the 'Until' field, type: formatDate(now; 'YYYY-MM-DD')
  3. 3Leave 'Project ID' blank to pull from all projects, or enter a specific project ID to narrow scope
  4. 4Set the maximum number of returned records to 100
  5. 5Click 'OK' to save
What you should see: The module configuration panel shows dynamic date formulas in the Since and Until fields rather than hardcoded dates, and you can click 'Run once' to test and see sample completed task records returned.
Common mistake — Todoist's REST API v2 only returns completed tasks for Todoist Pro or Business accounts. If you're on the free plan, completed task history is not accessible via API — you'll need to upgrade or track a proxy metric like due-today tasks instead.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Todoist
TO
notified
6

Canvas > + > Tools > Text Aggregator

Add an Aggregator to count tasks by project

Click the plus icon after the Todoist module and add a 'Text Aggregator' module from Make's built-in Tools. This module loops through every completed task returned by Todoist and combines them into a single text block. Set the 'Source Module' to your Todoist module. In the 'Text' field, format each task as a line: {{project_name}}: {{content}} using the mapped fields from the Todoist output. The aggregator will join all lines so you can send one Slack message instead of one message per task.

  1. 1Click the plus icon after the Todoist Search Tasks module
  2. 2Search for 'Text Aggregator' under Tools
  3. 3Set 'Source Module' to your Todoist module (the iterator source)
  4. 4In the 'Text' field, enter: {{project_name}}: {{content}}
  5. 5Set 'Row separator' to a newline character (\n)
  6. 6Click 'OK'
What you should see: The Text Aggregator module appears on the canvas connected to the Todoist module, and its output bundle preview (visible after a test run) shows all completed tasks concatenated into one text block.
Common mistake — The Text Aggregator flattens all tasks into one string with no grouping logic built in. If you want tasks grouped by project with subtotals, you need a separate Iterator + Array Aggregator combo before this step — the Text Aggregator alone won't group them.
7

Canvas > + > Tools > Set Variable

Add a Tools — Set Variable module to count total tasks

Before the Slack message step, add a 'Set Variable' module to store the total count of completed tasks. Click the plus icon, search for 'Set Variable' under Tools. Set the variable name to total_completed and the value to the bundle count output from the Text Aggregator: {{totalCount}}. This gives you a clean number to drop into the Slack message header without extra formatting logic.

  1. 1Click the plus icon after the Text Aggregator module
  2. 2Search for 'Set Variable' under Tools
  3. 3Set 'Variable name' to: total_completed
  4. 4Set 'Variable value' to: {{totalCount}} from the Text Aggregator output
  5. 5Click 'OK'
What you should see: The Set Variable module shows 'total_completed' as the variable name, and a test run populates it with an integer like '23' representing the week's completed task count.
8

Canvas > + > Slack > Create a Message

Connect your Slack account and add Send Message module

Click the plus icon and search for 'Slack'. Select 'Create a Message' (not 'Send a Message' — Make's Slack module uses 'Create a Message' for posting to channels). Authorize your Slack workspace via OAuth when prompted. Make will ask for permission to post messages — approve it. Once connected, you'll see fields for Channel, Text, and optional Block Kit formatting.

  1. 1Click the plus icon after the Set Variable module
  2. 2Search for 'Slack' in the module picker
  3. 3Select 'Create a Message'
  4. 4Click 'Add' to connect a Slack account
  5. 5Authorize Make in the Slack OAuth popup and grant the requested permissions
What you should see: Your Slack workspace name appears in the connection dropdown with a green connected indicator, and the Create a Message configuration fields are now visible.
Common mistake — Make's Slack OAuth requires the `chat:write` scope. If your Slack workspace has restricted app installations, an admin must approve the Make app before the OAuth flow completes. This is a Slack admin setting, not a Make setting.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
Make settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Make
popup window
Connected
green checkmark
9

Slack Module > Create a Message > Channel / Text fields

Configure the Slack message content

Set the 'Channel' field to the Slack channel where leadership reviews reports — type the channel name or ID (e.g., #leadership-updates). In the 'Text' field, build the message using mapped variables. A clean format: *Weekly Progress Report — {{formatDate(now; 'MMM D, YYYY')}}* ✅ Tasks completed this week: {{total_completed}} *By project:* {{aggregatedText}}. This uses the Text Aggregator output and the variable from Step 7 to produce a readable, consistent message every Friday.

  1. 1Click inside the 'Channel' field and type or select your target channel (e.g., #leadership-updates)
  2. 2Click inside the 'Text' field
  3. 3Paste your message template using {{}} mapped variables from previous modules
  4. 4Map {{total_completed}} from the Set Variable module output
  5. 5Map the aggregated task list from the Text Aggregator output
  6. 6Click 'OK'
What you should see: The Text field shows a mix of static text and orange-highlighted dynamic variable chips. Clicking 'Run once' should post a real test message to your Slack channel within 30 seconds.
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}}
10

Canvas > Run once (bottom toolbar)

Run a test and verify the Slack output

Click 'Run once' in the bottom toolbar to trigger a manual test run. Watch the execution flow animate across the canvas — each module turns green when it succeeds and shows a bubble with the record count processed. Open your Slack channel and confirm the message arrived with the correct task count and project list. If the task list is empty, your Todoist date range filter may be returning no results — check Step 5's formula output in the Todoist module's execution log.

  1. 1Click 'Run once' in the bottom toolbar
  2. 2Watch each module's status bubble for green checkmarks
  3. 3Open your Slack channel to verify the message appeared
  4. 4Click any module bubble on the canvas to inspect the exact data it processed
  5. 5Check the Todoist module bubble to confirm tasks were returned
What you should see: Your Slack channel shows a formatted message with the week's date, total completed task count, and a line-by-line project breakdown. Every module on the canvas shows a green bubble with a nonzero record count.
Common mistake — If the Todoist module shows a green bubble but returns 0 tasks, the date filter is working but there are genuinely no completed tasks in the window — or your Todoist account is on the free plan and completed task history is blocked by the API. Test by completing a task manually and running again.
11

Canvas > bottom-left toggle > ON | Scenario Settings > Max stored executions

Activate the scenario

Once the test run looks correct, toggle the scenario from OFF to ON using the switch in the bottom left corner of the canvas. Make will now run this scenario automatically every Friday at the time you configured in Step 3. The scenario log (accessible from the Scenarios dashboard under 'History') records every run so you can audit past reports. Set the number of stored execution logs to at least 30 under Scenario Settings so you have a month of history.

  1. 1Click the toggle switch in the bottom left from OFF to ON
  2. 2Confirm the activation dialog if prompted
  3. 3Click 'Scenario Settings' (gear icon near the toggle)
  4. 4Set 'Max stored executions' to 30
  5. 5Click 'Save' and close settings
What you should see: The toggle shows blue/ON state, and the Scenarios dashboard lists this scenario with a green 'Active' badge and the next scheduled run time displayed.

Paste this formula block into Make's Text Aggregator 'Text' field to group tasks by project with a count per project and a visual separator between groups. The if() logic checks whether the current project name matches the previous one and only prints the project header when it changes — creating a cleaner grouped layout without needing an extra Iterator module.

JavaScript — Custom Function// Make Formula — Text Aggregator 'Text' field
▸ Show code
// Make Formula — Text Aggregator 'Text' field
// Groups completed tasks by project name with per-project headers
// Paste this into the Text field of the Text Aggregator module

... expand to see full code

// Make Formula — Text Aggregator 'Text' field
// Groups completed tasks by project name with per-project headers
// Paste this into the Text field of the Text Aggregator module

if(
  {{project_name}} != {{previousProjectName}};
  "\n📁 " + {{project_name}} + "\n" + "  • " + {{content}};
  "  • " + {{content}}
)

// In the Slack message Text field, wrap the aggregated output:
// *Weekly Progress Report — " + formatDate(now; "MMM D, YYYY") + "*
// \n✅ Total tasks completed: " + {{totalCount}} + "\n"
// + {{aggregatedText}}

// To add a per-project count, use a separate Numeric Aggregator
// before the Text Aggregator, grouped by project_id:
// Set 'Group by' to: {{project_id}}
// Set 'Value' to: 1 (counts one per task)
// Then map {{sum}} into the project header line above

Scaling Beyond 200+ completed tasks per week+ Records

If your volume exceeds 200+ completed tasks per week records, apply these adjustments.

1

Raise the Todoist result limit

Todoist's completed tasks endpoint returns 30 results by default. If your team completes more than 30 tasks per week, set the 'Limit' field in the Search Tasks module to 200. Make will paginate automatically up to this limit, but each page of results costs additional operations against your plan.

2

Switch to project-level aggregation to keep Slack messages readable

At 100+ tasks, listing every individual task in Slack becomes unreadable. Use Make's Array Aggregator grouped by project_id to produce per-project counts instead of task titles. Post only the count summary to Slack and link to a Google Sheet for the full task list.

3

Monitor Make operation consumption on high-task weeks

Each task bundle processed through the aggregator chain counts as one operation. A week with 150 completed tasks costs roughly 150 operations plus overhead — about 200 operations total per run. On Make's Core plan (10,000 ops/month), that's 800 ops/month for this scenario, leaving plenty of headroom. On the free plan (1,000 ops/month), four runs of 150 tasks will consume 80% of your monthly quota.

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 needs a scheduled report with real formatting logic — grouping tasks by project, calculating counts, building a multi-section Slack message. Make's visual canvas makes it straightforward to chain a Schedule trigger → Todoist fetch → Text Aggregator → Slack post without writing code. The date formula support (formatDate, addDays) inside module fields handles the dynamic 7-day window cleanly. The one scenario where you'd skip Make: if your team already lives in Zapier and only needs a basic task count with no grouping logic — Zapier's Formatter handles simple number aggregation with less setup friction.

Cost

The cost math is simple. Each weekly run processes roughly 50-200 operations depending on how many tasks your team completes. At 100 tasks per week, that's ~120 operations per run, ~480 operations per month. Make's free tier gives you 1,000 operations/month — enough to run this for free if you're under 200 tasks/week. The Core plan ($9/month) gives 10,000 operations, which handles teams completing up to 2,000 tasks/week before you'd need to think about plan limits. Zapier's equivalent would run the same scenario on the Starter plan ($19.99/month), and you'd hit Zap step limits faster because Zapier counts each task bundle as a separate Zap run.

Tradeoffs

Zapier has one advantage here: its Formatter step handles basic aggregation with zero configuration — no Text Aggregator setup required. But Zapier can't group tasks by project without Code by Zapier, which requires JavaScript knowledge. n8n does grouping natively with its Item Lists node and gives you full JavaScript in Function nodes for custom formatting — if your team has a developer, n8n produces cleaner output for complex reports. Power Automate integrates with Microsoft Teams instead of Slack, making it the wrong tool for this stack entirely. Pipedream lets you write the entire fetch-aggregate-post logic in a single async JavaScript function, which is faster to build for developers but offers no visual debugging. Make wins here because the visual canvas lets non-developers debug exactly where data transforms and the date formula support is genuinely powerful for scheduled reporting.

Three things you'll hit after setup. First, Todoist's completed task API is gated behind the Pro plan — this isn't obvious until your scenario silently returns 0 results on the free tier. Second, the Text Aggregator flattens everything into one string with no built-in grouping; if you want tasks sorted by project you need a separate aggregation step before it, which most tutorials skip. Third, Make's schedule trigger drifts by a few minutes over time — your 5pm Friday report might arrive at 5:03pm one week and 5:07pm the next. This is harmless for a status report but worth knowing so leadership doesn't think the automation is broken.

Ideas for what to build next

  • Add a per-project breakdown with task countsUse Make's Numeric Aggregator grouped by project_id to calculate how many tasks each project completed, then display those counts as a ranked list in the Slack message — shows leadership which teams are shipping the most.
  • Route different project summaries to different Slack channelsAdd a Router module after the Todoist fetch to split tasks by project and post engineering tasks to #eng-updates and marketing tasks to #marketing-updates, rather than dumping everything into one channel.
  • Add a Google Sheets logging step to track trends over timeAppend each week's total task count and project breakdown to a Google Sheet row after the Slack post — after 8 weeks you'll have a trend line showing whether your team's output is growing or slipping.

Related guides

Was this guide helpful?
Slack + Todoist overviewMake profile →