This workflow corresponds to n8n.io template #1960 — we link there as the canonical source.
This workflow follows the Chainretrievalqa → Retrievervectorstore recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "tMiRJYDrXzpKysTX",
"meta": {
"templateId": "1960"
},
"name": "Stock Q&A Workflow",
"tags": [],
"nodes": [
{
"id": "ec3b86be-4113-4fd5-8365-02adb67693e9",
"name": "Embeddings OpenAI1",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1960,
720
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "42fd8020-3861-4d0f-a7a2-70e2c35f0bed",
"name": "On new manual Chat Message",
"type": "@n8n/n8n-nodes-langchain.manualChatTrigger",
"disabled": true,
"position": [
1620,
240
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a9b48d04-691e-4537-90f8-d7a4aa6153af",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1560,
120
],
"parameters": {
"color": 6,
"width": 903.0896125323785,
"height": 733.5099670584011,
"content": "## Step 2: Setup the Q&A \n### The incoming message from the webhook is queried from the Supabase Vector Store. The response is provided in the response webhook. "
},
"typeVersion": 1
},
{
"id": "472b4800-745a-4337-9545-163247f7e9ae",
"name": "Retrieval QA Chain",
"type": "@n8n/n8n-nodes-langchain.chainRetrievalQa",
"position": [
1880,
240
],
"parameters": {
"query": "={{ $json.body.input }}"
},
"typeVersion": 1
},
{
"id": "e58bd82d-abc6-44ed-8e93-ec5436126d66",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2280,
240
],
"parameters": {
"options": {},
"respondWith": "text",
"responseBody": "={{ $json.response.text }}"
},
"typeVersion": 1
},
{
"id": "04bbf01e-8269-47c7-897d-4ea94a1bd1c0",
"name": "Vector Store Retriever",
"type": "@n8n/n8n-nodes-langchain.retrieverVectorStore",
"position": [
2020,
440
],
"parameters": {
"topK": 5
},
"typeVersion": 1
},
{
"id": "feee6d68-2e0d-4d40-897e-c1d833a13bf2",
"name": "Webhook1",
"type": "n8n-nodes-base.webhook",
"position": [
1620,
420
],
"parameters": {
"path": "19f5499a-3083-4783-93a0-e8ed76a9f742",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1.1
},
{
"id": "1b8d251f-7069-4d7d-b6d6-4bfa683d4ad1",
"name": "When clicking \"Execute Workflow\"",
"type": "n8n-nodes-base.manualTrigger",
"position": [
280,
260
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b746a7a4-ed94-4332-bf7b-65aadcf54130",
"name": "Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
580,
260
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "list",
"value": "1LZezppYrWpMStr4qJXtoIX-Dwzvgehll",
"cachedResultUrl": "https://drive.google.com/file/d/1LZezppYrWpMStr4qJXtoIX-Dwzvgehll/view?usp=drivesdk",
"cachedResultName": "crowdstrike.pdf"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "83a7d470-f934-436d-ba3f-1ae7c776f5a5",
"name": "Binary to Document",
"type": "@n8n/n8n-nodes-langchain.documentBinaryInputLoader",
"position": [
860,
480
],
"parameters": {
"loader": "pdfLoader",
"options": {}
},
"typeVersion": 1
},
{
"id": "b52b4a90-99a1-49cc-a6f0-7551d6754496",
"name": "Recursive Character Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
860,
640
],
"parameters": {
"options": {},
"chunkSize": 3000,
"chunkOverlap": 200
},
"typeVersion": 1
},
{
"id": "b525e130-2029-4f55-a603-1fdc05a19c17",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1160,
480
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5358c53f-55f9-431d-8956-c6bae7ad25bc",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
540,
120
],
"parameters": {
"color": 6,
"width": 772.0680602743597,
"height": 732.3675002130781,
"content": "## Step 1: Upserting the PDF\n### Fetch file from Google Drive, split it into chunks and insert into Supabase index\n\n"
},
"typeVersion": 1
},
{
"id": "fb91e2da-0eeb-47a5-aa49-65bf56986857",
"name": "Qdrant Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
940,
260
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "=crowd"
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "89e14837-d1fc-4b1e-9ebc-7cf3e7fd9a70",
"name": "Qdrant Vector Store1",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
1980,
600
],
"parameters": {
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "={{ $json.body.company }}"
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "c619245b-5ea0-4354-974d-21ec6b8efa93",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1880,
460
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e4aa780d-8069-4308-a61f-82ed876af71a",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-560,
120
],
"parameters": {
"color": 6,
"width": 710.9124489067698,
"height": 726.4452519516944,
"content": "## Start here: Step-by Step Youtube Tutorial :star:\n\n[](https://www.youtube.com/watch?v=pMvizUx5n1g)\n"
},
"typeVersion": 1
}
],
"active": true,
"settings": {},
"versionId": "463aec94-26a6-436d-8732-fc01d637c6ae",
"connections": {
"Webhook1": {
"main": [
[
{
"node": "Retrieval QA Chain",
"type": "main",
"index": 0
}
]
]
},
"Google Drive": {
"main": [
[
{
"node": "Qdrant Vector Store",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Retrieval QA Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Binary to Document": {
"ai_document": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Embeddings OpenAI1": {
"ai_embedding": [
[
{
"node": "Qdrant Vector Store1",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Retrieval QA Chain": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Qdrant Vector Store1": {
"ai_vectorStore": [
[
{
"node": "Vector Store Retriever",
"type": "ai_vectorStore",
"index": 0
}
]
]
},
"Vector Store Retriever": {
"ai_retriever": [
[
{
"node": "Retrieval QA Chain",
"type": "ai_retriever",
"index": 0
}
]
]
},
"On new manual Chat Message": {
"main": [
[
{
"node": "Retrieval QA Chain",
"type": "main",
"index": 0
}
]
]
},
"When clicking \"Execute Workflow\"": {
"main": [
[
{
"node": "Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Recursive Character Text Splitter": {
"ai_textSplitter": [
[
{
"node": "Binary to Document",
"type": "ai_textSplitter",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleDriveOAuth2ApiopenAiApiqdrantApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow enables users to query stock-related information effortlessly through a chat interface, delivering accurate answers drawn from your uploaded documents without needing to sift through files manually. It's ideal for financial analysts, investors, or teams managing market data who want quick insights on stocks, trends, or reports. The key step involves the Retrieval QA Chain, which combines OpenAI embeddings to retrieve and generate responses from a vector store built from documents loaded via Google Drive, ensuring contextually relevant replies in real time.
Use this workflow when you have a collection of stock documents in Google Drive and need an interactive Q&A tool for on-demand queries, such as during research or client discussions. Avoid it if your documents aren't primarily text-based or if you require real-time stock price feeds, as it focuses on static analysis rather than live data. Common variations include swapping Google Drive for other loaders like PDFs from email attachments or integrating additional AI nodes for sentiment analysis on retrieved stock news.
About this workflow
Stock Q&A Workflow. Uses embeddingsOpenAi, manualChatTrigger, stickyNote, chainRetrievalQa. Chat trigger; 17 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Supabase Insertion Upsertion Retrieval. Uses googleDrive, documentDefaultDataLoader, stickyNote, chainRetrievalQa. Chat trigger; 21 nodes.
Supabase Insertion & Upsertion & Retrieval. Uses googleDrive, documentDefaultDataLoader, stickyNote, chainRetrievalQa. Chat trigger; 21 nodes.
This is a demo workflow to showcase how to use Supabase to embed a document, retrieve information from the vector store via chat and update the database. set your credentials for Supabase set your cre
Manual Stickynote. Uses googleDrive, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi, stickyNote. Chat trigger; 16 nodes.
HeyDinastia. Uses executeCommand, httpRequest, youTube, postgres. Webhook trigger; 66 nodes.