Oct 26, 2025

Automate Todoist Daily Tasks with n8n

Automate Todoist Daily Tasks from a Template with n8n Save time and eliminate repetitive work by using n8n to automatically generate daily Todoist tasks from a template project. This workflow copies template tasks, reads scheduling instructions from each task’s description (days and due times), creates tasks in your Inbox, avoids duplicates, and posts notifications to […]

Automate Todoist Daily Tasks with n8n

Automate Todoist Daily Tasks from a Template with n8n

Save time and eliminate repetitive work by using n8n to automatically generate daily Todoist tasks from a template project. This workflow copies template tasks, reads scheduling instructions from each task’s description (days and due times), creates tasks in your Inbox, avoids duplicates, and posts notifications to Slack. This guide walks through the flow, the parsing logic, setup steps, and customization tips so you can get running in minutes.

Why automate Todoist with n8n?

  • Reduce manual task creation for recurring daily routines.
  • Use a single template project as the source of truth.
  • Customize due days and times using a simple description format.
  • Prevent duplicate tasks and keep your Inbox clean.
  • Receive realtime alerts in Slack when tasks are created.

Overview of the n8n workflow

The workflow has two parallel sub-flows:

  • Inbox cleanup flow: Runs every morning, gets current Inbox tasks, detects tasks labeled daily, and deletes them so you don’t accumulate old daily tasks.
  • Template creation flow: Runs on the same schedule, reads tasks from a template project, parses the description for days and due instructions, filters tasks for today, then creates new Inbox tasks with due date/time and a temporary daily label. A Slack notification is sent after creation.

Key nodes explained

Schedule Trigger

Two schedule trigger nodes run at the configured time (for example, 05:10). One triggers the Inbox cleanup, the other triggers creation from the template. Running both ensures that old daily tasks are removed before new ones are created.

Todoist: getAll (Template Project Tasks)

Reads all tasks from the configured template project. These template tasks should contain scheduling metadata inside the task description, e.g.:

days:mon,tues; due:8am

This tells the workflow to create that task on Monday and Tuesday, due at 8:00 AM.

Code node: Parse Task Details

This node extracts the content and description, splits description metadata by semicolons, and assigns keys such as days and due to the item. It also converts the human-friendly time string (like 8am or 1.30pm) into a UTC timestamp that Todoist accepts as a dueDateTime.

Example time parsing function used in the node:

function parseTimeString(timeString) {
  const regex = /^(\d{1,2})(\.)?(\d{2})?([ap]m)$/i;
  const match = timeString.match(regex);
  if (!match) {
    throw new Error("Invalid time format");
  }
  let hours = parseInt(match[1], 10);
  let minutes = match[3] ? parseInt(match[3], 10) : 0;
  const period = match[4].toLowerCase();
  if (hours === 12) {
    hours = period === 'am' ? 0 : 12;
  } else {
    hours = period === 'pm' ? hours + 12 : hours;
  }
  if (minutes < 0 || minutes >= 60) {
    throw new Error("Invalid minutes");
  }
  const now = DateTime.now().set({ hour: hours, minute: minutes, second: 0, millisecond: 0 });
  return now.toUTC();
}

Note: the function uses the Luxon DateTime object available in n8n code nodes. It sets the time on today’s date and converts to UTC before returning. This produces a dueDateTime value compatible with the Todoist API.

Filter node: Filter Tasks For Today

Checks whether the parsed days metadata contains today’s weekday token (e.g., mon, tues, wed, etc.). Items that match are passed forward to task creation.

Todoist: create (Create Inbox Task)

Creates a new task in the Inbox project. Each created task gets a temporary daily label so the cleanup flow can find and delete it on the following run. The create node maps:

  • content => the task title
  • description => original description metadata
  • dueDateTime => the ISO UTC timestamp returned by the parsing function

Slack Notification

Sends a simple message to a chosen channel after creating each task. The message can include the task name and due time so your team knows what was added.

Setup steps

  1. Create or open n8n and import the workflow JSON (the template provided).
  2. Add your Todoist credentials in n8n (API token) and select the appropriate project IDs for the template and Inbox nodes.
  3. Ensure the template project contains tasks with metadata in the description, e.g. days:mon,tues; due:8am. You can include multiple comma-separated days.
  4. Set the schedule trigger times to your preferred run time.
  5. Provide Slack credentials and channel if you want notifications.
  6. Test the flow by running the template trigger once and check your Todoist Inbox and Slack channel.

Description metadata format and examples

Keep task descriptions simple and consistent so the parser can reliably extract metadata. Use this pattern:

days:mon,tues; due:8am

Examples:

  • days:mon,wed,fri; due:7.30am — Create Mon/Wed/Fri at 7:30 AM.
  • days:tues; due:1pm — Create every Tuesday at 1:00 PM.
  • days:mon,tues,wed,thurs,fri; due:9am — Weekday morning reminder.

How duplicates are prevented

The workflow uses a two-phase approach: first it removes any existing Inbox tasks that still carry the temporary daily label from previous runs. Then it creates fresh tasks from the template. This prevents duplicates while keeping the Inbox tidy. If you prefer to keep historical daily tasks, modify the delete node or change the label behavior accordingly.

Customization ideas

  • Recurring tasks beyond daily: Extend the parser to support date ranges or monthly schedules.
  • Multiple timezones: Map tasks to specific timezone offsets if you manage people in different regions.
  • Advanced filters: Only create tasks for certain tags or priorities.
  • Retry and error handling: Add error catching nodes to notify you when a task fails to be created.
  • Use comments: Add additional metadata like project: or priority: to the description and map them into the create node.

Troubleshooting

Tasks aren’t created

– Verify your Todoist API credential in n8n.
– Confirm the template project ID is set correctly in the Todoist getAll node.
– Check that the description format is correct (use days: and due:).
– Examine the Code node logs for parsing errors (invalid time format).

Times show incorrectly

The parser constructs a datetime for the local day and converts to UTC. If tasks appear at the wrong hour, review the server timezone or adjust the parsing logic to use a specific timezone (e.g., DateTime.now().setZone('America/New_York')).

Duplicates remain

Ensure the cleanup flow runs before the creation flow and that the daily label is applied to newly created tasks. Modify trigger times or add a short delay if necessary.

Security and maintenance considerations

  • Store your Todoist and Slack credentials securely in n8n’s credential manager.
  • Keep the template project accessible only to accounts that should author template tasks.
  • Monitor n8n execution logs for failures and set up alerting if you rely on these tasks for business-critical workflows.

Conclusion & next steps

Using this n8n template you can automate the creation of daily Todoist tasks from a single template project, parse simple description metadata for scheduling, prevent duplicate Inbox clutter, and get Slack alerts for visibility. It’s a flexible base you can extend to match your team’s workflows.

Try it now: Import the workflow JSON into n8n, add Todoist and Slack credentials, and run a test. If you want help customizing the parser or adding timezone support, reach out or book a consultation.

Want more automation guides like this? Subscribe for weekly tips and ready-to-import n8n templates.

Leave a Reply

Your email address will not be published. Required fields are marked *