GitHub n8n integrationAutomate GitHub with n8n.
Every push, issue and release in a repository can start a workflow. The GitHub n8n integration exposes 38 operations across 8 resources, and the GitHub Trigger listens to 42 webhook events. It fits teams that want releases, reviews and issue triage handled without switching tabs all day.
Verified Trustpilot reviews · AI, automation & growth agency
What does the GitHub n8n integration actually cover?
The GitHub n8n integration is a pair of built-in nodes. The GitHub node calls the GitHub API to read and write files, issues, releases and repository data. The GitHub Trigger registers a webhook on a repository, meaning a URL that GitHub calls with the event payload, so a workflow starts the moment something happens there. Neither node needs installing: both ship with n8n, on n8n Cloud and on a self-hosted instance alike.
Take releases first, since that is where manual steps pile up. A tag is ready, the workflow calls release.create with the Tag, keeps it as a Draft while someone proofreads the notes, then flips it live with release.update. The same run can push the release body into Slack so nobody opens the repository just to find out what shipped.
Issue triage is the second obvious one. The issues event fires when a ticket is opened, labeled, assigned or closed, and issue.edit writes back labels, assignees and a state reason such as not_planned. When a weekly digest beats a live reaction, repository.getIssues filters by State, Labels and Updated Since, and the rows land in Google Sheets, or in Jira when engineering tracks work there.
Third, the repository as storage. file.create commits a file from typed text or from a binary field, under a Commit Message you control, which is how a daily backup of n8n workflows ends up versioned in a repo. file.list walks a folder, file.get returns one file, file.delete removes what has expired.
The node stops at 38 operations. Anything the GitHub API offers beyond them goes through the HTTP Request node, which reaches any endpoint while reusing the same GitHub credential as predefined authentication, so there is no second token to manage.
Two limits are worth knowing before you build. Lists are paginated: leave Return All off and the run stops at Limit, and for pull requests that Limit tops out at 100. Traffic operations look back over a fixed window, repository.listPopularPaths and repository.listReferrers return the top 10 entries over the last 14 days, so a quarterly view only exists if each run is stored, in Postgres for example. Still comparing platforms? The n8n review goes through the trade-offs, and the n8n training takes the nodes one by one.
How do you connect GitHub to n8n?
- 01
Generate a personal access token
Verify your email address with GitHub, then open your profile Settings, Developer settings, and under Personal access tokens pick Tokens (classic). That is the type n8n recommends: fine-grained tokens can be scoped to given repositories and permissions, but they carry limitations. Name the token in the Note field, pick an Expiration, and select the Scopes. For most GitHub nodes, add
repo. - 02
Create the credential in n8n
In the Credentials menu, add a GitHub credential. Leave GitHub server alone unless you run GitHub Enterprise Server, where it takes your own server URL. Enter your User name exactly as it reads on your GitHub profile, then paste the Access Token. Built once, that credential comes back in the dropdown of every GitHub node.
- 03
Switch to OAuth2 if you prefer
OAuth2 is the other supported method, for the GitHub node and the GitHub Trigger. On self-hosted n8n, register an OAuth app: Settings, Developer settings, OAuth apps, New OAuth App. Add an Application name and a Homepage URL, copy the OAuth Redirect URL from n8n into the GitHub Authorization callback URL, then carry the Client ID and Client Secret back.
What can start a workflow from GitHub ?
Github Trigger is the node that starts a workflow when something happens in GitHub. It listens to 42 events, listed below by family. Pick one or several, activate the workflow: n8n registers the webhook on your GitHub account.
What you see in n8n
Every event, by family
One row per object, one chip per action. The event to tick in the node is object.action; hover a chip to read exactly when it fires.
check_run.*1check_run. check_run
check_suite.*1check_suite. check_suite
commit_comment.*1commit_comment. commit_comment
create.*1create.create
delete.*1delete.delete
deploy_key.*1deploy_key. deploy_key
deployment.*1deployment.deployment
deployment_status.*1deployment_status. deployment_status
fork.*1fork.fork
github_app_authorization.*1github_app_ authorization. github_app_ authorization
gollum.*1gollum.gollum
installation.*1installation.installation
installation_repositories.*1installation_repositories. installation_repositories
issue_comment.*1issue_comment. issue_comment
issues.*1issues.issues
label.*1label.label
marketplace_purchase.*1marketplace_purchase. marketplace_purchase
member.*1member.member
membership.*1membership.membership
meta.*1meta.meta
milestone.*1milestone.milestone
org_block.*1org_block. org_block
organization.*1organization.organization
page_build.*1page_build. page_build
project.*1project.project
project_card.*1project_card. project_card
project_column.*1project_column. project_column
public.*1public.public
pull_request.*1pull_request. pull_request
pull_request_review.*1pull_request_ review. pull_request_ review
pull_request_review_comment.*1pull_request_ review_ comment. pull_request_ review_ comment
push.*1push.push
release.*1release.release
repository.*1repository.repository
repository_import.*1repository_import. repository_import
repository_vulnerability_alert.*1repository_vulnerability_ alert. repository_vulnerability_ alert
security_advisory.*1security_advisory. security_advisory
star.*1star.star
status.*1status.status
team.*1team.team
team_add.*1team_add. team_add
watch.*1watch.watch
The trigger also accepts * (any event). Handy for logging, dangerous in production.
Configuration notes
01Set up the GitHub Trigger
The trigger watches one repository and starts the workflow when the events you picked happen there. Activate the workflow and n8n registers a webhook with GitHub, that is a URL GitHub calls with the event payload, so each event lands in n8n within seconds. No polling, no interval to set, nothing to schedule. The node is at version 1.
Key parameters
- Repository Owner: the user or the organization the repository belongs to, picked from the list or typed in.
- Repository Name: the repository itself. Owner and name together decide where the webhook gets created.
- Events: what the workflow subscribes to, out of the 42 available. The wildcard
*takes them all at once, which is handy while you inspect a payload and heavy once in production. - Insecure SSL, inside Options: whether GitHub verifies the SSL certificate of the n8n host when it delivers payloads. It only matters on a self-hosted instance.
02Push and Pull Request events
push is the default event of the trigger and fires on a push to a repository branch; tag pushes fire it too. pull_request is the busiest of the four. It reacts when a pull request is opened, edited, closed, reopened, assigned, unassigned, labeled, unlabeled, locked, unlocked, synchronized, marked ready for review, and when a review is requested or a request is removed. pull_request_review fires when a review is submitted into a non pending state, when its body is edited and when the review is dismissed. pull_request_review_comment covers comments left on the unified diff in the Files Changed tab, created, edited or deleted.
Key parameters
- Events: tick the four separately. Each arrives with its own payload, so whatever follows the trigger has to know which event it received before acting on it.
03Issues, Issue Comment, Label and Milestone events
issues follows a ticket from end to end: opened, edited, deleted, transferred, pinned, unpinned, closed, reopened, assigned, unassigned, labeled, unlabeled, locked, unlocked, milestoned and demilestoned. issue_comment fires when a comment is created, edited or deleted. label reports a repository label created, edited or deleted, and milestone does the same for a milestone created, closed, opened, edited or deleted. Put together, these four keep anything living outside GitHub in step with what the repository says.
Key parameters
- Events: subscribing to
issuesalone already produces a lot of traffic, since a single triage session fires it on every label and every assignment.
completed.04Release, Check Run, Check Suite, Status and Deployment events
This family is the one a delivery pipeline listens to. release fires when a release is published, unpublished, created, edited, deleted or prereleased. check_run fires when a check run is created, rerequested, completed or has a requested action, and check_suite when a suite is completed, requested or rerequested. status reports a change in the status of a Git commit. deployment and deployment_status represent a deployment and its status. page_build fires on a push to a branch with GitHub Pages enabled, gh-pages for project pages, master for user and organization pages.
Key parameters
- Events:
releaseandstatustravel well together, since one tells you what shipped and the other whether the commit behind it is green.
05Repository, Member, Team, Star and Security events
Governance events rarely get automated, which is exactly why they are worth wiring. repository fires when a repository is created, archived, unarchived, renamed, edited, transferred, made public or made private, and organization hooks add the deletion case. member reports a collaborator who accepts an invitation, is removed, or has permissions changed. star fires when a star is added or removed, watch when someone stars a repository, fork when a user forks it, public when a private repository is open sourced. On the security side, repository_vulnerability_alert fires when an alert is created, dismissed or resolved, and security_advisory when an advisory is published, updated or withdrawn.
Key parameters
- Events: four of them only fire on organization hooks,
membership,org_block,organizationandteam, so a repository level webhook will never see them.
What can the GitHub node do?
The GitHub node exposes 38 operations across 8 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Create | Get | Get Many | Update | Delete | Create Comment | Disable | Dispatch | Dispatch and Wait for Completion | Edit | Enable | Get Issues | Get License | Get Members | Get Profile | Get Pull Requests | Get Repositories | Get Usage | Get Issues | Invite | List | List Popular Paths | List Referrers | Lock |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| File | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||||||||||||||
| Issue | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||||||||||||||
| Organization | ✓ | ✓ | ||||||||||||||||||||||
| Release | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||||||||||||||
| Repository | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||||||||||||
| Review | ✓ | ✓ | ✓ | ✓ | ||||||||||||||||||||
| User | ✓ | ✓ | ✓ | |||||||||||||||||||||
| Workflow | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Operations index
File
5 operationsCreate a file
file.createWhat you see in n8n
Notes & use cases
Commits a new file into the repository. The content comes either from text you type or from a binary field produced by an earlier node, so a generated PDF travels the same path as a Markdown page.
Key parameters
- File Path: the full path inside the repository,
docs/README.mdstyle, not just the file name. - Binary File: switches the source. Off, n8n takes File Content; on, it takes the file sitting in Input Binary Field.
- Commit Message: the line that shows up in the repository history, so make it say which workflow wrote the file.
Delete a file
file.deleteWhat you see in n8n
Notes & use cases
Removes a file from the repository and records the removal as a commit, like any other change.
Key parameters
- File Path: the complete path of the file to remove; when it comes from a previous node, an expression such as
{{ $json.filePath }}saves you from hardcoding it. - Commit Message: required here too, and the only explanation the log will ever carry.
Edit a file
file.editWhat you see in n8n
Notes & use cases
Writes new content over a file that already exists and commits the result. Same two sources as the create operation, text or binary, with one difference that matters: the file has to be there.
Key parameters
- File Path: points at the file to change, complete from the repository root,
docs/README.mdrather thanREADME.md. - File Content: the new text, usually built by the node just before.
- Binary File with Input Binary Field: the other route, when the new version arrives as binary data.
- Commit Message: required.
Get a file
file.getWhat you see in n8n
Notes & use cases
Pulls a single file out of the repository and hands it to the next node. You get the raw API response by default; turn As Binary Property on and the file arrives as binary data instead, ready to be attached or uploaded somewhere else.
Key parameters
- File Path: the full path of the file to read.
- Put Output File in Field: the name of the output binary field that will hold the file.
- Reference, in Additional Parameters: a commit, branch or tag name. Left empty, GitHub reads the default branch of the repository, usually master.
List files
file.listWhat you see in n8n
Notes & use cases
Lists what a folder contains, one item per entry. That is how a workflow loops over a directory whose content it cannot know in advance.
Key parameters
- File Path: the folder to read, given as a complete path from the repository root; the field carries the same label as in the other file operations.
Issue
5 operationsCreate an issue
issue.createWhat you see in n8n
Notes & use cases
Opens a new issue in the repository and returns it, including the number that every later operation on that ticket will ask for.
Key parameters
- Title: the only required field, and the line people read in the issue list.
- Body: optional, and in practice where the error message, the payload or the link that justifies the ticket goes.
- Assignees: a collection of usernames. The Labels collection adds a Label and an Assignee at creation time.
Create a comment on an issue
issue.createCommentWhat you see in n8n
Notes & use cases
Posts a comment under an existing issue. Nothing else moves: the issue keeps its state, its labels and its assignees.
Key parameters
- Issue Number: a number, not a title. Take it from the step that created or read the issue rather than typing it by hand.
- Body: the text of the comment, often a result the workflow has just computed.
Edit an issue
issue.editWhat you see in n8n
Notes & use cases
Updates a ticket that is already open. Everything changeable sits in the Edit Fields collection, and you add only the fields you actually want to touch.
Key parameters
- Issue Number: the ticket to modify.
- State:
openorclosed, paired with State Reason, which takescompleted,not_plannedorreopened. - Labels, Assignees, Title, Body: the rest of the collection, for a re-routing or a rewrite.
not_planned after a triage session.Get an issue
issue.getWhat you see in n8n
Notes & use cases
Looks up one issue and its data, with no effect on the repository. It is the read step a workflow puts in front of a decision: look at the state, look at the labels, then choose the branch.
Key parameters
- Issue Number: the number of the ticket to read.
Lock an issue
issue.lockWhat you see in n8n
Notes & use cases
Locks the conversation on an issue, which stops the thread from collecting new comments.
Key parameters
- Issue Number: the ticket to lock.
- Lock Reason:
off-topic,too heated,resolvedorspam. The reason travels with the lock, which saves writing a closing comment to explain it.
resolved every ticket closed more than a month ago, to keep the discussion on current work.Organization
2 operationsGet repositories for an organization
organization.getRepositoriesWhat you see in n8n
Notes & use cases
Every repository of an organization comes back as its own item, which is what makes a loop possible over an account nobody wants to list by hand.
Key parameters
- Return All: on, n8n follows the pages of the API until the organization is fully listed; off, it stops at Limit.
- Limit: the maximum number of repositories returned when Return All stays off.
Get members for an organization
organization.getMembersWhat you see in n8n
Notes & use cases
Returns the people who belong to an organization, one item per member. Same pagination switch as the repository listing, pointed at a very different question: who has access.
Key parameters
- Return All: left off, n8n returns up to Limit members and stops there; turned on, it walks the whole roster.
Release
5 operationsCreate a release
release.createWhat you see in n8n
Notes & use cases
Creates a release on a tag. It goes out published right away, or it waits as a draft while someone reads the notes over and decides if it is ready.
Key parameters
- Tag: the tag of the release, the single required field.
- Name and Body, in Additional Fields: the title of the release and the notes that go with it.
- Draft keeps the release unpublished, Prerelease marks it as not production ready.
- Target Commitish: the branch or commit SHA the tag is created from. Unused when the tag already exists, and left empty it falls back to the default branch, usually master.
Delete a release
release.deleteWhat you see in n8n
Notes & use cases
Deletes one release, identified by its ID. There is nothing else to fill in, which also makes it the operation to double check before you activate the workflow.
Key parameters
- Release ID: the identifier of the release, not its tag and not its name. It comes from a listing step such as Get Many.
Get a release
release.getWhat you see in n8n
Notes & use cases
Fetches a single release and returns its data, changing nothing along the way. This is the step that gives a workflow the name and the notes of a release when all it received was an identifier.
Key parameters
- Release ID: the release to read, handed over by a Get Many step or by the operation that created it a few nodes earlier.
Get many releases
release.getAllWhat you see in n8n
Notes & use cases
Brings back the releases of a repository. Useful when a workflow needs the history rather than the latest version.
Key parameters
- Return All: on, n8n pages through the whole release history; off, it stops at Limit.
- Limit: how many releases come back when Return All is off.
Update a release
release.updateWhat you see in n8n
Notes & use cases
Changes a release that already exists, whether that means its notes, its name, its tag or its status.
Key parameters
- Release ID: which release to update.
- Draft: set to false, the release becomes published, which is how a two step release process ends.
- Body, Name, Tag Name, Prerelease and Target Commitish: the rest of the Additional Fields.
Repository
7 operationsGet a repository
repository.getWhat you see in n8n
Notes & use cases
No parameter to fill in here. The operation hands back the data GitHub holds about a single repository, which makes it a cheap opening step: a workflow that is about to write files or open tickets can read the repository first and stop early if the answer is not what it expected.
Get issues of a repository
repository.getIssuesWhat you see in n8n
Notes & use cases
Pulls the issues of a repository with the same filters you would reach for in the GitHub issue list.
Key parameters
- State:
open,closedorall. - Labels: several labels at once, separated by a comma.
- Updated Since: keeps only the issues updated at or after that moment.
- Assignee, Creator, Mentioned: narrow down by person.
- Sort and Direction:
created,updatedorcomments, ascending or descending. - Return All: off, the run stops at Limit.
Get the license of a repository
repository.getLicenseWhat you see in n8n
Notes & use cases
When GitHub detects a license in the repository, this operation gives back the contents of that file. It takes no parameter, so it slots straight after a listing step and answers repository after repository. Nothing detected means nothing to read, and that silence is a result in itself.
Get the profile of a repository
repository.getProfileWhat you see in n8n
Notes & use cases
Reads the community profile of a repository: metrics, health score, description, license and the rest of what GitHub measures there. No parameter to set, so the cost of adding it to a workflow is close to zero.
Get pull requests of a repository
repository.getPullRequestsWhat you see in n8n
Notes & use cases
A review workflow that runs on a schedule rather than on an event starts here, with the pull requests of a repository brought back as items.
Key parameters
- State:
open,closedorall. - Sort:
created,updated,popularityby number of comments, orlong-running, which keeps only pull requests open for more than a month with activity in the past month. - Limit: capped at 100, the maximum the API accepts for this list.
long-running that names the reviews nobody has picked up.List popular paths in a repository
repository.listPopularPathsWhat you see in n8n
Notes & use cases
This one gives the top 10 content paths of a repository over the last 14 days. No filter, no date range: the window is fixed, so a longer view only exists if the workflow stores each run somewhere.
List the top referrers of a repository
repository.listReferrersWhat you see in n8n
Notes & use cases
Same fixed window, different question: the top 10 referring domains of a repository over the last 14 days, in other words where its visitors came from. No parameter here either, and the same consequence, history is yours to keep.
Review
4 operationsCreate a review
review.createWhat you see in n8n
Notes & use cases
Adds a review to an open pull request, with a verdict attached that a plain comment cannot carry.
Key parameters
- PR Number: the number of the pull request to review, typed in or read from an earlier node with an expression, written
{{ $json.field }}. - Event: the verdict,
approve,requestChanges,commentorpending; pending leaves the review unsubmitted. - Body: the review text, required by GitHub when the Event is Request Change or Comment.
- Commit ID, in Additional Fields: the SHA of the commit to review when it is not the latest.
Get a review
review.getWhat you see in n8n
Notes & use cases
Returns one review, the one whose identifier the node receives, on the pull request you name.
Key parameters
- PR Number: the pull request that holds the review; both values are required, so the pair travels together through the workflow.
- Review ID: the identifier of the review to fetch, usually kept from the node that created it.
Get many reviews
review.getAllWhat you see in n8n
Notes & use cases
Every review left on one pull request comes back, one item per review.
Key parameters
- PR Number: the pull request whose review history the node walks through.
- Return All: on, n8n follows the pages of the GitHub API until the last review; off, it stops at the number set in Limit.
- Limit: the maximum number of reviews to bring back while Return All stays off.
Update a review
review.updateWhat you see in n8n
Notes & use cases
Only the text of an existing review changes here: the node exposes Body and nothing else to edit.
Key parameters
- PR Number: the pull request the review sits on.
- Review ID: the review to rewrite, the same identifier used to read it back.
- Body: the new text, which replaces what was posted before.
User
3 operationsGet a user's repositories
user.getRepositoriesWhat you see in n8n
Notes & use cases
The repositories of the user come out as a list, one item each. No identifier is asked for in the node: only the pagination pair is on screen.
Key parameters
- Return All: on, the node keeps asking GitHub for the next page until every repository is out; off, it stops early.
- Limit: how many repositories to bring back while Return All is off.
Get a user's issues
user.getUserIssuesWhat you see in n8n
Notes & use cases
Issues assigned to the user land in the workflow, and the Filters collection trims the pile before it ever reaches the next node.
Key parameters
- State:
open,closedorall. - Labels: one or several labels separated by commas, to keep only the issues carrying them.
- Updated Since: a date and time; only issues updated at or after it come through.
- Sort and Direction: order by
created,updatedorcomments, ascending or descending. - Mentioned: keeps only the issues where a given user was mentioned.
Invite a user
user.inviteWhat you see in n8n
Notes & use cases
Sends an organization invitation to an email address, so a new teammate lands in the right place without anyone opening the members page.
Key parameters
- Organization: the GitHub organization the person is invited to.
- Email: the address of the invited person, in the form the field shows as a placeholder,
name@email.com.
Workflow
7 operationsDisable a workflow
workflow.disableWhat you see in n8n
Notes & use cases
Switches one repository workflow off. It stays out of service until the Enable operation puts it back. Watch the word here: this is a workflow of the GitHub repository, not the n8n workflow around it.
Key parameters
- Workflow: the one to switch off, chosen in the field of the same name.
Dispatch a workflow event
workflow.dispatchWhat you see in n8n
Notes & use cases
A dispatch event starts the repository workflow on demand, and n8n hands back control straight away: the execution does not sit and wait for the job to end.
Key parameters
- Workflow: the one to dispatch.
- Ref: the git reference the run uses, a branch or a tag name, which is how the same workflow goes out on a test branch or on a released tag.
- Inputs: a JSON object carrying the input parameters the workflow expects.
Dispatch a workflow event and wait for completion
workflow.dispatchAndWaitWhat you see in n8n
Notes & use cases
The launch is the same as Dispatch, what follows is not: the execution pauses and waits for a webhook, a URL called from the outside, before the next node runs.
Key parameters
- Workflow: the one to dispatch.
- Ref: the branch or tag name the run starts from.
- Inputs: a JSON object read by the run, handy to pass a version number or a target.
Enable a workflow
workflow.enableWhat you see in n8n
Notes & use cases
Enabling puts a parked workflow back to work: its own triggers fire again as soon as the call goes through.
Key parameters
- Workflow: the one to bring back, selected the same way as in Disable.
Get a workflow
workflow.getWhat you see in n8n
Notes & use cases
The node reads one workflow back from the repository and returns it as a single item, which is the quickest way to confirm that the identifier at hand points where you think it does.
Key parameters
- Workflow: the one to read.
Get the usage of a workflow
workflow.getUsageWhat you see in n8n
Notes & use cases
GitHub reports the usage recorded for one workflow, which is the figure to watch when a repository consumes more than the team expected.
Key parameters
- Workflow: the one whose usage the node asks for.
List workflows
workflow.listWhat you see in n8n
Notes & use cases
Nothing to fill in here: the operation takes no parameter at all and returns the workflows as items, one per workflow, ready to loop over in the next node. It is the entry point when the identifiers are not known in advance.
Need help automating GitHub with n8n?
A person reads every message.


