{"workflow":{"id":13501,"name":"Generate due diligence reports with LlamaIndex, Pinecone, and GPT-5-mini","views":74,"recentViews":0,"totalViews":74,"createdAt":"2026-02-18T18:21:43.001Z","description":"Streamline M&A due diligence with AI. This n8n workflow automatically parses financial documents using LlamaIndex, embeds data into Pinecone, and generates comprehensive, AI-driven reports with GPT-5-mini, saving hours of manual review and ensuring consistent, data-backed insights.\n\n## Why Use This Workflow?\n\n**Time Savings:** Reduces manual document review and report generation from days to minutes.\n**Cost Reduction:** Minimizes reliance on expensive human analysts for initial data extraction and summary.\n**Error Prevention:** AI-driven analysis ensures consistent data extraction, reducing human error and oversight.\n**Scalability:** Effortlessly processes multiple documents and deals in parallel, scaling with your business needs.\n\n## Ideal For\n\n-   **Investment Analysts & Private Equity Firms:** Quickly evaluate target companies by automating the extraction of key financials, risks, and business models from deal documents.\n-   **M&A Advisors:** Conduct preliminary due diligence efficiently, generating comprehensive overview reports for clients without extensive manual effort.\n-   **Financial Professionals:** Accelerate research and analysis of company filings, investor presentations, and market reports for critical decision-making.\n\n## How It Works\n\n1.  **Trigger:** A webhook receives multiple due diligence documents (PDFs, DOCX, XLSX) along with associated metadata.\n2.  **Document Processing & Cache Check:** Files are split individually. The workflow first checks Pinecone to see if the deal's documents have been processed before (cache hit). If so, it skips parsing and embedding.\n3.  **Data Extraction (LlamaIndex):** For new deals, each document is sent to LlamaIndex for advanced parsing, extracting structured text content.\n4.  **Vectorization & Storage:** The parsed text is then converted into numerical vector embeddings using OpenAI and stored in Pinecone, our vector database, with relevant metadata.\n5.  **AI-Powered Analysis (Langchain Agent):** An n8n Langchain Agent, acting as a \"Senior Investment Analyst,\" leverages GPT-5-mini to query Pinecone multiple times for specific information (e.g., company profile, financials, risks, business model). It synthesizes these findings into a structured JSON output.\n6.  **Report Generation:** The structured AI output is transformed into an HTML report, then converted into a professional PDF document.\n7.  **Secure Storage & Delivery:** The final PDF due diligence report is uploaded to an S3 bucket, and a public URL is returned via the initial webhook, providing instant access.\n\n## Setup Guide\n\n### Prerequisites\n\n| Requirement | Type | Purpose |\n| :---------- | :--- | :------ |\n| [n8n instance](https://n8n.partnerlinks.io/khmuhtadin) | Essential | Workflow execution platform |\n| LlamaIndex API Key | Essential | For robust document parsing and text extraction |\n| OpenAI API Key | Essential | For creating text embeddings and powering the GPT-5-mini AI agent |\n| Pinecone API Key | Essential | For storing and retrieving vector embeddings |\n| AWS S3 Account | Essential | For secure storage of generated PDF reports |\n\n### Installation Steps\n\n1.  Import the JSON file to your [n8n instance](https://n8n.partnerlinks.io/khmuhtadin).\n2.  **Configure credentials:**\n    -   **LlamaIndex:** Create an \"HTTP Header Auth\" credential with `x-api-key` in the header and your LlamaIndex API key as the value.\n    -   **OpenAI:** Create an \"OpenAI API\" credential with your OpenAI API key. Ensure the credential name is \"Sumopod\" or update the workflow nodes accordingly.\n    -   **Pinecone:** Create a \"Pinecone API\" credential with your Pinecone API key and environment. Ensure the credential name is \"w3khmuhtadin\" or update the workflow nodes accordingly.\n    -   **AWS S3:** Create an \"AWS S3\" credential with your Access Key ID and Secret Access Key.\n3.  **Update environment-specific values:**\n    -   In the \"Upload to S3\" node, ensure the `bucketName` is set to your desired S3 bucket.\n    -   In the \"Create Public URL\" node, update the `baseUrl` variable to match your S3 bucket's public access URL or CDN if applicable (e.g., `https://your-s3-bucket-name.s3.amazonaws.com`).\n4.  **Customize settings:**\n    -   Review the prompt in the \"Analyze\" (Langchain Agent) node to adjust the AI's persona or required queries if needed.\n5.  **Test execution:**\n    -   Send sample documents (PDF, DOCX, XLSX) to the webhook URL (`/webhook/dd-ai`) to verify all connections and processing steps work as expected.\n\n## Technical Details\n\n### Core Nodes\n\n| Node | Purpose | Key Configuration |\n| :------------------------------ | :--------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |\n| `Webhook` | Initiates workflow with document uploads | `Path: dd-ai`, `HTTP Method: POST` |\n| `Split Multi-File` (Code) | Splits binary files, generates unique deal ID | Parses `filenames` from `body` or `binary`, creates `dealId` from sorted names. |\n| `Parse Document via LlamaIndex` | Extracts structured text from various document types | `URL: https://api.cloud.llamaindex.ai/api/v1/parsing/upload`, `Authentication: HTTP Header Auth` with `x-api-key`. |\n| `Monitor Document Processing` | Polls LlamaIndex for parsing status | `URL: https://api.cloud.llamaindex.ai/api/v1/parsing/job/{{ $json.id }}`, `Authentication: HTTP Header Auth`. |\n| `Insert to Pinecone` | Stores vector embeddings in Pinecone | `Mode: insert`, `Pinecone Index: poc`, `Pinecone Namespace: dealId`. |\n| `Data Retrieval` (Pinecone) | Enables AI agent to search due diligence documents | `Mode: retrieve-as-tool`, `Pinecone Index: poc`, `Pinecone Namespace: {{ $json.dealId }}`, `topK: 100`. |\n| `Analyze` (Langchain Agent) | Orchestrates AI analysis using specific queries | `Prompt Type: define`, detailed role and 6 mandatory Pinecone queries, `Model: gpt-5-mini`, `Output Parser: Parser`. |\n| `Generate PDF` (Puppeteer) | Converts HTML report to a professional PDF | `Script Code: await $page.pdf(...)` with A4 format, margins, and 60s timeout. |\n| `Upload to S3` | Stores final PDF reports securely | `Bucket Name: poc`, `File Name: {{ $json.fileName }}`, `Credentials: AWS S3`. |\n| `If (Check Namespace Exists)` | Implements caching logic | Checks `stats.namespaces[dealId].vectorCount &gt; 0` to determine cache hit/miss. |\n\n### Workflow Logic\n\nThe workflow begins by accepting multiple files via a webhook. It intelligently checks if the specific \"deal\" (identified by a unique ID generated from filenames) has already had its documents processed and embedded in Pinecone. This cache mechanism prevents redundant processing, saving time and API costs. If a cache miss occurs, documents are parsed by LlamaIndex, their content vectorized by OpenAI, and stored in a Pinecone namespace unique to the deal.\n\nFor analysis, a Langchain Agent, powered by GPT-5-mini, is instructed with a specific persona and a mandatory sequence of Pinecone queries (e.g., company overview, financials, risks). It uses the `Data Retrieval` tool to interact with Pinecone, synthesizing information from the stored embeddings. The AI's output is then structured by a dedicated parser, transformed into a human-readable HTML report, and converted into a PDF. Finally, this comprehensive report is uploaded to AWS S3, and a public access URL is provided as a response.\n\n## Customization Options\n\n**Basic Adjustments:**\n-   **AI Prompt Refinement:** Modify the `Prompt` field in the \"Analyze\" (Langchain Agent) node to adjust the AI's persona, introduce new mandatory queries, or change reporting style.\n-   **Output Schema:** Update the JSON schema in the \"Parser\" (Langchain Output Parser Structured) node to include additional fields or change the structure of the AI's output.\n\n**Advanced Enhancements:**\n-   **Integration with CRM/Dataroom:** Add nodes to automatically fetch documents from or update status in a CRM (e.g., Salesforce, HubSpot) or a virtual data room (e.g., CapLinked, Datasite).\n-   **Conditional Analysis:** Implement logic to trigger different analysis paths or generate different report sections based on document content or deal parameters.\n-   **Notification System:** Integrate with Slack, Microsoft Teams, or email to send notifications upon report generation or specific risk identification.\n\n## Use Case Examples\n\n### Scenario 1: Private Equity Firm Evaluating a Target Company\n**Challenge:** A private equity firm receives dozens of due diligence documents (financials, CIM, management presentations) for a potential acquisition, needing a rapid initial assessment.\n**Solution:** The workflow ingests all documents, automatically parses them, and an AI agent synthesizes key company information, financial summaries (revenue history, margins), and identified risks into a structured report within minutes.\n**Result:** The firm's analysts gain an immediate, comprehensive overview, enabling faster screening and more focused deep-dive questions, significantly accelerating the deal cycle.\n\n### Scenario 2: M&A Advisor Conducting Preliminary Due Diligence\n**Challenge:** An M&A advisory firm needs to provide clients with a quick, consistent, and standardized preliminary due diligence report across multiple prospects.\n**Solution:** Advisors upload relevant prospect documents to the workflow. The AI-powered system automatically extracts core business model details, investment thesis highlights, and customer concentration analysis, along with key financials.\n**Result:** The firm can generate standardized, high-quality preliminary reports efficiently, ensuring consistency across all client engagements and freeing up senior staff for strategic analysis.\n\n---\n\n**Created by:** [Khmuhtadin](https://khmuhtadin.com)\n**Category:** AI | **Tags:** Due Diligence, AI, Automation, M&A, LlamaIndex, Pinecone, GPT-5-mini, Document Processing\n**Need custom workflows?** [Contact us](https://khaisa.studio/contact)\n\n**Connect with the creator:**\n[Portfolio](https://khmuhtadin.com) • [Workflows](https://khaisa.studio/products/) • [LinkedIn](https://www.linkedin.com/in/khmuhtadin/) • [Medium](https://medium.com/@khaisastudio) • [Threads](https://www.threads.com/@khmuhtadin)","workflow":{"id":"xdh3Ffr5asrTbRIQ","meta":{"instanceId":"c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c","templateCredsSetupCompleted":true},"name":"Due Diligence Automation v2.0.1","tags":[],"nodes":[{"id":"b3b60773-8f6e-4631-9e69-6862ed6e3009","name":"Retrieve Parsed Content","type":"n8n-nodes-base.httpRequest","position":[896,-160],"parameters":{"url":"=https://api.cloud.llamaindex.ai/api/v1/parsing/job/{{ $json.id }}/result/markdown","options":{},"sendHeaders":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"accept","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"4hJbMGqzerAxpVEw","name":"llamaindex"}},"typeVersion":4.2},{"id":"32b46e46-2f09-4106-8a8a-4961ae42bcaf","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1264,-752],"parameters":{"width":1072,"height":416,"content":"## Automated Due Diligence Report Generator\n\n### How it works\n1. Receive a POST webhook at /dd-ai with multipart due-diligence files; split files and create a unified deal ID.\n2. Check Pinecone for an existing namespace for the deal; if missing, parse files with LlamaIndex, generate embeddings, and insert them into Pinecone.\n3. Run multi-query retrieval from Pinecone and call the AI model (gpt-5-mini) to synthesize a structured due-diligence JSON: company profile, financials, risks, customer concentration, and investment thesis.\n4. Transform the structured output into HTML, render a PDF, upload it to S3, produce a public URL, and return the link to the caller.\n\n### Setup\n- [ ] Configure the webhook endpoint and set path to /dd-ai.\n- [ ] Add OpenAI API key and select model gpt-5-mini.\n- [ ] Connect Pinecone and ensure index name \"poc\" exists.\n- [ ] Add LlamaIndex parsing credentials.\n- [ ] Connect AWS S3 and create or select bucket \"poc\".\n- [ ] Test by POSTing multipart files with a filenames array and binary file fields."},"typeVersion":1},{"id":"3652d095-82b9-43e4-a55f-8d7e0c4eda13","name":"Receive Upload Request","type":"n8n-nodes-base.webhook","position":[-1200,-160],"webhookId":"5aed3279-e874-468b-91b6-902d99338f51","parameters":{"path":"5aed3279-e874-468b-91b6-902d99338f51","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2.1},{"id":"0f0e3174-43e8-4bd6-8059-be3953d584db","name":"Split Uploaded Files + Build Deal ID","type":"n8n-nodes-base.code","position":[-976,-160],"parameters":{"jsCode":"// Split webhook binary files into separate items\n// Generate unified dealId from all filenames\n\nconst item = $input.first();\nconst body = item.json.body || {};\nconst binary = item.binary || {};\n\n// Parse filenames from body\nlet filenames = [];\ntry {\n  filenames = JSON.parse(body.filenames || '[]');\n} catch (e) {\n  // If not JSON, try to get from binary\n  filenames = Object.values(binary).map(b => b.fileName);\n}\n\n// Generate unified deal ID from sorted filenames\nconst combinedNames = filenames.sort().join('|');\nconst dealId = Buffer.from(combinedNames).toString('base64').replace(/[^a-zA-Z0-9]/g, '').slice(0, 20);\n\n// Get all binary keys\nconst binaryKeys = Object.keys(binary).filter(k => k.startsWith('data'));\n\nif (binaryKeys.length === 0) {\n  throw new Error('No binary files found in webhook request');\n}\n\n// Create one item per file\nconst items = binaryKeys.map((key, index) => {\n  const binaryData = binary[key];\n  const extension = (binaryData.fileExtension || '').toLowerCase();\n  \n  return {\n    json: {\n      dealId: dealId,\n      sourceFile: binaryData.fileName,\n      fileType: extension,\n      mimeType: binaryData.mimeType,\n      fileIndex: index,\n      totalFiles: binaryKeys.length\n    },\n    binary: {\n      data: binaryData\n    }\n  };\n});\n\nreturn items;"},"typeVersion":2},{"id":"e84d333f-dead-474c-800f-c8eae4d68326","name":"Iterate Files for Parsing","type":"n8n-nodes-base.splitInBatches","position":[-96,-144],"parameters":{"options":{}},"typeVersion":3},{"id":"0b4c3de6-6724-4a96-ac2a-63796a83eb37","name":"Get Pinecone Index Stats","type":"n8n-nodes-base.httpRequest","position":[-736,-160],"parameters":{"url":"=[credentials.pineconeApi.environment] /describe_index_stats","method":"POST","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json'"}]}},"typeVersion":4.3},{"id":"6bf36498-9c1a-4ca6-a2bf-773d5555e432","name":"Upsert Chunks to Pinecone","type":"@n8n/n8n-nodes-langchain.vectorStorePinecone","position":[1632,-160],"parameters":{"mode":"insert","options":{"clearNamespace":false,"pineconeNamespace":"={{ $('Iterate Files for Parsing').item.json.dealId }}"},"pineconeIndex":{"__rl":true,"mode":"list","value":"poc","cachedResultName":"poc"}},"credentials":{"pineconeApi":{"id":"IX4WqaNzLmXgybyA","name":"w3khmuhtadin"}},"typeVersion":1.3},{"id":"2fd24b26-f690-451e-b51a-9b4838ea8b89","name":"Generate Embeddings (Ingest)","type":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","position":[1584,-32],"parameters":{"options":{}},"credentials":{"openAiApi":{"id":"hdBomZukFu3cyDUS","name":"Sumopod"}},"typeVersion":1.2},{"id":"548bda77-79c1-422b-940e-3674835784fd","name":"Prepare Parsed Text Document","type":"@n8n/n8n-nodes-langchain.documentDefaultDataLoader","position":[1792,-32],"parameters":{"options":{"metadata":{"metadataValues":[{"name":"deal_id","value":"={{ $json.dealId }}"},{"name":"source_file","value":"={{ $json.sourceFile }}"},{"name":"file_type","value":"={{ $json.fileType }}"},{"name":"timestamp","value":"={{ $now.toUTC() }}"}]}}},"typeVersion":1.1},{"id":"0ec9a189-cc57-492c-841f-affd1d44a2c2","name":"Collect Ingested Deal IDs","type":"n8n-nodes-base.aggregate","position":[32,-576],"parameters":{"options":{},"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"metadata.deal_id"}]}},"typeVersion":1},{"id":"c5ee4aea-d116-4576-a4d3-903e84bd4d32","name":"Prepare Analysis Context","type":"n8n-nodes-base.code","position":[272,-576],"parameters":{"jsCode":"// Handle both paths: from cache hit or from aggregated embeddings\n  const items = $input.all();\n\n  let dealId;\n\n  // Check if coming from cache hit path\n  if (items[0]?.json?.cacheHit === true) {\n    dealId = items[0].json.dealId;\n  } else {\n    // Coming from aggregate embeddings path\n    const dealIdArray = items[0]?.json?.deal_id;\n    dealId = Array.isArray(dealIdArray) ? dealIdArray[0] : (dealIdArray || 'unknown');\n  }\n\n  return [{\n    json: {\n      dealId,\n      filesProcessed: items[0]?.json?.vectorCount || (Array.isArray(items[0]?.json?.deal_id)\n   ? items[0].json.deal_id.length : 1),\n      fromCache: items[0]?.json?.cacheHit || false,\n      timestamp: new Date().toISOString()\n    }\n  }];"},"typeVersion":2},{"id":"91d65143-09f7-4911-8fd0-f7caf7fdaa4c","name":"Run Due Diligence AI Analysis","type":"@n8n/n8n-nodes-langchain.agent","position":[512,-576],"parameters":{"text":"=You are a Senior Investment Analyst & Due Diligence Officer.\n\nMANDATORY RETRIEVAL STRATEGY:\nYou MUST make MULTIPLE Pinecone queries to gather ALL required data. Do\nNOT rely on a single query.\n\nREQUIRED QUERIES (execute ALL before generating output):\n  1. \"company name headquarters location employees industry overview\"\n  2. \"revenue financial performance FY2021 FY2022 FY2023 FY2024 FY2025 yearly results\"\n  3. \"gross margin net margin EBITDA margin profitability percentage\"\n  4. \"risk factors key risks challenges threats founder dependency labor market client concentration\"\n  5. \"customer concentration top clients revenue breakdown percentage\"\n  6. \"business model investment thesis value proposition growth strategy\"\n\nSTRICT RULES:\n  - Execute ALL 6 queries before generating JSON output\n  - Combine and synthesize evidence from ALL queries\n  - Extract ALL years of financial data (2021-2025), not just recent year\n  - Include ALL risks mentioned in documents (typically 5-7 risks)\n  - For customer concentration, include specific percentages (Top 3, Top 5, Top 10)\n  - If data is genuinely missing after all queries, use \"Not Available\" (string) or 0 (number)\n  - Do not hallucinate - only use retrieved evidence\n\nOUTPUT FORMAT:\nReturn ONLY valid JSON matching the parser schema. No markdown, no explanation.\n\nOUTPUT TYPES:\n  - String fields: use \"Not Available\" when missing\n  - Numeric fields (employee_count, year, amount, ebitda): use 0 when missing\n  - key_risks: MUST be array of strings with ALL identified risks\n  - revenue_history: MUST include ALL available years (up to 5 years)","options":{},"promptType":"define","hasOutputParser":true},"typeVersion":3.1},{"id":"7bf0b702-726b-4c79-99b1-9bb87ff82a88","name":" OpenAI Chat Model (5-mini)","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[512,-432],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-5-mini","cachedResultName":"gpt-5-mini"},"options":{},"builtInTools":{}},"credentials":{"openAiApi":{"id":"hdBomZukFu3cyDUS","name":"Sumopod"}},"typeVersion":1.3},{"id":"8a6592fe-8b2b-4f76-8027-38121ab2540c","name":"Parse Structured Analysis JSON","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1024,-464],"parameters":{"jsonSchemaExample":"{\n  \"company_profile\": {\n    \"company_name\": \"Example Corp\",\n    \"industry\": \"Manufacturing\",\n    \"location\": \"Jakarta, Indonesia\",\n    \"employee_count\": 120\n  },\n  \"financials\": {\n    \"revenue_history\": [\n      { \"year\": 2023, \"amount\": 1200000, \"currency\": \"USD\" },\n      { \"year\": 2024, \"amount\": 1400000, \"currency\": \"USD\" },\n      { \"year\": 2025, \"amount\": 1600000, \"currency\": \"USD\" }\n    ],\n    \"ebitda\": 250000,\n    \"margins\": {\n      \"gross_margin\": \"42%\",\n      \"net_margin\": \"11%\",\n      \"ebitda_margin\": \"18%\"\n    }\n  },\n  \"analysis\": {\n    \"business_model\": \"B2B recurring contracts\",\n    \"investment_thesis\": \"Strong growth with expanding margins\",\n    \"key_risks\": [\n      \"Customer concentration\",\n      \"FX exposure\"\n    ],\n    \"customer_concentration\": \"Top 3 customers contribute 55% revenue\"\n  }\n}"},"typeVersion":1.3},{"id":"f43d2168-d066-4475-a9ed-3a782d53d9d5","name":"Retrieve Context from Pinecone","type":"@n8n/n8n-nodes-langchain.vectorStorePinecone","position":[752,-464],"parameters":{"mode":"retrieve-as-tool","topK":100,"options":{"pineconeNamespace":"={{ $json.dealId }}"},"pineconeIndex":{"__rl":true,"mode":"list","value":"poc","cachedResultName":"poc"},"toolDescription":"=Search the due diligence documents for specific information. You MUST call this tool MULTIPLE times with different focused queries:\n\nREQUIRED QUERIES:\n- Company profile: \"company name location headquarters employees industry\"\n- Financial history: \"revenue FY2021 FY2022 FY2023 FY2024 FY2025 financial performance\"\n- Margins: \"gross margin net margin EBITDA margin profitability\"\n- Risks: \"risk factors key risks founder dependency labor market concentration\"\n- Customer data: \"customer concentration top clients revenue percentage breakdown\"\n- Business analysis: \"business model investment thesis growth strategy\"\n\nEach query should focus on ONE category. Combine results from all queries for complete analysis."},"credentials":{"pineconeApi":{"id":"IX4WqaNzLmXgybyA","name":"w3khmuhtadin"}},"typeVersion":1.3},{"id":"3f6e0076-4f85-417e-8f81-6d73d37012f7","name":" Generate Embeddings (Retrieval)","type":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","position":[656,-432],"parameters":{"options":{}},"credentials":{"openAiApi":{"id":"hdBomZukFu3cyDUS","name":"Sumopod"}},"typeVersion":1.2},{"id":"e11c084d-36e6-4044-9de3-c318e6153131","name":"Map Analysis to Report Fields","type":"n8n-nodes-base.code","position":[1168,-576],"parameters":{"jsCode":"// Transform AI Agent output to Due Diligence HTML template format\nconst raw = $input.first()?.json ?? {};\nconst data = raw.output && typeof raw.output === 'object' ? raw.output : raw;\n\nfunction isMissing(value) {\n  return value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n}\n\nfunction escapeHtml(value) {\n  return String(value)\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#39;');\n}\n\nfunction textValue(value, fallback = 'Not Available') {\n  return isMissing(value) ? fallback : String(value);\n}\n\nfunction numberValue(value, fallback = 'Not Available') {\n  if (typeof value === 'number') {\n    if (!Number.isFinite(value) || value === 0) return fallback;\n    return value.toLocaleString('en-US');\n  }\n\n  if (typeof value === 'string') {\n    const trimmed = value.trim();\n    if (!trimmed || trimmed === '0') return fallback;\n    return trimmed;\n  }\n\n  return fallback;\n}\n\nfunction generateRevenueRows(revenueHistory) {\n  if (!Array.isArray(revenueHistory) || revenueHistory.length === 0) {\n    return '<tr><td colspan=\"3\" class=\"na-value\">No revenue data available</td></tr>';\n  }\n\n  return revenueHistory.map((row) => {\n    const year = textValue(row?.year, 'N/A');\n    const amount = numberValue(row?.amount);\n    const currency = textValue(row?.currency, 'USD');\n\n    return `\n    <tr>\n      <td>${escapeHtml(year)}</td>\n      <td>${escapeHtml(amount)}</td>\n      <td>${escapeHtml(currency)}</td>\n    </tr>\n  `;\n  }).join('');\n}\n\nfunction generateRiskItems(risks) {\n  const cleanRisks = Array.isArray(risks)\n    ? risks.filter((risk) => !isMissing(risk)).map((risk) => String(risk))\n    : [];\n\n  if (cleanRisks.length === 0) {\n    return '<li class=\"risk-item\"><span class=\"risk-icon\">-</span><span class=\"risk-text\">No specific risks identified in the document</span></li>';\n  }\n\n  return cleanRisks.map((risk, index) => `\n    <li class=\"risk-item\">\n      <span class=\"risk-icon\">${index + 1}</span>\n      <span class=\"risk-text\">${escapeHtml(risk)}</span>\n    </li>\n  `).join('');\n}\n\nconst companyProfile = data.company_profile || {};\nconst financials = data.financials || {};\nconst analysis = data.analysis || {};\nconst margins = financials.margins || {};\n\nconst dealId = $('Prepare Analysis Context').first()?.json?.dealId || 'N/A';\nconst reportDate = DateTime.now().toFormat(\"MMMM dd, yyyy 'at' HH:mm\");\n\nreturn [{\n  json: {\n    companyName: textValue(companyProfile.company_name),\n    industry: textValue(companyProfile.industry),\n    location: textValue(companyProfile.location),\n    employeeCount: numberValue(companyProfile.employee_count),\n\n    revenueTableRows: generateRevenueRows(financials.revenue_history),\n    ebitda: numberValue(financials.ebitda),\n    grossMargin: textValue(margins.gross_margin),\n    netMargin: textValue(margins.net_margin),\n    ebitdaMargin: textValue(margins.ebitda_margin),\n\n    businessModel: textValue(analysis.business_model),\n    investmentThesis: textValue(analysis.investment_thesis),\n    riskListItems: generateRiskItems(analysis.key_risks),\n    customerConcentration: textValue(analysis.customer_concentration),\n\n    dealId: textValue(dealId, 'N/A'),\n    reportDate,\n  },\n}];"},"typeVersion":2},{"id":"baf80a35-7ac0-4ca2-ae29-378b5d71ed96","name":"Render DD Report HTML","type":"n8n-nodes-base.html","position":[1472,-576],"parameters":{"html":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Due Diligence Report - {{ $json.companyName }}</title>\n    <style>\n        * { margin: 0; padding: 0; box-sizing: border-box; }\n        body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; background-color: #ffffff; color: #1e293b; line-height: 1.6; padding: 40px; max-width: 800px; margin: 0 auto; }\n        .header { border-bottom: 3px solid #0f766e; padding-bottom: 24px; margin-bottom: 32px; }\n        .header h1 { font-size: 28px; color: #0f766e; margin-bottom: 8px; }\n        .header .subtitle { font-size: 14px; color: #64748b; }\n        .header .date { font-size: 12px; color: #94a3b8; margin-top: 4px; }\n        .section { margin-bottom: 32px; }\n        .section-title { font-size: 18px; font-weight: 700; color: #0f766e; border-left: 4px solid #0f766e; padding-left: 12px; margin-bottom: 16px; }\n        .card { background-color: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 20px; margin-bottom: 16px; }\n        .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }\n        .info-item { padding: 12px; background-color: #ffffff; border-radius: 6px; border: 1px solid #e2e8f0; }\n        .info-label { font-size: 11px; text-transform: uppercase; color: #64748b; letter-spacing: 0.5px; margin-bottom: 4px; }\n        .info-value { font-size: 16px; font-weight: 600; color: #1e293b; }\n        table { width: 100%; border-collapse: collapse; margin-top: 12px; }\n        th { background-color: #0f766e; color: #ffffff; font-size: 12px; font-weight: 600; text-align: left; padding: 12px; text-transform: uppercase; letter-spacing: 0.5px; }\n        td { padding: 12px; border-bottom: 1px solid #e2e8f0; font-size: 14px; }\n        tr:nth-child(even) { background-color: #f8fafc; }\n        .metric-row { display: flex; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid #e2e8f0; }\n        .metric-row:last-child { border-bottom: none; }\n        .metric-label { color: #475569; font-size: 14px; }\n        .metric-value { font-weight: 600; color: #1e293b; }\n        .text-content { font-size: 14px; color: #475569; line-height: 1.8; white-space: pre-line; }\n        .risk-list { list-style: none; padding: 0; }\n        .risk-item { display: flex; align-items: flex-start; padding: 12px; background-color: #fef2f2; border-left: 4px solid #ef4444; margin-bottom: 8px; border-radius: 0 6px 6px 0; }\n        .risk-icon { width: 20px; height: 20px; background-color: #ef4444; color: #ffffff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-right: 12px; flex-shrink: 0; }\n        .risk-text { font-size: 14px; color: #7f1d1d; }\n        .highlight-box { background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%); border: 1px solid #10b981; border-radius: 8px; padding: 20px; }\n        .highlight-content { font-size: 14px; color: #047857; line-height: 1.7; }\n        .footer { margin-top: 40px; padding-top: 20px; border-top: 1px solid #e2e8f0; text-align: center; font-size: 11px; color: #94a3b8; }\n        .na-value { color: #94a3b8; font-style: italic; }\n    </style>\n</head>\n<body>\n    <div class=\"header\">\n        <h1>Due Diligence Report</h1>\n        <div class=\"subtitle\">{{ $json.companyName }}</div>\n        <div class=\"date\">Generated: {{ $json.reportDate }}</div>\n    </div>\n    <div class=\"section\">\n        <h2 class=\"section-title\">Company Overview</h2>\n        <div class=\"card\">\n            <div class=\"info-grid\">\n                <div class=\"info-item\"><div class=\"info-label\">Company Name</div><div class=\"info-value\">{{ $json.companyName }}</div></div>\n                <div class=\"info-item\"><div class=\"info-label\">Industry</div><div class=\"info-value\">{{ $json.industry }}</div></div>\n                <div class=\"info-item\"><div class=\"info-label\">Location</div><div class=\"info-value\">{{ $json.location }}</div></div>\n                <div class=\"info-item\"><div class=\"info-label\">Employee Count</div><div class=\"info-value\">{{ $json.employeeCount }}</div></div>\n            </div>\n        </div>\n    </div>\n    <div class=\"section\">\n        <h2 class=\"section-title\">Financial Summary</h2>\n        <div class=\"card\">\n            <h3 style=\"font-size: 14px; color: #475569; margin-bottom: 12px;\">Revenue History</h3>\n            <table><thead><tr><th>Year</th><th>Revenue</th><th>Currency</th></tr></thead><tbody>{{ $json.revenueTableRows }}</tbody></table>\n        </div>\n        <div class=\"card\">\n            <h3 style=\"font-size: 14px; color: #475569; margin-bottom: 12px;\">Key Metrics</h3>\n            <div class=\"metric-row\"><span class=\"metric-label\">EBITDA</span><span class=\"metric-value\">{{ $json.ebitda }}</span></div>\n            <div class=\"metric-row\"><span class=\"metric-label\">Gross Margin</span><span class=\"metric-value\">{{ $json.grossMargin }}</span></div>\n            <div class=\"metric-row\"><span class=\"metric-label\">Net Margin</span><span class=\"metric-value\">{{ $json.netMargin }}</span></div>\n            <div class=\"metric-row\"><span class=\"metric-label\">EBITDA Margin</span><span class=\"metric-value\">{{ $json.ebitdaMargin }}</span></div>\n        </div>\n    </div>\n    <div class=\"section\">\n        <h2 class=\"section-title\">Business Model</h2>\n        <div class=\"card\"><div class=\"text-content\">{{ $json.businessModel }}</div></div>\n    </div>\n    <div class=\"section\">\n        <h2 class=\"section-title\">Investment Thesis</h2>\n        <div class=\"highlight-box\"><div class=\"highlight-content\">{{ $json.investmentThesis }}</div></div>\n    </div>\n    <div class=\"section\">\n        <h2 class=\"section-title\">Risk Analysis</h2>\n        <div class=\"card\">\n            <h3 style=\"font-size: 14px; color: #475569; margin-bottom: 12px;\">Key Risks</h3>\n            <ul class=\"risk-list\">{{ $json.riskListItems }}</ul>\n        </div>\n        <div class=\"card\">\n            <h3 style=\"font-size: 14px; color: #475569; margin-bottom: 12px;\">Customer Concentration</h3>\n            <div class=\"text-content\">{{ $json.customerConcentration }}</div>\n        </div>\n    </div>\n    <div class=\"footer\">\n        <p>This report was generated automatically using AI-powered document analysis.</p>\n        <p>Deal ID: {{ $json.dealId }}</p>\n    </div>\n</body>\n</html>"},"typeVersion":1.2},{"id":"ce064d94-2c3f-48b9-bfc6-e353f42f8cbb","name":"Render PDF from HTML","type":"n8n-nodes-puppeteer.puppeteer","position":[1696,-576],"parameters":{"options":{},"operation":"runCustomScript","scriptCode":"=// Get HTML from previous node\nconst html = $json.html || '';\n\nif (!html) {\n  throw new Error('HTML content is empty. Check Generate DD Report HTML output.');\n}\n\n// Render HTML with longer timeout\nawait $page.setContent(html, {\n  waitUntil: 'networkidle0',\n  timeout: 60000,\n});\n\n// Generate PDF\nconst pdfArray = await $page.pdf({\n    format: 'A4',\n    printBackground: true,\n    margin: {\n      top: '40px',\n      right: '40px',\n      bottom: '40px',\n      left: '40px',\n    },\n    scale: 0.95,\n    timeout: 60000,\n});\n\n// Return base64 for next node\nconst pdfBase64 = Buffer.from(pdfArray).toString('base64');\nreturn [{ json: { pdfBase64 } }];"},"typeVersion":1},{"id":"234bb525-e16f-429c-a5bc-39f749cfcfe8","name":"Convert PDF Base64 to Binary File","type":"n8n-nodes-base.convertToFile","position":[1920,-576],"parameters":{"options":{"fileName":"={{ $('Map Analysis to Report Fields').item.json.companyName }}-Analysis.pdf"},"operation":"toBinary","sourceProperty":"pdfBase64"},"typeVersion":1.1},{"id":"2f93d577-19ab-454a-ad8c-333eb8d18330","name":"Upload Report PDF to S3","type":"n8n-nodes-base.s3","position":[2448,-576],"parameters":{"fileName":"={{ $json.fileName }}","operation":"upload","bucketName":"poc","additionalFields":{}},"credentials":{"s3":{"id":"VlDlqmuisabClxpl","name":"S3 account"}},"typeVersion":1},{"id":"42dbc003-e2da-4005-bac0-745404990b40","name":"Build Public Report URL","type":"n8n-nodes-base.code","position":[2672,-576],"parameters":{"jsCode":"const baseUrl = 'https://poc.atlr.dev';\n  const fileName = $('Prepare S3 File Metadata').first().json.fileName;\n  const encodedFileName = encodeURIComponent(fileName);\n  const publicUrl = `${baseUrl}/${encodedFileName}`;\n\n  return {\n    json: {\n      success: true,\n      fileName: fileName,\n      publicUrl: publicUrl\n    }\n  };"},"typeVersion":2},{"id":"b0d10349-c402-4adf-a06e-af5dcbc2645b","name":" Merge Analysis + Report URL","type":"n8n-nodes-base.merge","position":[2944,-592],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"909faa92-6fc8-4f00-8571-4630bd4de26d","name":"Is Parsing Job Complete?","type":"n8n-nodes-base.if","position":[496,-144],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"921ff875-817d-47fd-bd47-530ebdc21902","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"SUCCESS"}]}},"typeVersion":2.2},{"id":"cc4c89d2-c586-48d1-a32f-b719e1f86beb","name":"Upload File to LlamaParse","type":"n8n-nodes-base.httpRequest","position":[96,-144],"parameters":{"url":"https://api.cloud.llamaindex.ai/api/v1/parsing/upload","method":"POST","options":{},"sendBody":true,"contentType":"multipart-form-data","sendHeaders":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"file","parameterType":"formBinaryData","inputDataFieldName":"data"}]},"genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"accept","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"4hJbMGqzerAxpVEw","name":"llamaindex"}},"typeVersion":4.2},{"id":"7341754f-86ea-4a5a-a967-880a711895c4","name":"Check LlamaParse Job Status","type":"n8n-nodes-base.httpRequest","position":[304,-144],"parameters":{"url":"=https://api.cloud.llamaindex.ai/api/v1/parsing/job/{{ $json.id }}","options":{},"sendHeaders":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"accept","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"4hJbMGqzerAxpVEw","name":"llamaindex"}},"typeVersion":4.2},{"id":"d5164ab7-159b-48dd-8d3a-3b8fa28415a6","name":"Wait 10s Before Recheck","type":"n8n-nodes-base.wait","position":[688,-128],"webhookId":"db3c4e8f-3168-4ce4-9209-b8e801183070","parameters":{"amount":10},"typeVersion":1.1},{"id":"bcec3773-43fe-475f-b2a0-a60b3f1ec2e8","name":"Return API Response","type":"n8n-nodes-base.respondToWebhook","position":[3200,-592],"parameters":{"options":{}},"typeVersion":1.5},{"id":"7f640ee8-584f-4d97-b6af-e301070e309c","name":"Normalize Parsed Text Payload","type":"n8n-nodes-base.code","position":[1136,-160],"parameters":{"jsCode":"const loopItem = $('Iterate Files for Parsing').item.json;\n  const parsedContent = $json.markdown || $json.text || '';\n\n  return [{\n    json: {\n      dealId: loopItem.dealId,\n      sourceFile: loopItem.sourceFile,\n      fileType: loopItem.fileType,\n      parsedText: parsedContent\n    }\n  }];"},"typeVersion":2},{"id":"118de47b-e23b-490c-a0e7-cfcea140255c","name":" Check Deal Namespace Cache","type":"n8n-nodes-base.code","position":[-528,-160],"parameters":{"jsCode":"const stats = $input.first().json;\n  const originalItems = $('Split Uploaded Files + Build Deal ID').all();\n  const dealId = originalItems[0]?.json?.dealId;\n\n  // Check if namespace exists\n  const namespaceExists = stats.namespaces && stats.namespaces[dealId];\n  const vectorCount = namespaceExists ? stats.namespaces[dealId].vectorCount : 0;\n\n  if (vectorCount > 0) {\n    // Cache HIT - return single item for analysis path\n    return [{\n      json: {\n        dealId: dealId,\n        cacheHit: true,\n        vectorCount: vectorCount,\n        message: `Cache HIT: ${vectorCount} vectors found`\n      }\n    }];\n  } else {\n    // Cache MISS - return ALL original items WITH binary\n    return originalItems.map(item => ({\n      json: {\n        ...item.json,\n        cacheHit: false\n      },\n      binary: item.binary\n    }));\n  }"},"typeVersion":2},{"id":"7a292f76-9126-4db2-8eed-6410ecf15e94","name":"Cache Hit?","type":"n8n-nodes-base.if","position":[-352,-160],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"a45d92c0-a88f-49fc-b393-b482a3585d21","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.cacheHit }}","rightValue":true}]}},"typeVersion":2.3},{"id":"1e26091a-1b9d-4f6a-ac36-fdd96a362351","name":"Prepare S3 File Metadata","type":"n8n-nodes-base.code","position":[2256,-576],"parameters":{"jsCode":"const companyName = $('Map Analysis to Report Fields').first().json.companyName;\n  const timestamp = Date.now();\n  const fileName = `${companyName}-assessment-${timestamp}.pdf`;\n\n  return [{\n    json: {\n      fileName: fileName\n    },\n    binary: $input.first().binary\n  }];"},"typeVersion":2},{"id":"bc94aed6-353b-4203-9cd8-f8c45ac858ca","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1264,-320],"parameters":{"color":7,"width":448,"height":336,"content":"## Intake & Request Normalization \nReceives multipart upload, parses filenames/binaries, and creates one normalized item per file with a shared dealId.\n"},"typeVersion":1},{"id":"cfeb2a7e-4863-4462-9de7-111907e8e31a","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-800,-320],"parameters":{"color":7,"width":608,"height":336,"content":"## Pinecone Cache Check\nChecks namespace stats in Pinecone to detect cache hit/miss and routes flow to direct analysis or document parsing.\n"},"typeVersion":1},{"id":"6e2eadb0-3f1b-4983-bd0d-18cfd9ade098","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-176,-272],"parameters":{"color":7,"width":1536,"height":432,"content":" ## Document Parsing Loop\nUploads each file for parsing, polls async status until complete, fetches markdown output, and normalizes parsed text payload."},"typeVersion":1},{"id":"5df3e070-5fe6-4b67-98fa-4766a68fb83b","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1376,-272],"parameters":{"color":7,"width":672,"height":432,"content":" ## Vector Ingestion \nConverts parsed content into documents, generates embeddings, upserts vectors into deal namespace, and aggregates ingestion results.\n"},"typeVersion":1},{"id":"866571b6-5fd2-455c-8712-6f084b38c8b3","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-176,-752],"parameters":{"color":7,"width":1536,"height":464,"content":"## AI Due Diligence Analysis\nBuilds analysis context, retrieves supporting evidence from Pinecone, runs LLM agent, and enforces structured JSON output."},"typeVersion":1},{"id":"b2be995c-d818-4986-8a82-e4e4a43e80de","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1376,-752],"parameters":{"color":7,"width":784,"height":464,"content":"## Report Rendering (HTML to PDF)  \n Maps AI output to report fields, renders HTML template, generates PDF, and converts output to binary file."},"typeVersion":1},{"id":"6451d4ea-9229-4a6a-980b-b92204d2c02d","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[2176,-752],"parameters":{"color":7,"width":1200,"height":464,"content":"## Delivery & Webhook Response\nPrepares filename metadata, uploads PDF to S3, builds public URL, merges outputs, and returns final API response."},"typeVersion":1}],"active":true,"pinData":{},"settings":{"callerPolicy":"workflowsFromSameOwner","availableInMCP":false,"executionOrder":"v1"},"versionId":"f7682e18-ad85-4a3e-92c9-bb97bd2d1472","connections":{"Cache Hit?":{"main":[[{"node":"Prepare Analysis Context","type":"main","index":0}],[{"node":"Iterate Files for Parsing","type":"main","index":0}]]},"Render PDF from HTML":{"main":[[{"node":"Convert PDF Base64 to Binary File","type":"main","index":0}]]},"Render DD Report HTML":{"main":[[{"node":"Render PDF from HTML","type":"main","index":0}]]},"Receive Upload Request":{"main":[[{"node":"Split Uploaded Files + Build Deal ID","type":"main","index":0}]]},"Build Public Report URL":{"main":[[{"node":" Merge Analysis + Report URL","type":"main","index":0}]]},"Retrieve Parsed Content":{"main":[[{"node":"Normalize Parsed Text Payload","type":"main","index":0}]]},"Upload Report PDF to S3":{"main":[[{"node":"Build Public Report URL","type":"main","index":0}]]},"Wait 10s Before Recheck":{"main":[[{"node":"Check LlamaParse Job Status","type":"main","index":0}]]},"Get Pinecone Index Stats":{"main":[[{"node":" Check Deal Namespace Cache","type":"main","index":0}]]},"Is Parsing Job Complete?":{"main":[[{"node":"Retrieve Parsed Content","type":"main","index":0}],[{"node":"Wait 10s Before Recheck","type":"main","index":0}]]},"Prepare Analysis Context":{"main":[[{"node":"Run Due Diligence AI Analysis","type":"main","index":0}]]},"Prepare S3 File Metadata":{"main":[[{"node":"Upload Report PDF to S3","type":"main","index":0}]]},"Collect Ingested Deal IDs":{"main":[[{"node":"Prepare Analysis Context","type":"main","index":0}]]},"Iterate Files for Parsing":{"main":[[{"node":"Collect Ingested Deal IDs","type":"main","index":0}],[{"node":"Upload File to LlamaParse","type":"main","index":0}]]},"Upload File to LlamaParse":{"main":[[{"node":"Check LlamaParse Job Status","type":"main","index":0}]]},"Upsert Chunks to Pinecone":{"main":[[{"node":"Iterate Files for Parsing","type":"main","index":0}]]}," Check Deal Namespace Cache":{"main":[[{"node":"Cache Hit?","type":"main","index":0}]]}," OpenAI Chat Model (5-mini)":{"ai_languageModel":[[{"node":"Run Due Diligence AI Analysis","type":"ai_languageModel","index":0}]]},"Check LlamaParse Job Status":{"main":[[{"node":"Is Parsing Job Complete?","type":"main","index":0}]]}," Merge Analysis + Report URL":{"main":[[{"node":"Return API Response","type":"main","index":0}]]},"Generate Embeddings (Ingest)":{"ai_embedding":[[{"node":"Upsert Chunks to Pinecone","type":"ai_embedding","index":0}]]},"Prepare Parsed Text Document":{"ai_document":[[{"node":"Upsert Chunks to Pinecone","type":"ai_document","index":0}]]},"Map Analysis to Report Fields":{"main":[[{"node":"Render DD Report HTML","type":"main","index":0}]]},"Normalize Parsed Text Payload":{"main":[[{"node":"Upsert Chunks to Pinecone","type":"main","index":0}]]},"Run Due Diligence AI Analysis":{"main":[[{"node":"Map Analysis to Report Fields","type":"main","index":0},{"node":" Merge Analysis + Report URL","type":"main","index":1}]]},"Parse Structured Analysis JSON":{"ai_outputParser":[[{"node":"Run Due Diligence AI Analysis","type":"ai_outputParser","index":0}]]},"Retrieve Context from Pinecone":{"ai_tool":[[{"node":"Run Due Diligence AI Analysis","type":"ai_tool","index":0}]]}," Generate Embeddings (Retrieval)":{"ai_embedding":[[{"node":"Retrieve Context from Pinecone","type":"ai_embedding","index":0}]]},"Convert PDF Base64 to Binary File":{"main":[[{"node":"Prepare S3 File Metadata","type":"main","index":0}]]},"Split Uploaded Files + Build Deal ID":{"main":[[{"node":"Get Pinecone Index Stats","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":39,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.s3":{"count":1},"n8n-nodes-base.code":{"count":7},"n8n-nodes-base.html":{"count":1},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.aggregate":{"count":1},"n8n-nodes-base.stickyNote":{"count":8},"n8n-nodes-base.httpRequest":{"count":4},"n8n-nodes-base.convertToFile":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-puppeteer.puppeteer":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":1},"@n8n/n8n-nodes-langchain.embeddingsOpenAi":{"count":2},"@n8n/n8n-nodes-langchain.vectorStorePinecone":{"count":2},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":1},"@n8n/n8n-nodes-langchain.documentDefaultDataLoader":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Khairul Muhtadin","username":"khmuhtadin","bio":"","verified":true,"links":["https://khmuhtadin.com"],"avatar":"https://gravatar.com/avatar/eb5ab777f1b9a8ec3306fff57cf9c4d1f68c9460212cd1181f6c7cd7ab98530e?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":365,"icon":"file:s3.png","name":"n8n-nodes-base.s3","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.s3/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/s3/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"S3"},"iconData":{"type":"file","fileBuffer":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAABDlBMVEUAAAATbrMSbbQTbbQSbbQTbrQTbrQUbrQTbrQSbrQTbbQSbbQSbbQTbrMSbbQTbrQTbrQTbbQSbbMTbbQSbbQSbbQSbbQTbrQTbbQTbrQSbrQSbrQSbbQSbbMTbrQUbrQTbbMSbbQSbbQSbbQTbLQTbbQTbbQTbrQSbbQTbbQSbbQTbrQTbrQTbbQSbbQSbbQOarITbbQUbrT///8KaLEQa7MNarISbbN3q9MFZa+81uqfxOFyqNIbc7cUbrWNudsvf7wkd7m10ehin81IjsUIZ7H7/f71+fzw9vvd6vTE2+x9r9VrpNBVlslOksfR4vCnyeORu9uCsdc+iMI8h8Ho8PfL4O+ry+SSvNxnoc6vyMA5AAAAMnRSTlMACARbK/r177Z20ZlGk1HYxb9oYiQVEPfyy41LHBnr6KtlQTsvDOPeraKBem43Hob+sqyldq4AAALoSURBVEjH7ZbndqJAFICHKh1EsPfek4ygbjZuYkmvm+3v/yILKgITiPhrz9mT7989zuctDlfAB/8QLE9WCTbbOVE4uVkqFktNmVNOOlmWqJJ5DITTqKkiI9MwBFpmRLXWCDJxgedicC8xjhdwtFqCg5HJEL769TY8iLbuunkeHghf2MmkcqiskO6wJPowNy15hyZkDnEzgkfFk9a4mVI0s8RYw066mZNEzu68wiuxPb+ywlfsbnNE0lN1WtTW30IKfZHhYimK8joUlYpxjNgXyLWj8Wlv3ck0pMuEhm27wAr1qkSofdairxJStV7AtnViGlGmYTrpbToOLYpMNlHLg1DytUSWKU6sk3HfDc3uumpl2mIvkauRQ72BWTT0IVnLJXpiO9PaTeQIeJGgBdJmiqbTaZpO2QNAkHxy/aBbQtd9sn7YJdGBjw5EMD45jN/IHeCHhQhP99MN9ysTIrCILCFDmXweOfw2EDclIbLWCpXPUbmlAQQluqwAFD66zAOURHQ5AVBIKqpMkQAFa0aVmxh4QzmqXAZvYcPkr4jMBsgC9DG9O91w94DcTyFA1pAF+MUBXYBagNyIw0jEA/8nxWiyCIJQvU+jGSqrgXJ1s6JMczW9X859UzIn7uquBsq6DC2O5y83o9HV86Nrm7PlfFeJrINAmPXBxWjNzcrYtfF0tdwFDAjmyPrs8mG0ZTHbZVuMnmcTZOuiSHZzL458893YJn60ojMndS5ELtBW1acjh9XltuM7K7jdTpAuhMg4B034y3Gv7cxuI6+biMNBCLx19MyRTzc9j+c/1+HtxRjdIug2ceu+ftykMqa+hysRKg8oy75YXNmJlnYiO/zhtPHNqoQahMp52a5z9vR6/ufCgFt5erZhastyPlTGy+vzxrFpuPdr7LDeIjgIpQv30AXhDON7nuUheAesEi+GmcV4BQPvg9crWYaLoS/KTLZSx0EUsAI5yBEq2+t2e6xK5AZkAQP/D38B/zR2KYIltgQAAAAASUVORK5CYII="},"displayName":"S3","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":842,"icon":"file:html.svg","name":"n8n-nodes-base.html","codex":{"data":{"alias":["extract","template","table"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.html/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"HTML"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguNjQwNjIgMEgxMC40Mzc1VjEuNzgxMjVIMTIuMDkzN1YwSDEzLjg5MDZWNS4zOTA2MkgxMi4wOTM3VjMuNTkzNzVIMTAuNDUzMVY1LjM5MDYySDguNjQwNjJNMTYuMjY1NiAxLjc5Njg3SDE0LjY3OTdWMEgxOS42NTYyVjEuNzk2ODdIMTguMDYyNVY1LjM5MDYySDE2LjI2NTZNMjAuNDQ1MyAwSDIyLjMyODFMMjMuNDg0NCAxLjg5ODQ0TDI0LjY0MDYgMEgyNi41MjM0VjUuMzkwNjJIMjQuNzI2NlYyLjcxODc1TDIzLjQ2ODcgNC42NTYyNUwyMi4yMTA5IDIuNzE4NzVWNS4zOTA2MkgyMC40NDUzTTI3LjQxNDEgMEgyOS4yMTA5VjMuNjA5MzdIMzEuNzU3OFY1LjM5MDYySDI3LjQxNDEiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik04LjU3ODEyIDM2Ljc5NjlMNiA3Ljg1OTM4SDM0LjM0MzdMMzEuNzY1NiAzNi43ODEyTDIwLjE0ODQgNDAiIGZpbGw9IiNFNDREMjYiLz4KPHBhdGggZD0iTTIwLjE3MTkgMzcuNTM5MVYxMC4yMzQ0SDMxLjc1NzhMMjkuNTQ2OSAzNC45MjE5IiBmaWxsPSIjRjE2NTI5Ii8+CjxwYXRoIGQ9Ik0xMS4yNjU2IDEzLjc3MzRIMjAuMTcxOVYxNy4zMjAzSDE1LjE1NjJMMTUuNDg0NCAyMC45NTMxSDIwLjE3MTlWMjQuNDkyMkgxMi4yMzQ0TTEyLjM5MDYgMjYuMjczNEgxNS45NTMxTDE2LjIwMzEgMjkuMTA5NEwyMC4xNzE5IDMwLjE3MTlWMzMuODc1TDEyLjg5MDYgMzEuODQzNyIgZmlsbD0iI0VCRUJFQiIvPgo8cGF0aCBkPSJNMjkuMDQ2OSAxMy43NzM0SDIwLjE1NjJWMTcuMzIwM0gyOC43MTg3TTI4LjM5ODQgMjAuOTUzMUgyMC4xNTYyVjI0LjVIMjQuNTMxMkwyNC4xMTcyIDI5LjEwOTRMMjAuMTU2MiAzMC4xNzE5VjMzLjg1OTRMMjcuNDIxOSAzMS44NDM3IiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"},"displayName":"HTML","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1141,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Embeddings"]}}},"group":"[\"transform\"]","defaults":{"name":"Embeddings OpenAI"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"Embeddings OpenAI","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1230,"icon":"file:pinecone.svg","name":"@n8n/n8n-nodes-langchain.vectorStorePinecone","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstorepinecone/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Vector Stores","Tools","Root Nodes"],"Tools":["Other Tools"],"Vector Stores":["Other Vector Stores"]}}},"group":"[\"transform\"]","defaults":{"name":"Pinecone Vector Store"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzUiIHZpZXdCb3g9IjAgMCAzMiAzNSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjg1NTUgMzQuMjk2MkMxNC45MzI1IDM0LjI5NjIgMTUuODA1NSAzMy40NDUxIDE1LjgwNTUgMzIuMzk1NEMxNS44MDU1IDMxLjM0NTYgMTQuOTMyNSAzMC40OTQ2IDEzLjg1NTUgMzAuNDk0NkMxMi43Nzg2IDMwLjQ5NDYgMTEuOTA1NSAzMS4zNDU2IDExLjkwNTUgMzIuMzk1NEMxMS45MDU1IDMzLjQ0NTEgMTIuNzc4NiAzNC4yOTYyIDEzLjg1NTUgMzQuMjk2MloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xOC40MTM4IDcuMTk2NzVMMTkuMjUxMiAyLjY2MDA1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMTE3ODYiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPHBhdGggZD0iTTIyLjI2NTYgNS41ODU1TDE5LjM0NjYgMi4xMTA5OUwxNS4zNzQ4IDQuMzcyOTIiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMi4xMTc4NiIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQuOTIwMiAyNi41NTI4TDE1LjczMzcgMjIuMDE2OSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyLjExNzg2IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+CjxwYXRoIGQ9Ik0xOC43NzI5IDI0LjkzMDRMMTUuODMgMjEuNDY3MUwxMS44NzAxIDIzLjc0MSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyLjExNzg2IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNi42MDc3IDE3LjE5OTZMMTcuNDIxMiAxMi42NjMzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMTE3ODYiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPHBhdGggZD0iTTIwLjQ1ODcgMTUuNThMMTcuNTI3NyAxMi4xMjhMMTMuNTY3OSAxNC4zOTA0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMTE3ODYiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTguMzI4NzEgMjYuMTU1NEw0Ljc1MTcxIDI4LjU4MTUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMi4wMTAxNyIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPgo8cGF0aCBkPSJNOC41NDM4MyAzMC4wODY1TDQuMzIwOCAyOC44NzM4TDQuNjMxODUgMjQuNTk0NCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyLjAxMDE3IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMS4zMjEzIDI4LjQyOTlMMjMuODA5NiAzMS45MjgyIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMDEwMTciIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPHBhdGggZD0iTTE5LjcxOCAzMi4wNDVMMjQuMTA4NSAzMi4zMzY1TDI1LjM1MjcgMjguMjQzOCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyLjAxMDE3IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yNS4zOTk5IDIxLjMyOTFMMjkuNzc4NCAyMi4wOTk2IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMDU4MDQiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPHBhdGggZD0iTTI2LjkwNzIgMjUuMDcyTDMwLjMwNDggMjIuMTkxOUwyOC4xNjM0IDE4LjM1NTciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMi4wNTgwNCIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMjQuMTE5NiAxMi44NjE1TDI4LjAxOTcgMTAuNzYzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMDU4MDQiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPHBhdGggZD0iTTI0LjMzNTcgOC44Mzk2NUwyOC40ODY5IDEwLjUxODhMMjcuNzA5MyAxNC44MjE2IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMDU4MDQiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTYuOTE2MzkgMTguMTU3MkwyLjUyNTg4IDE3LjQxMDEiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMi4wNTgwNCIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPgo8cGF0aCBkPSJNNC4xNzczMSAyMS4xNjQ1TDIgMTcuMzI4TDUuMzYxNjcgMTQuNDM2IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIuMDU4MDQiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExLjA3OTkgMTAuNjEyOUw4LjE0ODkzIDcuMzQ3NjkiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMi4wNTgwNCIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPgo8cGF0aCBkPSJNMTIuMjg5NyA2Ljc3NDk2TDcuODAzNDkgNi45NjE1Nkw3LjAxMzkyIDExLjI2NDkiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMi4wNTgwNCIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K"},"displayName":"Pinecone Vector Store","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1234,"icon":"file:convertToFile.svg","name":"n8n-nodes-base.convertToFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","encode","encoding","Move Binary Data","Binary","File","JSON","HTML","ICS","iCal","RTF","64","Base64"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Convert to File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjc2MTkgMkMxMy4yNDM3IDIgMTIuODIzNiAyLjQyMDA5IDEyLjgyMzYgMi45MzgzMVYxNS4yNTI2QzEzLjMxOTkgMTUuNDY0MyAxMy43ODUxIDE1Ljc3MiAxNC4xOTEgMTYuMTc1N0wyMS4yMjgzIDIzLjE3MzlDMjIuMDU0OCAyMy45OTU4IDIyLjUxOTUgMjUuMTEzMiAyMi41MTk1IDI2LjI3ODhDMjIuNTE5NSAyNy40NDQzIDIyLjA1NDggMjguNTYxOCAyMS4yMjgzIDI5LjM4MzdMMTQuMTkxIDM2LjM4MTlDMTMuNzg1IDM2Ljc4NTYgMTMuMzE5OSAzNy4wOTMyIDEyLjgyMzYgMzcuMzA1VjM3LjM1MjdDMTIuODIzNiAzNy44NzA5IDEzLjI0MzcgMzguMjkxIDEzLjc2MTkgMzguMjkxSDM5LjA2MTdDMzkuNTc5OSAzOC4yOTEgNDAgMzcuODcwOSA0MCAzNy4zNTI3TDQwIDE1Ljc5NEgyNy4xNDQzQzI2LjYyNjEgMTUuNzk0IDI2LjIwNiAxNS4zNzM5IDI2LjIwNiAxNC44NTU3VjJIMTMuNzYxOVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTI4Ljg2NDUgMkMyOC43NzgxIDIgMjguNzA4MSAyLjA3MDAyIDI4LjcwODEgMi4xNTYzOVYxMi44MjI3QzI4LjcwODEgMTMuMDgxOCAyOC45MTgyIDEzLjI5MTkgMjkuMTc3MyAxMy4yOTE5SDM5Ljg0MzZDMzkuOTMgMTMuMjkxOSA0MCAxMy4yMjE5IDQwIDEzLjEzNTVMNDAgMTIuNjI2M0M0MCAxMi4zNzc4IDM5LjkwMTQgMTIuMTM5NSAzOS43MjYgMTEuOTYzNkwzMC4wNjEgMi4yNzU2MUMyOS44ODUgMi4wOTkxNiAyOS42NDYgMiAyOS4zOTY3IDJIMjguODY0NVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTkuNzcyNjggMzQuNjAwM0M5LjA0MTg2IDMzLjg2NTQgOS4wNDUxNyAzMi42NzcyIDkuNzgwMDcgMzEuOTQ2NEwxMy42MzE1IDI4LjExNjNMMC45MzgzMTEgMjguMTE2M0MwLjQyMDA5NiAyOC4xMTYzIC0yLjI2NTE5ZS0wOCAyNy42OTYyIDAgMjcuMTc4TDguMjAyOTdlLTA4IDI1LjMwMTRDMS4wNDY4MmUtMDcgMjQuNzgzMiAwLjQyMDA5NSAyNC4zNjMxIDAuOTM4MzExIDI0LjM2MzFIMTMuNTUyOUw5Ljc4MDA3IDIwLjYxMTJDOS4wNDUxNyAxOS44ODA0IDkuMDQxODYgMTguNjkyMiA5Ljc3MjY4IDE3Ljk1NzNDMTAuNTAzNSAxNy4yMjI0IDExLjY5MTcgMTcuMjE5MSAxMi40MjY2IDE3Ljk0OTlMMTkuNDYzOSAyNC45NDgxQzE5LjgxODEgMjUuMzAwNCAyMC4wMTczIDI1Ljc3OTMgMjAuMDE3MyAyNi4yNzg4QzIwLjAxNzMgMjYuNzc4MyAxOS44MTgxIDI3LjI1NzIgMTkuNDYzOSAyNy42MDk1TDEyLjQyNjYgMzQuNjA3N0MxMS42OTE3IDM1LjMzODUgMTAuNTAzNSAzNS4zMzUyIDkuNzcyNjggMzQuNjAwM1oiIGZpbGw9IiMzQTQyRTkiLz4KPC9zdmc+Cg=="},"displayName":"Convert to File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1236,"icon":"file:aggregate.svg","name":"n8n-nodes-base.aggregate","codex":{"data":{"alias":["Aggregate","Combine","Flatten","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Aggregate"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="},"displayName":"Aggregate","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1243,"icon":"file:binary.svg","name":"@n8n/n8n-nodes-langchain.documentDefaultDataLoader","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.documentdefaultdataloader/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Document Loaders"]}}},"group":"[\"transform\"]","defaults":{"name":"Default Data Loader"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3NjgiIGhlaWdodD0iMTAyNCI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTAgOTYwVjY0aDU3NmwxOTIgMTkydjcwNHptNzA0LTY0MEw1MTIgMTI4SDY0djc2OGg2NDB6TTMyMCA1MTJIMTI4VjI1NmgxOTJ6bS02NC0xOTJoLTY0djEyOGg2NHptMCA0NDhoNjR2NjRIMTI4di02NGg2NFY2NDBoLTY0di02NGgxMjh6bTI1Ni0zMjBoNjR2NjRIMzg0di02NGg2NFYzMjBoLTY0di02NGgxMjh6bTY0IDM4NEgzODRWNTc2aDE5MnptLTY0LTE5MmgtNjR2MTI4aDY0eiIvPjwvc3ZnPg=="},"displayName":"Default Data Loader","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":48,"name":"AI RAG"}],"image":[]}}