Huashu Design
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
An n8n workflow in two parts. One stores a PDF from Google Drive in a Qdrant collection, and a webhook then answers questions about it with an OpenAI model, using the five closest chunks.
PDF report questions answered from Qdrant through a webhook is an n8n workflow in the Finance & accounting category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Webhook call
It starts when a program or a script posts to the pdf-question webhook with:
A plain text answer to your question, drawn from the PDF you stored
What you need before you start.
Language model
Turns each chunk and each question into a vector, and writes the answer from the five closest chunks.
NeedsOpenAI API key
Vector store
Stores the PDF’s chunks as vectors, and returns the five closest to each question.
NeedsA Qdrant instance n8n can reach, with its address and an API key if it needs one
PDF source
Downloads the PDF you point to, by its file id.
NeedsA Google account, for a Google Drive OAuth2 credential, and a PDF in your Drive
Checked by Mindket on 13 Nov 2026
This n8n workflow lets you ask questions about a PDF report and get the answers back from a web address. The first part downloads the PDF from Google Drive, cuts it into chunks, turns each one into a vector with OpenAI and stores them in a Qdrant collection. The second part is a webhook. You post a question, the workflow finds the five closest chunks, and an OpenAI chat model writes the answer from them. Thirteen nodes do the work, beside two sticky notes.
Analysts, small finance teams and builders who want a question box over a long report without reading it end to end. It also suits anyone learning how a vector store and a retrieval chain fit together. Skip it if you need answers across many reports at once, since each question searches one collection.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Finance | Analysts | Ask a long report what it says about risks, costs or outlook | An analyst asks which risks an annual report names. |
| Investing | Individual investors | Check a claim in a filing before acting on it | An investor asks how much cash a company reports. |
| Operations | Small business teams | Put a long policy or contract behind a question box | A manager asks how long a supplier contract runs. |
| Software | Developers | Use it as a small model of a retrieval flow they will build for their own files | A developer swaps the PDF and keeps the rest. |
You need a little n8n: import a file, add three credentials and call a webhook with a JSON body. Nothing in the file states a setup time.
Any n8n that can reach OpenAI, Google Drive and a Qdrant instance will run it.
input and company can ask the questionsdataDownload saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Three accounts cover every step.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key, used by the two embedding nodes and the chat model |
| An account for a Google Drive OAuth2 credential, and a PDF in your Drive | |
| Qdrant | An instance n8n can reach, with its address and an API key if it needs one |
workflow.json.Embeddings OpenAI, Embeddings OpenAI1 and OpenAI Chat Model.Google Drive. Replace YOUR_FILE_ID with the id of your PDF, the long part of its address in Drive.Qdrant Vector Store and Qdrant Vector Store1.OpenAI Chat Model and pick a current model. The file names none, so n8n fills in gpt-5-mini, which OpenAI’s deprecations page, read on 12 November 2026, shuts down on 11 December 2026, with gpt-5.6-terra as the replacement.crowd.Webhook1 and post a question to /webhook-test/pdf-question, or publish the workflow and use /webhook/pdf-question.Post a JSON body with two fields to the webhook. input holds your question, and company names the collection to search. The reply is the answer as plain text. Store a second PDF in a collection of its own, and a different company value searches that one instead.
| To change | Where |
|---|---|
| The file | The id in Google Drive |
| The collection | The name in Qdrant Vector Store and the company field you post |
| Chunk size | Recursive Character Text Splitter, 3000 characters with an overlap of 200 |
| How many chunks the model sees | topK in Vector Store Retriever, 5 |
| The model | OpenAI Chat Model |
You store an annual report and ask which risks it names.
You post {"input": "Which risks does the report name?", "company": "crowd"}. The question becomes a vector, and Qdrant returns the five closest chunks. The model writes an answer from them, and the webhook replies with that text. Check any figure against the PDF, since the model saw only five chunks.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. A vector store keeps each chunk of text as a list of numbers, so a question can find the passages closest to it in meaning. The top group stores the PDF. The bottom group answers. Run the top once, then keep the bottom listening.
For experts. Two Qdrant nodes share a collection by name, and the webhook picks the collection for each request.
| Node | What it does | What to know |
|---|---|---|
Qdrant Vector Store | Version 1, insert mode, collection crowd | It creates the collection if it is missing. Run it again and the chunks go in a second time |
Qdrant Vector Store1 | Version 1, collection {{ $json.body.company }}, feeding Vector Store Retriever | The caller picks the collection, so anyone who can call the webhook can search any collection on that Qdrant instance |
Retrieval QA Chain | Version 1, query {{ $json.body.input }} | Its output is response.text, which Respond to Webhook returns as text |
Webhook1 | Version 1.1, a POST on pdf-question, answered by a node | It has no sign-in |
The webhook is open, and the caller names the collection.
Webhook1 has no sign-in, so once the workflow is published, anyone with its address can ask questions and spend your OpenAI keycompany value picks the collection, so use a Qdrant instance that holds only what you are happy to expose, or add a checkgpt-5-mini, which OpenAI shuts down on 11 December 2026. Step 5 names the replacementAn n8n workflow in two parts. The first reads a PDF from Google Drive, cuts it into chunks and stores them in a Qdrant
collection. The second waits at a webhook: you post a question, it finds the five closest chunks, hands them to an
OpenAI chat model and sends the answer back in the reply.
workflow.json: the workflow as n8n exports it, 13 nodes beside 2 sticky notes. It holds no credential.README.md: these notes.Mindket fixed a few things the copy would have tripped over:
YOUR_FILE_ID, and you put in your own.pdf-question.input,body.input, so a question from the Chat window would have failed. Mindket removed that trigger.workflow.json.Embeddings OpenAI, Embeddings OpenAI1 and OpenAI Chat Model.Google Drive. Replace YOUR_FILE_ID with the id of your PDF, theQdrant Vector Store andQdrant Vector Store1.OpenAI Chat Model and pick a current model. The file names none, so n8n fills in gpt-5-mini. OpenAI'sgpt-5.6-terracrowd, which is created if it is missing.Webhook1, then post a question:curl -X POST https://YOUR-N8N-ADDRESS/webhook-test/pdf-question \
-H "Content-Type: application/json" \
-d '{"input": "What are the main risks this report names?", "company": "crowd"}'
Once the workflow is published, the same call goes to /webhook/pdf-question.
The first part runs when you press Execute Workflow:
When clicking "Execute Workflow" starts it.Google Drive downloads the file whose id you set.Binary to Document reads the PDF's binary field data and turns its pages into documents.Recursive Character Text Splitter cuts them into chunks of 3000 characters that overlap by 200.Embeddings OpenAI turns each chunk into a vector, and Qdrant Vector Store inserts the vectors in the collectioncrowd.The second part runs when a question arrives:
Webhook1 takes a POST on pdf-question and holds the reply until a node answers.Retrieval QA Chain reads the question from body.input.Qdrant Vector Store1 searches the collection named in body.company, with Embeddings OpenAI1 turning theVector Store Retriever keeps the five closest chunks.OpenAI Chat Model writes the answer from those chunks.Respond to Webhook sends the answer back as plain text.Qdrant Vector Store for storing, and the company field you post for asking. Keep themRecursive Character Text Splitter.topK in Vector Store Retriever, 5 in the file.OpenAI Chat Model.Google Drive. Use a new collection name for each report you want to keep apart.company field decides which collection is searched, so a name that matches no collection cannot return an answer.NOTICE.md 617 B README.md 5 KB workflow.json 8 KB
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
op7418 · Skill
Skill that makes single-file HTML slide decks, slide illustrations and platform covers in two visual styles, with a presenter mode for rehearsal. For speakers…
alirezarezvani · Skill
Adds 411 ready-made skills for Claude Code and other coding agents, grouped by role from engineering and product to marketing, finance and compliance. Installs…
NeoQuasar · Kit
Forecasts financial candlestick series with a 4.1M-parameter foundation model trained on data from over 45 exchanges. For quant researchers and developers who…
An n8n workflow that sends a Hebrew WhatsApp reminder for an unpaid invoice 7, 14 and 30 days after its due date. It reads the open invoices from a Google Shee…
An n8n workflow that files invoices. It watches a Google Drive folder, has LlamaParse read each new file and an OpenAI model pick out the line items. Airtable…