Automate Linear Issue Sentiment Tracking with n8n & Airtable

This n8n workflow automates sentiment analysis on Linear issue comments, tracks transitions in sentiment in Airtable, and notifies your team via Slack if sentiment turns negative. It helps identify and prioritize challenging customer support problems early.
scheduleTrigger
graphql
informationExtractor
+9
Workflow Identifier: 2274
NODES in Use: Schedule Trigger, GraphQL, SplitOut, Information Extractor, Set, SplitInBatches, Airtable, Airtable Trigger, Switch, Remove Duplicates, Slack, OpenAI Chat Model

Press CTRL+F5 if the workflow didn't load.

Learn how to Build this Workflow with AI:

Visit through Desktop for Best experience

Opening Problem Statement

Meet Sarah, a product support manager who oversees dozens of active issues in Linear every day. She spends hours manually scanning through the comments on each ticket, trying to gauge whether customers are satisfied or frustrated. This process is time-consuming, prone to errors, and often reactive — by the time she spots a negative mood, the issue may have already escalated, costing her team valuable time and customer goodwill.

Sarah needs a better system to monitor the sentiment of ongoing conversations on issue tickets — one that automatically detects when discussion turns negative and alerts her team early enough to intervene. Without this, she risks missing critical early warning signs, leading to unhappy customers and unresolved bottlenecks.

What This Automation Does

This specific n8n workflow continuously monitors updated Linear issue comments, performs AI-powered sentiment analysis, tracks sentiment changes in Airtable, and alerts your team in Slack about any issue shifting to a negative mood. When this automation runs, it:

  • Fetches recently updated issues from Linear (within the last 30 minutes) using GraphQL queries.
  • Extracts and analyzes the sentiment of comments for each issue via OpenAI-powered information extraction.
  • Updates or inserts the sentiment data and issue details into Airtable for centralized tracking, moving previous sentiment to a separate field for historical comparison.
  • Detects transitions from non-negative to negative sentiment to catch potentially escalating problems.
  • Deduplicates notifications to avoid alert fatigue when the same negative transition is repeatedly detected.
  • Sends detailed Slack messages to a designated channel highlighting issues that require immediate attention.

This workflow saves Sarah hours of manual sentiment monitoring each day and provides her team with timely notifications to proactively address customer dissatisfaction.

Prerequisites ⚙️

  • n8n account configured with OpenAI API credentials for sentiment extraction.
  • Linear.app account with API access to fetch issue data via GraphQL.
  • Airtable account with a base and table to store sentiment data (at minimum, the columns for Issue ID, Current Sentiment, Previous Sentiment, Summary, Assignee, Issue Title, Created and Updated dates).
  • Slack workspace and a channel set up for notifications with a configured Slack API token.
  • Basic familiarity with n8n to import and set credentials for respective nodes.

Step-by-Step Guide to Setting Up This Workflow

1. Set up the Schedule Trigger to Fetch Updates Regularly

In n8n, add the Schedule Trigger node. Configure it to trigger every 30 minutes to check for recently updated Linear issues. This ensures near real-time sentiment tracking.

You should see the trigger firing at regular intervals in the Workflow Execution logs.

Common mistake: Forgetting to activate the workflow after setting the trigger will prevent it from running automatically.

2. Configure the GraphQL Node to Fetch Updated Issues from Linear

Add the GraphQL node and connect it to the Schedule Trigger. Enter the following query to fetch issue details updated in the last 30 minutes:

=query (
 $filter: IssueFilter
) {
 issues(
 filter: $filter
 ) {
 nodes {
 id
 identifier
 title
 description
 url
 createdAt
 updatedAt
 assignee {
 name
 }
 comments {
 nodes {
 id
 createdAt
 user {
 displayName
 }
 body
 }
 }
 }
 }
}

Set the API endpoint to https://api.linear.app/graphql and authenticate with your Linear API token via HTTP Header Auth.

Enter variables to filter updated issues by timestamp:

= {
 "filter": {
    updatedAt: { gte: $now.minus(30, 'minutes').toISO() }
 }
}

