---
title: "Survey answers grouped with Qdrant and summarized by AI"
kind: "Kit"
category: "Research"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/ecc5901f-613a-4fea-af47-6d395ec6ed6d"
updated: "2026-11-12"
---

# Survey answers grouped with Qdrant and summarized by AI

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

An n8n workflow that reads survey answers from Google Sheets and stores each one as a vector in Qdrant. It groups similar answers with K-means, has an OpenAI model summarize each group, and writes the insights to a new sheet.

Survey answers grouped with Qdrant and summarized by AI is an n8n workflow in the Research category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-12. 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 sheet of survey answers into a sheet of insights. It reads every answer from Google Sheets and stores each one as a vector in Qdrant, with its question and its participant. For each question it sorts the stored answers into groups of similar answers with the K-means method. An OpenAI model then summarizes each group with an insight and a sentiment, and every result is added as a row to a new sheet. Thirty nodes do the work, beside twelve sticky notes.

### Who it suits

Researchers, product teams and HR teams who collect open answers and have too many to read one by one. It works best with a few dozen answers to each question, because a small sample rarely gives a group of three. You need your own Qdrant or a Qdrant Cloud account.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Product | Product teams | Find the common points in open answers about a feature | A team sees one group of answers asking for a dark mode and another about slow loading. |
| Human resources | HR teams | Read an engagement survey by theme | An HR team sees one group that praises flexible hours and another that complains about meetings. |
| Education | Course teams | Sort the free text feedback on a course | A course team finds that a whole group of answers says the pace is too fast. |
| Research | UX researchers | Group the answers of a study before writing it up | A researcher reads six group summaries instead of three hundred raw answers. |

You need some n8n: import a file, add three credentials, pick a spreadsheet and set one address.

### Where to use it

Any n8n that can reach Google Sheets, OpenAI and your Qdrant will run it.

- n8n Cloud: import the file into a new workflow there, with a Qdrant that it can reach, such as Qdrant Cloud
- Your own n8n server: the same file and steps, with Qdrant on the same network or in the cloud
- Qdrant: the first insert creates the collection by itself
- Another sheet: pick a different spreadsheet in \`Get Survey Results\`

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. You need a survey spreadsheet, a Qdrant and an OpenAI key.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Google Sheets | A spreadsheet with a \`Participant\` column and one column for each question, each header holding a question mark, and an OAuth2 credential |
| Qdrant | A server of your own or Qdrant Cloud, its address and an API key |
| OpenAI | An API key that can use \`text-embedding-3-small\` and \`gpt-6-luna\` |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Save the workflow. `Trigger Insights` starts the second part by calling the workflow by its ID.
3. Add a Google Sheets OAuth2 credential. Select it in `Get Survey Results`, `Get Sheet Details`, `Create Insights Sheet`, `Get Survey Headers`, `Export To Sheets` and `Export To Sheets1`.
4. In `Get Survey Results`, pick your spreadsheet and your sheet from the lists.
5. Add a Qdrant credential with the address and the API key. Select it in `Qdrant Vector Store`, `Find All Answers` and `Get Payload of Points`.
6. In `Set Variables`, replace `YOUR_QDRANT_URL` with the same address, with no slash at the end.
7. Add an OpenAI credential and select it in `Embeddings OpenAI` and `OpenAI Chat Model`.
8. Press Test workflow once. The answers are stored first, then the second part starts by itself and writes the insights to a new sheet.

### How to use it

Run the workflow once for each survey. The first part stores the answers. The second part follows on its own and adds a new sheet named `Insights-` and the date. Each group of three or more similar answers gets one row. A question without such a group gets one row that says No Insight Found. A second run stores the answers again, so clear the Qdrant collection first.

What to change for a different result

| To change | Where |
| --- | --- |
| The spreadsheet | The document and the sheet in \`Get Survey Results\` |
| The Qdrant address | \`YOUR\_QDRANT\_URL\` in \`Set Variables\` |
| The collection | \`collectionName\` in \`Set Variables\` and the collection in \`Qdrant Vector Store\` |
| The new sheet’s name | \`insightsSheetName\` in \`Set Variables\` |
| The number of groups | The \`10\` in \`Apply K-means Clustering Algorithm\` |
| The smallest group | The test for three answers in \`Has Clusters?\` and in \`Only Clusters With 3+ points\` |
| What the model writes | The system prompt and the example in \`Survey Insights Agent\` |
| The model | \`OpenAI Chat Model\` |

### Example

A team surveys customers with the question “What would you change about the app?”

The answers are stored in Qdrant, and the workflow sorts them into groups. One group of answers is about slow search, and another is about a missing dark mode. The model writes one insight for each group and marks the first as negative. The new sheet holds a row for each group with the question, the insight, the sentiment, the number of answers and the participant IDs. Read a few raw answers of each group before you rely on a summary, because it comes from a model.

### 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 vector is a list of numbers that stands for the meaning of a text. Answers that mean the same thing get vectors that sit close together, and K-means is a method that finds such groups. Qdrant is the database that keeps the vectors. Try it on a sheet with a few dozen answers first.

**For experts.** The groups come from the vectors, not from the model, so the model only summarizes answers that already sit together.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Default Data Loader\` | Attaches the question, the participant and the survey name to each answer | The survey name is the spreadsheet’s title, saved when you pick it from the list |
| \`Find All Answers\` | Fetches the stored answers of one question with their vectors | It stops at 500 answers and does not page on |
| \`Apply K-means Clustering Algorithm\` | Sorts the answers into up to 10 groups | It is JavaScript with a fixed seed, so a rerun gives the same groups |
| \`Has Clusters?\` | Sends the run on when a group has three or more answers | The original copy only checked that the list was not empty |
| \`Survey Insights Agent\` | Writes a summary, an insight and a sentiment for a group | It sees the answers and the participant numbers of that group only |
| \`Export To Sheets\` | Adds one row for each group | The row also holds the number of answers, the participant IDs and the raw answers |

### Good to know

The clustering was rewritten, a check that stopped the run was repaired and a retired model was replaced.

- Python: the original copy clustered in a Python node that imported \`numpy\` and \`sklearn\` and read \`\_input\`. n8n’s code node documentation, read on 12 November 2026, says Pyodide is removed from n8n 2.0. The native Python that replaced it has no \`\_input\` and cannot import those packages by default. This copy does the same work in JavaScript
- Stopped run: the original copy passed on any list of groups, even when no group held three answers. The filter after it then dropped everything, and the run ended there with no row and no later question. This copy counts the groups of three or more
- Questions with quotes: the original copy typed the question into the JSON text of \`Find All Answers\`, so a double quote broke it. This copy builds the body with \`JSON.stringify\`
- Model: the original copy used \`gpt-4o-mini\`. OpenAI’s deprecations page, read on 12 November 2026, lists it for shutdown on 14 January 2027, with \`gpt-6-luna\` as the replacement, so \`OpenAI Chat Model\` is now version 1.2 with that model
- Embeddings: the embeddings node names \`text-embedding-3-small\`, which is not on that deprecations page
- Run once: a second run stores the same answers again, so every answer would count twice. Clear the Qdrant collection first
- Small surveys: with about ten answers or fewer, almost every group holds one answer, and the question gets a No Insight Found row
- Save first: \`Trigger Insights\` calls the workflow by its ID, so the workflow must be saved
- Your data: every answer goes to OpenAI to make its vector, and the answers of each big group go to OpenAI again for the summary. The answers and vectors stay in your Qdrant, and the insights, the participant IDs and the raw answers go to your sheet
- Credentials: the JSON holds none, and its author’s spreadsheet and Docker address are removed

## README

```markdown
# Survey answers grouped with Qdrant and summarized by AI

