{"workflow":{"id":14982,"name":"Generate PDF pricing proposals from Excel with Gotenberg and Outlook","views":0,"recentViews":0,"totalViews":0,"createdAt":"2026-04-10T16:45:25.016Z","description":"## How it works\n\n1. **Webhook Trigger** — A web form POSTs prospect details, selected services, discount level, and requestor info to the webhook endpoint.\n2. **Fetch Pricing Sheet** — Retrieves all rows from your `pricing_request.xlsx` Excel table in OneDrive/SharePoint.\n3. **Process & Price** — Filters the pricing rows to the selected services, applies the correct Discount / Retail / Premium price tier, and calculates the total.\n4. **Build HTML** — Renders a fully branded HTML proposal document with cover info, line-item pricing table, terms, and a signature block.\n5. **Convert to PDF** — Sends the HTML to a self-hosted [Gotenberg](https://gotenberg.dev) instance, which returns a print-ready PDF.\n6. **Email Proposal** — Delivers the PDF as an attachment via Gmail OAuth2 to the requester and any internal recipients you configure.","workflow":{"id":"E5QvVu7b1SGiH1EF","meta":{"instanceId":"a400cf39f950f544c3123da4ba896ff38a290fe22e28551b2452d8ff6b9b7235","templateCredsSetupCompleted":true},"name":"Pricing Proposal Generator","tags":[],"nodes":[{"id":"de5e1a55-89b9-4d5f-a066-790a84ed7b4b","name":"Overview","type":"n8n-nodes-base.stickyNote","position":[0,0],"parameters":{"width":420,"height":1012,"content":"## 📄 Pricing Proposal Generator\n\nGenerates a branded PDF pricing proposal on demand and delivers it by email.\n\n### How it works\n1. **Webhook Trigger** — A web form POSTs prospect details, selected services, discount level, and requestor info to the webhook endpoint.\n2. **Fetch Pricing Sheet** — Retrieves all rows from your `pricing_request.xlsx` Excel table in OneDrive/SharePoint.\nDownload template: https://iportgpt.com/n8n_assets/pricing_request.xlsx\n3. **Process & Price** — Filters the pricing rows to the selected services, applies the correct Discount / Retail / Premium price tier, and calculates the total.\n4. **Build HTML** — Renders a fully branded HTML proposal document with cover info, line-item pricing table, terms, and a signature block.\n5. **Convert to PDF** — Sends the HTML to a self-hosted [Gotenberg](https://gotenberg.dev) instance, which returns a print-ready PDF.\n6. **Email Proposal** — Delivers the PDF as an attachment via Gmail OAuth2 to the requester and any internal recipients you configure.\n\n### Setup\n1. **Webhook** — Set the `path` field to a value that matches your form POST URL (e.g. `pricing-request`).\n2. **Fetch Pricing Sheet** — Connect a Microsoft Excel credential, then select your OneDrive/SharePoint workbook, worksheet, and table.\n3. **Process & Price** — Confirm the column names in the Code node match your Excel table (`Title`, `Description`, `Cost`, `Discount`, `Retail`, `Premium`, `Unit`).\n4. **Build HTML Proposal** — Replace `YOUR_LOGO_URL` and brand color variables with your own values.\n5. **Gotenberg → PDF** — Update the URL to point to your Gotenberg instance and attach a Basic Auth credential.\n6. **Email Proposal** — Connect a Gmail OAuth2 credential. Update `YOUR_INTERNAL_EMAIL` in the `sendTo` field.\n\n### Customization\n- Add new price tiers by extending the `switch` block in **Process & Price**.\n- Adjust proposal branding in **Build HTML Proposal** by updating the CSS color variables and logo URL.\n- Validity period defaults to 30 days — change the `30` multiplier in **Build HTML Proposal** and the email body text."},"typeVersion":1},{"id":"b81eea6c-155c-46c1-a311-5a5882db2f92","name":"Section – Intake","type":"n8n-nodes-base.stickyNote","position":[448,0],"parameters":{"color":7,"width":180,"height":448,"content":"## 1 · Intake\nReceives the form POST from your web form."},"typeVersion":1},{"id":"d0a5d8c9-bb5b-4888-b5c0-718268f8e7cd","name":"Section – Data","type":"n8n-nodes-base.stickyNote","position":[640,0],"parameters":{"color":7,"width":180,"height":448,"content":"## 2 · Data\nPulls all rows from the pricing Excel table in OneDrive."},"typeVersion":1},{"id":"db0e3bcc-1e53-4fdd-b9f8-1346713b1f0d","name":"Section – Processing","type":"n8n-nodes-base.stickyNote","position":[832,0],"parameters":{"color":7,"width":196,"height":448,"content":"## 3 · Processing\nFilters services, applies price tier (Discount / Retail / Premium), and calculates total."},"typeVersion":1},{"id":"c3957feb-4194-4e72-84f2-70f16bc5f91a","name":"Section – Build","type":"n8n-nodes-base.stickyNote","position":[1040,0],"parameters":{"color":7,"width":180,"height":448,"content":"## 4 · Proposal Build\nRenders the branded HTML document for PDF conversion.\n\nUpdate `YOUR_LOGO_URL` and the brand color variables to match your identity."},"typeVersion":1},{"id":"ae3f4da8-02bd-4bdf-816d-5cfd87365a2b","name":"Section – PDF","type":"n8n-nodes-base.stickyNote","position":[1232,0],"parameters":{"color":7,"width":180,"height":448,"content":"## 5 · PDF Conversion\nSelf-hosted [Gotenberg](https://gotenberg.dev) converts HTML → PDF.\n\nUpdate the URL to your Gotenberg instance and attach a **Basic Auth** credential."},"typeVersion":1},{"id":"af29b910-ddde-40ab-b3a1-541895ebdf75","name":"Section – Email","type":"n8n-nodes-base.stickyNote","position":[1424,0],"parameters":{"color":7,"width":200,"height":448,"content":"## 6 · Email Delivery\nSends the PDF to the requester via Gmail OAuth2.\n\nReplace `YOUR_INTERNAL_EMAIL` in the **Email Proposal** node with your own address."},"typeVersion":1},{"id":"b155c9f1-3352-4ebe-8b25-46397e9a6a52","name":"Pricing Request Webhook","type":"n8n-nodes-base.webhook","position":[480,256],"webhookId":"5a1ac639-791a-4d25-bfd5-202424055e3f","parameters":{"path":"pricing-request","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"8cdce527-7d8d-4aeb-97b0-8b2d7fc2b6ee","name":"Fetch Pricing Sheet","type":"n8n-nodes-base.microsoftExcel","position":[688,256],"parameters":{"table":{"__rl":true,"mode":"list","value":"","cachedResultName":"Table1"},"filters":{},"resource":"table","workbook":{"__rl":true,"mode":"list","value":"","cachedResultName":"pricing_request.xlsx"},"operation":"getRows","returnAll":true,"worksheet":{"__rl":true,"mode":"list","value":"","cachedResultName":"Sheet1"}},"credentials":{"microsoftExcelOAuth2Api":{"id":"credential-id","name":"Microsoft Excel account"}},"typeVersion":2.2},{"id":"711c31c7-eb06-4c01-90d6-86637325d70f","name":"Process & Price","type":"n8n-nodes-base.code","position":[880,256],"parameters":{"jsCode":"// Extract form data\n// Expected fields: prospectName, date, services (array or string),\n// discountLevel ('Discount' | 'Retail' | 'Premium'),\n// requestorName (format: \"Full Name (user@example.com)\")\nconst formData = $('Pricing Request Webhook').item.json.body;\nconst prospectName   = formData.prospectName;\nconst date           = formData.date;\nconst selectedServices = Array.isArray(formData.services) ? formData.services : [formData.services];\nconst discountLevel  = formData.discountLevel; // 'Discount', 'Retail', or 'Premium'\nconst requestorInfo  = formData.requestorName; // e.g. \"Jane Smith (user@example.com)\"\n\n// Extract email from requestor info\nconst emailMatch    = requestorInfo.match(/\\(([^)]+)\\)/);\nconst requestorEmail = emailMatch ? emailMatch[1] : '';\nconst requestorName  = requestorInfo.replace(/\\s*\\([^)]*\\)/, '').trim();\n\n// Get pricing data from Excel node\n// Expected columns: Title, Description, Cost, Discount, Retail, Premium, Unit\nconst pricingData = $('Fetch Pricing Sheet').all();\n\n// Filter pricing data for selected services (match on 'Title' column)\nconst filteredPricing = pricingData.filter(item => {\n  const service = item.json.Title;\n  return selectedServices.includes(service);\n});\n\n// Map pricing based on discount level\nconst processedPricing = filteredPricing.map(item => {\n  const data = item.json;\n  let price;\n  switch (discountLevel) {\n    case 'Discount': price = data.Discount; break;\n    case 'Premium':  price = data.Premium;  break;\n    default:         price = data.Retail;\n  }\n  return {\n    service:     data.Title,\n    description: data.Description,\n    cost:        data.Cost,\n    price:       price,\n    unit:        data.Unit\n  };\n});\n\n// Calculate total\nconst total = processedPricing.reduce((sum, item) => sum + (parseFloat(item.price) || 0), 0);\n\nreturn [{\n  json: {\n    prospectName,\n    date,\n    requestorName,\n    requestorEmail,\n    discountLevel,\n    selectedServices,\n    pricingItems: processedPricing,\n    total: total.toFixed(2)\n  }\n}];"},"typeVersion":2},{"id":"ce1c5eb0-8bc9-432f-954e-079bae0b95b3","name":"Build HTML Proposal","type":"n8n-nodes-base.code","position":[1088,256],"parameters":{"jsCode":"/**\n * Pricing Proposal – HTML Builder\n * Replace the variables below with your own branding before activating.\n */\n\nconst data = $json;\n\n// ── BRANDING – update these ──────────────────────────────────────────────────\nconst logoUrl    = 'YOUR_LOGO_URL';          // e.g. https://example.com/logo.png\nconst companyName = 'Your Company Name';\nconst tagline    = 'A division of Your Parent Company';\nconst colorNavy  = '#002657';\nconst colorBlue  = '#0021a5';\nconst colorOrange = '#fa4616';\nconst colorGold  = '#f2a900';\nconst colorDark  = '#343741';\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst displayDate = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });\nconst validUntil  = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });\n\nconst pricingRows = data.pricingItems.map((item, index) =>\n  '<tr style=\"' + (index % 2 === 0 ? '' : 'background-color:#f9f9f9;') + '\">'\n  + '<td style=\"padding:12px;border-bottom:1px solid #eee;font-weight:bold;color:' + colorNavy + ';\">' + item.service + '</td>'\n  + '<td style=\"padding:12px;border-bottom:1px solid #eee;font-size:11px;\">' + item.description + '</td>'\n  + '<td style=\"padding:12px;border-bottom:1px solid #eee;text-align:center;\">' + item.unit + '</td>'\n  + '<td style=\"padding:12px;border-bottom:1px solid #eee;text-align:right;font-weight:bold;color:' + colorBlue + ';\">$' + parseFloat(item.price).toFixed(2) + '</td>'\n  + '</tr>'\n).join('');\n\nconst htmlContent = '<!DOCTYPE html>'\n+ '<html lang=\"en\"><head><meta charset=\"UTF-8\">'\n+ '<title>Pricing Proposal - ' + data.prospectName + '</title>'\n+ '<style>'\n+ '@page{size:letter;margin:15mm;}'\n+ 'body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.5;color:' + colorDark + ';margin:0;padding:0;}'\n+ '.header{display:flex;justify-content:space-between;align-items:center;border-bottom:4px solid ' + colorOrange + ';padding-bottom:20px;margin-bottom:30px;}'\n+ '.logo{height:70px;width:auto;}'\n+ '.proposal-title{font-size:32px;font-weight:900;color:' + colorNavy + ';margin:10px 0;text-transform:uppercase;letter-spacing:-1px;}'\n+ '.cover-info{background-color:#fcfcfc;padding:25px;border-radius:4px;border:1px solid #eee;margin:20px 0;}'\n+ '.info-row{display:flex;margin:8px 0;font-size:14px;}'\n+ '.label{font-weight:bold;color:' + colorBlue + ';width:150px;text-transform:uppercase;font-size:11px;}'\n+ '.pricing-table{width:100%;border-collapse:collapse;margin:25px 0;}'\n+ '.pricing-table th{background-color:' + colorNavy + ';color:white;padding:15px 12px;text-align:left;text-transform:uppercase;font-size:11px;}'\n+ '.legal-section{margin-top:40px;padding:20px;background-color:#fffcf5;border-left:5px solid ' + colorGold + ';font-size:12px;line-height:1.7;}'\n+ '.signature-section{margin-top:40px;padding:25px;background-color:#f9f9f9;border-radius:4px;}'\n+ '.sig-line{border-bottom:2px solid ' + colorDark + ';display:inline-block;width:100%;margin-top:30px;}'\n+ '</style></head><body>'\n+ '<div class=\"header\">'\n+ '<img src=\"' + logoUrl + '\" class=\"logo\" alt=\"' + companyName + '\">'\n+ '<div style=\"text-align:right;color:' + colorNavy + ';font-size:10px;font-weight:bold;\">' + tagline + '</div>'\n+ '</div>'\n+ '<div class=\"proposal-title\">Pricing Proposal</div>'\n+ '<div class=\"cover-info\">'\n+ '<div class=\"info-row\"><span class=\"label\">Prepared For:</span><span><strong>' + data.prospectName + '</strong></span></div>'\n+ '<div class=\"info-row\"><span class=\"label\">Date:</span><span>' + displayDate + '</span></div>'\n+ '<div class=\"info-row\"><span class=\"label\">Prepared By:</span><span>' + data.requestorName + '</span></div>'\n+ '<div class=\"info-row\"><span class=\"label\">Valid Until:</span><span>' + validUntil + '</span></div>'\n+ '</div>'\n+ '<div>'\n+ '<h2 style=\"color:' + colorNavy + ';border-bottom:2px solid ' + colorOrange + ';padding-bottom:10px;font-size:18px;\">Proposed Services &amp; Pricing</h2>'\n+ '<table class=\"pricing-table\"><thead><tr>'\n+ '<th>Service</th><th>Description</th><th style=\"text-align:center;\">Unit</th><th style=\"text-align:right;\">Price</th>'\n+ '</tr></thead><tbody>' + pricingRows + '</tbody></table>'\n+ '</div>'\n+ '<div class=\"legal-section\">'\n+ '<h3 style=\"color:' + colorNavy + ';margin-top:0;font-size:14px;\">Terms &amp; Conditions</h3>'\n+ '<p>This pricing proposal is valid for <strong>thirty (30) days</strong>. After this period, all prices are subject to change. A binding contract is only created upon execution of a separate Services Agreement.</p>'\n+ '</div>'\n+ '<div class=\"signature-section\">'\n+ '<h3 style=\"color:' + colorNavy + ';margin-top:0;font-size:14px;\">Authorization &amp; Acceptance</h3>'\n+ '<table style=\"width:100%;margin-top:20px;\"><tr>'\n+ '<td style=\"width:60%;padding-right:20px;\"><div class=\"sig-line\"></div><div style=\"font-size:10px;color:' + colorDark + ';margin-top:5px;\">Client Authorized Signature</div></td>'\n+ '<td style=\"width:30%;\"><div class=\"sig-line\"></div><div style=\"font-size:10px;color:' + colorDark + ';margin-top:5px;\">Date</div></td>'\n+ '</tr><tr><td colspan=\"2\" style=\"padding-top:20px;\">'\n+ '<div class=\"sig-line\" style=\"width:60%;\"></div>'\n+ '<div style=\"font-size:10px;color:' + colorDark + ';margin-top:5px;\">Printed Name &amp; Title</div>'\n+ '</td></tr></table></div>'\n+ '</body></html>';\n\nconst htmlBuffer = Buffer.from(htmlContent, 'utf-8');\n\nreturn [{\n  binary: {\n    data: {\n      data: htmlBuffer.toString('base64'),\n      mimeType: 'text/html',\n      fileName: 'index.html',\n      fileExtension: 'html'\n    }\n  },\n  json: {\n    htmlContent:    htmlContent,\n    fileName:       data.prospectName.replace(/[^a-zA-Z0-9]/g, '-') + '-Pricing-Proposal-' + new Date().toISOString().split('T')[0] + '.pdf',\n    prospectName:   data.prospectName,\n    requestorEmail: data.requestorEmail,\n    requestorName:  data.requestorName\n  }\n}];"},"typeVersion":2},{"id":"a491e6b8-873f-4fb0-88a4-9d1d6b49c7d0","name":"Gotenberg → PDF","type":"n8n-nodes-base.httpRequest","position":[1280,256],"parameters":{"url":"https://YOUR_GOTENBERG_INSTANCE/forms/chromium/convert/html","method":"POST","options":{"response":{"response":{"responseFormat":"file"}}},"sendBody":true,"contentType":"multipart-form-data","sendHeaders":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"index.html","parameterType":"formBinaryData","inputDataFieldName":"=data"}]},"genericAuthType":"httpBasicAuth","headerParameters":{"parameters":[{"name":"Gotenberg-Output-Filename","value":"={{ $('Build HTML Proposal').item.json.fileName }}"}]}},"typeVersion":4.4},{"id":"01262f19-5231-446e-8ea3-4d2bdf0ea0e4","name":"Send a message","type":"n8n-nodes-base.microsoftOutlook","position":[1472,256],"webhookId":"74e6c115-edfd-4d1c-ad4b-32a0cb62ba32","parameters":{"subject":"=Pricing Proposal prepared for {{ $('Build HTML Proposal').item.json.prospectName }}\n","bodyContent":"=Please find the attached pricing proposal for {{ $('Build HTML Proposal').item.json.prospectName }}, requested by {{ $('Build HTML Proposal').item.json.requestorName }}. The attached pricing is valid for 30 days.\n","toRecipients":"=YOUR_INTERNAL_EMAIL;{{ $('Build HTML Proposal').item.json.requestorEmail }}\n","additionalFields":{"attachments":{"attachments":[{"binaryPropertyName":"data"}]}}},"credentials":{"microsoftOutlookOAuth2Api":{"id":"credential-id","name":"Training Outlook"}},"typeVersion":2}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","executionOrder":"v1"},"versionId":"69b14a64-11a4-40a0-8f23-4bebf29fb3c3","connections":{"Process & Price":{"main":[[{"node":"Build HTML Proposal","type":"main","index":0}]]},"Gotenberg → PDF":{"main":[[{"node":"Send a message","type":"main","index":0}]]},"Build HTML Proposal":{"main":[[{"node":"Gotenberg → PDF","type":"main","index":0}]]},"Fetch Pricing Sheet":{"main":[[{"node":"Process & Price","type":"main","index":0}]]},"Pricing Request Webhook":{"main":[[{"node":"Fetch Pricing Sheet","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":13,"nodeTypes":{"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.microsoftExcel":{"count":1},"n8n-nodes-base.microsoftOutlook":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"AI Solutions","username":"legalgpts","bio":"","verified":true,"links":["https://aisolutions.legal"],"avatar":"https://gravatar.com/avatar/a9eef77b59c344b82511050992dfdf8461df3904a97bd238c0056ce4f03c4ffa?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":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":322,"icon":"file:excel.svg","name":"n8n-nodes-base.microsoftExcel","codex":{"data":{"alias":["_Excel","Excel","Sheet","CSV","Spreadsheet"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.microsoftexcel/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/microsoft/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Microsoft Excel 365"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0iIzAyNzIzQiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik00My4xIDIwLjIyN2g5LjUxMnY0LjY5MmgtOS41MTN6bTAtNy4wMzRoOS41MTJ2NC42OWgtOS41MTN6bTAgMTQuMjI3aDkuNTEydjQuNjkxaC05LjUxM3ptMCA3LjAzNmg5LjUxMnY0LjY5MWgtOS41MTN6Ii8+PHBhdGggZD0iTTQzLjEgNDEuNjQ5aDkuNTEydjQuNjloLTkuNTEzek01OC4wNyA2Ljc4SDM1LjE0NlYuMzdMLjM3IDYuNDY3djQ3LjIybDM0Ljc3NiA1Ljk0MnYtNy4xODZINTguMDdjLjkzNSAwIDEuNTU5LS43ODEgMS41NTktMS41NTVWOC4zNDRjMC0uNzgxLS42MjQtMS41NTUtMS41Ni0xLjU1NVY2Ljc4ek0yMC4wMTggNDAuNTU0bC0zLjI3NC04LjU5M2gtLjE0OGMwIC4xNDktMy4yNzUgOC4xMy0zLjI3NSA4LjEzbC00LjM2Ni0uMzEyTDE0LjEgMjkuNjE2IDkuNDIyIDE5LjQ1M2w0LjM2Ny0uMzEyIDIuOTYzIDcuOTc0aC4xNDhjMC0uMTQ4IDMuMjc0LTguMjg3IDMuMjc0LTguMjg3bDQuNTIyLS4zMTItNS40NTcgMTEuMTAxIDUuNjE0IDExLjEwMi00LjgzNC0uMTQ5ek01Ny42IDUwLjcxN0gzNS4xNDZ2LTQuMzdoNS40NTh2LTQuNjkxaC01LjQ1OHYtMi4zNTJoNS40NTh2LTQuNjloLTUuNDU4di0yLjM0N2g1LjQ1OHYtNC42OWgtNS40NThWMjUuMjNoNS40NTh2LTQuNjloLTUuNDU4di0yLjM0NWg1LjQ1OHYtNC42OTJoLTUuNDU4di00LjY5aDIyLjQ1NnY0MS45MDNoLS4wMDF6Ii8+PHBhdGggZD0iTTQyLjcyOSAxOS44NTdoOS41MTJ2NC42OTFINDIuNzN6bTAtNy4wMzVoOS41MTJ2NC42OTFINDIuNzN6bTAgMTQuMjI4aDkuNTEydjQuNjlINDIuNzN6bTAgNy4wMzZoOS41MTJ2NC42OTFINDIuNzN6Ii8+PHBhdGggZD0iTTQyLjcyOSA0MS4yNzloOS41MTJ2NC42OUg0Mi43M3pNNTcuNjk5IDYuNDFIMzQuNzc2VjBMMCA2LjA5OHY0Ny4yMmwzNC43NzYgNS45NDF2LTcuMTg1aDIyLjkyM2MuOTM2IDAgMS41Ni0uNzgxIDEuNTYtMS41NTVWNy45NzRjMC0uNzgxLS42MjQtMS41NTUtMS41Ni0xLjU1NXpNMTkuNjQ3IDQwLjE4NGwtMy4yNzQtOC41OTNoLS4xNDhjMCAuMTQ4LTMuMjc0IDguMTMtMy4yNzQgOC4xM2wtNC4zNjctLjMxMiA1LjE0Ni0xMC4xNjMtNC42NzgtMTAuMTYzIDQuMzY3LS4zMTMgMi45NjIgNy45NzRoLjE0OWMwLS4xNDggMy4yNzQtOC4yODYgMy4yNzQtOC4yODZsNC41MjItLjMxMy01LjQ1OCAxMS4xMDIgNS42MTUgMTEuMTAxLTQuODM0LS4xNDh6TTU3LjIzIDUwLjM0N0gzNC43NzZ2LTQuMzdoNS40NTd2LTQuNjkyaC01LjQ1N3YtMi4zNTJoNS40NTd2LTQuNjloLTUuNDU3di0yLjM0N2g1LjQ1N3YtNC42OWgtNS40NTdWMjQuODZoNS40NTd2LTQuNjloLTUuNDU3di0yLjM0Nmg1LjQ1N3YtNC42OTJoLTUuNDU3di00LjY5aDIyLjQ1NnY0MS45MDR6Ii8+PC9nPjwvc3ZnPg=="},"displayName":"Microsoft Excel 365","typeVersion":2,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":433,"icon":"file:outlook.svg","name":"n8n-nodes-base.microsoftOutlook","codex":{"data":{"alias":["email","human","form","wait","hitl","approval"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.microsoftoutlook/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/microsoft/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Microsoft Outlook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgODEiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBmaWxsPSIjMjM3MmJhIiBzdHJva2U9Im5vbmUiIGQ9Ik03Ny45IDE5LjJINDYuODZWMEwwIDguMjMyVjcxLjk4TDQ2Ljg2IDgwVjYxLjg0N0g3Ny45YzEuMjY2IDAgMi4xLTEuMDU1IDIuMS0yLjFWMjEuMzJjMC0xLjI2Ni0uODQ0LTIuMS0yLjEtMi4xek0yMS45NTIgNTQuNDZjLTE1LjQtMS4wNTUtMTQuNzc2LTI5LjEzLjQyMi0yOS45NzQgMTYuNjc1LS44NDQgMTYuMjUzIDMxLjAzLS40MjIgMjkuOTc0bTU1LjUxNSA0LjY0NEg0Ni44NlYzNS4wNGw5LjUgOS4wNzdjLjQyMi40MjIuODQ0LjYzMyAxLjQ3Ny42MzNzMS4wNTUtLjIgMS40NzgtLjYzM0w3Ny40NjcgMjcuMjN6bTAtMzUuNDYyLTE5LjYzIDE4LjE1M0w0Ni44NiAzMS40NXYtOS43aDMwLjM5NnYxLjloLjJ6bS01NS4wOTIgNi41NDNjLTguMjMyLjQyMi04LjQ0MyAxOC4zNjQtLjIgMTguNTc1IDguNjU0LjQyMiA4LjY1NC0xOC45OTcuMi0xOC41NzUiLz48L3N5bWJvbD48L3N2Zz4="},"displayName":"Microsoft Outlook","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"}]}],"categories":[{"id":35,"name":"Document Extraction"}],"image":[]}}