---
title: "Slack ticket reactions turned into Linear issues by AI"
kind: "Kit"
category: "Business"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/bd0f815d-c303-40c6-831a-95bb732f45c7"
updated: "2026-11-13"
---

# Slack ticket reactions turned into Linear issues by AI

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that watches a Slack channel for the ticket reaction, has an AI model write a title, a summary, ideas and a priority, and creates the issue in Linear once per message.

Slack ticket reactions turned into Linear issues by AI is an n8n workflow in the Business category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-13. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow turns a Slack reaction into a Linear issue. Someone marks a message in a support channel with the ticket emoji. Every five minutes the workflow searches the channel for such messages. For each one it has not seen, an AI model writes a short title, a summary, up to three ideas and a priority. The workflow then creates the issue in Linear. The id of the Slack message goes into the description, so no message is ticketed twice. Twelve nodes sit in it, beside seven sticky notes.

### Who it suits

Support and product teams that talk to customers or colleagues in Slack and track work in Linear. They want a quick way to turn a chat message into a proper issue without copying text between tabs. It suits someone who can create a Slack user token and a Linear key. Skip it if your tickets live somewhere other than Linear. Skip it too if only some people should be able to open issues, because anyone who can add a reaction in the channel can create one.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Software | Support engineers | Turn a bug report from chat into an issue | An engineer reacts to a customer’s bug report and gets an issue with a title and a priority. |
| Operations | Office managers | Log a request from the team channel | A manager reacts to a message about a broken printer and the request lands in the queue. |
| Agencies | Account managers | Capture a client’s change request | A manager reacts to a client’s message asking for a new banner size. |
| Education | School IT staff | Keep track of requests from teachers | An IT lead reacts to a teacher’s message about a projector that will not start. |

You need a Slack user token that can search, an OpenAI API key, a Linear API key and an n8n that stays switched on.

### Where to use it

Any n8n that can run on a schedule will do, on n8n Cloud or on your own server, as long as it stays switched on. The workflow asks Slack and Linear for news, and nothing calls it, so it needs no public address. A local install works while it is running, and reactions wait for the next run.