An n8n workflow that turns a sheet of survey answers into a sheet of insights. It reads every answer from Google Sheets and
stores each one as a vector in Qdrant, with its question and its participant. For each question it sorts the stored answers
into groups of similar answers with the K-means method. An OpenAI model then summarizes each group with an insight and a
sentiment, and every result is added as a row to a new sheet.

## What is inside

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

## What we changed from the original copy

- `Apply K-means Clustering Algorithm` was a Python node that imported `numpy` and `sklearn` and read its input with
  `_input`. n8n's code node documentation, read on 12 November 2026, says Pyodide is removed from n8n 2.0. The native
  Python that replaced it offers no `_input` and cannot import those packages by default. The node is now JavaScript. It
  does the same job: up to 10 groups with a fixed seed, and the same output of an `id`, a `total` and the Qdrant `points`
  of each group.
- `Has Clusters?` only checked that the list of groups was not empty. K-means always returns groups, so the check passed
  even when every answer was different. `Only Clusters With 3+ points` then dropped every group. Nothing reached the nodes
  after it, and the run stopped there. No row was written, and the next question never started. The check now counts the
  groups with three or more answers, and a question without one gets its No Insight Found row.
- `Find All Answers` wrote the question into its JSON text by hand, so a question with a double quote broke the request.
  The body is now built with `JSON.stringify`.
- `Find All Answers` and `Get Payload of Points` called `qdrant:6333`, the name of a Docker service on their author's
  machine. Both now take the address from the new `qdrantUrl` value in `Set Variables`, which holds `YOUR_QDRANT_URL`.
- `OpenAI Chat Model` asked for `gpt-4o-mini`. OpenAI's deprecations page, read on 12 November 2026, lists it for shutdown
  on 14 January 2027, with `gpt-6-luna` as the replacement. The node is now version 1.2 with that model.
- `Get Survey Results` pointed at its author's spreadsheet. It is empty now, and you pick yours from the list.
- `Export To Sheets` carried six sample column names from its author's own run, which included answers from the sample
  survey. They are gone, and the node maps by field name like `Export To Sheets1`.
- The system prompt of `Survey Insights Agent` had two typos, "mildy", and they are fixed.
- The 12 sticky notes are rewritten and hold no outside links. The original copy linked to documentation pages, a sample
  sheet and a chat server.
- Every credential reference is removed, so you pick your own.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A Google account, a spreadsheet of survey answers and a Google Sheets OAuth2 credential. The sheet needs a `Participant`
  column, and every question column needs a question mark in its header. A column without one is stored in Qdrant too,
  but it is not analyzed.
