(Editor’s note: A version of this article was previously published on n8n.blog)
For early and growth stage startups, engineering resources are always stretched thin. Every hour a developer spends on manual tasks like triaging GitHub issues is an hour not spent on building product or shipping features. Automating these repetitive workflows not only saves time but also creates consistency, reduces friction for contributors, and keeps your team focused on what matters most — delivering value to customers. This blog shows how a simple n8n automation can streamline GitHub issue assignments and strengthen your developer operations from day one.
Key takeaways
Reduce manual triage: Automatically assign issues to creators or volunteers using an “assign me” trigger.
Encourage contribution: Make it easier for external contributors and internal teammates to claim work quickly.
Ensure consistency: Apply clear rules so assignment logic is the same across repos.
Protect team bandwidth: Cut down on repetitive admin work so engineers can focus on coding and shipping.
Extend easily: Add enhancements like label automation, team assignments, or dashboards as your repo activity scales.
Maintaining an open-source project or a busy repository means constantly triaging incoming GitHub issues. You can save time and reduce friction by automating assignment rules with n8n. This post explains a ready-to-use n8n workflow that automatically assigns the issue creator or a commenter who volunteers using a simple “assign me” trigger. It walks through each node, the key conditions, regex used to detect intent, and enhancements you can add.
Why automate GitHub issue assignment?
Manual triage slows contributors and maintainers. Automating assignments helps by:
Speeding up responses to new issues
Encouraging contributors to claim work quickly
Keeping assignment logic consistent across repositories
Reducing cognitive overhead for maintainers
Overview of the n8n workflow
The workflow uses a GitHub trigger and a handful of decision nodes to:
Listen for new issues and issue comments
Detect when an issue is created or a comment says “assign me”
Assign the issue to the issue creator, or to the commenter who volunteered
Add a comment if someone tries to claim an already-assigned issue
Visual nodes in the workflow
The template you provided contains these nodes (left-to-right logical flow):
Github Trigger1 — Listen to issues and issue_comment events.
Switch — Branch based on event action (e.g., opened for new issues or created for comments).
IF no assignee? — For new issues, check if there are no assignees and whether the issue body contains “assign me” intent.
Assign Issue Creator — If the issue body requests assignment, set the issue’s assignee to the issue creator and add a label such as assigned.
IF wants to work? — For comments, check whether the comment body includes an “assign me” pattern.
IF not assigned? — If the issue has no existing assignees, assign the commenter; otherwise, post a reply that the issue is already assigned.
NoOp / NoOp1 — Placeholder nodes used as false branches.
Assign Commenter — Assign a volunteer commenter to the issue and add a label.
Add Comment — Leave a comment when someone attempts to claim an already assigned issue.
Key node configurations explained
Github Trigger
Set the trigger to listen on the repository and events you care about. For this flow we use:
Events: issues and issue_comment
Repository: your repo name
Authentication: a GitHub OAuth token with repo access
Switch node
Use the action property from the webhook payload to decide which branch to follow. Example expression in n8n:
={{$json[“body”][“action”]}}
Rules should route opened (new issues) to the first branch and created (new comments) to the second branch.
Detecting intent: the regex for “assign me”
Both IF nodes use a regex to find volunteer intent. A practical regex used in the template is:
/[a,A]ssign[\w*\s*]*me/gm
This looks for variations like “Assign me” or “assign me please”. You can make it more robust by allowing punctuation and common variations, for example:
/\bassign( me|ing)?\b/i
The i flag makes it case-insensitive and \b ensures whole-word boundaries.
Checking assignees
To determine if an issue is already assigned, the workflow checks the length of issue.assignees in the webhook payload:
={{$json[“body”][“issue”][“assignees”].length}}
If length is 0, the issue is unassigned and can be claimed.
Assign Issue Creator & Assign Commenter
Both GitHub edit operations set assignees and can optionally add a label (example: assigned). The edit node uses expressions to pull the owner, repository name, and issue number from the webhook payload:
owner: ={{$json[“body”][“repository”][“owner”][“login”]}}repository: ={{$json[“body”][“repository”][“name”]}}issueNumber: ={{$json[“body”][“issue”][“number”]}}
For Assign Issue Creator the assignee value is:
= {{$json.body.issue[“user”][“login”]}}
For Assign Commenter the assignee is the commenter’s login:
= {{$json[“body”][“comment”][“user”][“login”]}}
Handling conflict and user feedback
If a user tries to claim an issue that’s already assigned, the Add Comment node posts a friendly reply like:
Hey @username,
This issue is already assigned to otheruser
Using comments to notify the claimant avoids confusion and surfaces the assignment publicly.
Permissions and security
Use a GitHub token with the minimum required scope (repo or public_repo depending on repo visibility).
Store credentials securely in n8n credentials and never hard-code tokens in nodes.
Rate limits: the GitHub API has rate limits. This workflow makes a small number of API calls on each event, but consider backoff logic if you integrate bulk operations.
Testing the workflow
Deploy the workflow in n8n and ensure the webhook URL is registered with GitHub (the Github Trigger node handles this when active).
Create a new issue with body text including “assign me” to trigger the Assign Issue Creator path.
Post a comment with “assign me” on an unassigned issue to trigger the Assign Commenter path.
Try claiming an already-assigned issue to confirm the Add Comment node response.
Possible enhancements
Team assignments: map certain keywords to GitHub teams instead of individual users.
Label automation: automatically add triage, good first issue, or priority labels based on keywords.
Approval step: route large or sensitive issues to maintainers for review before auto-assignment.
Throttle repeated claims: prevent the same user from spamming claim comments.
Dashboarding: log assignments to a spreadsheet or Slack channel for transparency.
Troubleshooting tips
Webhook not firing: confirm the trigger’s webhook ID and that the repo/webhook subscription is active.
Expressions returning undefined: test the incoming payload using the n8n node test view and update expressions to match the payload structure.
Permissions errors: check the token scopes, and whether the token belongs to a user with write access to the repo.
Regex misses: expand or relax the regex if contributors use alternative phrasing to volunteer.
Sample JSON snippet (from the template)
{“events”: [“issue_comment”,”issues”],”switch”: {“value1”: “={{$json[\”body\”][\”action\”]}}”,”rules”: [“opened”,”created”]},”if_no_assignee”: {“condition”: “={{$json[\”body\”][\”issue\”][\”assignees\”].length}} == 0″,”regex”: “/assign( me|ing)?/i”}}
Get started with York IE
This n8n template is a practical starting point to automate GitHub issue assignment. It’s lightweight, configurable, and easy to extend for teams with different workflows or policies. By detecting intent from issue bodies and comments and safely handling conflicts, the flow encourages contributors and reduces the load on maintainers.
For startups, speed and focus are competitive advantages. Automating GitHub issue assignment with n8n is a small but powerful step toward scaling your engineering workflows without adding overhead. By taking manual triage off the table, you create a smoother contributor experience, build momentum in your repos, and free your team to invest energy where it counts: building product and growing your business. Start simple, then layer on enhancements as your projects and community expand.
























