tutorial

Building Your First n8n Workflow: A Step-by-Step Tutorial

Step-by-step tutorial for building a GitHub-to-Slack notification workflow in n8n with conditional routing and logging.

Building Your First n8n Workflow: A Step-by-Step Tutorial

n8n is a powerful workflow automation platform that gives you visual building and code-level control in one tool. This tutorial walks you through building your first real workflow from scratch.

What We Will Build

We will create a workflow that monitors a GitHub repository for new issues and sends a formatted notification to a Slack channel with issue details. This is a practical, real-world automation that many development teams use.

Workflow Architecture

Here is the overall flow of our automation:

flowchart TD
    A[GitHub Trigger: New Issue Created] --> B[Extract Issue Details]
    B --> C{Is it a bug?}
    C -->|Yes| D[Format Bug Alert Message]
    C -->|No| E[Format General Notification]
    D --> F[Send to #bugs Slack Channel]
    E --> G[Send to #general Slack Channel]
    F --> H[Log to Google Sheet]
    G --> H[Log to Google Sheet]

Prerequisites

Before starting, make sure you have:

  1. n8n installed either self-hosted (Docker recommended) or a cloud account at app.n8n.cloud
  2. GitHub account with a repository to monitor
  3. Slack workspace with permission to install apps
  4. Google account for the Google Sheets logging step (optional)

Step 1: Set Up the GitHub Trigger

Every n8n workflow starts with a trigger node. This is the event that kicks off your automation.

  1. Open n8n and click Add workflow
  2. Click the + button to add your first node
  3. Search for GitHub Trigger and select it
  4. Click Create new credential and authenticate with your GitHub account
  5. Configure the trigger:
    • Repository Owner: your GitHub username or organization
    • Repository Name: the repo you want to monitor
    • Events: select Issues and check opened
  6. Click Listen for Test Event and create a test issue in your repo to capture sample data

The trigger node will now fire every time a new issue is created in your repository.

Step 2: Extract and Transform Issue Data

Add a Set node to extract the fields we need:

  1. Click + after the GitHub Trigger node
  2. Add a Set node
  3. Configure the following fields:
    • title: {{ $json.issue.title }}
    • body: {{ $json.issue.body }}
    • author: {{ $json.issue.user.login }}
    • url: {{ $json.issue.html_url }}
    • labels: {{ $json.issue.labels.map(l => l.name).join(", ") }}
    • is_bug: {{ $json.issue.labels.some(l => l.name === "bug") }}

This step normalizes the GitHub webhook data into a clean format for the rest of the workflow.

Step 3: Add Conditional Routing

We want bug reports to go to a dedicated channel. Add an IF node:

  1. Click + after the Set node
  2. Add an IF node
  3. Set the condition: is_bug equals true
  4. This creates two output branches: true (bugs) and false (other issues)

Step 4: Configure Slack Notifications

Add two Slack nodes, one for each branch:

Bug Alert (True branch)

  1. Click + on the true output
  2. Add a Slack node
  3. Connect your Slack workspace credential
  4. Configure:
    • Channel: #bugs (or your bug channel)
    • Message Text: Format a rich message:
:bug: *New Bug Report*
*Title:* {{ $json.title }}
*Author:* {{ $json.author }}
*Labels:* {{ $json.labels }}
*Link:* {{ $json.url }}

{{ $json.body }}

General Notification (False branch)

  1. Click + on the false output
  2. Add another Slack node
  3. Configure similarly but send to #general with a different emoji:
:clipboard: *New Issue*
*Title:* {{ $json.title }}
*Author:* {{ $json.author }}
*Link:* {{ $json.url }}

Step 5: Log to Google Sheets (Optional)

Add a Google Sheets node after both Slack nodes to maintain a log:

  1. Add a Merge node to combine both branches
  2. Add a Google Sheets node
  3. Connect your Google account
  4. Select your spreadsheet and worksheet
  5. Map columns: Date, Title, Author, Type (bug/other), URL

This creates an automatic issue log that your team can reference.

Step 6: Test and Activate

  1. Click Execute Workflow to run a test with the sample data from Step 1
  2. Verify each node executed successfully (green checkmarks)
  3. Check your Slack channels for the test notification
  4. Check your Google Sheet for the logged entry
  5. Fix any field mapping issues
  6. Toggle the workflow to Active in the top-right corner

Error Handling

Add error handling to make your workflow production-ready:

  1. Click on any node and select Settings
  2. Enable Continue on Fail for non-critical nodes (like the Google Sheets logging)
  3. Add an Error Trigger workflow that sends you a notification if the main workflow fails
  4. Set up retry logic for transient API failures

Next Steps

Now that you have a working workflow:

  • Add more triggers: Monitor pull requests, comments, or releases
  • Enrich notifications: Add assignee information, milestone details, or priority labels
  • Build related workflows: Auto-assign issues based on labels, create Jira tickets from GitHub issues, or generate weekly summary reports
  • Explore the n8n community: Browse 1,000+ workflow templates at n8n.io/workflows for inspiration

This pattern of trigger, transform, route, and action applies to virtually any automation you will build. The concepts transfer directly to more complex workflows.

Last updated: | By Rafal Fila

Tools Mentioned

Related Rankings

Common Questions