Common mistake: Incorrect ISO format in the variable or wrong API token will result in failed queries or empty results.

3. Split Out Issues for Individual Processing

Use the SplitOut node configured with data.issues.nodes as the field to split. This separates each issue so it can be analyzed individually.

You should see each issue emitting as a separate item downstream.

4. Extract Sentiment from Issue Comments Using OpenAI

Connect the output to an Information Extractor node (from the LangChain package integrated with n8n) configured to analyze the comments. Pass a string concatenating each comment like:

={{
$json.comments.nodes.map(node => [
 `${node.user.displayName} commented on ${node.createdAt}:`,
 node.body
].join('n')).join('---n')
}}

Set the extractor’s attributes as:

  • sentiment (required): one of positive, negative, or neutral
  • sentimentSummary: descriptive summary of the conversation’s sentiment

This node leverages OpenAI to determine the overall mood of the issue discussion.

Important: Configure OpenAI credentials in the OpenAI Chat Model node which feeds into this extractor.

5. Combine Sentiment Analysis with Issue Data

Use a Set node to merge the sentiment analysis output back with the original issue data for full context.

Example JSON output expression:

={{
{
 ...$('Issues to List').item.json,
 ...$json.output
}
}}

6. Process Each Issue in Batches

Use the SplitInBatches node to handle issues one by one and connect to the next steps.

7. Fetch Existing Sentiment Records from Airtable

Add an Airtable node configured to search your Airtable base and table for records matching the current issue’s ID (using the filter formula ={Issue ID} = '{{ $json.identifier || 'XYZ' }}').

This helps determine if the issue already exists in your sentiment tracking database.

8. Update or Create Sentiment Records in Airtable

Connect the output to another Airtable node set to upsert records. Map fields such as:

  • Issue ID
  • Issue Title
  • Issue Created and Updated timestamps
  • Assignee name
  • Current Sentiment (capitalized)
  • Previous Sentiment (or ‘N/A’ if new)
  • Sentiment Summary

This maintains a historical record of sentiment transitions per issue.

9. Use Airtable Trigger to Watch for Sentiment Updates

When any row in Airtable’s current sentiment column updates, the Airtable Trigger fires the workflow. This enables real-time reactions to sentiment shifts.

10. Detect Sentiment Transitions with Switch Node

Use the Switch node to filter for cases where sentiment changed from any non-negative state to negative:

= {{$json.fields["Previous Sentiment"] !== 'Negative' && $json.fields["Current Sentiment"] === 'Negative' }}

This pinpoints issues where the mood worsened and may need urgent attention.

11. Remove Duplicate Notifications to Avoid Repeat Alerts

The Remove Duplicates node filters out repeated alerts by combining Issue ID and Last Modified timestamp, ensuring only unique notifications are sent.

12. Send Slack Notifications for Negative Sentiment Transitions

The final Slack node sends a nicely formatted message to a configured channel, listing all issues with newly transitioned negative sentiment. It includes clickable links to the Linear issue and sentiment summaries, so the team can quickly investigate.

Customizations ✏️

  1. Modify the GraphQL query filter in the “Fetch Active Linear Issues” node to target specific teams, labels, or issue types relevant to your project needs.
  2. Adjust sentiment values or add new tags in the Information Extractor node by expanding attribute options, enabling nuanced sentiment classifications like “very negative” or “needs attention.”
  3. Customize Slack notification formatting by editing the message blocks JSON in the Slack node to include additional metadata, such as issue priority or assignee contact info.
  4. Set batch size in the “For Each Issue…” SplitInBatches node to optimize performance and API rate limits based on your Linear issue volume.
  5. Add email notifications or integrate with other communication tools like Microsoft Teams by adding respective nodes triggered after sentiment detection.

Troubleshooting 🔧

Problem: “GraphQL query returns no issues or empty array”
Cause: Incorrect timestamp filter in query or invalid Linear API token.
Solution: Double-check ISO date formatting in variables and verify API token validity in credentials settings.