- n8n Cloud: bring in the file, connect your accounts and switch it on
- Your own n8n server: the same file, left running so the schedule fires
- A local install: it works while n8n is running
- One Slack channel and one Linear team for each copy of the workflow

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Import the file, add three credentials, choose your channel and team, and switch it on.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Slack | A user token with the \`search:read\` scope, and a channel where people add the ticket reaction |
| OpenAI | An API key |
| Linear | An API key, and the team that should get the issues |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add a Slack API credential with your user token to `Slack`. In its query, replace `support-tickets` with your channel.
3. Add an OpenAI credential to `OpenAI Chat Model`.
4. Add a Linear credential to `Get Existing Issues` and to `Create Ticket`, then choose your team in `Create Ticket`.
5. In the channel, react to a message with `:ticket:` and run the workflow once with Execute workflow. Look for the new issue in Linear.
6. Switch the workflow on. It then runs every 5 minutes.

### How to use it

Pick a message in the channel and react with the ticket emoji. On the next run an issue appears in Linear. It holds the AI’s title, summary, ideas and priority, plus the original message with its link. Nothing else to press. A message that has an issue already is skipped on every later run.

What to change for a different result

| To change | Where |
| --- | --- |
| The channel or the reaction | The query in \`Slack\` |
| How often it looks | \`Schedule Trigger\` |
| How many messages one run reads | The limit in \`Slack\` |
| What the ticket says | The prompt in \`Generate Ticket Using AI\` |
| The model | \`OpenAI Chat Model\` |
| The team, labels and priority mapping | \`Create Ticket\` |

### Example

A support team shares a Slack channel with a customer. On Monday the customer writes that the export button has done nothing since Friday, and a teammate adds the ticket reaction.

At the next run the workflow finds the message, sees that no issue holds its id and asks the model for a title, a summary, a few ideas and a priority. A few minutes later Linear shows a new issue called something like “Export button does nothing”, with a priority the model chose from the tone. The description holds the customer’s words and a link back to the message. Nobody retyped a word.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. A reaction is the small emoji a person adds under a message. Linear is a tool where teams track issues. A structured output parser makes the model answer in fixed fields, here the title, summary, ideas and priority.

**For experts.** Each message is matched against the `hash:` lines in the descriptions Linear returns, so the check lives in Linear and the workflow keeps no state of its own.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Slack\` | Searches the channel for messages with the reaction | It needs a user token, and it reads the newest 10 results |
| \`Get Values\` | Builds an id, the author, the link and the text from each message | The id is the last part of the message link, without its query string |
| \`Get Existing Issues\` | Reads issues from Linear | It reads the first 50, across all teams, once per run |
| \`Get Hashes Only\` | Pulls the saved ids out of the descriptions | An issue without such a line is skipped |
| \`Create New Ticket?\` | Lets a message through when its id is not found | A message with no issue yet becomes a ticket |
| \`Generate Ticket Using AI\` | Writes the title, summary, ideas and priority | The parser forces those four fields, and the priority is the model’s guess |
| \`Create Ticket\` | Creates the issue | The team is yours to choose, and the description carries the id line |

### Good to know

The notes come from Slack, OpenAI, Linear and n8n pages and source read on 12 November 2026, and nothing was run.

- Not run: no Slack search, no model call and no Linear issue was made
- Repairs: the model node named no model, so n8n would have used \`gpt-5-mini\`, which OpenAI shuts down on 11 December 2026, and it now names \`gpt-6-luna\`. The id check no longer stops the run on an issue with no \`hash:\` line, or when no issue has a description. The id ignores the query string of a thread link, the message is escaped by \`JSON.stringify\`, and the author’s private team and state ids were removed
- Access: the search runs as the person whose token you use, so it sees what that person sees, and any member who can react in the channel can open an issue
- Limits: the search returns 10 messages per run, and Linear is read 50 issues deep. On a busy workspace a message may get a second issue when its first one is not among them
- Your data: the message text goes to OpenAI, and the message, the author’s name and id, the channel and a link go to Linear
- Credentials: the JSON holds none

## README

```markdown
# Slack ticket reactions turned into Linear issues by AI

An n8n workflow that watches one Slack channel for messages marked with a ticket reaction. For each message that has no
issue yet, an AI model writes a title, a summary, a few ideas and a priority, and the workflow creates the issue in
Linear. The Slack message id is saved in the issue, so no message is ticketed twice.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 12 nodes and 7 sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The model node named no model, so n8n would run its own default for that node version, `gpt-5-mini`. OpenAI's
  deprecations page, read on 12 November 2026, shuts it down on 11 December 2026. The node now names `gpt-6-luna`. It
  sits under a plain chain with a structured output parser and calls no tool, so that model fits. The chain is now called
  `Generate Ticket Using AI`.
- `Get Hashes Only` looked for a `hash:` line in every issue Linear returned and took the first match by position, `[1]`. An issue
  with a description but no such line, such as one written by hand, made the match return null and stopped the run. So did
  a Linear workspace where no issue has a description, because the list was then missing. The expression now skips both.
- The message id came from the last part of the Slack link. Slack's documentation shows links to a reply in a thread
  ending in a query string, `?thread_ts=...&cid=...`. The saved `hash:` line is read back only up to that character, so
  such an id would never match and the same reply could be ticketed again at every run. The id now ignores the query
  string.
- The message was placed into JSON by hand, with only quotes and line breaks escaped. A backslash or a tab in the text, as
  in pasted code, could break it. `JSON.stringify` now does the escaping.
- The Linear team id and the state id belonged to the original author's workspace. The team is blank, so you choose
  yours, and the state is left out, so Linear chooses it.
