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.
Integrations
GitHub
Todoist
Type
Categories
- Engineering
- Personal Productivity
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.
What it does
- 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 you’ll need
- 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 to 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.
Use cases
- Data Sync
- Notifications & Alerts