Problem: “OpenAI node fails or returns incomplete sentiment data”
Cause: Missing or incorrect OpenAI API key or API quota exceeded.
Solution: Confirm API key setup in credentials, check usage limits on your OpenAI account, and retry the node.

Problem: “Airtable upsert node doesn’t update existing records”
Cause: Matching columns or filter formula is incorrect or missing.
Solution: Ensure the “Issue ID” column is set as match column and the formula matches the exact identifier field.

Pre-Production Checklist ✅

  • Confirm Linear API credentials are valid and have necessary permissions.
  • Verify your Airtable base and table schema matches expected fields (Issue ID, Current/Previous Sentiment, Summary, etc.).
  • Test the OpenAI API node independently with sample comments to verify correct sentiment extraction.
  • Run the workflow manually and inspect issue data flow and transformations step-by-step.
  • Set up Slack credentials and test sending messages to your chosen channel before going live.

Deployment Guide

After confirming all nodes and credentials are set up, activate the workflow in n8n to enable automatic runs every 30 minutes. Monitor initial runs through the execution history to ensure issues are fetched and processed correctly.

You may optionally set up error notifications or logging nodes to track failures robustly in production.

FAQs

Q: Can I use a different sentiment analysis tool instead of OpenAI?
A: Yes, but you will need to replace or modify the Information Extractor node to connect to your preferred AI or sentiment API.

Q: Does this workflow use many API calls?
A: It queries Linear every 30 minutes and invokes OpenAI once per updated issue, so plan your API budget accordingly.

Q: Is my data secure?
A: n8n encrypts credentials and supports secure connections; ensure also that Airtable and Slack permissions are appropriately configured.

Conclusion

By implementing this automated n8n workflow, Sarah has significantly streamlined how her team monitors customer sentiment on Linear issues. The system quickly highlights tickets where the mood turns negative, empowering the team to respond faster and more effectively.

This saves her hours every week of manual monitoring and reduces the risk of customer dissatisfaction escalating unnoticed. Next, she might consider automations for automated issue assignment or priority escalation based on sentiment scores to further improve workflow efficiency.

With these tools in place, you too can turn raw issue conversations into actionable insights that keep your support operations proactive and responsive.

Promoted by BULDRR AI

Related Workflows

Automate Viral UGC Video Creation Using n8n + Degaus (Beginner-Friendly Guide)

Learn how to automate viral UGC video creation using n8n, AI prompts, and Degaus. This beginner-friendly guide shows how to import, configure, and run the workflow without technical complexity.
Form Trigger
Google Sheets
Gmail
+37
Free

AI SEO Blog Writer Automation in n8n (Beginner Guide)

A complete beginner guide to building an AI-powered SEO blog writer automation using n8n.
AI Agent
Google Sheets
httpRequest
+5
Free

Automate CrowdStrike Alerts with VirusTotal, Jira & Slack

This workflow automates processing of CrowdStrike detections by enriching threat data via VirusTotal, creating Jira tickets for incident tracking, and notifying teams on Slack for quick response. Save hours daily by transforming complex threat data into actionable alerts effortlessly.
scheduleTrigger
httpRequest
jira
+5
Free

Automate Telegram Invoices to Notion with AI Summaries & Reports

Save hours on financial tracking by automating invoice extraction from Telegram photos to Notion using Google Gemini AI. This workflow extracts data, records transactions, and generates detailed spending reports with charts sent on schedule via Telegram.
lmChatGoogleGemini
telegramTrigger
notion
+9
Free

Automate Email Replies with n8n and AI-Powered Summarization

Save hours managing your inbox with this n8n workflow that uses IMAP email triggers, AI summarization, and vector search to draft concise replies requiring minimal review. Automate business email processing efficiently with AI guidance and Gmail integration.
emailReadImap
vectorStoreQdrant
emailSend
+12
Free

Automate Email Campaigns Using n8n with Gmail & Google Sheets

This n8n workflow automates personalized email outreach campaigns by integrating Gmail and Google Sheets, saving hours of manual follow-up work and reducing errors in email sequences. It ensures timely follow-ups based on previous email interactions, optimizing communication efficiency.
googleSheets
gmail
code
+5
Free