{
  "workflow": {
    "id": 10836,
    "name": "Automated sales proposal & summary generator using GPT-4o, Sheets, Drive & Gmail",
    "views": 142,
    "recentViews": 0,
    "totalViews": 142,
    "createdAt": "2025-11-14T14:51:09.387Z",
    "description": "## 📘 Description:\nThis workflow automates the creation, storage, and reporting of personalized sales collateral for booked leads using GPT-4o, Google Sheets, Google Drive, and Gmail.\nIt pulls leads from a central sheet, filters booked ones, generates AI-written sales materials (summary, one-pager, and proposal), uploads the output to Drive, updates the sheet with proposal links, and emails a consolidated HTML summary to the marketing inbox.\nIt serves as a full-cycle AI-powered outreach content generator that transforms structured lead data into ready-to-use collateral in minutes.\n\n## ⚙️ What This Workflow Does (Step-by-Step)\n\n▶️ When Clicking ‘Execute Workflow’ (Manual Trigger)\n Starts the automation manually, fetching the latest lead records for batch processing.\n\n📊 Retrieve Lead Records from Google Sheets\n Pulls all lead details (company name, contact, email, booking status, etc.) from the outreach automation sheet used as the CRM base.\n\n🧩 Validate Lead Data Payload\n Checks each row for a valid email format.\n ✅ Valid entries proceed to booking filter.\n ❌ Invalid ones are logged to an error sheet.\n\n⚠️ Log Invalid Leads to Google Sheets\n Stores incomplete or malformed lead data in a separate tab for cleanup without interrupting execution.\n\n🎯 Filter for Booked Leads\n Isolates leads marked as BOOKED—the confirmed clients eligible for personalized collateral generation.\n\n⚙️ Configure GPT-4o Model (Azure OpenAI)\n Initializes the GPT-4o model to generate tailored text content based on lead data (company, title, industry, etc.).\n\n🧠 Generate Sales Collateral (AI)\n Uses GPT-4o to produce three structured assets per lead:\n 1️⃣ Sales Summary — a concise 80-word follow-up note.\n 2️⃣ One-Pager — headline + three selling points + CTA.\n 3️⃣ Proposal Draft — introduction, scope, timeline, and next steps.\n All outputs returned as structured JSON for parsing.\n\n🧹 Parse AI JSON Output\n Cleans and normalizes GPT-4o responses, ensuring JSON integrity and consistency across all generated materials.\n\n📄 Convert Collateral into Text Reports\n Compiles each lead’s collateral into a .txt report containing all three sections.\n Formatting uses clean dividers and labeled blocks for readability.\n\n☁️ Upload Sales Collateral to Google Drive\n Uploads each generated file to the collatral data Drive folder.\n Returns both view and download links for each report.\n\n🔗 Map Uploaded Files with Lead Data\n Cross-references uploaded files with corresponding leads using index mapping.\n Prepares structured data with Email, ProposalLink, and timestamps.\n\n✅ Update Lead Record with Proposal Link\n Updates the source Google Sheet, attaching each lead’s proposal link for traceability and internal access.\n\n🗂️ Aggregate Uploaded File Metadata\n Compiles an HTML-formatted list of uploaded reports (file names and links).\n Calculates total processed leads for the summary section.\n\n✉️ Generate Sales Summary Email (AI)\n Uses GPT-4o to create a clean HTML report section containing:\nTotal booked leads processed\nLinked list of uploaded files\nShort insights paragraph summarizing sales activity\n\n📧 Send Sales Summary Email via Gmail\n Delivers the HTML report to the internal inbox (e.g., newscctv22@gmail.com) with subject “Sales Collateral Summary.”\n The email is formatted for Gmail/Outlook rendering and ready for forwarding to management.\n\n## 🧩 Prerequisites\nGoogle Sheets and Drive OAuth setup (Techdome account)\nAzure OpenAI GPT-4o credentials\nGmail integration for report delivery\n\n## 💡 Key Benefits\n ✅ Eliminates manual collateral drafting for booked leads\n ✅ Auto-updates CRM sheets with proposal links\n ✅ Generates consistent, professional B2B materials in real time\n ✅ Provides an instant HTML summary for daily or weekly reporting\n ✅ Ensures full traceability of every proposal created\n\n## 👥 Perfect For\n- B2B marketing and pre-sales teams\n- Agencies managing client acquisition pipelines\n- Business development operations using Google Sheets as CRM\n- Teams seeking AI-driven, hands-off collateral generation and reporting\n",
    "workflow": {
      "id": "t6aeFxOJar5rX33K",
      "meta": {
        "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177"
      },
      "name": "Automated Sales Proposal & Summary Generator using GPT-4o, Sheets & Drive",
      "tags": [],
      "nodes": [
        {
          "id": "777285a5-1eef-449f-a871-d49ad20559ed",
          "name": "When clicking ‘Execute workflow’",
          "type": "n8n-nodes-base.manualTrigger",
          "position": [
            -320,
            80
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "c0b2ce0c-9203-4ebf-91b7-d653a32cda10",
          "name": "Retrieve Lead Records from Google Sheets",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            -32,
            80
          ],
          "parameters": {
            "options": {},
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 46113423,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit#gid=46113423",
              "cachedResultName": "outreach automation"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit?usp=drivesdk",
              "cachedResultName": "sample_leads_50"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4
        },
        {
          "id": "96d9cd04-cbed-4b76-b834-cfd9879a50c4",
          "name": "Validate Lead Data Payload",
          "type": "n8n-nodes-base.if",
          "position": [
            224,
            80
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "e2adb005-2b3c-4d1e-8445-442df1fe925a",
                  "operator": {
                    "type": "string",
                    "operation": "notEmpty",
                    "singleValue": true
                  },
                  "leftValue": "=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test({{ $json.Email }})",
                  "rightValue": ""
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "f62f1223-0844-4508-8890-81005623a89c",
          "name": "Log Invalid Leads to Google Sheets",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            560,
            704
          ],
          "parameters": {
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": "",
              "cachedResultUrl": "",
              "cachedResultName": ""
            },
            "documentId": {
              "__rl": true,
              "mode": "url",
              "value": ""
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.6
        },
        {
          "id": "8494847c-18f2-4acf-9df9-631cc6171385",
          "name": "Filter for Booked Leads",
          "type": "n8n-nodes-base.if",
          "position": [
            624,
            64
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "b7913fcd-b70c-47fd-a926-d09a0086b40e",
                  "operator": {
                    "name": "filter.operator.equals",
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json[\"Booking Status\"] }}",
                  "rightValue": "BOOKED"
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "aa70865b-a489-409b-a0f7-33c90c80be6d",
          "name": "Configure GPT-4o Model",
          "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
          "position": [
            1040,
            656
          ],
          "parameters": {
            "model": "gpt-4o",
            "options": {}
          },
          "credentials": {
            "azureOpenAiApi": {
              "id": "credential-id",
              "name": "azureOpenAiApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "03677f7a-0d0a-4cbc-9eef-90c3b152190c",
          "name": "Configure GPT-4o Model1",
          "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
          "position": [
            2592,
            304
          ],
          "parameters": {
            "model": "gpt-4o",
            "options": {}
          },
          "credentials": {
            "azureOpenAiApi": {
              "id": "credential-id",
              "name": "azureOpenAiApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "f895ef8e-f5fe-42d7-aa1c-78048a47e31f",
          "name": "Generate Sales Collateral (AI)",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            960,
            48
          ],
          "parameters": {
            "text": "=Generate personalized sales materials for this booked lead:\n\nCompany Name: {{ $json[\"Company Name\"] }}\nContact Person: {{ $json[\"Contact Person\"] }}\nJob Title: {{ $json[\"Job Title\"] }}\nEmail: {{ $json[\"Email\"] }}\nPhone: {{ $json[\"Phone\"] }}\nIndustry: {{ $json[\"Industry\"] }}\nLocation: {{ $json[\"Location\"] }}\nLead Source: {{ $json[\"Lead Source\"] }}\nBooking Status: {{ $json[\"Booking Status\"] }}\nClient Message: {{ $json[\"ClientMessage\"] }}\n\nInstructions:\n1. Write a short \"Sales Summary\" (under 80 words) for an email follow-up.\n2. Write a \"One-Pager\" (headline + 3 bullet points + short CTA).\n3. Write a \"Proposal Draft\" (intro, scope, timeline, and next steps).\n\nReturn everything as JSON:\n{\n  \"summary\": \"...\",\n  \"one_pager\": \"...\",\n  \"proposal\": \"...\"\n}\n",
            "options": {
              "systemMessage": "=You are an AI sales assistant that creates short, friendly, and professional B2B sales materials. \nYour task is to generate:\n1. A short Sales Summary (for email follow-up),\n2. A One-Pager (pitch overview),\n3. A Proposal Draft (detailed offer).\n\nEach output must be relevant to the lead’s company, job title, and industry. \nKeep tone professional and persuasive. \nOutput everything in JSON format with three fields: \"summary\", \"one_pager\", and \"proposal\".\n"
            },
            "promptType": "define"
          },
          "typeVersion": 2.1
        },
        {
          "id": "a47f8735-b2e1-419f-8d0a-a19c7571c284",
          "name": "Parse AI JSON Output",
          "type": "n8n-nodes-base.code",
          "position": [
            1328,
            48
          ],
          "parameters": {
            "jsCode": "// Process each item (one per lead)\nreturn items.map(item => {\n  // Get raw AI text output\n  let text = item.json.output || \"\";\n\n  // 🧹 Step 1: Clean the text (remove ```json, ```, and unwanted quotes)\n  text = text\n    .replace(/```json/g, \"\")   // remove ```json\n    .replace(/```/g, \"\")       // remove ```\n    .replace(/\\n/g, \" \")       // flatten newlines\n    .trim();\n\n  // 🧠 Step 2: Try parsing it as JSON\n  let parsed;\n  try {\n    parsed = JSON.parse(text);\n  } catch (err) {\n    parsed = { error: \"Invalid JSON\", raw: text };\n  }\n\n  // ✅ Step 3: Return clean structured data\n  return {\n    json: {\n      summary: parsed.summary || \"\",\n      one_pager: parsed.one_pager || parsed.onePager || \"\",\n      proposal: parsed.proposal || \"\",\n    }\n  };\n});\n"
          },
          "typeVersion": 2
        },
        {
          "id": "e9645b11-a174-4b8c-837a-965e96891ea5",
          "name": "Convert Collateral into Text Reports",
          "type": "n8n-nodes-base.code",
          "position": [
            1600,
            48
          ],
          "parameters": {
            "jsCode": "// n8n automatically provides Buffer, no need to import it\n\nreturn items.map((item, index) => {\n  const data = item.json;\n\n  // Build text report for each lead\n  let report = \"\";\n  report += `Lead Report #${index + 1}\\n`;\n  report += \"===================================\\n\\n\";\n\n  // === Summary ===\n  report += `📋 SALES SUMMARY\\n${data.summary}\\n\\n`;\n\n  // === One Pager ===\n  const onePager = data.one_pager || {};\n  report += `📄 ONE PAGER\\nHeadline: ${onePager.headline || \"N/A\"}\\n`;\n  if (onePager.bullet_points && onePager.bullet_points.length > 0) {\n    onePager.bullet_points.forEach(p => (report += `• ${p}\\n`));\n  }\n  report += `\\nCTA: ${onePager.cta || \"N/A\"}\\n\\n`;\n\n  // === Proposal ===\n  const proposal = data.proposal || {};\n  report += `📑 PROPOSAL\\n`;\n  report += `Introduction: ${proposal.introduction || proposal.intro || \"N/A\"}\\n\\n`;\n\n  // Scope\n  if (proposal.scope) {\n    report += `Scope:\\n`;\n    if (Array.isArray(proposal.scope)) {\n      proposal.scope.forEach(s => (report += `- ${s}\\n`));\n    } else {\n      report += `- ${proposal.scope}\\n`;\n    }\n  }\n\n  // Timeline\n  if (proposal.timeline) {\n    report += `\\nTimeline:\\n`;\n    if (Array.isArray(proposal.timeline)) {\n      proposal.timeline.forEach(t => (report += `- ${t}\\n`));\n    } else {\n      report += `- ${proposal.timeline}\\n`;\n    }\n  }\n\n  report += `\\nNext Steps:\\n${proposal.next_steps || \"N/A\"}\\n\\n`;\n  report += \"===================================\\n\";\n\n  // ✅ Convert text to binary data (no imports needed)\n  const buffer = Buffer.from(report, \"utf8\");\n\n  return {\n    json: {\n      fileName: `Lead_Report_${index + 1}.txt`,\n    },\n    binary: {\n      data: {\n        data: buffer.toString(\"base64\"),\n        mimeType: \"text/plain\",\n        fileName: `Lead_Report_${index + 1}.txt`,\n      },\n    },\n  };\n});\n"
          },
          "typeVersion": 2
        },
        {
          "id": "883fc755-e17b-4b52-a0bf-dad261233226",
          "name": "Upload Sales Collateral to Google Drive",
          "type": "n8n-nodes-base.googleDrive",
          "position": [
            1952,
            48
          ],
          "parameters": {
            "name": "={{$json[\"fileName\"]}}",
            "driveId": {
              "__rl": true,
              "mode": "list",
              "value": "My Drive"
            },
            "options": {},
            "folderId": {
              "__rl": true,
              "mode": "list",
              "value": "1WVD9VVLyV34NCynIizt9R2xnTP5SsTfj",
              "cachedResultUrl": "https://drive.google.com/drive/folders/1WVD9VVLyV34NCynIizt9R2xnTP5SsTfj",
              "cachedResultName": "collatral data"
            }
          },
          "credentials": {
            "googleDriveOAuth2Api": {
              "id": "credential-id",
              "name": "googleDriveOAuth2Api Credential"
            }
          },
          "typeVersion": 3
        },
        {
          "id": "7dc0e8b7-c4c0-402b-a07b-d08d17f0a310",
          "name": "Map Uploaded Files with Lead Data",
          "type": "n8n-nodes-base.code",
          "position": [
            2416,
            -560
          ],
          "parameters": {
            "jsCode": "// ✅ FIXED: Correct way to reference previous node data in n8n\n\n// Get all leads from the \"Filter for Booked Leads\" node\n// Use $items() function to get all items from a specific node\nconst allLeads = $('Filter for Booked Leads').all();\n\n// OR if that doesn't work, use this alternative:\n// const allLeads = $input.all();\n\nconsole.log(\"Total leads from Filter node:\", allLeads.length);\nconsole.log(\"Total files uploaded:\", items.length);\n\nreturn items.map((item, index) => {\n  \n  // 1️⃣ Get file link from current Upload file node output\n  const fileLink = \n    item.json.webViewLink || \n    item.json.webContentLink || \n    null;\n  \n  const fileName = item.json.name || `Lead_Report_${index + 1}.txt`;\n\n  // 2️⃣ Match with corresponding lead data by index\n  const leadData = allLeads[index]?.json || {};\n  \n  // 3️⃣ Extract lead information\n  const email = leadData.Email || null;\n  const companyName = leadData[\"Company Name\"] || \"N/A\";\n  const contactPerson = leadData[\"Contact Person\"] || \"N/A\";\n  const jobTitle = leadData[\"Job Title\"] || \"N/A\";\n\n  // 4️⃣ Debug logging\n  console.log(`Processing item ${index + 1}:`, {\n    email,\n    companyName,\n    hasFileLink: !!fileLink\n  });\n\n  // 5️⃣ Validation\n  if (!email || !fileLink) {\n    return { \n      json: { \n        skip: true, \n        message: `Missing data for ${companyName || 'Unknown Company'}`,\n        details: {\n          itemIndex: index + 1,\n          hasEmail: !!email,\n          hasFileLink: !!fileLink,\n          fileName: fileName,\n          email: email || \"MISSING\",\n          fileLink: fileLink || \"MISSING\"\n        }\n      } \n    };\n  }\n\n  // 6️⃣ Return complete data for Sheet update\n  return {\n    json: {\n      Email: email,\n      ProposalLink: fileLink,\n      FileName: fileName,\n      CompanyName: companyName,\n      ContactPerson: contactPerson,\n      JobTitle: jobTitle,\n      UpdatedAt: new Date().toISOString(),\n      skip: false\n    }\n  };\n});"
          },
          "typeVersion": 2
        },
        {
          "id": "96bf790b-3c72-4b5b-a6fc-441f54190bb7",
          "name": "Update Lead Record with Proposal Link",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            2848,
            -560
          ],
          "parameters": {
            "columns": {
              "value": {
                "Email": "={{ $json.Email }}",
                "Proposal Link": "={{ $json.ProposalLink }}"
              },
              "schema": [
                {
                  "id": "Company Name",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Company Name",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Contact Person",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Contact Person",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Job Title",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Job Title",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Email",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "Email",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Phone",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Phone",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Industry",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Industry",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Location",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Location",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Lead Source",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Lead Source",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Booking Status",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "Booking Status",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "ClientMessage",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "ClientMessage",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "LastUpdated",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "LastUpdated",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "ThreadID",
                  "type": "string",
                  "display": true,
                  "removed": true,
                  "required": false,
                  "displayName": "ThreadID",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Proposal Link",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "Proposal Link",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "defineBelow",
              "matchingColumns": [
                "Email"
              ],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "appendOrUpdate",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 46113423,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit#gid=46113423",
              "cachedResultName": "outreach automation"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit?usp=drivesdk",
              "cachedResultName": "sample_leads_50"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.6
        },
        {
          "id": "c7cb7d0c-649b-42e9-9240-80a145ead27f",
          "name": "Generate Sales Summary Email",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            2592,
            48
          ],
          "parameters": {
            "text": "=You are an expert sales reporting assistant.  \nBased on the uploaded lead reports below, write a short **HTML-formatted** sales summary email section.\n\nInput Details:\n- Total Booked Leads: {{ $json[\"totalLeads\"] || \"0\" }}\n- Uploaded Files:\n{{ $json[\"fileListText\"] || \"No uploaded file data available\" }}\n\nInstructions:\n1. Write the message in **HTML format**.\n2. Include:\n   - A title section (e.g., 📊 Sales Report Summary)\n   - A line showing total leads\n   - A bullet list with file names and links\n   - A short “Sales Insights” paragraph (2–4 sentences) based on the leads.\n3. Use professional formatting (e.g., <h2>, <ul>, <p> tags).\n4. Do not include <html> or <body> — only return the inner HTML section.\n5. Keep tone: short, friendly, and analytical.\n",
            "options": {
              "systemMessage": "=You are an AI assistant that generates professional HTML snippets for automated sales reports.  \nAlways return clean, valid HTML — no markdown, no JSON — just formatted HTML ready to embed in an email body.\n"
            },
            "promptType": "define"
          },
          "typeVersion": 2.1
        },
        {
          "id": "2a05b783-c46f-4af6-ad3d-bfff4846f41d",
          "name": "Send Sales Summary Email via Gmail",
          "type": "n8n-nodes-base.gmail",
          "position": [
            2992,
            48
          ],
          "webhookId": "0c82c299-6938-42ed-bda6-5007d79af34f",
          "parameters": {
            "sendTo": "=newscctv22@gmail.com",
            "message": "={{ $json.output }}",
            "options": {},
            "subject": "=Sales Collateral Summary "
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "credential-id",
              "name": "gmailOAuth2 Credential"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "e38eb667-93f5-49c7-8339-587d80081bdb",
          "name": "Aggregate Uploaded File Metadata",
          "type": "n8n-nodes-base.code",
          "position": [
            2320,
            48
          ],
          "parameters": {
            "jsCode": "let uploadedFiles = [];\nlet totalLeads = 0;\n\n// ✅ Array for structured file data (for downstream use)\nlet fileList = [];\n\nfor (const item of items) {\n  // 1️⃣ Get the real file name\n  const fileName =\n    item.json.name ||\n    item.binary?.data?.fileName ||\n    item.json.originalFilename ||\n    \"Unnamed_Report.txt\";\n\n  // 2️⃣ Get the Drive link\n  const link =\n    item.json.webViewLink ||\n    item.json.webContentLink ||\n    null;\n\n  // 3️⃣ If valid, push into both arrays\n  if (link) {\n    uploadedFiles.push(\n      `<li><a href=\"${link}\" target=\"_blank\" style=\"color:#1a73e8; text-decoration:none; font-weight:bold;\">${fileName}</a></li>`\n    );\n\n    fileList.push({\n      fileName,\n      link,\n    });\n\n    totalLeads++;\n  }\n}\n\n// 4️⃣ Build HTML list\nconst fileListText =\n  uploadedFiles.length > 0\n    ? `<ul>${uploadedFiles.join(\"\")}</ul>`\n    : \"<p>No files were uploaded for this report.</p>\";\n\n// 5️⃣ Return everything\nreturn [\n  {\n    json: {\n      totalLeads,\n      fileList,\n      fileListText,\n    },\n  },\n];\n"
          },
          "typeVersion": 2
        },
        {
          "id": "ff89bb1a-43f2-4818-9c2a-ae2380004c1d",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1056,
            -688
          ],
          "parameters": {
            "width": 736,
            "height": 528,
            "content": "## 🚀 Automated Sales Proposal & Summary Generator using GPT-4o, Sheets & Drive\nAutomatically generates personalized **Sales Collateral** (Summary, One-Pager, and Proposal) for each booked lead using GPT-4o.  \nUploads materials to Google Drive, updates lead records in Sheets, and sends a professional HTML summary email report.\n\n### 🔹 Workflow Highlights\n1️⃣ Fetch booked leads from Google Sheets  \n2️⃣ Validate data and skip invalid entries  \n3️⃣ Generate 3 AI-based materials (Summary, One-Pager, Proposal)  \n4️⃣ Convert AI output to formatted text files  \n5️⃣ Upload collateral to Google Drive  \n6️⃣ Map Drive links to corresponding leads in Google Sheets  \n7️⃣ Generate HTML Sales Summary Report  \n8️⃣ Send report to the marketing/sales inbox  \n\n### 🔹 Tools Used\n- Google Sheets → Lead database  \n- GPT-4o (Azure OpenAI) → Collateral generation & summary writing  \n- Google Drive → Document storage  \n- Gmail → Email delivery  \n- JavaScript → Parsing & file conversion\n"
          },
          "typeVersion": 1
        },
        {
          "id": "4938a972-69ef-482a-a151-3d240d1dbee0",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -112,
            -176
          ],
          "parameters": {
            "color": 7,
            "height": 480,
            "content": "## 🧾 Retrieve Lead Records from Google Sheets  \nFetches lead data (Company Name, Email, Booking Status, etc.) from the  sheet.  \nActs as the workflow’s entry point.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "f2783d33-207f-45ba-badc-45a8504aa3ef",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            160,
            -144
          ],
          "parameters": {
            "color": 7,
            "height": 384,
            "content": "## 🧩 Validate Lead Data Payload  \nChecks if lead records have a valid email address.  \n✅ Valid → Sent for further processing  \n❌ Invalid → Logged in the “Invalid Leads” sheet.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "36fd3162-6f11-4eb5-ad6d-38ef92c4cdce",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            512,
            384
          ],
          "parameters": {
            "color": 7,
            "height": 496,
            "content": "## ⚠️ Log Invalid Leads to Google Sheets  \nStores any malformed or missing lead entries for later cleanup.  \nPrevents workflow interruption due to bad data.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "6f580e0a-4ac0-4e11-a6ec-784e1ac12f89",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            560,
            -160
          ],
          "parameters": {
            "color": 7,
            "height": 416,
            "content": "## 🎯 Filter for Booked Leads  \nFilters only leads marked as “BOOKED”.  \nEnsures collateral generation only runs for confirmed clients.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "3e90c054-d86d-43a9-bc9a-7f8205cd180f",
          "name": "Sticky Note5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            960,
            400
          ],
          "parameters": {
            "color": 7,
            "height": 416,
            "content": "## ⚙️ Configure GPT-4o Model  \nConnects Azure OpenAI GPT-4o for downstream nodes.  \nUsed for both sales collateral and HTML summary generation.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "b5d84a31-27ec-4e6d-8aad-c3b353528b99",
          "name": "Sticky Note6",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            880,
            -224
          ],
          "parameters": {
            "color": 7,
            "width": 368,
            "height": 496,
            "content": "## 🧠 Generate Sales Collateral (AI)  \nGPT-4o generates 3 structured outputs per booked lead:\n1. **Sales Summary** — short overview  \n2. **One-Pager** — headline + 3 bullet points + CTA  \n3. **Proposal Draft** — intro, scope, timeline, and next steps  \nAll returned as structured JSON.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "79046b82-31d1-4167-a3ca-c6b284414e1b",
          "name": "Sticky Note7",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1264,
            -224
          ],
          "parameters": {
            "color": 7,
            "width": 208,
            "height": 496,
            "content": "## 🧹 Parse AI JSON Output  \nCleans and parses the GPT-4o output into usable JSON keys:  \n- `summary`  \n- `one_pager`  \n- `proposal`  \nHandles invalid or raw responses safely.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "78156c47-0768-4e0c-9510-b8bc9484fa7b",
          "name": "Sticky Note8",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1520,
            -192
          ],
          "parameters": {
            "color": 7,
            "height": 448,
            "content": "## 📄 Convert Collateral into Text Reports  \nConverts parsed AI output into `.txt` files using Node.js Buffer.  \nEach report contains Summary, One-Pager, and Proposal sections, formatted for readability.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "04ac0c9f-379a-48a1-87db-53e617d46318",
          "name": "Sticky Note9",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1872,
            -240
          ],
          "parameters": {
            "color": 7,
            "height": 528,
            "content": "## ☁️ Upload Sales Collateral to Google Drive  \nUploads each generated `.txt` collateral file to the “collatral data” folder.  \nReturns Google Drive view & download links for each file.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "7b809214-d5b2-4dd1-a78a-92b229118d98",
          "name": "Sticky Note10",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2256,
            -192
          ],
          "parameters": {
            "color": 7,
            "height": 480,
            "content": "## 🗂️ Aggregate Uploaded File Metadata  \nBuilds an HTML-formatted list of all uploaded collateral files.  \nIncludes file names, links, and lead count for summary email generation.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "1add2ee3-c9a5-4ff0-9063-818d04019863",
          "name": "Sticky Note11",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2352,
            -864
          ],
          "parameters": {
            "color": 7,
            "height": 512,
            "content": "## 🔗 Map Uploaded Files with Lead Data  \nMatches each uploaded file with its corresponding lead using index mapping.  \nPrepares structured data (Email, ProposalLink, FileName, etc.) for updating the sheet.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "eaf359c6-89fb-4048-9daf-60de8aaf94c4",
          "name": "Sticky Note12",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2768,
            -816
          ],
          "parameters": {
            "color": 7,
            "height": 448,
            "content": "## ✅ Update Lead Record with Proposal Link  \nUpdates each lead’s Google Sheet row with its proposal file link.  \nKeeps all generated collateral traceable directly from the CRM.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "f2049739-3eb0-4fcc-985c-653c637d4155",
          "name": "Sticky Note13",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2928,
            -224
          ],
          "parameters": {
            "color": 7,
            "height": 480,
            "content": "## 📧 Send Sales Summary Email via Gmail  \nDelivers the AI-generated HTML report to the marketing/sales inbox.  \nSubject: “Sales Collateral Summary.”  \nAutomatically formatted for Gmail/Outlook rendering.\n"
          },
          "typeVersion": 1
        },
        {
          "id": "1cefbc60-68af-4210-89ee-c4192987b53b",
          "name": "Sticky Note14",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2528,
            -224
          ],
          "parameters": {
            "color": 7,
            "width": 320,
            "height": 688,
            "content": "## ✉️ Generate Sales Summary Email (AI)  \nUses GPT-4o to create a **HTML-formatted sales summary email** that includes:  \n- Total booked leads processed  \n- List of uploaded proposal files (with links)  \n- 2–4 sentence insights section  \n- Professional layout (uses <h2>, <ul>, <p> tags)\n"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "6cc051e3-8841-4c67-8d00-640e72d4bb6b",
      "connections": {
        "Parse AI JSON Output": {
          "main": [
            [
              {
                "node": "Convert Collateral into Text Reports",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Configure GPT-4o Model": {
          "ai_languageModel": [
            [
              {
                "node": "Generate Sales Collateral (AI)",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Configure GPT-4o Model1": {
          "ai_languageModel": [
            [
              {
                "node": "Generate Sales Summary Email",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Filter for Booked Leads": {
          "main": [
            [
              {
                "node": "Generate Sales Collateral (AI)",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Validate Lead Data Payload": {
          "main": [
            [
              {
                "node": "Filter for Booked Leads",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Log Invalid Leads to Google Sheets",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Sales Summary Email": {
          "main": [
            [
              {
                "node": "Send Sales Summary Email via Gmail",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Sales Collateral (AI)": {
          "main": [
            [
              {
                "node": "Parse AI JSON Output",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Aggregate Uploaded File Metadata": {
          "main": [
            [
              {
                "node": "Generate Sales Summary Email",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Map Uploaded Files with Lead Data": {
          "main": [
            [
              {
                "node": "Update Lead Record with Proposal Link",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Convert Collateral into Text Reports": {
          "main": [
            [
              {
                "node": "Upload Sales Collateral to Google Drive",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "When clicking ‘Execute workflow’": {
          "main": [
            [
              {
                "node": "Retrieve Lead Records from Google Sheets",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Upload Sales Collateral to Google Drive": {
          "main": [
            [
              {
                "node": "Aggregate Uploaded File Metadata",
                "type": "main",
                "index": 0
              },
              {
                "node": "Map Uploaded Files with Lead Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Retrieve Lead Records from Google Sheets": {
          "main": [
            [
              {
                "node": "Validate Lead Data Payload",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 31,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 2
        },
        "n8n-nodes-base.code": {
          "count": 4
        },
        "n8n-nodes-base.gmail": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 15
        },
        "n8n-nodes-base.googleDrive": {
          "count": 1
        },
        "n8n-nodes-base.googleSheets": {
          "count": 3
        },
        "n8n-nodes-base.manualTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.agent": {
          "count": 2
        },
        "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi": {
          "count": 2
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Rahul Joshi",
      "username": "rahul08",
      "bio": "Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.\n\n",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/callrahul/"
      ],
      "avatar": "https://gravatar.com/avatar/b6cf57822463143589b36ada06fbf6cb1509223a740fae3160b28f1ce41ccc12?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 18,
        "icon": "file:googleSheets.svg",
        "name": "n8n-nodes-base.googleSheets",
        "codex": {
          "data": {
            "alias": [
              "CSV",
              "Sheet",
              "Spreadsheet",
              "GS"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/",
                  "icon": "❤️",
                  "label": "Love at first sight: Ricardo’s n8n journey"
                },
                {
                  "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-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/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/",
                  "icon": "⏲",
                  "label": "Creating triggers for n8n workflows using polling"
                },
                {
                  "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/migrating-community-metrics-to-orbit-using-n8n/",
                  "icon": "📈",
                  "label": "Migrating Community Metrics to Orbit using n8n"
                },
                {
                  "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/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/",
                  "icon": "🍔",
                  "label": "How Honest Burgers Use Automation to Save $100k per year"
                },
                {
                  "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/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-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/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Data & Storage",
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\",\"output\"]",
        "defaults": {
          "name": "Google Sheets"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="
        },
        "displayName": "Google Sheets",
        "typeVersion": 5,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          },
          {
            "id": 4,
            "name": "Productivity"
          }
        ]
      },
      {
        "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": 58,
        "icon": "file:googleDrive.svg",
        "name": "n8n-nodes-base.googleDrive",
        "codex": {
          "data": {
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "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/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Data & Storage"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Google Drive"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Google Drive",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          }
        ]
      },
      {
        "id": 356,
        "icon": "file:gmail.svg",
        "name": "n8n-nodes-base.gmail",
        "codex": {
          "data": {
            "alias": [
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "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/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "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-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/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/",
                  "icon": "💪",
                  "label": "Using Automation to Boost Productivity in the Workplace"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Gmail"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"
        },
        "displayName": "Gmail",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "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": 838,
        "icon": "fa:mouse-pointer",
        "name": "n8n-nodes-base.manualTrigger",
        "codex": {
          "data": {
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "When clicking ‘Execute workflow’",
          "color": "#909298"
        },
        "iconData": {
          "icon": "mouse-pointer",
          "type": "icon"
        },
        "displayName": "Manual Trigger",
        "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": 1253,
        "icon": "file:azure.svg",
        "name": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatazureopenai/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Language Models",
                "Root Nodes"
              ],
              "Language Models": [
                "Chat Models (Recommended)"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Azure OpenAI Chat Model"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMjQyIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTguOTcyJSIgeDI9IjM3LjE5MSUiIHkxPSI3LjQxMSUiIHkyPSIxMDMuNzYyJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzExNEE4QiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzA2NjlCQyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNTkuNzE5JSIgeDI9IjUyLjY5MSUiIHkxPSI1Mi4zMTMlIiB5Mj0iNTQuODY0JSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1vcGFjaXR5PSIuMyIvPjxzdG9wIG9mZnNldD0iNy4xJSIgc3RvcC1vcGFjaXR5PSIuMiIvPjxzdG9wIG9mZnNldD0iMzIuMSUiIHN0b3Atb3BhY2l0eT0iLjEiLz48c3RvcCBvZmZzZXQ9IjYyLjMlIiBzdG9wLW9wYWNpdHk9Ii4wNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIzNy4yNzklIiB4Mj0iNjIuNDczJSIgeTE9IjQuNiUiIHkyPSI5OS45NzklIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjM0NDQkY0Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMjg5MkRGIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0idXJsKCNhKSIgZD0iTTg1LjM0My4wMDNoNzUuNzUzTDgyLjQ1NyAyMzNhMTIuMDggMTIuMDggMCAwIDEtMTEuNDQyIDguMjE2SDEyLjA2QTEyLjA2IDEyLjA2IDAgMCAxIC42MzMgMjI1LjMwM0w3My44OTggOC4yMTlBMTIuMDggMTIuMDggMCAwIDEgODUuMzQzIDB6Ii8+PHBhdGggZmlsbD0iIzAwNzhENCIgZD0iTTE5NS40MjMgMTU2LjI4Mkg3NS4yOTdhNS41NiA1LjU2IDAgMCAwLTMuNzk2IDkuNjI3bDc3LjE5IDcyLjA0N2ExMi4xNCAxMi4xNCAwIDAgMCA4LjI4IDMuMjZoNjguMDJ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTg1LjM0My4wMDNhMTEuOTggMTEuOTggMCAwIDAtMTEuNDcxIDguMzc2TC43MjMgMjI1LjEwNWExMi4wNDUgMTIuMDQ1IDAgMCAwIDExLjM3IDE2LjExMmg2MC40NzVhMTIuOTMgMTIuOTMgMCAwIDAgOS45MjEtOC40MzdsMTQuNTg4LTQyLjk5MSA1Mi4xMDUgNDguNmExMi4zMyAxMi4zMyAwIDAgMCA3Ljc1NyAyLjgyOGg2Ny43NjZsLTI5LjcyMS04NC45MzUtODYuNjQzLjAyTDE2MS4zNy4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTE4Mi4wOTggOC4yMDdBMTIuMDYgMTIuMDYgMCAwIDAgMTcwLjY3LjAwM0g4Ni4yNDVjNS4xNzUgMCA5Ljc3MyAzLjMwMSAxMS40MjggOC4yMDRMMTcwLjk0IDIyNS4zYTEyLjA2MiAxMi4wNjIgMCAwIDEtMTEuNDI4IDE1LjkyaDg0LjQyOWExMi4wNjIgMTIuMDYyIDAgMCAwIDExLjQyNS0xNS45MnoiLz48L3N2Zz4="
        },
        "displayName": "Azure OpenAI Chat Model",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 39,
        "name": "CRM"
      },
      {
        "id": 51,
        "name": "Multimodal AI"
      }
    ],
    "image": []
  }
}