- A Qdrant server of your own or on Qdrant Cloud, with its address and an API key.
- An OpenAI API key that can use `text-embedding-3-small` and `gpt-6-luna`.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Save the workflow. `Trigger Insights` starts the second part by calling the workflow by its ID.
3. Add a Google Sheets OAuth2 credential. Select it in `Get Survey Results`, `Get Sheet Details`, `Create Insights Sheet`,
   `Get Survey Headers`, `Export To Sheets` and `Export To Sheets1`.
4. In `Get Survey Results`, pick your spreadsheet and your sheet from the lists. The title of the spreadsheet becomes the
   survey name that ties the answers together.
5. Add a Qdrant credential with the address and the API key. Select it in `Qdrant Vector Store`, `Find All Answers` and
   `Get Payload of Points`.
6. In `Set Variables`, replace `YOUR_QDRANT_URL` with the same address, with no slash at the end.
7. Add an OpenAI credential and select it in `Embeddings OpenAI` and `OpenAI Chat Model`.
8. Press Test workflow once. The answers are stored first, then the second part starts by itself and writes the insights
   to a new sheet.

## How a run goes

1. `When clicking ‘Test workflow’` starts the run and `Get Survey Results` reads every row of the sheet.
2. `Convert to Question Answer Pairs` turns each row into one pair for every question column, with the participant, and
   `QA Pairs to List` makes one item of each pair.
3. `Qdrant Vector Store` stores each answer. `Embeddings OpenAI` makes its vector, and `Default Data Loader` attaches the
   question, the participant and the survey name as metadata.
4. `Prep Values For Trigger` passes on the spreadsheet ID and the sheet, and `Trigger Insights` starts the second part.
5. `Execute Workflow Trigger` receives them. `Get Sheet Details` reads the spreadsheet's title, and `Set Variables` gathers
   the Qdrant address, the collection name, the survey name and the new sheet's name.
6. `Create Insights Sheet` adds the sheet. `Get Survey Headers` reads the first two rows, `Extract Questions` keeps the
   headers with a question mark, and `Questions to List` makes one item of each.
7. `For Each Question...` takes one question at a time. `Find All Answers` fetches its stored answers with their vectors,
   up to 500.
8. `Apply K-means Clustering Algorithm` sorts them into up to 10 groups.
9. `Has Clusters?` sends the run on when some group has three or more answers. Otherwise `Prep Values For Export` and
   `Export To Sheets1` write a No Insight Found row.
10. `Clusters To List` makes one item of each group, and `Only Clusters With 3+ points` keeps the big ones.
    `Get Payload of Points` fetches the answers of each, and `Survey Insights Agent` writes a summary, an insight and a
    sentiment.
11. `Prep Output For Export` adds the number of answers, the participant IDs and the raw answers, and `Export To Sheets`
    adds the row. The loop then moves on to the next question.

## Change the look

- The spreadsheet: the document and the sheet in `Get Survey Results`.
- The Qdrant address: `YOUR_QDRANT_URL` in `Set Variables`.
- The collection: `collectionName` in `Set Variables` and the collection in `Qdrant Vector Store`. Keep them the same.
- The name of the new sheet: `insightsSheetName` in `Set Variables`.
- The number of groups: the `10` in `Apply K-means Clustering Algorithm`.
- The smallest group: the test for three or more answers in `Has Clusters?` and in `Only Clusters With 3+ points`. Change both.
- What the model writes: the system prompt and the example in `Survey Insights Agent`.
- The model: `OpenAI Chat Model`.

## Good to know

- Run it once for each survey. A second run stores the same answers again, so groups would count each answer twice. Clear
  the collection in Qdrant first if you must run it again.
- It needs many answers. With about ten answers or fewer, almost every group holds one answer, and the question gets a No
  Insight Found row. A few dozen answers to a question is a fair start.
- `Find All Answers` fetches at most 500 answers for a question, and nothing pages on after that.
- `Qdrant Vector Store` creates the collection on its first insert, so you do not make it by hand.
- The embeddings node names `text-embedding-3-small`, which is not on OpenAI's deprecations page.
- Your data: every answer goes to OpenAI to make its vector, and the answers of each big group go to OpenAI again for the
  summary. The answers and vectors are kept in your Qdrant. The insights and the answers behind them are
  written to your sheet. If your survey holds personal data, keep that in mind.
- The summaries come from a model. Read a few raw answers of each group before you rely on one.
```

## What is in it

3 files, 41 KB, downloaded as a zip.

```text
NOTICE.md  674 B
README.md  8 KB
workflow.json  33 KB
```

## Workflow check

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

- Steps: 26 steps, starting when another workflow calls it or by hand
- AI: 2 steps call an AI model: Survey Insights Agent and Qdrant Vector Store
- Sign-ins: Signs in to: Google Sheets, Qdrant and OpenAI
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 13 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/ecc5901f-613a-4fea-af47-6d395ec6ed6d)
- [Its page on Mindket](https://mindket.com/p/ecc5901f-613a-4fea-af47-6d395ec6ed6d)
