Schedule icon
ListTasks icon
Loop icon
UpdateTask icon
DiscordIncomingWebhook icon

Escalate Overdue Todoist Tasks to Urgent Priority Daily

Escalate overdue Todoist tasks automatically with Kestra. A daily sweep raises each overdue task to urgent priority and reports the count to Discord.

Categories
Business

An overdue task with a normal priority looks exactly like every other task, which is how it stays overdue. This blueprint makes slippage visually loud: a daily sweep runs the Todoist overdue filter, iterates over every match, and sets each one to priority 4 through io.kestra.plugin.todoist.UpdateTask. Discord gets the count. The sweep is idempotent by construction, a task already at priority 4 simply stays at priority 4, so running it twice changes nothing.

How it works

  1. list_overdue (io.kestra.plugin.todoist.ListTasks) evaluates the Todoist filter overdue with fetchType: FETCH, exposing the matches as {{ outputs.list_overdue.rows }} and the count as {{ outputs.list_overdue.size }}.
  2. loop_tasks (io.kestra.plugin.core.flow.Loop) fans out over the rows. Each iteration receives one task as a JSON string in item.value, and fromJson(item.value).id extracts the task id.
  3. raise_priority (io.kestra.plugin.todoist.UpdateTask) sets priority: 4 on that task, moving it to the top of priority-sorted views.
  4. report posts the escalation count to Discord; the errors block posts a distinct alert when the sweep itself fails.
  5. A disabled-by-default Schedule trigger runs the sweep daily at 06:30, before the morning agenda is read.

What you get

  • Overdue work that escalates itself instead of blending in.
  • An idempotent daily job: re-escalating an already-urgent task is a no-op, so reruns and overlaps are harmless.
  • Per-task executions in the Loop, so one failing update never blocks the rest of the sweep from being visible in the UI.
  • A daily slippage number in Discord, which is a useful health metric on its own.

Who it's for

  • Ops teams running their duty roster out of Todoist who need slipped items to become impossible to ignore.
  • Team leads who would rather automate the nagging than perform it.
  • Anyone whose overdue list has quietly become an archive.

Why orchestrate this with Kestra

Todoist can show overdue tasks but will not change them for you. Kestra supplies the loop: a scheduled query, a fan-out over the results with per-item error isolation, secret handling for the API token, and an execution history that records exactly which tasks were escalated on which day.

Prerequisites

  • A Todoist account and a personal API token.
  • A Discord incoming webhook for the report and failure alerts.

Secrets

  • TODOIST_API_TOKEN: Todoist personal API token.
  • DISCORD_WEBHOOK_URL: Discord incoming webhook URL.

Quick start

  1. Add the two secrets to your Kestra namespace.
  2. Let a test task go overdue, then execute the flow manually and confirm it turns urgent in Todoist.
  3. Check the Discord message for the escalation count.
  4. Set disabled: false on the daily trigger.

How to extend

  • Narrow the sweep to one project with projectId, or tighten the filter to overdue & !assigned to: others.
  • Add a dueString such as today to the update, pulling slipped tasks back onto today's list as well.
  • Post the count to Slack instead by swapping the notification task.
  • Combine with the morning agenda digest blueprint so escalation runs just before the digest is posted.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.