- `Get Existing Issues` now runs once per run. It had run once per message, and each run read the same issues.
- The search channel, `#n8n-tickets`, is now `#support-tickets`. The notes on the canvas had links and an invitation to a
  community. They are rewritten, and one note now states the 5 minute schedule.

## Before you start

- An n8n instance that stays switched on, on n8n Cloud or on your own server. It asks Slack and Linear for news, so it
  needs no public address.
- A Slack user token with the `search:read` scope. Slack's message search takes a user token, and a bot token cannot use
  it.
- An OpenAI API key.
- A Linear API key, and the team that should get the issues.

## Set it up

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add a Slack API credential with your user token to `Slack`. In its query, replace `support-tickets` with your channel.
3. Add an OpenAI credential to `OpenAI Chat Model`.
4. Add a Linear credential to `Get Existing Issues` and to `Create Ticket`, then choose your team in `Create Ticket`.
5. In the channel, react to a message with `:ticket:` and run the workflow once with Execute workflow. Look for the new
   issue in Linear.
6. Switch the workflow on. It then runs every 5 minutes.

## How a run goes

1. `Schedule Trigger` starts the run, and `Slack` searches for the newest 10 messages in the channel that carry a ticket
   reaction.
2. `Get Values` gives each message an id taken from its link, and keeps the channel, the author, the time, the link and the
   text.
3. `Get Existing Issues` reads issues from Linear. `Collect Descriptions` gathers their descriptions, and `Get Hashes Only`
   pulls the saved ids out of them.
4. `Merge` pairs every message with that list. `Create New Ticket?` lets a message through only when its id is not in it.
5. `Generate Ticket Using AI` asks the model for a short title, a summary, up to 3 ideas and a priority.
   `Structured Output Parser` turns the answer into those fields.
6. `Create Ticket` creates the issue. Its description holds the summary, the ideas, the original message with its author,
   the channel, the time, the link and the `hash:` line. The priority maps urgent to 1, high to 2, medium to 3 and low to 4.

## Change the look

- The channel or the reaction: the query in `Slack`.
- How often it looks: `Schedule Trigger`.
- How many messages one run reads: the limit in `Slack`.
- What the ticket says: the prompt in `Generate Ticket Using AI`.
- The model: `OpenAI Chat Model`.
- The team, labels or priority mapping: `Create Ticket`.

## Good to know

- The facts below come from Slack, OpenAI, Linear and n8n pages and source read on 12 November 2026. Nothing was run: no
  Slack search, no model call and no Linear issue.
- The search runs as the person whose token you use, so it sees what that person can see. Any member who can react in
  the channel can open an issue.
- Slack's search returns 10 messages here, newest first by n8n's default. If more reacted messages than that are newer
  than one you wanted, raise the limit in `Slack`.
- Linear is read with n8n's default limit of 50 issues, across all teams. If the issue for a message is not among them,
  the message can get a second issue. Raise the limit in `Get Existing Issues`, or turn on Return All.
- The priority is the model's guess from the tone of the message, and the ideas are not checked.
- `gpt-6-luna` costs USD 0.1 per million input tokens and USD 0.5 per million output tokens on OpenAI's page. A page's text
  can change, so check it before a large run.
- Your data: the message text goes to OpenAI. The message, the author's name and id, the channel and a link go to Linear.
- Credentials: the JSON holds none.
```

## What is in it

3 files, 20 KB, downloaded as a zip.

```text
NOTICE.md  660 B
README.md  6 KB
workflow.json  14 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 10 steps, starting on a schedule
- AI: 1 step calls an AI model: Generate Ticket Using AI
- Sign-ins: Signs in to: Slack, Linear and OpenAI
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 8 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/bd0f815d-c303-40c6-831a-95bb732f45c7)
- [Its page on Mindket](https://mindket.com/p/bd0f815d-c303-40c6-831a-95bb732f45c7)
