This workflow corresponds to n8n.io template #9908 — 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": "67633966-e2e7-4440-82df-1572d6db8521",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-1344,
-224
],
"parameters": {
"options": {
"respondWithOptions": {
"values": {
"respondWith": "redirect"
}
}
},
"formTitle": "Bulk Lookio queries",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "CSV",
"multipleFiles": false,
"requiredField": true,
"acceptFileTypes": ".csv"
}
]
},
"formDescription": "Import a CSV with a column named \"Query\" to have your Lookio assistant populate answers in a new \"Response\" column."
},
"typeVersion": 2.3
},
{
"id": "1310a771-7449-4462-8620-7edfdff0216c",
"name": "Valid Query column?",
"type": "n8n-nodes-base.if",
"position": [
-672,
-224
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "75d079ba-b720-4e95-8e65-b8321e9974d8",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.data[0].Query }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "019738fb-b4cd-4737-9f38-2774e5ec9a2f",
"name": "Error message",
"type": "n8n-nodes-base.form",
"position": [
-448,
-160
],
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "Error",
"completionMessage": "No \"query\" column has been found"
},
"typeVersion": 2.3
},
{
"id": "0e951a6c-0746-4e1a-b302-36a6831af61e",
"name": "Isolate the Query column",
"type": "n8n-nodes-base.set",
"position": [
-224,
-352
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "082751fc-44cb-490e-8ecc-f24105d38209",
"name": "Query",
"type": "string",
"value": "={{ $json.Query }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e3115cce-3534-44a3-af33-0142db6dcae4",
"name": "Lookio API call",
"type": "n8n-nodes-base.httpRequest",
"position": [
368,
-64
],
"parameters": {
"url": "=https://api.lookio.app/webhook/query",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "query",
"value": "={{ $json.Query }}"
},
{
"name": "assistant_id",
"value": "<your-assistant-id>"
},
{
"name": "query_mode",
"value": "flash"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "api_key",
"value": "<your-lookio-api-key>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "74d3c3b1-5e1b-437a-826b-d8ac00befa12",
"name": "Prepare output",
"type": "n8n-nodes-base.set",
"position": [
640,
32
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c1a5c6c0-53d9-484d-a53d-da887e87e019",
"name": "Query",
"type": "string",
"value": "={{ $('Loop Over Queries').item.json.Query }}"
},
{
"id": "244e8abc-c188-4171-80fe-6af3e0871dcd",
"name": "Response",
"type": "string",
"value": "={{ $json.Output }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f20125d3-319b-4fbe-a9b5-43b661209375",
"name": "Generate enriched CSV",
"type": "n8n-nodes-base.convertToFile",
"position": [
224,
-512
],
"parameters": {
"options": {
"fileName": "Lookio bulk result"
}
},
"typeVersion": 1.1
},
{
"id": "6fd86367-fbc4-400a-82e7-1692713701e0",
"name": "Form ending and file download",
"type": "n8n-nodes-base.form",
"position": [
448,
-512
],
"parameters": {
"options": {},
"operation": "completion",
"respondWith": "returnBinary",
"completionTitle": "Your enriched file is ready",
"completionMessage": "A new column \"Response\" has been added and contains the result from your Lookio Assistant"
},
"typeVersion": 2.3
},
{
"id": "01e59eba-4f02-4c67-8906-a86733731a83",
"name": "Loop Over Queries",
"type": "n8n-nodes-base.splitInBatches",
"position": [
0,
-352
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "57584832-b58f-453c-b549-b70781441d88",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
-448,
-352
],
"parameters": {
"options": {},
"fieldToSplitOut": "data"
},
"typeVersion": 1
},
{
"id": "fedc6b1b-56a9-4698-8ade-3b262f9043b6",
"name": "Aggregate rows",
"type": "n8n-nodes-base.aggregate",
"position": [
-896,
-224
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "eff9c493-a49d-4535-b8dd-155da490cd82",
"name": "Extract all rows",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-1120,
-224
],
"parameters": {
"options": {},
"binaryPropertyName": "CSV"
},
"typeVersion": 1
},
{
"id": "ee9afc4b-6377-4eec-87ba-8907b319ec26",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2016,
-560
],
"parameters": {
"width": 592,
"height": 528,
"content": "# CSV bulk RAG queries with Lookio\n\nUpload a CSV with a column named **Query** and get back a CSV with a new **Response** column populated by your Lookio assistant.\n\nHow it works (brief):\n1. **Form Trigger** accepts a CSV.\n2. CSV is split into rows and each **Query** is sent to **Lookio API call**.\n3. Responses are collected and a new enriched CSV is generated for download.\n\nHow to set up (do this first):\n1. **Create a Lookio assistant** at https://www.lookio.app/ and upload your documents.\n2. In the **Lookio API call** node, replace the **api_key** header with your **Lookio API Key** and set **assistant_id** to your **Assistant ID**.\n3. Ensure your input CSV has a **Query** column (case-sensitive).\n4. Activate the workflow and upload a test CSV in the form.\n\nImportant nodes to configure: **Form Trigger**, **Extract all rows**, **Lookio API call**, **Generate enriched CSV**, **Form ending and file download**.\n\n*A template created by Guillaume Duvernay*"
},
"typeVersion": 1
},
{
"id": "ae680945-b8e8-4e83-bf3f-8bad9514cb1f",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
256,
-272
],
"parameters": {
"color": 6,
"width": 336,
"height": 368,
"content": "## Lookio for knowledge retrieval\n\n- Add your [Lookio](https://www.lookio.app/) API key\n- Specify the ID of the Lookio assistant to query"
},
"typeVersion": 1
}
],
"connections": {
"Split Out": {
"main": [
[
{
"node": "Isolate the Query column",
"type": "main",
"index": 0
}
]
]
},
"Aggregate rows": {
"main": [
[
{
"node": "Valid Query column?",
"type": "main",
"index": 0
}
]
]
},
"Prepare output": {
"main": [
[
{
"node": "Loop Over Queries",
"type": "main",
"index": 0
}
]
]
},
"Lookio API call": {
"main": [
[
{
"node": "Prepare output",
"type": "main",
"index": 0
}
]
]
},
"Extract all rows": {
"main": [
[
{
"node": "Aggregate rows",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Queries": {
"main": [
[
{
"node": "Generate enriched CSV",
"type": "main",
"index": 0
}
],
[
{
"node": "Lookio API call",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Extract all rows",
"type": "main",
"index": 0
}
]
]
},
"Valid Query column?": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
],
[
{
"node": "Error message",
"type": "main",
"index": 0
}
]
]
},
"Generate enriched CSV": {
"main": [
[
{
"node": "Form ending and file download",
"type": "main",
"index": 0
}
]
]
},
"Isolate the Query column": {
"main": [
[
{
"node": "Loop Over Queries",
"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 template processes a CSV of questions and returns an enriched CSV with RAG-based answers produced by your Lookio assistant.
Source: https://n8n.io/workflows/9908/ — 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 workflow is ideal for content creators, video marketers, and research professionals who need to extract actionable insights, detailed transcripts, or metadata from YouTube videos efficiently. It
Legal, Procurement, and Compliance teams at mid-size companies. ESN and agencies selling AI-powered contract review as a service.
This template is designed for filmmakers, content creators, social media managers, and AI developers who want to harness OpenAI's Sora 2 for creating physically accurate, cinematic videos with synchro
This template can be used to find the content gaps in PDF documents using the InfraNodus knowledge graph / GraphRAG text representation and then generate ideas / questions / AI prompts that bridge tho
This workflow is a user-friendly tool that automates the creation of high-quality advertising images for products. It takes a simple product image uploaded by a user and uses AI to transform it into a