This workflow corresponds to n8n.io template #11877 — we link there as the canonical source.
This workflow follows the Form → Form 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 →
{
"nodes": [
{
"id": "b7fa47a6-76cb-4aab-93d0-83a68004453e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
-240
],
"parameters": {
"width": 496,
"height": 800,
"content": "# Create a Lookio RAG Assistant from a CSV Text Corpus\n\nThis advanced workflow ingests a corpus of text from a CSV file, uploads each row as a separate resource to [Lookio](https://www.lookio.app), and provisions a new Assistant scoped specifically to that data.\n\n**How it works:**\n\n1. **Upload a CSV** (Form) collects the file and Assistant settings (Name, Context, Guidelines).\n2. **Convert to txt** transforms the text content of each row into a binary file.\n3. **Loop & Upload** sends each file to Lookio via the `add-resource` API.\n4. **Create Lookio assistant** uses the aggregated Resource IDs to create a bot that only accesses this specific corpus.\n\n**Setup Requirements:**\n\n1. **Credentials:** You must replace `<YOUR-API-KEY>` and `<YOUR-WORKSPACE-ID>` in **two** nodes:\n* `Create Lookio assistant` (HTTP Request)\n* `Import resource to Lookio` (HTTP Request)\n\n\n2. **CSV Structure:** Your CSV needs at least two columns: one for the **Title** (resource name) and one for the **Content** (text body).\n3. **Form Map:** When running the form, simply map your CSV headers to the requested fields.\n\n\n*A workflow by Guillaume Duvernay*"
},
"typeVersion": 1
},
{
"id": "6ab43461-7e57-4e22-8aa2-0810e1683bf4",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
480
],
"parameters": {
"color": 7,
"width": 256,
"height": 320,
"content": "## Action required\n\nMake sure to set your Lookio API key and workspace ID in here."
},
"typeVersion": 1
},
{
"id": "3c75f7cd-2208-4ca8-a815-f30797885c81",
"name": "Convert to txt",
"type": "n8n-nodes-base.convertToFile",
"position": [
176,
416
],
"parameters": {
"options": {
"fileName": "={{ $json[\n $('Upload a CSV').item.json[\"Name of the column that contains the resource title\"]\n] }}"
},
"operation": "toText",
"sourceProperty": "={{ $('Upload a CSV').item.json[\"Name of the column that contains the resource text\"] }}",
"binaryPropertyName": "=data"
},
"typeVersion": 1.1
},
{
"id": "500e2a33-403d-4fe6-a178-f8b8dc6a82c2",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
400,
416
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "5d67d456-f302-4bf2-b8fe-a924117699d5",
"name": "Convert CSV to JSON",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-48,
416
],
"parameters": {
"options": {},
"binaryPropertyName": "csv"
},
"typeVersion": 1.1
},
{
"id": "20e9fd7e-dd10-4c6f-bf15-01ff742dc25a",
"name": "Upload a CSV",
"type": "n8n-nodes-base.formTrigger",
"position": [
-384,
416
],
"parameters": {
"options": {},
"formTitle": "CSV",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "csv",
"requiredField": true,
"acceptFileTypes": ".csv"
},
{
"fieldLabel": "Assistant name",
"placeholder": "RFP bot",
"requiredField": true
},
{
"fieldLabel": "Assistant context",
"placeholder": "You help the Sales team to answer ...",
"requiredField": true
},
{
"fieldLabel": "Assistant output guidelines",
"placeholder": "Answer in 3 concise bullet points, quote the resource titles in parenthesis...",
"requiredField": true
},
{
"fieldLabel": "Name of the column that contains the resource text",
"placeholder": "content",
"requiredField": true
},
{
"fieldLabel": "Name of the column that contains the resource title",
"placeholder": "title",
"requiredField": true
}
]
}
},
"typeVersion": 2.3
},
{
"id": "9135b6b3-a2ea-4cf5-8c10-2fcb0ed6cc16",
"name": "Aggregate success messages",
"type": "n8n-nodes-base.aggregate",
"position": [
624,
272
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "9173f114-3be2-453d-97c3-25fcba6cffdb",
"name": "Convert IDs into an Array",
"type": "n8n-nodes-base.set",
"position": [
848,
272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2c807751-a41a-4f39-bb81-26f26cdd9a8b",
"name": "IDs",
"type": "array",
"value": "={{ $json.data.map(item => item[\"Resource ID\"]) }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a91503f2-6a84-44ef-b8d8-661157502cff",
"name": "Success message form ending",
"type": "n8n-nodes-base.form",
"position": [
1344,
272
],
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "Successful upload!",
"completionMessage": "=Your assistant \"{{ $json['Assistant name'] }}\" has been successfully created and is set to answer based on the {{ $('Aggregate success messages').item.json.data.length }} uploaded text resources via CSV.\nAssistant ID: {{ $json['Assistant ID'] }}"
},
"typeVersion": 2.3
},
{
"id": "805a94d8-1085-4acb-b6f9-d3622b3eed5e",
"name": "Create Lookio assistant",
"type": "n8n-nodes-base.httpRequest",
"position": [
1088,
272
],
"parameters": {
"url": "https://api.lookio.app/webhook/create-assistant",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "form-urlencoded",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "workspace_id",
"value": "<YOUR-WORKSPACE-ID>"
},
{
"name": "assistant_name",
"value": "={{ $('Upload a CSV').item.json['Assistant name'] }}"
},
{
"name": "context",
"value": "={{ $('Upload a CSV').item.json['Assistant context'] }}"
},
{
"name": "output_guidelines",
"value": "={{ $('Upload a CSV').item.json['Assistant output guidelines'] }}"
},
{
"name": "resources_access_type",
"value": "Limited selection"
},
{
"name": "allowed_resources",
"value": "={{ $json.IDs }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "api_key",
"value": "<YOUR-API-KEY>"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "d3d01a00-af81-4532-b8c9-677999557006",
"name": "Import resource to Lookio",
"type": "n8n-nodes-base.httpRequest",
"position": [
800,
608
],
"parameters": {
"url": "https://api.lookio.app/webhook/add-resource",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "workspace_id",
"value": "<YOUR-WORKSPACE-ID>"
},
{
"name": "method",
"value": "file"
},
{
"name": "source_title",
"value": "={{ $binary.data.fileName }}"
},
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "api_key",
"value": "<YOUR-API-KEY>"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "2fe20497-a22c-4248-8611-2c68a3a582ff",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-528,
-96
],
"parameters": {
"color": 7,
"width": 368,
"height": 656,
"content": "## Form Input Helper\n\nThis form configures the Assistant and maps your CSV data.\n\n**Assistant Settings:**\n\n* **Name:** The display name (e.g., \"HR Bot\").\n* **Context:** The system instructions (e.g., \"You are a helpful HR assistant...\").\n* **Guidelines:** Formatting rules (e.g., \"Keep answers short.\").\n\n**CSV Column Mapping:**\nTo ensure the workflow reads your file correctly, you must specify your CSV header names here:\n\n* **Resource Text Column:** Type the exact header name where the text body is located (e.g., `content`, `body`).\n* **Resource Title Column:** Type the exact header name to use as the file name (e.g., `title`, `topic`)."
},
"typeVersion": 1
},
{
"id": "c744fbaf-a4e9-42f8-8969-f1c5f00c1aab",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
112
],
"parameters": {
"color": 7,
"width": 256,
"height": 320,
"content": "## Action required\n\nMake sure to set your Lookio API key and workspace ID in here."
},
"typeVersion": 1
}
],
"connections": {
"Upload a CSV": {
"main": [
[
{
"node": "Convert CSV to JSON",
"type": "main",
"index": 0
}
]
]
},
"Convert to txt": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Aggregate success messages",
"type": "main",
"index": 0
}
],
[
{
"node": "Import resource to Lookio",
"type": "main",
"index": 0
}
]
]
},
"Convert CSV to JSON": {
"main": [
[
{
"node": "Convert to txt",
"type": "main",
"index": 0
}
]
]
},
"Create Lookio assistant": {
"main": [
[
{
"node": "Success message form ending",
"type": "main",
"index": 0
}
]
]
},
"Convert IDs into an Array": {
"main": [
[
{
"node": "Create Lookio assistant",
"type": "main",
"index": 0
}
]
]
},
"Import resource to Lookio": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Aggregate success messages": {
"main": [
[
{
"node": "Convert IDs into an Array",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This advanced template automates the creation of a Lookio Assistant populated with a specific corpus of text. Instead of uploading files one by one, you can simply upload a CSV containing multiple text resources. The workflow iterates through the rows, converts them to text…
Source: https://n8n.io/workflows/11877/ — 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.
Influencer 2.0. Uses formTrigger, form, informationExtractor, lmChatOpenAi. Event-driven trigger; 93 nodes.
Episode 18 Scary Stories TikTok final. Uses httpRequest, lmChatOpenAi, lmChatOllama, lmChatDeepSeek. Event-driven trigger; 83 nodes.
Author: CSChin Example Source: https://www.ncl.ac.uk/singapore/staff/profile/chengchin.html#publications
This workflow collects an ICP via an n8n form, uses OpenAI GPT-5.6 and Bright Data to find and enrich LinkedIn company pages, scores each company with evidence, then logs qualified and rejected leads
Process multiple invoices automatically using Mistral's dedicated OCR model—at approximately $0.002 per page. Upload batches of PDF, PNG, or JPG invoices through a simple form, extract structured fina