This workflow corresponds to n8n.io template #7475 — we link there as the canonical source.
This workflow follows the Agent → Chat Trigger 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": "0xZw2OgOrr6KsxNf",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Blockify Workflow Template",
"tags": [],
"nodes": [
{
"id": "719dd623-8a7b-49c4-8ac8-6e7fd81e60aa",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-336,
432
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a4427feb-0c9d-44cd-ae9e-ea90d950acca",
"name": "Query Data Tool",
"type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
"position": [
-16,
1568
],
"parameters": {
"mode": "retrieve-as-tool",
"topK": 5,
"toolName": "knowledge_base",
"memoryKey": {
"__rl": true,
"mode": "list",
"value": "vector_store_key"
},
"toolDescription": "Use this knowledge base to answer questions from the user"
},
"typeVersion": 1.2
},
{
"id": "1202a157-6360-4e01-9f13-116bc74ac8bb",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-112,
1344
],
"parameters": {
"options": {}
},
"typeVersion": 2
},
{
"id": "d9404d0b-c98e-434e-8699-114f58b4f542",
"cid": "Ikx1Y2FzIFBleXJpbiI",
"name": "RAG Chatbot",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"creator": "Lucas Peyrin",
"position": [
-368,
1344
],
"parameters": {
"public": true,
"options": {
"title": "",
"subtitle": "",
"customCss": "/* === THEME OVERRIDE: n8n Glass & Glow (Revised) === */\n\n/*\n This theme is built upon the default n8n chat CSS variables.\n We'll use your desired branding and layout, and then add\n the \"glass\" effect using a semi-transparent background\n and a backdrop-filter on the main window class.\n*/\n\n:root {\n /* --- 1. CORE BRANDING & FONTS --- */\n /* Your choices for font and primary color are applied here. */\n --chat--font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n --chat--color-primary: #EA4B71; /* n8n Red */\n --chat--color-primary-shade-50: #D93A60;\n --chat--color-primary-shade-100: #C82A50;\n --chat--color-secondary: #20b69e; /* Kept default secondary for things like file uploads */\n --chat--color-secondary-shade-50: #1ca08a;\n --chat--color-white: #ffffff;\n --chat--color-light: #f2f4f8;\n --chat--color-dark: #1F2937; /* Darker, more modern text color */\n --chat--color-disabled: #9CA3AF;\n --chat--color-typing: #404040;\n\n /* --- 2. WINDOW & LAYOUT --- */\n /* Your dimensions and rounded corners. The actual glass effect is handled in the class override below. */\n --chat--window--width: 430px;\n --chat--window--height: 80vh;\n --chat--window--border-radius: 16px;\n --chat--window--border: 1px solid rgba(255, 255, 255, 0.3);\n --chat--spacing: 1rem; /* 16px base spacing */\n --chat--window--z-index: 9999;\n --chat--window--bottom: var(--chat--spacing);\n --chat--window--right: var(--chat--spacing);\n --chat--window--margin-bottom: var(--chat--spacing);\n\n /* --- 3. GLASSMORPHISM BACKGROUNDS --- */\n /* We make the main sections transparent to let the glass window show through. */\n --chat--header--background: transparent;\n --chat--body--background: transparent;\n --chat--footer--background: transparent;\n\n /* --- 4. HEADER STYLING (REMOVED) --- */\n /* The header is removed by setting its height, padding, and border to 0/none. */\n --chat--header-height: 0;\n --chat--header--padding: 0;\n --chat--header--border-bottom: none;\n /* The rest of the header variables are now irrelevant. */\n --chat--header--color: var(--chat--color-dark);\n --chat--heading--font-size: 1.5rem;\n --chat--subtitle--font-size: 0.875rem;\n --chat--subtitle--line-height: 1.4;\n --chat--close--button--color-hover: var(--chat--color-primary);\n\n /* --- 5. MESSAGE BUBBLES --- */\n --chat--message--font-size: 0.875rem;\n --chat--message--padding: 12px 16px;\n --chat--message--border-radius: 12px;\n --chat--message-line-height: 1.6;\n --chat--message--margin-bottom: calc(var(--chat--spacing) * 0.75);\n /* Adjusted padding: Top is 0, sides and bottom use the base spacing. */\n --chat--messages-list--padding: 0 var(--chat--spacing) var(--chat--spacing);\n --chat--message--bot--background: var(--chat--color-white);\n --chat--message--bot--color: #111827;\n --chat--message--bot--border: none;\n --chat--message--user--background: var(--chat--color-primary);\n --chat--message--user--color: var(--chat--color-white);\n --chat--message--user--border: none;\n\n /* --- 6. INPUT AREA --- */\n --chat--textarea--height: 50px;\n --chat--textarea--max-height: 10rem;\n --chat--input--font-size: 0.9rem;\n --chat--input--border: 0;\n --chat--input--border-radius: 12px; /* Rounded input field */\n --chat--input--padding: 12px 16px;\n --chat--input--background: rgba(255, 255, 255, 0.5); /* Semi-transparent input */\n --chat--input--text-color: #111827;\n --chat--input--line-height: 1.5;\n --chat--input--border-active: 0;\n\n /* --- 7. SEND & FILE BUTTONS --- */\n --chat--input--send--button--background: transparent;\n --chat--input--send--button--color: var(--chat--color-primary);\n --chat--input--send--button--background-hover: transparent;\n --chat--input--send--button--color-hover: var(--chat--color-primary-shade-50);\n --chat--input--file--button--background: transparent;\n --chat--input--file--button--color: var(--chat--color-secondary);\n --chat--input--file--button--background-hover: transparent;\n --chat--input--file--button--color-hover: var(--chat--color-secondary-shade-50);\n\n /* --- 8. TOGGLE BUTTON & OTHERS --- */\n /* Using your primary brand color for the main toggle button */\n --chat--toggle--size: 64px;\n --chat--toggle--width: var(--chat--toggle--size);\n --chat--toggle--height: var(--chat--toggle--size);\n --chat--toggle--border-radius: 50%;\n --chat--toggle--background: var(--chat--color-primary);\n --chat--toggle--hover--background: var(--chat--color-primary-shade-50);\n --chat--toggle--active--background: var(--chat--color-primary-shade-100);\n --chat--toggle--color: var(--chat--color-white);\n}\n\n/* === CLASS OVERRIDES === */\n/*\n These are essential for effects that CSS variables can't control,\n like the glass blur, shadows, and max-height.\n*/\n\n.chat-window {\n /* This is the magic for the glass effect! */\n background-color: rgba(249, 243, 245, 0.6); /* A semi-transparent background color */\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px); /* For Safari compatibility */\n\n /* A subtle shadow helps lift the window off the page */\n box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.1);\n\n /* Here we apply the max-height you wanted */\n max-height: 750px;\n}\n\n/* Add top margin to the first message only for initial spacing */\n.chat-messages-list .chat-message:first-child {\n margin-top: var(--chat--spacing);\n}\n\n/* Make user messages slightly wider for better balance */\n.chat-message.is-user {\n\tmax-width: 70%;\n}\n\n.chat-message.is-bot {\n\tmax-width: 80%;\n}\n\n/* Add a subtle glow to messages on hover */\n.chat-message {\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n.chat-message:hover {\n transform: translateY(-2px);\n box-shadow: 0 0 25px 0 rgba(234, 75, 113, 0.2);\n}\n\n/* === PAGE BACKGROUND === */\n/* Your dotted background to simulate the n8n canvas. Perfect as is! */\nbody {\n background-color: #FDFBFF;\n background-image:\n radial-gradient(circle at 1px 1px, rgba(0,0,0,0.07) 1px, transparent 0),\n linear-gradient(135deg, #F9F3F5 0%, #EFF3FB 100%);\n background-size: 25px 25px, 100% 100%;\n}",
"inputPlaceholder": "Type your n8n related question.."
},
"initialMessages": "Hello! I'm an AI assistant trained on the official n8n documentation.\nYou can ask me anything about n8n nodes, workflows, or concepts. For example:\n\"How does the IF node work?\"\n\"What is a sub-workflow?\""
},
"typeVersion": 1.1
},
{
"id": "86b3ad2f-ebfc-499e-8b61-a437f0ca02d4",
"name": "Chunk Text",
"type": "n8n-nodes-base.code",
"position": [
512,
432
],
"parameters": {
"jsCode": "const MAX_LEN = 1000;\nconst OVERLAP = 100;\n\nfunction splitTextIntoChunks(text, maxLen = 1000, overlap = 100) {\n if (text == null) return [];\n text = \n String($input.first().json.data);\n //String($input.first().json.candidates[0].content.parts[0].text);\n maxLen = Math.max(1, maxLen | 0);\n overlap = Math.max(0, overlap | 0);\n\n const chunks = [];\n let start = 0;\n const n = text.length;\n\n while (start < n) {\n const hardEnd = Math.min(n, start + maxLen);\n let split = -1;\n\n for (let i = hardEnd - 1; i >= start; i--) {\n const c = text[i];\n if (c === '.' || c === '!' || c === '?' || c === '\\n') {\n split = i + 1;\n break;\n }\n }\n\n if (split === -1 || split <= start) {\n split = hardEnd;\n }\n\n chunks.push(text.slice(start, split));\n\n if (split >= n) break;\n\n start = Math.max(split - overlap, start + 1);\n }\n\n return chunks;\n}\n\nconst out = [];\n// Iterate through all items (each item must have a .json.text field, or similar content)\nfor (let i = 0; i < items.length; i++) {\n // If .json.text exists, use it; otherwise use hardcoded text for demonstration\n const text = items[i].json.text || \"This is a demo text. Add your own data to the 'text' property of the input JSON. This script will split long text into chunks, each up to MAX_LEN, preserving overlap as set by OVERLAP.\";\n \n const chunks = splitTextIntoChunks(text, MAX_LEN, OVERLAP);\n for (let j = 0; j < chunks.length; j++) {\n out.push({\n json: {\n chunkIndex: j,\n chunk: chunks[j],\n },\n });\n }\n}\n\nreturn out;"
},
"typeVersion": 2
},
{
"id": "d82ff92b-de08-44fd-8910-5fa36e33b415",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
112
],
"parameters": {
"color": 4,
"width": 400,
"height": 528,
"content": "## Collect Source Documents\n\nExtract data and convert into text through any traditional methods so the information can be passed into the Blockify text based API.\n\nThis sample uses a simple .TXT file uploaded to Google Drive, but the content could be anything."
},
"typeVersion": 1
},
{
"id": "bf0ea22f-5068-4ffb-afab-196e711516f5",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
112
],
"parameters": {
"color": 4,
"width": 224,
"height": 528,
"content": "## Chunk Text\n\nChunk using any normal chunking method. For optimal results we recommend sending between 1,000 and 4,000 Character chunks per Blockify Ingest API request with a 10% Overlap.\n\nThis example uses 1,000 Characters and 100 Character Overlap."
},
"typeVersion": 1
},
{
"id": "6a79147b-9a53-45d6-8018-178629d73541",
"name": "Loop Over Chunks",
"type": "n8n-nodes-base.splitInBatches",
"position": [
816,
432
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "0ff1c24c-1261-447e-b145-d208225835c2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
112
],
"parameters": {
"color": 4,
"width": 688,
"height": 528,
"content": "## Blockify Ingest API\n### Get your free trial API key here: https://console.blockify.ai/signup\n\nBlockify Ingest is designed to receive input raw source (parsed / chunked) text via LLM API request and output structured optimized XML \u201cIdeaBlocks,\u201d repackaging the source data into a cleaned format. \n\nThe process is \u224899% lossless for numerical data, facts, and key information. We always encourage a human to be in the loop to review the outputs of IdeaBlock content.\n"
},
"typeVersion": 1
},
{
"id": "b692bcc8-956e-4b39-9178-415c722cdc6c",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1488,
112
],
"parameters": {
"color": 4,
"width": 592,
"height": 944,
"content": "## Embed IdeaBlocks\n\n### Recommend testing different elements of the XML to Embed \n\nHow you split and load the IdeaBlocks into your Vector DB is at your discretion. For optimal result try different combinations of the XML data for each IdeaBlock.\n\nI.e. Just embedding the Critical Question, vs Critical Question + Trusted Answer, etc. \n\nRemember to serve at a minimum the Critical Question and the Trusted Answer in the TEXT part of the DB entry. Some use cases benefit from the embedding text being differed from the text returned during the search."
},
"typeVersion": 1
},
{
"id": "4850e01a-12ca-426f-9435-95d681b39b90",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-448,
1184
],
"parameters": {
"color": 3,
"width": 768,
"height": 544,
"content": "## Basic RAG\n\nUsed to simply showcase how the IdeaBlocks can be used. IdeaBlocks could be used in place of any Chunk data source approach (RAG or otherwise)."
},
"typeVersion": 1
},
{
"id": "6fbf2167-1971-4810-a043-2b24947d0ea2",
"name": "Simple IdeaBlock Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
"position": [
1648,
432
],
"parameters": {
"mode": "insert",
"memoryKey": {
"__rl": true,
"mode": "list",
"value": "vector_store_key"
}
},
"typeVersion": 1.3
},
{
"id": "10887a70-15b0-41e7-9140-dbdc523b0704",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
1744,
672
],
"parameters": {
"options": {},
"textSplittingMode": "custom"
},
"typeVersion": 1.1
},
{
"id": "8dd36c51-90f8-4af3-9022-f3913f812aab",
"name": "Embed Individual IdeaBlocks (Already Separated)",
"type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
"position": [
1824,
864
],
"parameters": {
"chunkSize": 1000000,
"separator": "</ideablock>"
},
"typeVersion": 1
},
{
"id": "10ee58ce-af57-4905-9c24-eda443a817fa",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1584,
848
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "0c9ce299-dfeb-437b-bfd6-d3cfe6c37796",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-144,
1568
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-nano",
"cachedResultName": "gpt-4.1-nano"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "78550186-8e3b-4602-9d0b-61a67aef94ee",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
-48
],
"parameters": {
"color": 6,
"width": 624,
"height": 1200,
"content": "# Blockify\u00ae Data Optimization Workflow\n\n## Blockify Optimizes Data for RAG - Giving Structure to Unstructured Data for ~78X Accuracy, when pairing Blockify Ingest and Blockify Distill\n\n## Learn more at [https://iternal.ai/blockify](https://iternal.ai/blockify)\n\n### Get Free Demo API Access here: [https://console.blockify.ai/signup](https://console.blockify.ai/signup)\n\n### Read the Technical Whitepaper here: [https://iternal.ai/blockify-results](https://iternal.ai/blockify-results)\n\n### See example Accuracy Comparison here: [https://iternal.ai/case-studies/medical-accuracy/](https://iternal.ai/case-studies/medical-accuracy/)\n\nBlockify is a data optimization tool that takes messy, unstructured text, like hundreds of sales\u2011meeting transcripts or long proposals, and intelligently optimizes the data into small, easy\u2011to\u2011understand \"IdeaBlocks.\" Each IdeaBlock is just a couple of sentences in length that capture one clear idea, plus a built\u2011in contextualized question and answer.\n\nWith this approach, Blockify improves accuracy of LLMs (Large Language Models) by an average aggregate 78X, while shrinking the original mountain of text to about 2.5% of its size while keeping (and even improving) the important information.\n\nWhen Blockify's IdeaBlocks are compared with the usual method of breaking text into equal\u2011sized chunks, the results are dramatic. Answers pulled from the distilled IdeaBlocks are roughly 40X more accurate, and user searches return the right information about 52% more accurate. In short, Blockify lets you store less data, spend less on computing, and still get better answers- turning huge documents into a concise, high\u2011quality knowledge base that anyone can search quickly.\n\nBlockify works by processing chunks of text to create structured data from an unstructured data source.\n\nBlockify\u00ae replaces the traditional \"dump\u2011and\u2011chunk\" approach with an end\u2011to\u2011end pipeline that cleans and organizes content before it ever hits a vector store.\n\nAdmins first define who should see what, then the system ingests any file type\u2014Word, PDF, slides, images\u2014inside public cloud, private cloud, or on\u2011prem. A \u200bcontext\u2011aware splitter finds natural breaks, and a series of specially developed Blockify LLM model turns each segment into a draft IdeaBlock.\n\nGenAI systems fed with this curated data return sharper answers, hallucinate far less, and comply with security policies out of the box.\n\nThe result: higher trust, lower operating cost, and a clear path to enterprise\u2011scale RAG without the cleanup headaches that stall most AI rollouts."
},
"typeVersion": 1
},
{
"id": "b80d4ddc-7cf1-4b24-8fe9-acc20dccbb4d",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-448,
-48
],
"parameters": {
"color": 5,
"width": 2624,
"height": 1200,
"content": "# Step 1: Blockify Ingest\n## Workflow for the Blockify Ingest Component. Does not include the Blockify Distill Component which is independent of the Ingest stage."
},
"typeVersion": 1
},
{
"id": "e5b39308-df4a-40f9-b503-f7b6720a9734",
"name": "Extract Text from .TXT File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
192,
432
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "44684d01-0140-4004-a202-2c5ab0de6e95",
"name": "Download .TXT File for Ingest",
"type": "n8n-nodes-base.googleDrive",
"position": [
0,
432
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "list",
"value": "1ZTlOZ19noegFvuWxICfG61AHW3J32qH1",
"cachedResultUrl": "https://drive.google.com/YOUR_AWS_SECRET_KEY_HERE/view?usp=drivesdk",
"cachedResultName": "TXT Blockify Effectiveness for High Accuracy Industry Use Cases such as Healthcare.txt"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "6269cb69-77e2-4763-adf2-67c4caf914f6",
"name": "Blockify Ingest API",
"type": "n8n-nodes-base.httpRequest",
"position": [
1040,
368
],
"parameters": {
"url": "https://api.blockify.ai/v1/chat/completions",
"method": "POST",
"options": {},
"jsonBody": "={\n \"messages\": [{\"role\": \"user\", \"content\": {{ JSON.stringify($json.chunk) }}}],\n \"max_tokens\": 8000,\n \"temperature\": 0.5,\n \"model\":\"ingest\"\n} ",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "54dc86b3-fbf4-4613-8ffc-dba5bdab8a3e",
"name": "Extract IdeaBlocks from API Response",
"type": "n8n-nodes-base.set",
"position": [
1264,
368
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8133796e-0114-432b-83e6-fb3a2c5ca4be",
"name": "choices[0].message.content",
"type": "string",
"value": "={{ $json.choices[0].message.content }}"
}
]
}
},
"typeVersion": 3.4
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "664d4bbe-3a53-4436-ab7d-a6c71a386931",
"connections": {
"Chunk Text": {
"main": [
[
{
"node": "Loop Over Chunks",
"type": "main",
"index": 0
}
]
]
},
"RAG Chatbot": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Query Data Tool": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Loop Over Chunks": {
"main": [
[],
[
{
"node": "Blockify Ingest API",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Simple IdeaBlock Vector Store",
"type": "ai_embedding",
"index": 0
},
{
"node": "Query Data Tool",
"type": "ai_embedding",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Blockify Ingest API": {
"main": [
[
{
"node": "Extract IdeaBlocks from API Response",
"type": "main",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Simple IdeaBlock Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Extract Text from .TXT File": {
"main": [
[
{
"node": "Chunk Text",
"type": "main",
"index": 0
}
]
]
},
"Download .TXT File for Ingest": {
"main": [
[
{
"node": "Extract Text from .TXT File",
"type": "main",
"index": 0
}
]
]
},
"Simple IdeaBlock Vector Store": {
"main": [
[
{
"node": "Loop Over Chunks",
"type": "main",
"index": 0
}
]
]
},
"Extract IdeaBlocks from API Response": {
"main": [
[
{
"node": "Simple IdeaBlock Vector Store",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Download .TXT File for Ingest",
"type": "main",
"index": 0
}
]
]
},
"Embed Individual IdeaBlocks (Already Separated)": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader",
"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.
googleDriveOAuth2ApihttpBearerAuthopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Source: https://n8n.io/workflows/7475/ — 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.
This advanced n8n workflow automates the full lead enrichment, qualification, and personalized outreach process tailored specifically for the B2B real estate sector. Integrating top platforms like Api
This n8n template automatically classifies incoming emails (Sales, Support, Internal, Finance, Promotions) and routes them to a dedicated OpenAI LLM Agent for processing. Depending on the category, th
Automate Outreach Prospect automates finding, enriching, and messaging potential partners (like restaurants, malls, and bars) using Apify Google Maps scraping, Perplexity enrichment, OpenAI LLMs, Goog
Chat with docs - 5minAI New version. Uses httpRequest, documentDefaultDataLoader, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi. Event-driven trigger; 62 nodes.
I prepared a detailed guide that illustrates the entire process of building an AI agent using Supabase and Google Drive within N8N workflows.