Add assigned GitHub issues to Todoist automatically

Whenever a GitHub issue is assigned to you, a clean, labeled task lands in your Todoist Engineering project with the issue link, due date, and priority already set.

Deterministic Code
GitHubTodoistEngineeringPersonal ProductivityData SyncNotifications & Alerts

Build a code-based workflow that turns GitHub issues assigned to me into Todoist tasks in my Engineering project. This is a fully deterministic CRUD pipeline. No LLM judgement needed.

Trigger: incoming webhook from GitHub. Configure it for the 'issues' event. Only run the workflow when action == 'assigned' AND the assignee.login matches the GitHub username on my connected GitHub account. Otherwise, exit early.

Step 1: Call GitHub's Get an Issue operation using the repo owner, repo name, and issue number from the webhook payload. Pull title, body, labels, milestone, repo full_name, number, and html_url from the response.

Step 2: Build the Todoist task fields:

- content: '[<repo_name>#<number>] <title>' where <repo_name> is the short repo name (the part after the slash in full_name).

- description: the issue body, followed by a blank line and the line 'Issue: <html_url>'. If the body is empty, just include the issue link.

- priority: 2 (Todoist P2) if any GitHub label name (case-insensitive) is one of 'bug', 'urgent', 'p0', or 'p1'. Otherwise priority 3 (P3).

- labels: map every GitHub label name directly to a Todoist label string. Pass them as-is (Todoist will create any that don't yet exist on the account).

- due_date: if the issue has a milestone with a due_on value, use the date portion (YYYY-MM-DD) of that timestamp. If no milestone or no due_on, omit the due_date field entirely.

- project_id: the user's Engineering project in Todoist. Expose this as a configurable parameter at the top of the workflow so a user can rename or switch projects without editing logic.

Step 3: Call Todoist's Create Task operation with those fields. Return success on 2xx. Surface any 4xx/5xx errors with the upstream message so the user can see what went wrong (missing project, invalid label, etc.).

Edge cases to handle cleanly: an issue with no body, no labels, no milestone, or a milestone without a due_on. None of these should block task creation. Pull requests show up under the 'issues' event too. Skip them by checking for the pull_request key on the issue object and exiting early if present.

Additional information

What does this prompt do?
  • Watches GitHub for the moment an issue gets assigned to you and creates a matching Todoist task in seconds.
  • Names the task '[repo#number] title' so your Todoist inbox stays scannable, and drops the issue body plus a link to the issue in the description.
  • Maps the GitHub labels onto Todoist labels and bumps priority to P2 if the issue is tagged bug, urgent, p0, or p1.
  • If the GitHub milestone has a due date, the Todoist task gets the same due date so deadlines never get lost in translation.
What do I need to use this?
  • A GitHub account where issues get assigned to you (personal repos or your team's).
  • A Todoist account with an Engineering project (or any project you want the tasks to land in).
  • Permission on the GitHub repos to install a webhook, or admin help if those repos are owned by your org.
How can I customize it?
  • Point the tasks at a different Todoist project, like Personal or a specific team board.
  • Adjust the priority rules. For example, treat anything tagged customer-facing as P1, or default everything to P4.
  • Change the task name format. Some teams prefer just the issue title, others want the milestone name baked in.
  • Add a filter so only issues from specific repos create Todoist tasks, useful if you're assigned across many repos but only want a subset in your task list.

Frequently asked questions

Does this work for issues assigned in private repos?
Yes. When you connect GitHub, you grant access to the repos you choose, including private ones. As long as the webhook is set up on those repos, assignments will flow through.
What happens if someone else gets assigned, or the whole team is assigned at once?
The workflow only creates a Todoist task when you specifically are the assignee. If multiple people are assigned and you're one of them, you still get a task. If you're not on the assignee list, nothing happens.
Will it create duplicates if the same issue is unassigned and reassigned to me?
By default, every assignment event creates a new task. If you want to avoid duplicates, you can add a step that checks Todoist for an existing task with the same '[repo#number]' prefix before creating a new one.
Can I use this with a Todoist Free account?
Yes. Creating tasks, setting labels, priorities, and due dates all work on the free plan. The only Todoist-paid features this touches are reminders and comments, neither of which this workflow uses.
What if the GitHub issue doesn't have a milestone or any labels?
The Todoist task is still created. It just lands with the default priority (P3) and no labels, with no due date attached. You can fill those in manually in Todoist later.

Stop copying GitHub issues into your task list by hand.

Connect GitHub and Todoist once, and every issue assigned to you shows up as a ready-to-work task seconds later.