This workflow corresponds to n8n.io template #15201 — we link there as the canonical source.
This workflow follows the Agent → HTTP Request 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": "cYenTCdPD3fwg7No",
"name": "Autonomous Multi-Agent Research Swarm",
"tags": [],
"nodes": [
{
"id": "b22a2a6d-87bd-4de9-ad2e-72b396181ed6",
"name": "Sticky Note - Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
176
],
"parameters": {
"width": 980,
"height": 940,
"content": "## Autonomous Multi-Agent Research Swarm\n\nThis workflow deploys multiple independent AI research agents that work in parallel, critique each other's findings, and synthesize a unified high-quality final report.\n\n### Who's it for\n\u2022 Researchers needing comprehensive topic coverage\n\u2022 Teams conducting competitive analysis or due diligence\n\u2022 Analysts synthesizing multi-perspective reports\n\u2022 Anyone needing validated, cross-checked AI research\n\n### How it works / What it does\n1. Accepts a research topic via webhook or manual trigger\n2. Splits the topic into 3 parallel sub-tasks for specialized agents\n3. Agent A: Factual / data-driven research\n4. Agent B: Trend & future outlook research\n5. Agent C: Critical / risk & counterargument research\n6. Critique phase: each agent reviews the others' findings\n7. Synthesis agent merges all validated findings\n8. Final report formatted and delivered via webhook response + Google Sheet log\n\n### How to set up\n1. Import this workflow\n2. Set up credentials (OpenAI, Google Sheets)\n3. Replace YOUR_SHEET_ID in the tracker node\n4. Activate workflow and POST to the webhook URL\n\n### Requirements\n\u2022 OpenAI API key (or swap model node for Anthropic/Grok)\n\u2022 Google Sheets (for logging)\n\u2022 n8n instance (cloud or self-hosted)\n\n### How to customize the workflow\n\u2022 Change agent personas in each AI node prompt\n\u2022 Add more parallel agents by duplicating agent branches\n\u2022 Swap OpenAI model for Claude via Anthropic credentials\n\u2022 Adjust synthesis depth in the final AI node"
},
"typeVersion": 1
},
{
"id": "b610d960-4de9-4223-8aad-a0a80e02f703",
"name": "Sticky Note - Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
1544,
296
],
"parameters": {
"color": 4,
"width": 656,
"height": 480,
"content": "## 1. Trigger & Topic Intake"
},
"typeVersion": 1
},
{
"id": "f89f6723-629e-4325-bf20-e4299fe8c00e",
"name": "Sticky Note - Research",
"type": "n8n-nodes-base.stickyNote",
"position": [
2252,
-324
],
"parameters": {
"color": 3,
"width": 936,
"height": 1612,
"content": "## 2. Parallel Agent Research"
},
"typeVersion": 1
},
{
"id": "2fcbe44b-2824-41bb-8d64-ce63cb09ac08",
"name": "Sticky Note - Critique",
"type": "n8n-nodes-base.stickyNote",
"position": [
3244,
268
],
"parameters": {
"color": 5,
"width": 776,
"height": 620,
"content": "## 3. Critique & Validation Phase"
},
"typeVersion": 1
},
{
"id": "15569df8-3709-4504-aa1b-426e99ac9291",
"name": "Sticky Note - Synthesis",
"type": "n8n-nodes-base.stickyNote",
"position": [
4078,
16
],
"parameters": {
"color": 6,
"width": 1028,
"height": 872,
"content": "## 4. Synthesis & Final Report"
},
"typeVersion": 1
},
{
"id": "dba6b380-deb2-4eab-977e-521c56cc53d9",
"name": "Webhook - Research Topic Intake",
"type": "n8n-nodes-base.webhook",
"position": [
1600,
424
],
"parameters": {
"path": "research-swarm-inbound",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1.1
},
{
"id": "4541ebe9-2a1e-4601-b724-0a5478aaa9c8",
"name": "Schedule - Weekly Research Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
1600,
616
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 8 * * 1"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "e50304b6-d804-4b1d-b16c-6f6025c21789",
"name": "Prepare Research Context",
"type": "n8n-nodes-base.set",
"position": [
1824,
520
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"name": "researchTopic",
"type": "string",
"value": "={{ $json.topic || $json.body?.topic || 'AI agent frameworks 2025' }}"
},
{
"name": "researchDepth",
"type": "string",
"value": "={{ $json.depth || $json.body?.depth || 'comprehensive' }}"
},
{
"name": "outputFormat",
"type": "string",
"value": "={{ $json.format || $json.body?.format || 'executive_report' }}"
},
{
"name": "requestId",
"type": "string",
"value": "={{ $json.requestId || Date.now().toString() }}"
},
{
"name": "requesterEmail",
"type": "string",
"value": "={{ $json.email || $json.body?.email || '' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "908ed9f2-4531-400c-8dbf-5d0618b9bc91",
"name": "Python - Validate & Decompose Topic",
"type": "n8n-nodes-base.code",
"position": [
2048,
520
],
"parameters": {
"mode": "runOnceForEachItem",
"language": "python"
},
"typeVersion": 2
},
{
"id": "cece8d20-79ed-47f2-b7ad-10f695e0c1b6",
"name": "Filter Valid Research Topics",
"type": "n8n-nodes-base.filter",
"position": [
2272,
520
],
"parameters": {
"options": {},
"conditions": {
"conditions": [
{
"operator": {
"type": "boolean",
"operation": "true"
},
"leftValue": "={{ $json.isValidTopic }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "029f48aa-ef40-42c4-97af-1848500f0629",
"name": "Agent A - Factual Research",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2496,
16
],
"parameters": {
"text": "=You are Agent A \u2014 a rigorous FACTUAL RESEARCH specialist.\n\nYour role: Gather verified, data-driven, evidence-based findings on the topic below. Focus on statistics, established facts, key players, historical context, and authoritative sources.\n\nResearch Topic: {{ $json.researchTopic }}\nDepth Level: {{ $json.researchDepth }}\nSub-focus: {{ $json.subTaskA || 'factual overview, key data points, established consensus' }}\n\nDeliver your findings in this exact JSON structure:\n{\n \"agentId\": \"agent_a_factual\",\n \"topic\": \"<topic>\",\n \"keyFindings\": [\"finding1\", \"finding2\", \"finding3\"],\n \"dataSources\": [\"source1\", \"source2\"],\n \"confidenceScore\": 0.0-1.0,\n \"summary\": \"2-3 sentence factual summary\"\n}\n\nReturn ONLY the JSON object. No preamble.",
"options": {},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "eb3c6692-1321-4cc6-84ef-3dc2907a99e5",
"name": "Agent B - Trends Research",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2496,
416
],
"parameters": {
"text": "=You are Agent B \u2014 a forward-thinking TRENDS & OUTLOOK specialist.\n\nYour role: Analyze emerging trends, future trajectories, market signals, and innovation vectors for the topic below. Focus on what's changing, where things are heading, and what experts predict.\n\nResearch Topic: {{ $json.researchTopic }}\nDepth Level: {{ $json.researchDepth }}\nSub-focus: {{ $json.subTaskB || 'trends, forecasts, emerging developments, future scenarios' }}\n\nDeliver your findings in this exact JSON structure:\n{\n \"agentId\": \"agent_b_trends\",\n \"topic\": \"<topic>\",\n \"keyFindings\": [\"trend1\", \"trend2\", \"trend3\"],\n \"emergingSignals\": [\"signal1\", \"signal2\"],\n \"confidenceScore\": 0.0-1.0,\n \"summary\": \"2-3 sentence trends summary\"\n}\n\nReturn ONLY the JSON object. No preamble.",
"options": {},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "afbb6445-b04d-4ff0-8bb4-9cc806c2a3bd",
"name": "Agent C - Critical Research",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2496,
920
],
"parameters": {
"text": "=You are Agent C \u2014 a critical RISK & COUNTERARGUMENT analyst.\n\nYour role: Surface challenges, risks, counterarguments, limitations, dissenting views, and failure cases related to the topic below. Play devil's advocate rigorously. Identify what mainstream analyses miss.\n\nResearch Topic: {{ $json.researchTopic }}\nDepth Level: {{ $json.researchDepth }}\nSub-focus: {{ $json.subTaskC || 'risks, limitations, critiques, failure modes, overlooked perspectives' }}\n\nDeliver your findings in this exact JSON structure:\n{\n \"agentId\": \"agent_c_critical\",\n \"topic\": \"<topic>\",\n \"keyFindings\": [\"risk1\", \"risk2\", \"critique1\"],\n \"counterarguments\": [\"counter1\", \"counter2\"],\n \"confidenceScore\": 0.0-1.0,\n \"summary\": \"2-3 sentence critical summary\"\n}\n\nReturn ONLY the JSON object. No preamble.",
"options": {},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "34a2fd19-bc33-4768-bee0-2a35bff13210",
"name": "JS - Aggregate Agent Outputs",
"type": "n8n-nodes-base.code",
"position": [
2848,
520
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Aggregate all three agent outputs into a unified context object\nconst item = $input.item.json;\n\nlet agentA = {};\nlet agentB = {};\nlet agentC = {};\n\ntry {\n const rawA = item.agentAOutput || item.response || '{}';\n agentA = JSON.parse(rawA.replace(/```json|```/g, '').trim());\n} catch(e) { agentA = { agentId: 'agent_a_factual', error: 'parse_failed', raw: item.agentAOutput }; }\n\ntry {\n const rawB = item.agentBOutput || '{}';\n agentB = JSON.parse(rawB.replace(/```json|```/g, '').trim());\n} catch(e) { agentB = { agentId: 'agent_b_trends', error: 'parse_failed', raw: item.agentBOutput }; }\n\ntry {\n const rawC = item.agentCOutput || '{}';\n agentC = JSON.parse(rawC.replace(/```json|```/g, '').trim());\n} catch(e) { agentC = { agentId: 'agent_c_critical', error: 'parse_failed', raw: item.agentCOutput }; }\n\nreturn {\n json: {\n ...item,\n agentA,\n agentB,\n agentC,\n aggregatedAt: new Date().toISOString(),\n allAgentsComplete: !agentA.error && !agentB.error && !agentC.error\n }\n};"
},
"typeVersion": 2
},
{
"id": "6084c976-06ce-4a6f-9945-12d8b388dccd",
"name": "Wait 1 - Agent Sync Buffer",
"type": "n8n-nodes-base.wait",
"position": [
3072,
520
],
"parameters": {},
"typeVersion": 1
},
{
"id": "ab997688-e17c-42c9-8a16-e7d4f5c698f8",
"name": "Critique Agent - Cross Validate",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3296,
520
],
"parameters": {
"text": "=You are a PEER REVIEW CRITIC agent. Your job is to cross-validate findings from three research agents and identify:\n1. Contradictions between agents\n2. Unsupported claims that need verification\n3. Gaps that none of the agents covered\n4. Areas of strong agreement (high confidence)\n5. Which findings should be weighted more heavily in the final report\n\nResearch Topic: {{ $json.researchTopic }}\n\nAgent A (Factual) Summary: {{ $json.agentA.summary }}\nAgent A Key Findings: {{ JSON.stringify($json.agentA.keyFindings) }}\n\nAgent B (Trends) Summary: {{ $json.agentB.summary }}\nAgent B Key Findings: {{ JSON.stringify($json.agentB.keyFindings) }}\n\nAgent C (Critical) Summary: {{ $json.agentC.summary }}\nAgent C Key Findings: {{ JSON.stringify($json.agentC.keyFindings) }}\n\nReturn ONLY a JSON object:\n{\n \"contradictions\": [\"contradiction1\"],\n \"gaps\": [\"gap1\"],\n \"strongConsensus\": [\"consensus_point1\"],\n \"reliabilityScores\": { \"agentA\": 0.0-1.0, \"agentB\": 0.0-1.0, \"agentC\": 0.0-1.0 },\n \"critiqueNotes\": \"2-3 sentence overall critique\"\n}",
"options": {},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "3d56b5cf-f785-430e-8c64-4001ffe91962",
"name": "Python - Score & Rank Findings",
"type": "n8n-nodes-base.code",
"position": [
3648,
520
],
"parameters": {
"mode": "runOnceForEachItem",
"language": "python"
},
"typeVersion": 2
},
{
"id": "c78b9c44-2d37-47f0-9aad-f16580e18c03",
"name": "Wait 2 - Critique Integration Buffer",
"type": "n8n-nodes-base.wait",
"position": [
3872,
520
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b9a96658-7f43-4e45-ad9c-00549adc0754",
"name": "Synthesis Agent - Generate Final Report",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
4096,
520
],
"parameters": {
"text": "=You are a MASTER SYNTHESIS agent. Your task is to produce a high-quality, unified research report by intelligently merging validated findings from three specialized research agents.\n\nResearch Topic: {{ $json.researchTopic }}\nOutput Format Requested: {{ $json.outputFormat }}\n\n--- AGENT A: FACTUAL FINDINGS ---\n{{ $json.agentA.summary }}\nKey Points: {{ JSON.stringify($json.agentA.keyFindings) }}\n\n--- AGENT B: TRENDS & OUTLOOK ---\n{{ $json.agentB.summary }}\nKey Points: {{ JSON.stringify($json.agentB.keyFindings) }}\n\n--- AGENT C: RISKS & CRITIQUES ---\n{{ $json.agentC.summary }}\nKey Points: {{ JSON.stringify($json.agentC.keyFindings) }}\n\n--- CRITIQUE AGENT NOTES ---\nContradictions identified: {{ JSON.stringify($json.critiqueResult?.contradictions) }}\nStrong consensus: {{ JSON.stringify($json.critiqueResult?.strongConsensus) }}\nGaps: {{ JSON.stringify($json.critiqueResult?.gaps) }}\n\nWrite a comprehensive, balanced research report with these sections:\n1. Executive Summary (3-4 sentences)\n2. Key Findings (bullet points, validated facts only)\n3. Trends & Outlook (forward-looking insights)\n4. Risks & Counterpoints (balanced critique)\n5. Areas of Uncertainty (gaps and unresolved questions)\n6. Conclusion & Recommendations\n\nTone: Professional, objective, evidence-based. Do NOT fabricate statistics.",
"options": {},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "6e36de7e-7817-4f95-be57-4e05b139afa2",
"name": "JS - Format Final Report",
"type": "n8n-nodes-base.code",
"position": [
4448,
520
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const item = $input.item.json;\nconst reportText = item.response || item.text || 'Report generation failed \u2014 no output from synthesis agent.';\n\nreturn {\n json: {\n ...item,\n finalReport: reportText,\n reportTitle: `Research Report: ${item.researchTopic}`,\n wordCount: reportText.split(' ').length,\n generatedAt: new Date().toISOString(),\n reportStatus: reportText.length > 100 ? 'Complete' : 'Failed',\n agentCount: 3,\n critiqueApplied: !!item.critiqueResult\n }\n};"
},
"typeVersion": 2
},
{
"id": "fdaa25d1-109a-499c-aedf-55cc30fa6a5d",
"name": "Wait 3 - Final Review Buffer",
"type": "n8n-nodes-base.wait",
"position": [
4672,
520
],
"parameters": {},
"typeVersion": 1
},
{
"id": "af37a016-3e4d-4995-8f5c-2cded61140f1",
"name": "Webhook Response - Deliver Report",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
4896,
328
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"status\": \"success\",\n \"requestId\": \"{{ $json.requestId }}\",\n \"topic\": \"{{ $json.researchTopic }}\",\n \"reportTitle\": \"{{ $json.reportTitle }}\",\n \"wordCount\": {{ $json.wordCount }},\n \"generatedAt\": \"{{ $json.generatedAt }}\",\n \"report\": {{ JSON.stringify($json.finalReport) }}\n}"
},
"typeVersion": 1.1
},
{
"id": "92b3083f-4d9a-431f-a853-292d94fc3f96",
"name": "Update Google Sheet Research Log",
"type": "n8n-nodes-base.httpRequest",
"position": [
4896,
520
],
"parameters": {
"url": "https://sheets.googleapis.com/v4/spreadsheets/YOUR_SHEET_ID/values/ResearchLog!A1:append?valueInputOption=USER_ENTERED",
"method": "POST",
"options": {},
"jsonBody": "={\n \"values\": [[\"{{ $json.generatedAt }}\", \"{{ $json.requestId }}\", \"{{ $json.researchTopic }}\", \"{{ $json.reportStatus }}\", {{ $json.wordCount }}, {{ $json.agentCount }}, \"{{ $json.critiqueApplied }}\", \"{{ $json.requesterEmail }}\"]]\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "fcbfa49d-7480-4fdd-88e4-f2834068b482",
"name": "Email Report to Requester",
"type": "n8n-nodes-base.httpRequest",
"position": [
4896,
712
],
"parameters": {
"url": "https://api.sendgrid.com/v3/mail/send",
"method": "POST",
"options": {},
"jsonBody": "={\n \"personalizations\": [{\"to\": [{\"email\": \"{{ $json.requesterEmail }}\"}]}],\n \"from\": {\"email\": \"research-swarm@yourdomain.com\", \"name\": \"Research Swarm\"},\n \"subject\": \"{{ $json.reportTitle }}\",\n \"content\": [{\"type\": \"text/plain\", \"value\": \"{{ $json.finalReport }}\"}]\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "9aed52cf-c750-4fbf-9d30-500b799ecc86",
"name": "OpenAI Model - Agent A",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2568,
240
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "31562f79-b43c-4939-a474-413d28aee432",
"name": "OpenAI Model - Agent B",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2568,
640
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "5cef0ef4-1dd3-4a3e-ac16-5d3faecfdfd2",
"name": "OpenAI Model - Agent C",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2568,
1144
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "8981a59f-b379-4979-af61-e17fc7281dd2",
"name": "OpenAI Model - Critique Agent",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
3368,
744
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "f52efdeb-1a2c-4978-8c82-73fcc68c6c70",
"name": "OpenAI Model - Synthesis Agent",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
4168,
744
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "a0c351df-8555-4932-becb-f30f06d655c4",
"connections": {
"OpenAI Model - Agent A": {
"ai_languageModel": [
[
{
"node": "Agent A - Factual Research",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Model - Agent B": {
"ai_languageModel": [
[
{
"node": "Agent B - Trends Research",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Model - Agent C": {
"ai_languageModel": [
[
{
"node": "Agent C - Critical Research",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"JS - Format Final Report": {
"main": [
[
{
"node": "Wait 3 - Final Review Buffer",
"type": "main",
"index": 0
}
]
]
},
"Prepare Research Context": {
"main": [
[
{
"node": "Python - Validate & Decompose Topic",
"type": "main",
"index": 0
}
]
]
},
"Agent B - Trends Research": {
"main": [
[
{
"node": "JS - Aggregate Agent Outputs",
"type": "main",
"index": 0
}
]
]
},
"Agent A - Factual Research": {
"main": [
[
{
"node": "JS - Aggregate Agent Outputs",
"type": "main",
"index": 0
}
]
]
},
"Wait 1 - Agent Sync Buffer": {
"main": [
[
{
"node": "Critique Agent - Cross Validate",
"type": "main",
"index": 0
}
]
]
},
"Agent C - Critical Research": {
"main": [
[
{
"node": "JS - Aggregate Agent Outputs",
"type": "main",
"index": 0
}
]
]
},
"Filter Valid Research Topics": {
"main": [
[
{
"node": "Agent A - Factual Research",
"type": "main",
"index": 0
},
{
"node": "Agent B - Trends Research",
"type": "main",
"index": 0
},
{
"node": "Agent C - Critical Research",
"type": "main",
"index": 0
}
]
]
},
"JS - Aggregate Agent Outputs": {
"main": [
[
{
"node": "Wait 1 - Agent Sync Buffer",
"type": "main",
"index": 0
}
]
]
},
"Wait 3 - Final Review Buffer": {
"main": [
[
{
"node": "Webhook Response - Deliver Report",
"type": "main",
"index": 0
},
{
"node": "Update Google Sheet Research Log",
"type": "main",
"index": 0
},
{
"node": "Email Report to Requester",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Model - Critique Agent": {
"ai_languageModel": [
[
{
"node": "Critique Agent - Cross Validate",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Model - Synthesis Agent": {
"ai_languageModel": [
[
{
"node": "Synthesis Agent - Generate Final Report",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Python - Score & Rank Findings": {
"main": [
[
{
"node": "Wait 2 - Critique Integration Buffer",
"type": "main",
"index": 0
}
]
]
},
"Critique Agent - Cross Validate": {
"main": [
[
{
"node": "Python - Score & Rank Findings",
"type": "main",
"index": 0
}
]
]
},
"Webhook - Research Topic Intake": {
"main": [
[
{
"node": "Prepare Research Context",
"type": "main",
"index": 0
}
]
]
},
"Schedule - Weekly Research Trigger": {
"main": [
[
{
"node": "Prepare Research Context",
"type": "main",
"index": 0
}
]
]
},
"Python - Validate & Decompose Topic": {
"main": [
[
{
"node": "Filter Valid Research Topics",
"type": "main",
"index": 0
}
]
]
},
"Wait 2 - Critique Integration Buffer": {
"main": [
[
{
"node": "Synthesis Agent - Generate Final Report",
"type": "main",
"index": 0
}
]
]
},
"Synthesis Agent - Generate Final Report": {
"main": [
[
{
"node": "JS - Format Final Report",
"type": "main",
"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.
openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow deploys multiple independent AI research agents that work in parallel, critique each other's findings, and synthesize a unified high-quality final report.
Source: https://n8n.io/workflows/15201/ — 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.
⏺ 🚀 How it works
L&D_AgentsAI_ATIVO. Uses httpRequest, agent, googleCalendarTool, toolSerpApi. Webhook trigger; 93 nodes.
CLINICAINTEGRAL_secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 89 nodes.
Remi 1.1. Uses lmChatOpenAi, memoryPostgresChat, openAi, postgres. Webhook trigger; 89 nodes.
This n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La