{
  "id": "caRHvUQDjZWhoXIseYfwY",
  "name": "Run AI-Powered Market Research using Multi-Agent Workflows",
  "tags": [],
  "nodes": [
    {
      "id": "3e4b11c7-6650-46e1-8970-26d15548dc1a",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -1152,
        752
      ],
      "parameters": {
        "options": {
          "responseMode": "lastNode"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1.4,
      "alwaysOutputData": true
    },
    {
      "id": "2b71164d-a4ee-4079-8aa4-947328c14100",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -800,
        976
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "b2ac0b6f-032b-4c3a-8876-efbc54d2a3b9",
      "name": "Planner Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -864,
        752
      ],
      "parameters": {
        "text": "=You are a Senior Product Manager leading market discovery. You have 3 sub agents that can work in parallel.\n\nThe agents currently available are Customer Insights Agent, Market Scan Agent, Competitor Insights Agent. \nCustomer insights agent will, for the idea/problem at hand, draw customer insights based on understanding customer pain points, customer behaviour, customer feedback, etc.\nMarket Scan Agent is responsible for performing macro and micro analysis regd. the problem/idea at hand. It will also look at trends, market size, TAM, SAM, etc.\nCompetitor Insights agent will perform competitor analysis for the idea/problem at hand.\n\n\n\nYour task is to:\n1. Devise a structured market research plan for the input/given product idea - {{ $json.chatInput }}. You decide what tasks are necessary to do the market research. Name the tasks per the devised plan for example market_task for market analysis related activities, competitor_task for competitor analysis related activities, customer_tasks for customer evaluation related activities , and so on.\n2. Decide which specialist agents should run which of the aforementioned tasks. Assign that task to that agent. Also pass on context/problem at hand/idea at hand so the sub agent is more informed.\n3. Define clear outputs and assumptions for each task\n4. If there is a task that you have identified but cannot be assigned to the sub agent, call that out so it can be handled later.\n\nConstraints:\n- Assume limited time (PM reality)\n- Prefer directional accuracy over academic perfection\n- Explicitly call out assumptions\n\nOutput Details:\n\n  - Output STRICT JSON in this format:\n\n{\n  \u201cResearch_idea\": \"...\",\n\u201cResearch_objective\": \"...\",\n\"market_task\": \"...\",\n  \"competitor_task\": \"...\",\n  \"customer_task\": \"...\",\n  \"assumptions\": \"...\"\n}\n- Assign each task along with its goal, the respective key questions to be answered, constraints and assumptions to be factored in, to respective sub-agent based on sub-agent speciality (see description above). ",
        "options": {
          "systemMessage": "You are leading discovery. Hence your job is to plan the next steps/tasks required to do this market research. Then based on category of the step/task, pass the requisite information to sub-agents for them to work.\n\nFor example, you have identified that competitor analysis is one of the steps. Assign this to Competitor Agent. Pass on the details this agent will need. Similarly, if you have identified one of the task is to gain Customer insights, pass on required information to Customer Insight Agent.\n\nYou do not have to do the entire market research. Let the sub agents do their job as per their role."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3,
      "alwaysOutputData": true
    },
    {
      "id": "66059613-6dc2-4fff-9263-e32b8adbc7be",
      "name": "Simple Memory1",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        208,
        400
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "cac43b83-313b-45a5-b8be-7c9546449e9c",
      "name": "Market Scan Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        160,
        640
      ],
      "parameters": {
        "text": "=You are a market strategy analyst.\n\nFor {{ $json.output.research_objective }}  Your task is {{ $json.output.market_task }} for the given product idea\n{{ $json.output.research_idea }}\n and assumptions : {{ $json.output.assumptions }}\n\nGuidelines:\n- Use publicly available benchmarks and analogies\n- Clearly state assumptions\n- Prefer ranges over false precision\n- Avoid invented statistics\n\nOutput details such as  \nMarket definition, TAM / SAM / SOM (with assumptions), Growth drivers, Market maturity assessment, macro environment analysis, micro environment analysis, industry trends, key risks and uncertianities",
        "options": {
          "systemMessage": "You are a helpful assistantAlways return the output in JSON format prescribed"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "803b0705-7dbb-4419-9339-dc38d8f7088f",
      "name": "Simple Memory2",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        224,
        864
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "fcc1b6ca-0aeb-4540-a25a-01d74f308791",
      "name": "Customer Insights Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        144,
        176
      ],
      "parameters": {
        "text": "=You are a product discovery researcher.\n\nFor the product idea {{ $json.output.research_idea }}\n and {{ $json.output.assumptions }}\nYour task is {{ $json.output.customer_task }}. To do this, use:\n- Public forums\n- Reviews\n- Industry articles\n- Job-to-be-done reasoning\n\nDo NOT fabricate interviews.\n\nOutput:\n- Target customer segments\n- Core problems (ranked)\n- Current solutions & frustrations\n- JTBD-style insight statements \n\nEnsure each output item starts as a separate paragraph.",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "724f2544-ee10-40d0-b632-e7ccb9aba41e",
      "name": "Competitor Insights Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        160,
        1136
      ],
      "parameters": {
        "text": "=You are a competitive intelligence analyst.\n\nFor the product idea {{ $json.output.research_idea }}\n\n\nproblem statement {{ $json.output.competitor_task }}\nand {{ $json.output.assumptions }}\nYour task is to identify:\n- Direct competitors\n- Indirect alternatives\n- Substitutes and workarounds\n\nFocus on:\n- Value proposition\n- Differentiation\n- Pricing model (if public)\n- Target customer segment\n\nOutput:\n- Competitor table\n- Competitive gaps\n- Observed patterns ",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "2e3b3b4b-b2fe-4289-abb0-51f19c73abe3",
      "name": "Simple Memory3",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        224,
        1360
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "708d91f0-1406-4b47-9781-021a0b438db9",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -672,
        976
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"research_idea\": \"...\",\n  \"research_objective\": \"...\",\n\"market_task\": \"...\",\n  \"competitor_task\": \"...\",\n  \"customer_task\": \"...\",\n  \"assumptions\": \"...\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "4cc1a210-2218-4330-bc41-d0095312fe08",
      "name": "Structured Output Parser2",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        336,
        400
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"customer_insights\": {\n    \"target_customer_segments\": [],\n    \"core_problems_ranked\": [],\n    \"current_solutions_and_frustrations\": [],\n    \"jtbd_insight_statements\": []\n  }\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "061c09b5-18f8-46cb-96c5-fe9373427c99",
      "name": "Structured Output Parser3",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        352,
        864
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"output\": {\n    \"market_definition\": {\n      \"market_name\": \"\",\n      \"in_scope\": [],\n      \"out_of_scope\": [],\n      \"geographies\": [],\n      \"customer_types\": [],\n      \"value_chain_position\": \"\"\n    },\n\n    \"tam_sam_som\": {\n      \"tam\": {\n        \"value\": 0,\n        \"currency\": \"\",\n        \"assumptions\": []\n      },\n      \"sam\": {\n        \"value\": 0,\n        \"currency\": \"\",\n        \"assumptions\": []\n      },\n      \"som\": {\n        \"value\": 0,\n        \"currency\": \"\",\n        \"assumptions\": []\n      }\n    },\n\n    \"growth_drivers\": [],\n\n    \"market_maturity\": \"\",\n\n    \"macro_environment_analysis\": {\n      \"regulatory\": [],\n      \"economic\": [],\n      \"technological\": [],\n      \"societal\": []\n    },\n\n    \"micro_market_analysis\": {\n      \"customer_behavior_trends\": [],\n      \"competitive_dynamics\": [],\n      \"supplier_and_partner_landscape\": [],\n      \"barriers_to_entry\": [],\n      \"substitute_threats\": []\n    },\n\n    \"industry_trends\": [],\n\n    \"key_risks\": []\n  }\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "901e3dc5-562c-4ba9-8647-7aa013b1e247",
      "name": "Structured Output Parser4",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        352,
        1360
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"output\": {\n    \"competitor_table\": [\n      {\n        \"name\": \"\",\n        \"product_offering\": \"\",\n        \"pricing\": \"\",\n        \"market_position\": \"\",\n        \"strengths\": [],\n        \"weaknesses\": []\n      }\n    ],\n    \"competitive_gaps\": [],\n    \"observed_patterns\": []\n  }\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "b5c6f20a-aca2-4cb5-bcc1-eeff708c4db7",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1152,
        720
      ],
      "parameters": {
        "numberInputs": 3
      },
      "executeOnce": false,
      "notesInFlow": false,
      "typeVersion": 3.2,
      "alwaysOutputData": true
    },
    {
      "id": "41a458cf-71ef-46fd-bc4b-56847373ee36",
      "name": "Synthesis Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1376,
        736
      ],
      "parameters": {
        "text": "=You are a market research assistant.\n\nYour task is to synthesize all research inputs: {{ $json.output }} into a PM-ready decision memo.\n\nReturn a single JSON object in the exact format below:\n\n{\n  \"output\": {\n    \"executive_summary\": {\n      \"heading\": \"Executive Summary\",\n      \"content\": \"\"\n    },\n    \"market_opportunity\": {\n      \"heading\": \"Market Opportunity\",\n      \"content\": \"\"\n    },\n    \"customer_problem\": {\n      \"heading\": \"Customer Problem\",\n      \"content\": \"\"\n    },\n    \"competitive_landscape\": {\n      \"heading\": \"Competitive Landscape\",\n      \"content\": \"\"\n    },\n    \"key_risks_and_open_questions\": {\n      \"heading\": \"Key Risks & Open Questions\",\n      \"content\": \"\"\n    },\n    \"recommendation_next_steps\": {\n      \"heading\": \"Recommendation & Next Steps\",\n      \"content\": \"\"\n    }\n  }\n}\n\n",
        "options": {
          "batching": {
            "batchSize": 3,
            "delayBetweenBatches": 10
          },
          "systemMessage": "=You are a helpful assistant. You take all three inputs into consideration and produce only 1 item as output"
        },
        "promptType": "define"
      },
      "typeVersion": 3,
      "alwaysOutputData": true
    },
    {
      "id": "af928424-621b-48b5-b264-75ff8b3d1e23",
      "name": "Simple Memory4",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1504,
        960
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "c9719da8-9b51-4acf-8347-4a026094a995",
      "name": "Groq Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        -928,
        976
      ],
      "parameters": {
        "model": "qwen/qwen3-32b",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "fabbcb78-5d8b-491f-8753-51131f35d9df",
      "name": "Groq Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        80,
        400
      ],
      "parameters": {
        "model": "moonshotai/kimi-k2-instruct-0905",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "baf89ec4-9304-4e1e-9fed-8813c1c2c42e",
      "name": "Groq Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        96,
        864
      ],
      "parameters": {
        "model": "meta-llama/llama-4-maverick-17b-128e-instruct",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "986942bc-eba0-4d2e-a514-884116fb782c",
      "name": "Groq Chat Model4",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        96,
        1360
      ],
      "parameters": {
        "model": "moonshotai/kimi-k2-instruct-0905",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "d60e37e6-a43c-41f5-abfb-57511dc26695",
      "name": "Documentero",
      "type": "n8n-nodes-preview-documentero.documentero",
      "position": [
        1952,
        736
      ],
      "parameters": {
        "operation": "generateAndEmail"
      },
      "credentials": {},
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "98180ba8-767a-4a9d-869c-56e7f8bd1fc2",
      "name": "OpenAI Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1376,
        960
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "68f8df65-f188-4e84-9984-d3adc56f2ac6",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2176,
        736
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "Here is the requested doc",
        "options": {
          "attachmentsUi": {
            "attachmentsBinary": [
              {}
            ]
          }
        },
        "subject": "Market Research Output"
      },
      "typeVersion": 2.2
    },
    {
      "id": "e81f1d0a-4601-42ab-a245-e6cd48255bc5",
      "name": "Format Data for Documentero",
      "type": "n8n-nodes-base.code",
      "position": [
        1728,
        736
      ],
      "parameters": {
        "jsCode": "// Step 1: Get the first item from the agent\nlet rawOutput = $input.first().json.output;\n\n// Step 2: If output is a string (escaped JSON), parse it\nlet parsedOutput;\ntry {\n    parsedOutput = typeof rawOutput === 'string' ? JSON.parse(rawOutput).output : rawOutput;\n} catch (err) {\n    throw new Error(\"Failed to parse Synthesis Agent output: \" + err.message);\n}\n\n// Step 3: Initialize HTML report\nlet reportHtml = \"\";\n\n// Step 4: Define the sections in order\nconst sectionsOrder = [\n    \"executive_summary\",\n    \"market_opportunity\",\n    \"customer_problem\",\n    \"competitive_landscape\",\n    \"key_risks_and_open_questions\",\n    \"recommendation_next_steps\"\n];\n\n// Step 5: Build HTML report\nsectionsOrder.forEach(sectionKey => {\n    if (parsedOutput[sectionKey] && parsedOutput[sectionKey].content) {\n        const heading = parsedOutput[sectionKey].heading || sectionKey;\n        const content = parsedOutput[sectionKey].content;\n        reportHtml += `<h2>${heading}</h2>\\n<p>${content}</p>\\n`;\n    }\n});\n\n// Step 6: Return as single item for downstream nodes\nreturn [{\n    json: {\n        research_content_html: reportHtml.trim(),\n        title: \"Market Research Report\",\n        generated_date: new Date().toISOString().split('T')[0]\n    }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "e944ade9-440d-4be6-9a77-c70f3584da55",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1968,
        480
      ],
      "parameters": {
        "width": 384,
        "height": 1408,
        "content": "## Description\nThis n8n template demonstrates how to build an AI-powered Market Research Assistant using a multi-agent workflow.\nIt helps you get a 360-degree view of a product idea or research topic by analysing:\n* Customer insights and pain points\n* Market size and macro/micro-economic trends\n* Competitive landscape and alternatives\nThe workflow mirrors how product managers and strategy teams conduct discovery \u2014 by breaking down research into parallel workstreams and then synthesizing insights into a single narrative.\n\n\n## How it works\n1. Planner Agent\u2028The main agent receives your research topic as input and defines:\n    * Research objective\n    * Key areas of focus (Customer, Market, Competition)\n    * Assumptions and constraints\n2. Parallel Research Agents\u2028Based on the planner\u2019s output, three specialist agents run in parallel:\n    * Customer Insights Agent\u2028Researches public sources such as articles and forums to infer customer behaviour, pain points, and existing tools.\n    * Market Scan Agent\u2028Analyses macro-economic and micro-economic trends, estimates TAM/SAM/SOM, and highlights key risks and assumptions.\n    * Competitor Insights Agent\u2028Identifies existing competitors and substitutes and summarises how they are positioned in the market.\n3. Synthesis Agent\u2028The outputs from all research agents are consolidated and analysed by a synthesis agent, which produces a market discovery memo.\n4. Final Output\u2028The discovery memo is generated as a document and sent to your email.\n\n\n## How to use\n* Trigger the workflow via the chat message node.\n* Provide your research topic or product idea, along with optional context such as target market.\n* The workflow runs automatically and delivers a structured discovery memo to your inbox.\n\n\n## Setup Steps\n* API credentials for:\n    * Groq or OpenAI (LLM)\n    * Documentero (document generation)\n* A configured Documentero template\n* Gmail OAuth or email credentials for delivery of memo\n"
      },
      "typeVersion": 1
    },
    {
      "id": "612032cd-a7c4-45d0-88ee-d0c5426945c2",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1248,
        560
      ],
      "parameters": {
        "color": 6,
        "height": 384,
        "content": "## User Input & Trigger\n\nThis section captures the research topic or product idea provided by the user.\nThe workflow is triggered manually via a chat message to make it easy to test and iterate during discovery."
      },
      "typeVersion": 1
    },
    {
      "id": "fd91dd79-35ef-4886-b474-cbcfd257f556",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -960,
        576
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 544,
        "content": "## Research Planning (Planner Agent)\n\nThe planner agent defines the scope of market research before any analysis begins.\nIt translates the user\u2019s idea into clear research tasks and assumptions, ensuring that downstream agents work with structured and consistent inputs."
      },
      "typeVersion": 1
    },
    {
      "id": "f5177dba-5bda-458d-8d1f-111e85e87e06",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        512
      ],
      "parameters": {
        "color": 5,
        "width": 608,
        "height": 592,
        "content": "## Insight Synthesis & Decision Memo\n\nOutputs from all research agents are consolidated and analysed in this section.\nThe synthesis agent focuses on producing a decision-ready discovery memo rather than raw AI output, highlighting key insights, risks, and next steps."
      },
      "typeVersion": 1
    },
    {
      "id": "ae2d01a2-85b8-4f15-bfcc-130b0017d46f",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        576
      ],
      "parameters": {
        "color": 3,
        "width": 688,
        "height": 384,
        "content": "## Document Generation & Delivery\n\nThe final discovery memo is converted into a document and delivered via email.\nThis step demonstrates how AI-generated insights can be operationalised into real PM or strategy workflows."
      },
      "typeVersion": 1
    },
    {
      "id": "beb9881f-7507-455f-9a13-458151a0ee39",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 4,
        "width": 528,
        "height": 1504,
        "content": "## Parallel Market Research Agents\n\nThis section runs specialist research agents in parallel to reduce latency and avoid unnecessary dependencies.\nEach agent focuses on a single dimension of discovery (market, customers, or competitors) and works independently based on the planner\u2019s instructions."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "timeSavedMode": "fixed",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "d4fbe050-1641-4ca7-b013-90a3da38c605",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Synthesis Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Documentero": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Planner Agent": {
      "main": [
        [
          {
            "node": "Market Scan Agent",
            "type": "main",
            "index": 0
          },
          {
            "node": "Competitor Insights Agent",
            "type": "main",
            "index": 0
          },
          {
            "node": "Customer Insights Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Planner Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory1": {
      "ai_memory": [
        [
          {
            "node": "Customer Insights Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory2": {
      "ai_memory": [
        [
          {
            "node": "Market Scan Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory3": {
      "ai_memory": [
        [
          {
            "node": "Competitor Insights Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory4": {
      "ai_memory": [
        [
          {
            "node": "Synthesis Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Synthesis Agent": {
      "main": [
        [
          {
            "node": "Format Data for Documentero",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Groq Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Planner Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Groq Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Customer Insights Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Groq Chat Model3": {
      "ai_languageModel": [
        [
          {
            "node": "Market Scan Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Groq Chat Model4": {
      "ai_languageModel": [
        [
          {
            "node": "Competitor Insights Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Market Scan Agent": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "OpenAI Chat Model3": {
      "ai_languageModel": [
        [
          {
            "node": "Synthesis Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Customer Insights Agent": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Competitor Insights Agent": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Planner Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser2": {
      "ai_outputParser": [
        [
          {
            "node": "Customer Insights Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser3": {
      "ai_outputParser": [
        [
          {
            "node": "Market Scan Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser4": {
      "ai_outputParser": [
        [
          {
            "node": "Competitor Insights Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "Planner Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Data for Documentero": {
      "main": [
        [
          {
            "node": "Documentero",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}