GitHub to Slack, error issues routed and summarized
You open GitHub to “quickly” check an API issue, and suddenly you’re copying links into Slack, rewriting the same summary, and hoping you didn’t miss a key detail in the body text. Then someone else files the same error again. Now it’s chaos.
This hits engineering leads and support managers hardest, but founders running a lean SaaS feel it too. With this GitHub Slack automation, new issue reports get classified, de-duplicated, and routed to the right team so you stop losing time to triage.
You’ll see how the workflow turns messy issue text into structured incident notes in Airtable and Notion, then posts a clear Slack summary to the right channel.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: GitHub to Slack, error issues routed and summarized
flowchart LR
subgraph sg0["GitHub Issue Created/Updated Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare GitHub Issue Data", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/github.dark.svg' width='40' height='40' /></div><br/>GitHub Issue Created/Updated"]
n2@{ icon: "mdi:robot", form: "rounded", label: "AI: Classify API Error (GPT-..", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "LLM Model: GPT-4o", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Output Parser: Structured JS..", pos: "b", h: 48 }
n5@{ icon: "mdi:memory", form: "rounded", label: "AI Memory Buffer", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse AI Classification Output"]
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check: Valid AI Response or ..", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by Assigned Team", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Airtable: Create Record (Dev.."]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Notion: Log Issue (DevOps)"]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack Notify: DevOps Team"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Notion: Log Issue (Backend)"]
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack Notify: Backend Team"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Airtable: Create Record (Sup.."]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack Notify: Support Team"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Airtable: Create Record (API.."]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Notion: Log Issue (Support T.."]
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Notion: Log Issue (API Team)"]
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Notify API Team"]
n5 -.-> n2
n3 -.-> n2
n8 --> n9
n8 --> n12
n8 --> n14
n8 --> n16
n0 --> n2
n10 --> n11
n12 --> n13
n1 --> n0
n18 --> n19
n6 --> n7
n2 --> n6
n9 --> n10
n17 --> n15
n14 --> n17
n16 --> n18
n4 -.-> n2
n7 --> n8
end
subgraph sg1["Error Handler Flow"]
direction LR
n20@{ icon: "mdi:play-circle", form: "rounded", label: "Error Handler Trigger", pos: "b", h: 48 }
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack: Send Error Alert"]
n20 --> n21
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n1,n20 trigger
class n2,n4 ai
class n3 aiModel
class n5 ai
class n7,n8 decision
class n9,n10,n12,n14,n16,n17,n18 database
class n6 code
classDef customIcon fill:none,stroke:none
class n1,n6,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19,n21 customIcon
The Problem: API error issues don’t get routed cleanly
GitHub issues are great for capturing context, but they’re terrible at driving fast action across teams. A support rep pastes a vague “500 on /v2/orders” into an issue, a developer asks for logs, someone drops a screenshot in Slack, and now the “real” incident record lives in five places. Meanwhile, the same error shows up again next week, and nobody remembers if it was rate limiting, auth scopes, or a breaking change in a dependency. The cost isn’t just time. It’s missed handoffs, inconsistent incident notes, and repeat firefights you shouldn’t be having.
The friction compounds. Here’s where it breaks down.
- A single issue can trigger 20+ Slack messages, yet still not land with the right owner.
- Manual triage means severity and root cause get interpreted differently by each person.
- Duplicate issues pile up, so teams waste time “rediscovering” the same fix.
- Documentation drifts because the final resolution never makes it into a searchable knowledge base.
The Solution: AI-classify GitHub issues, log them, and alert Slack
This workflow watches for new or updated GitHub issues that look API-related, then turns them into consistent, structured incident records automatically. It starts by extracting the essentials (title, body, repo, and link), then asks GPT‑4o to classify the issue: error type, category, likely root cause, severity, and a confidence score. That AI output is parsed into JSON so it can be validated and stored cleanly. From there, the workflow routes the issue to the correct team channel (DevOps, Backend, API, or Support), writes a “FAQ-style” entry into Airtable, logs a richer record into Notion, and finally posts a concise Slack summary so the right people see it quickly. If the workflow itself fails, it also sends a Slack error notification so you’re not debugging in the dark.
The workflow starts with a GitHub issue event trigger. AI turns the unstructured text into a reliable classification, which then drives routing, logging, and Slack notifications. The end result is one shared source of truth in Airtable and Notion, plus fast awareness in Slack.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you handle about 20 API-related issues a week. Manually, a quick triage often takes around 10 minutes to read, summarize, decide severity, paste into Slack, and create a basic doc entry, which is roughly 3 hours weekly. With this workflow, you spend maybe 2 minutes cleaning up the issue template (if needed) and everything else happens in the background: classification, routing, Airtable entry, Notion log, and Slack alert. That’s about 2 hours back each week, and the “what happened last time?” answer is already documented.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- GitHub to trigger on new or updated issues.
- Slack to notify the right team channel.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll connect accounts, map a few fields, and confirm your Airtable/Notion schemas match what the workflow writes.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A GitHub issue event kicks it off. When a new issue is created or an existing one is updated, the workflow grabs the title, body, repo name, and the direct GitHub link.
Issue details get cleaned up for AI. A formatting step standardizes the payload so GPT‑4o sees predictable structure (less “hallucinated” fields, more consistent output).
AI classifies the error and the workflow verifies it. The agent produces a structured response, the JSON parser enforces the schema, and an “is this output actually present?” check prevents junk data from getting logged.
Routing decides where it goes next. Based on category and severity, the workflow writes a record into Airtable, creates a more detailed Notion entry, and posts a Slack summary in the matching channel. If the automation itself errors, a separate error trigger sends a Slack notification so you notice quickly.
You can easily modify the team routing rules to fit your org’s channels and ownership. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the GitHub Trigger
This workflow starts when a GitHub issue event is received.
- Add the GitHub Issue Event Trigger node and set Authentication to
oAuth2. - Set Events to
issuesand ensure Owner and Repository are defined for the webhook URL values. - Credential Required: Connect your
githubOAuth2Apicredentials in GitHub Issue Event Trigger.
Step 2: Connect and Format Issue Data
Normalize the incoming GitHub issue payload for downstream AI processing.
- In Format GitHub Issue Info, map the following fields using expressions: Issue Title to
{{ $json.body.issue.title }}, Issue Body to{{ $json.body.issue.body }}, Issue URL to{{ $json.body.issue.html_url }}, Issue Number to{{ $json.body.issue.number }}, Repository Name to{{ $json.body.repository.full_name }}, and Created At to{{ $json.body.repository.created_at }}. - Connect GitHub Issue Event Trigger to Format GitHub Issue Info to pass the issue payload forward.
Step 3: Set Up the AI Classification Stack
Use AI to classify the error, assign a team, and return structured JSON.
- Configure AI Error Classifier Agent with the provided prompt and keep hasOutputParser enabled.
- Connect GPT-4o Chat Model as the language model for AI Error Classifier Agent and set Temperature to
0.7. - Credential Required: Connect your
openAiApicredentials in GPT-4o Chat Model. - Attach AI Session Memory Buffer to AI Error Classifier Agent with sessionKey set to
"AI Agent - Error Analyzer". Add any credentials to the parent agent if required. - Attach Structured JSON Output Parser to AI Error Classifier Agent using the JSON schema example as provided. Add any credentials to the parent agent if required.
Step 4: Transform and Validate AI Output
Standardize AI results and ensure required data exists before routing.
- In Transform AI Output Data, keep the provided JavaScript to build airtableFields, notionDescription, and slackMessage.
- Ensure Transform AI Output Data references Format GitHub Issue Info in the code via
$('Format GitHub Issue Info').first().json. - Configure Validate AI Output Presence with the conditions
{{ $json.id }}(is empty) and{{ $json.airtableFields }}(not empty) to gate routing.
Step 5: Configure Team Routing Logic
Route issues to the correct team based on the AI-assigned team label.
- In Team Assignment Router, create four rules using
{{ $json.assignedTeam }}equalsDevOps Team,Backend Team,Support Team, andAPI Team. - Confirm that the switch outputs route to Airtable Record Create DevOps, Notion Log Entry Backend, Airtable Record Create Support, and Airtable Record Create API respectively.
Step 6: Configure Output Destinations (Airtable, Notion, Slack)
Create records in Airtable, log entries in Notion, and send alerts to Slack for each team.
- Configure Airtable Record Create DevOps, Airtable Record Create Support, and Airtable Record Create API with Operation set to
create, and map fields like Name to{{ $json.issueTitle }}and Error Code to{{ $json.airtableFields["Error Code"] }}. - Credential Required: Connect your
airtableTokenApicredentials in each Airtable create node. - Configure Notion Log Entry DevOps, Notion Log Entry Backend, Notion Log Entry Support, and Notion Log Entry API with Resource set to
databasePageand Title to{{ $json.fields.Name }}(or{{ $json.airtableFields["Error Code"] }}for Backend). - Credential Required: Connect your
notionApicredentials in each Notion node. - Configure Slack messages in Slack Alert DevOps, Slack Alert Backend, Slack Alert Support, and Slack Alert API using the existing message templates (e.g.,
{{ $('Airtable Record Create DevOps').item.json.fields['Error Code'] }}). - Credential Required: Connect your
slackApicredentials in all Slack alert nodes (5 total in this workflow, including error notifications).
Step 7: Add Error Handling
Notify your team if any node fails during execution.
- Keep Workflow Error Trigger connected to Slack Error Notification for workflow-wide error alerts.
- In Slack Error Notification, use the message template
❌ *Error in API Error Catalog Workflow* *Node:* {{ $json.node.name }} *Message:* {{ $json.error.message }} *Time:* {{ $json.timestamp }}. - Credential Required: Connect your
slackApicredentials in Slack Error Notification.
Step 8: Test and Activate Your Workflow
Run a manual test to confirm routing, AI output, and notifications before activating.
- Click Execute Workflow and trigger a sample GitHub issue event to test GitHub Issue Event Trigger.
- Verify that AI Error Classifier Agent returns JSON and that Transform AI Output Data builds airtableFields, notionDescription, and slackMessage.
- Confirm that the correct branch fires from Team Assignment Router and that Airtable, Notion, and Slack outputs appear for the assigned team.
- Turn on the workflow using the Activate toggle once the test run completes successfully.
Common Gotchas
- GitHub credentials can expire or lack the right scope for issue events. If triggers stop firing, check your GitHub OAuth app permissions and the repo webhook settings first.
- If you’re relying on external services (OpenAI calls, Notion writes), response times vary. When downstream nodes fail on empty responses, increase waits/timeouts and re-run with pinned test data.
- Default prompts in AI nodes are generic. Add your error taxonomy, severity definitions, and a couple of real examples early, or you will be tweaking classifications forever.
Frequently Asked Questions
About 45 minutes if your Airtable and Notion databases are already prepared.
No. You will mostly be connecting accounts and mapping fields. The only “technical” part is making sure your Airtable/Notion properties match what the workflow writes.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage costs (often a few cents per issue, depending on prompt size).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll swap the Notion “log entry” steps for Jira “create issue” actions. In practice, you keep the same GitHub trigger, the same GPT‑4o classification, and the same routing, then change the destination nodes per team. Common customizations include routing by repository, tagging issues with a product area, and adding an “owner” field so follow-ups are assigned automatically.
Usually it’s expired OAuth permissions or a missing scope for reading issue events. Reconnect GitHub in n8n credentials and confirm the repository still has issue webhooks enabled. If it only fails sometimes, you may be hitting GitHub rate limits during bursts of activity, which can be solved by adding retry logic or reducing how often you re-fetch issue data.
On n8n Cloud, it depends on your monthly execution limit, but most small teams can handle hundreds of issues a month comfortably. If you self-host, there’s no execution cap (your server and API limits become the real ceiling). The workflow processes issues one-by-one, so it scales cleanly as long as OpenAI/Notion/Airtable quotas are respected.
Often, yes, because this workflow needs a few things that get awkward (and expensive) in simpler tools: structured AI output parsing, conditional routing to multiple destinations, and reliable error handling. n8n also gives you the option to self-host, which matters once your issue volume grows. Zapier or Make can still work if you only need “new issue → post to one Slack channel” and you don’t care about Airtable/Notion synchronization. Frankly, the moment you want de-duplication or a consistent schema, n8n starts to feel a lot saner. If you’re unsure, Talk to an automation expert and you can sanity-check your setup.
Once this is running, your issues stop being scattered conversations and start becoming a usable error knowledge base. The workflow handles the repetitive bits, so your team can focus on fixing the actual problem.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.