{"workflow":{"id":10597,"name":"Monitor cybersecurity compliance and send weekly reports via SIEM, Jira, PostgreSQL, Slack and email","views":145,"recentViews":1,"totalViews":145,"createdAt":"2025-11-07T13:32:15.093Z","description":"This n8n workflow automates **continuous compliance monitoring** across IT, OT, and cloud environments by aggregating security controls, validating policies (ISO 27001, NIST, GDPR, SOC2), detecting anomalies in logs and configurations, generating real-time alerts, creating remediation tickets, and delivering **audit-ready weekly reports** with compliance scorecards, risk trends, and evidence logs.\n\n## How it works\n\n1. **Trigger** — Runs every Monday at 9 AM\n2. **Scan & collect** — Initiates full security scan and fetches 7 days of SIEM logs in parallel\n3. **Analyze** — Detects log anomalies, scores policy controls, classifies as COMPLIANT / WARNING / NON-COMPLIANT\n4. **Remediate** — Creates Jira tickets for findings; sends critical alerts for non-compliant status\n5. **Store** — Saves report to PostgreSQL for historical trend tracking\n6. **Report** — Generates HTML compliance scorecard and delivers via Email + Slack\n\n## Setup steps\n\n1. **Security APIs** — Replace placeholder URLs with your SIEM, vulnerability scanner, and policy engine\n2. **PostgreSQL** — Create a `compliance_reports` table to store weekly results\n3. **Jira** — Update the ticket API URL with your Jira or ServiceNow instance\n4. **Slack** — Add your incoming webhook URL to the Slack node\n5. **Email** — Configure SMTP credentials and set `from` / `to` addresses\n6. **Test** — Run manually to verify all connections, then activate\n\n\n## Industries That Benefit\n* **Finance:** Automate **FFIEC, GLBA, SOX** reporting.\n* **Healthcare:** Prove **HIPAA Security Rule** compliance.\n* **Government:** Streamline **FISMA, NIST 800-53** audits.\n* **SaaS & Tech:** Scale **SOC2, ISO 27001** for customer trust.\n* **Critical Infrastructure:** Meet **NERC CIP, IEC 62443**.\n\n\n## Prerequisites\n* SIEM with API (Splunk, ELK, QRadar)\n* Configuration assessment tools (Tenable, AWS Config)\n* Cloud APIs (AWS, Azure, GCP)\n* ITSM (Jira, ServiceNow) with API access\n* n8n with Schedule, HTTP, Database, Email, and Slack nodes\n* SMTP/Slack/Twilio for notifications\n* Compliance framework mapping (CSV)\n\n\n## Modification Options\n* Add **GRC platform sync** (RSA Archer, OneTrust).\n* Enable **continuous control monitoring (CCM)** with real-time feeds.\n* Integrate **digital signatures** for audit evidence.\n* Auto-generate **POA&M (Plan of Action & Milestones)**.\n* Support **custom frameworks** via JSON upload.\n* Trigger **pen test scheduling** on low compliance scores.\n\n\n**Explore More Compliance Automation:**  \n[Contact us](https://www.oneclickitsolution.com/contact-us/) to build **zero-trust policy enforcement**, **automated evidence collection**, and **regulatory reporting as code** with n8n and AI.","workflow":{"id":"PG84Tipt74DfpUvh","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"Cybersecurity Compliance Monitoring & Reporting","tags":[],"nodes":[{"id":"9724511a-114a-4e93-a57b-fdc020723868","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1456,144],"parameters":{"width":820,"height":720,"content":"## Cybersecurity compliance monitoring & reporting\n\nAutomates weekly compliance monitoring across IT, OT, and cloud environments. Validates security controls against ISO 27001, NIST, GDPR, and SOC2, analyzes SIEM logs for anomalies, scores overall compliance, and delivers audit-ready reports with remediation tickets.\n\n## How it works\n\n1. **Trigger** — Runs every Monday at 9 AM\n2. **Scan & collect** — Initiates full security scan and fetches 7 days of SIEM logs in parallel\n3. **Analyze** — Detects log anomalies, scores policy controls, classifies as COMPLIANT / WARNING / NON-COMPLIANT\n4. **Remediate** — Creates Jira tickets for findings; sends critical alerts for non-compliant status\n5. **Store** — Saves report to PostgreSQL for historical trend tracking\n6. **Report** — Generates HTML compliance scorecard and delivers via Email + Slack\n\n## Setup steps\n\n1. **Security APIs** — Replace placeholder URLs with your SIEM, vulnerability scanner, and policy engine\n2. **PostgreSQL** — Create a `compliance_reports` table to store weekly results\n3. **Jira** — Update the ticket API URL with your Jira or ServiceNow instance\n4. **Slack** — Add your incoming webhook URL to the Slack node\n5. **Email** — Configure SMTP credentials and set `from` / `to` addresses\n6. **Test** — Run manually to verify all connections, then activate"},"typeVersion":1},{"id":"879c86d6-c0e9-49bf-b6f5-3463c03323f5","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-528,352],"parameters":{"color":5,"width":468,"height":465,"content":"## 1. Trigger compliance check\n\nRuns every Monday at 9 AM to initiate the weekly security audit cycle"},"typeVersion":1},{"id":"b37965a2-b108-475b-b99d-24cf4c231ae2","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-30,351],"parameters":{"color":5,"width":668,"height":353,"content":"## 2. Scan, collect & analyze\n\nRuns security scans, fetches SIEM logs, validates policies, and detects anomalies in parallel"},"typeVersion":1},{"id":"e9050345-47ef-428c-9101-88bb2e38cddc","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[672,96],"parameters":{"color":5,"width":476,"height":905,"content":"## 3. Score, alert & remediate\n\nCalculates compliance score, creates tickets, sends critical alerts, and stores results to database"},"typeVersion":1},{"id":"d708d76c-63c9-46d9-8c9c-8e50bf01aed7","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1184,256],"parameters":{"color":5,"width":960,"height":553,"content":"## 4. Report & notify\n\nGenerates audit-ready HTML compliance report and delivers to team via Email and Slack"},"typeVersion":1},{"id":"0ed7197c-e590-41b9-9658-c7b80ad118b9","name":"Weekly compliance check every Monday 9 AM","type":"n8n-nodes-base.scheduleTrigger","position":[-416,544],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 9 * * 1"}]}},"typeVersion":1.2},{"id":"d7137554-b81d-417b-ba61-6f2025e5db56","name":"Initiate full security scan across environments","type":"n8n-nodes-base.httpRequest","position":[-192,448],"parameters":{"url":"https://api.example.com/security/scan","method":"POST","options":{},"sendBody":true,"sendHeaders":true,"bodyParameters":{"parameters":[{"name":"scan_type","value":"full_compliance"},{"name":"environments","value":"IT,OT,cloud"},{"name":"frameworks","value":"ISO27001,NIST,GDPR,SOC2"}]},"headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"bd6b07d3-3857-4994-98c7-d1d67b47e7c0","name":"Fetch 7 days of SIEM security logs","type":"n8n-nodes-base.httpRequest","position":[-192,640],"parameters":{"url":"https://api.example.com/logs/security?days=7","options":{}},"typeVersion":4.2},{"id":"361e37b6-7887-4e80-b6d8-df53881233c5","name":"Merge scan results and log data","type":"n8n-nodes-base.merge","position":[32,544],"parameters":{"mode":"combine","options":{}},"typeVersion":3},{"id":"9a5cdde8-cf35-4789-bcd4-c8dc42d9631a","name":"Analyze scan results and detect log anomalies","type":"n8n-nodes-base.code","position":[256,544],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Analyze security scan results and SIEM logs for anomalies\nconst data = $input.item.json;\n\n// --- Policy compliance validation ---\nconst frameworks = ['ISO27001', 'NIST', 'GDPR', 'SOC2'];\nconst policyResults = data.policy_results || {};\nconst controlsPassed = policyResults.controls_passed || 0;\nconst controlsTotal = policyResults.controls_total || 100;\nconst compliancePercentage = controlsTotal > 0 ? Math.round((controlsPassed / controlsTotal) * 100) : 0;\n\n// --- Log anomaly detection ---\nconst logs = data.logs || [];\nlet anomaliesDetected = 0;\nlet suspiciousActivities = [];\nconst failedLoginThreshold = 3;\n\nlogs.forEach(log => {\n  if (log.severity === 'high' || (log.failed_attempts && log.failed_attempts > failedLoginThreshold)) {\n    anomaliesDetected++;\n    suspiciousActivities.push({\n      timestamp: log.timestamp,\n      type: log.event_type || 'Unknown',\n      user: log.user_id || 'Anonymous',\n      severity: log.severity || 'high',\n      source_ip: log.source_ip || 'N/A'\n    });\n  }\n});\n\n// --- Risk level from logs ---\nconst logRiskLevel = anomaliesDetected > 10 ? 'HIGH' : anomaliesDetected > 5 ? 'MEDIUM' : 'LOW';\n\n// --- Vulnerability findings ---\nconst scanFindings = data.scan_results || {};\nconst criticalFindings = scanFindings.critical || 0;\nconst highFindings = scanFindings.high || 0;\nconst mediumFindings = scanFindings.medium || 0;\nconst lowFindings = scanFindings.low || 0;\n\n// --- Overall compliance status ---\nlet complianceStatus = 'COMPLIANT';\nif (compliancePercentage < 80 || criticalFindings > 0) complianceStatus = 'NON-COMPLIANT';\nelse if (compliancePercentage < 95 || highFindings > 0) complianceStatus = 'WARNING';\n\n// --- Risk score calculation (0-100) ---\nlet riskScore = 100 - compliancePercentage;\nriskScore += criticalFindings * 5;\nriskScore += highFindings * 2;\nriskScore += anomaliesDetected * 1;\nriskScore = Math.min(riskScore, 100);\n\n// --- Frameworks assessed ---\nconst frameworkStatuses = {};\nframeworks.forEach(fw => {\n  frameworkStatuses[fw] = policyResults[fw.toLowerCase()] || { compliant: false, score: 0 };\n});\n\n// --- Timestamp ---\nconst timestamp = new Date().toISOString();\nconst reportDate = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });\nconst weekNumber = Math.ceil(new Date().getDate() / 7);\nconst reportId = `RPT-${new Date().getFullYear()}-W${String(weekNumber).padStart(2, '0')}`;\n\n// --- Determine remediation priority ---\nlet remediationPriority = 'low';\nif (criticalFindings > 0) remediationPriority = 'critical';\nelse if (highFindings > 0 || anomaliesDetected > 5) remediationPriority = 'high';\nelse if (mediumFindings > 0) remediationPriority = 'medium';\n\nreturn {\n  json: {\n    // Report Identity\n    reportId,\n    reportDate,\n    timestamp,\n    lastUpdated: timestamp,\n\n    // Compliance Scores\n    complianceScore: compliancePercentage,\n    complianceStatus,\n    riskScore,\n    logRiskLevel,\n\n    // Vulnerability Findings\n    criticalFindings,\n    highFindings,\n    mediumFindings,\n    lowFindings,\n    totalFindings: criticalFindings + highFindings + mediumFindings + lowFindings,\n\n    // Log Analysis\n    totalLogsAnalyzed: logs.length,\n    anomaliesDetected,\n    suspiciousActivities,\n\n    // Framework Compliance\n    frameworkStatuses,\n    frameworksAssessed: frameworks,\n\n    // Controls\n    controlsPassed,\n    controlsTotal,\n    controlsFailed: controlsTotal - controlsPassed,\n\n    // Remediation\n    remediationPriority,\n    requiresImmediateAction: criticalFindings > 0 || complianceStatus === 'NON-COMPLIANT',\n    requiresAlert: criticalFindings > 0 || highFindings > 0,\n\n    // Original data for reference\n    originalData: data\n  }\n};"},"typeVersion":2},{"id":"139d56f5-3e30-4a36-bf9e-d8236b533b66","name":"Check for duplicate compliance reports","type":"n8n-nodes-base.code","position":[480,544],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Check for prior compliance run in same week to avoid duplicate reports\nconst reportId = $input.item.json.reportId;\nconst complianceStatus = $input.item.json.complianceStatus;\n\n// Use workflow static data to track processed reports\nconst processedReports = $getWorkflowStaticData('global').processedReports || {};\n\nif (processedReports[reportId]) {\n  const existing = processedReports[reportId];\n\n  return {\n    json: {\n      ...$input.item.json,\n      isDuplicate: true,\n      isUpdate: true,\n      existingData: existing,\n      action: 'update'\n    }\n  };\n}\n\n// New report — register it\nprocessedReports[reportId] = {\n  timestamp: new Date().toISOString(),\n  reportId,\n  complianceStatus,\n  complianceScore: $input.item.json.complianceScore\n};\n\n// Clean up reports older than 365 days\nconst oneYearAgo = Date.now() - (365 * 24 * 60 * 60 * 1000);\nfor (const key in processedReports) {\n  const entryTime = new Date(processedReports[key].timestamp).getTime();\n  if (entryTime < oneYearAgo) {\n    delete processedReports[key];\n  }\n}\n\n$getWorkflowStaticData('global').processedReports = processedReports;\n\nreturn {\n  json: {\n    ...$input.item.json,\n    isDuplicate: false,\n    isUpdate: false,\n    action: 'create'\n  }\n};"},"typeVersion":2},{"id":"5c9cd279-d61b-4550-b26c-8f3bdc01efaa","name":"Route by compliance status","type":"n8n-nodes-base.switch","position":[704,528],"parameters":{"rules":{"values":[{"outputKey":"Critical — Non-Compliant","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.complianceStatus }}","rightValue":"NON-COMPLIANT"}]},"renameOutput":true},{"outputKey":"Warning","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.complianceStatus }}","rightValue":"WARNING"}]},"renameOutput":true},{"outputKey":"Compliant","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.complianceStatus }}","rightValue":"COMPLIANT"}]},"renameOutput":true}]},"options":{}},"typeVersion":3},{"id":"3058a9cb-b31a-48e7-85a8-f0f0133b004a","name":"Send critical compliance alert","type":"n8n-nodes-base.httpRequest","position":[928,256],"parameters":{"url":"https://api.example.com/alerts/send","method":"POST","options":{},"sendBody":true,"sendHeaders":true,"bodyParameters":{"parameters":[{"name":"alert_type","value":"CRITICAL_COMPLIANCE_FAILURE"},{"name":"severity","value":"critical"},{"name":"report_id","value":"={{ $json.reportId }}"},{"name":"compliance_score","value":"={{ $json.complianceScore }}"},{"name":"critical_findings","value":"={{ $json.criticalFindings }}"},{"name":"anomalies_detected","value":"={{ $json.anomaliesDetected }}"},{"name":"message","value":"={{ 'CRITICAL: System is NON-COMPLIANT. Score: ' + $json.complianceScore + '%. Critical findings: ' + $json.criticalFindings + '. Immediate remediation required.' }}"}]},"headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"0131735a-c60a-4d15-8b0a-6be6a298a5c9","name":"Create remediation tickets in Jira","type":"n8n-nodes-base.httpRequest","position":[928,448],"parameters":{"url":"https://api.example.com/tickets/create","method":"POST","options":{},"sendBody":true,"sendHeaders":true,"bodyParameters":{"parameters":[{"name":"title","value":"={{ '[' + $json.reportId + '] Compliance Remediation Required — ' + $json.complianceStatus }}"},{"name":"priority","value":"={{ $json.remediationPriority }}"},{"name":"project","value":"SEC"},{"name":"issue_type","value":"Security"},{"name":"description","value":"={{ 'Report: ' + $json.reportId + '\\nStatus: ' + $json.complianceStatus + '\\nScore: ' + $json.complianceScore + '%\\nCritical Findings: ' + $json.criticalFindings + '\\nHigh Findings: ' + $json.highFindings + '\\nAnomalies Detected: ' + $json.anomaliesDetected + '\\nFrameworks: ' + $json.frameworksAssessed.join(', ') }}"},{"name":"labels","value":"compliance,security,automated"}]},"headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"c659bc88-765a-4654-a5ec-49c51b05ff03","name":"Store compliance report in PostgreSQL","type":"n8n-nodes-base.postgres","position":[928,640],"parameters":{"table":"compliance_reports","schema":{"__rl":true,"mode":"list","value":"public"},"columns":{"value":{"report_id":"={{ $json.reportId }}","timestamp":"={{ $json.timestamp }}","risk_score":"={{ $json.riskScore }}","report_date":"={{ $json.reportDate }}","low_findings":"={{ $json.lowFindings }}","high_findings":"={{ $json.highFindings }}","controls_total":"={{ $json.controlsTotal }}","log_risk_level":"={{ $json.logRiskLevel }}","total_findings":"={{ $json.totalFindings }}","controls_failed":"={{ $json.controlsFailed }}","controls_passed":"={{ $json.controlsPassed }}","medium_findings":"={{ $json.mediumFindings }}","compliance_score":"={{ $json.complianceScore }}","compliance_status":"={{ $json.complianceStatus }}","critical_findings":"={{ $json.criticalFindings }}","anomalies_detected":"={{ $json.anomaliesDetected }}","frameworks_assessed":"={{ $json.frameworksAssessed.join(', ') }}","total_logs_analyzed":"={{ $json.totalLogsAnalyzed }}","remediation_priority":"={{ $json.remediationPriority }}"},"mappingMode":"defineBelow"},"options":{}},"credentials":{"postgres":{"id":"credential-id","name":"Postgres-test"}},"typeVersion":2.5},{"id":"b4261796-048e-4a39-9ee3-f1702c6408b5","name":"Update existing report in PostgreSQL","type":"n8n-nodes-base.postgres","position":[928,832],"parameters":{"table":"compliance_reports","schema":{"__rl":true,"mode":"list","value":"public"},"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":["report_id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"credentials":{"postgres":{"id":"credential-id","name":"Postgres-test"}},"typeVersion":2.5},{"id":"503ae646-8970-4b01-9f8b-b3c54c87cd57","name":"Generate audit-ready HTML compliance report","type":"n8n-nodes-base.code","position":[1216,544],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Generate audit-ready HTML compliance report with scorecards and evidence logs\nconst report = $input.item.json;\n\nconst statusColor = report.complianceStatus === 'COMPLIANT' ? '#22c55e' \n  : report.complianceStatus === 'WARNING' ? '#f59e0b' \n  : '#ef4444';\n\nconst statusIcon = report.complianceStatus === 'COMPLIANT' ? '✅' \n  : report.complianceStatus === 'WARNING' ? '⚠️' \n  : '🚨';\n\nconst riskLevelColor = report.logRiskLevel === 'HIGH' ? '#ef4444' \n  : report.logRiskLevel === 'MEDIUM' ? '#f59e0b' \n  : '#22c55e';\n\n// Build framework rows\nconst frameworkRows = report.frameworksAssessed.map(fw => {\n  const fwData = report.frameworkStatuses[fw] || {};\n  const score = fwData.score || 'N/A';\n  const compliant = fwData.compliant ? '✅ Compliant' : '❌ Non-Compliant';\n  return `<tr><td>${fw}</td><td>${compliant}</td><td>${score}</td></tr>`;\n}).join('');\n\n// Build suspicious activity rows\nconst activityRows = (report.suspiciousActivities || []).slice(0, 10).map(a => {\n  return `<tr><td>${a.timestamp || 'N/A'}</td><td>${a.type || 'N/A'}</td><td>${a.user || 'N/A'}</td><td>${a.severity || 'N/A'}</td><td>${a.source_ip || 'N/A'}</td></tr>`;\n}).join('') || '<tr><td colspan=\"5\">No suspicious activities detected</td></tr>';\n\nconst reportHtml = `\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Compliance Report ${report.reportId}</title>\n  <style>\n    body { font-family: Arial, sans-serif; color: #1e293b; margin: 0; padding: 24px; background: #f8fafc; }\n    .header { background: #0f172a; color: white; padding: 24px; border-radius: 8px; margin-bottom: 24px; }\n    .header h1 { margin: 0 0 8px 0; font-size: 22px; }\n    .header p { margin: 0; opacity: 0.7; font-size: 13px; }\n    .status-badge { display: inline-block; padding: 6px 16px; border-radius: 20px; font-weight: bold; font-size: 14px; background: ${statusColor}; color: white; margin-top: 12px; }\n    .cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }\n    .card { background: white; border-radius: 8px; padding: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n    .card .value { font-size: 28px; font-weight: bold; }\n    .card .label { font-size: 12px; color: #64748b; margin-top: 4px; }\n    .section { background: white; border-radius: 8px; padding: 20px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n    .section h2 { margin: 0 0 16px 0; font-size: 16px; border-bottom: 2px solid #e2e8f0; padding-bottom: 8px; }\n    table { width: 100%; border-collapse: collapse; font-size: 13px; }\n    th { background: #f1f5f9; text-align: left; padding: 8px 12px; }\n    td { padding: 8px 12px; border-bottom: 1px solid #e2e8f0; }\n    .footer { text-align: center; font-size: 11px; color: #94a3b8; margin-top: 24px; }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1>${statusIcon} Cybersecurity Compliance Report</h1>\n    <p>Report ID: ${report.reportId} &nbsp;|&nbsp; Generated: ${report.reportDate} &nbsp;|&nbsp; Frameworks: ${report.frameworksAssessed.join(', ')}</p>\n    <div class=\"status-badge\">${report.complianceStatus}</div>\n  </div>\n\n  <div class=\"cards\">\n    <div class=\"card\"><div class=\"value\" style=\"color: ${statusColor}\">${report.complianceScore}%</div><div class=\"label\">Compliance Score</div></div>\n    <div class=\"card\"><div class=\"value\" style=\"color: #ef4444\">${report.criticalFindings}</div><div class=\"label\">Critical Findings</div></div>\n    <div class=\"card\"><div class=\"value\" style=\"color: ${riskLevelColor}\">${report.anomaliesDetected}</div><div class=\"label\">Log Anomalies</div></div>\n    <div class=\"card\"><div class=\"value\">${report.controlsPassed}/${report.controlsTotal}</div><div class=\"label\">Controls Passed</div></div>\n  </div>\n\n  <div class=\"section\">\n    <h2>📋 Framework Compliance Status</h2>\n    <table><thead><tr><th>Framework</th><th>Status</th><th>Score</th></tr></thead><tbody>${frameworkRows}</tbody></table>\n  </div>\n\n  <div class=\"section\">\n    <h2>🔍 Vulnerability Summary</h2>\n    <table><thead><tr><th>Severity</th><th>Count</th></tr></thead><tbody>\n      <tr><td>Critical</td><td style=\"color:#ef4444;font-weight:bold\">${report.criticalFindings}</td></tr>\n      <tr><td>High</td><td style=\"color:#f97316;font-weight:bold\">${report.highFindings}</td></tr>\n      <tr><td>Medium</td><td style=\"color:#f59e0b\">${report.mediumFindings}</td></tr>\n      <tr><td>Low</td><td>${report.lowFindings}</td></tr>\n      <tr><td><strong>Total</strong></td><td><strong>${report.totalFindings}</strong></td></tr>\n    </tbody></table>\n  </div>\n\n  <div class=\"section\">\n    <h2>🔬 Suspicious Activity Evidence Log</h2>\n    <p style=\"font-size:12px;color:#64748b\">Showing up to 10 most recent suspicious events from ${report.totalLogsAnalyzed} logs analyzed. Log Risk Level: <strong style=\"color:${riskLevelColor}\">${report.logRiskLevel}</strong></p>\n    <table><thead><tr><th>Timestamp</th><th>Event Type</th><th>User</th><th>Severity</th><th>Source IP</th></tr></thead><tbody>${activityRows}</tbody></table>\n  </div>\n\n  <div class=\"footer\">Automated report generated by Cybersecurity Compliance Monitoring Workflow &nbsp;|&nbsp; ${report.timestamp}</div>\n</body>\n</html>`;\n\nconst notificationMessage = `${statusIcon} *WEEKLY COMPLIANCE REPORT — ${report.reportId}*\\n\\n` +\n  `*Status:* ${report.complianceStatus}\\n` +\n  `*Compliance Score:* ${report.complianceScore}%\\n` +\n  `*Risk Score:* ${report.riskScore}/100\\n` +\n  `*Log Risk Level:* ${report.logRiskLevel}\\n\\n` +\n  `*Findings:* Critical: ${report.criticalFindings} | High: ${report.highFindings} | Medium: ${report.mediumFindings}\\n` +\n  `*Anomalies Detected:* ${report.anomaliesDetected} from ${report.totalLogsAnalyzed} logs\\n` +\n  `*Controls:* ${report.controlsPassed}/${report.controlsTotal} passed\\n\\n` +\n  `*Frameworks Assessed:* ${report.frameworksAssessed.join(', ')}\\n` +\n  `*Report Date:* ${report.reportDate}\\n` +\n  `*Remediation Priority:* ${report.remediationPriority.toUpperCase()}`;\n\nreturn {\n  json: {\n    ...report,\n    reportHtml,\n    notificationMessage,\n    notificationTitle: `${statusIcon} [${report.reportId}] Compliance ${report.complianceStatus} — Score: ${report.complianceScore}%`,\n    shouldNotify: report.complianceStatus === 'NON-COMPLIANT' || report.complianceStatus === 'WARNING',\n    shouldNotifyAll: true\n  }\n};"},"typeVersion":2},{"id":"bad858d6-007e-441d-9071-5c83da6ba2a9","name":"Filter for non-compliant and warning reports","type":"n8n-nodes-base.filter","position":[1376,544],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"notify-condition","operator":{"type":"boolean","operation":"true"},"leftValue":"={{ $json.shouldNotifyAll }}"}]}},"typeVersion":2},{"id":"f89a8f4b-dbd8-4843-bff3-2217b3fd1b08","name":"Post compliance summary to Slack","type":"n8n-nodes-base.httpRequest","position":[1600,448],"parameters":{"url":"YOUR_SLACK_WEBHOOK_URL","method":"POST","options":{},"jsonBody":"={\n  \"text\": \"{{ $json.notificationTitle }}\",\n  \"blocks\": [\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"{{ $json.notificationMessage }}\"\n      }\n    }\n  ]\n}","sendBody":true,"specifyBody":"json"},"typeVersion":4.2},{"id":"4174b783-2d40-4b6f-9bf6-9a71de1657d2","name":"Email audit-ready report to team","type":"n8n-nodes-base.emailSend","position":[1600,640],"webhookId":"886f5793-cf7d-462c-bd09-485ab58f763e","parameters":{"html":"={{ $json.reportHtml }}","options":{},"subject":"={{ $json.notificationTitle }}","toEmail":"user@example.com","fromEmail":"user@example.com"},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1},{"id":"2198e4d1-26ac-419e-851a-10cbd7365144","name":"Log success and track compliance statistics","type":"n8n-nodes-base.code","position":[1824,544],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Log successful compliance cycle and track statistics\nconst timestamp = new Date().toISOString();\nconst report = $input.item.json;\n\nconsole.log(`✅ SUCCESS: Compliance report ${report.reportId} | Status: ${report.complianceStatus} | Score: ${report.complianceScore}% | Critical: ${report.criticalFindings} | Anomalies: ${report.anomaliesDetected} | Time: ${timestamp}`);\n\n// Cumulative statistics\nconst stats = $getWorkflowStaticData('global').stats || {\n  totalReports: 0,\n  compliantCount: 0,\n  warningCount: 0,\n  nonCompliantCount: 0,\n  totalCriticalFindings: 0,\n  totalAnomalies: 0,\n  lastProcessed: null\n};\n\nif (report.action === 'create') {\n  stats.totalReports++;\n  if (report.complianceStatus === 'COMPLIANT') stats.compliantCount++;\n  else if (report.complianceStatus === 'WARNING') stats.warningCount++;\n  else stats.nonCompliantCount++;\n  stats.totalCriticalFindings += report.criticalFindings || 0;\n  stats.totalAnomalies += report.anomaliesDetected || 0;\n}\n\nstats.lastProcessed = timestamp;\n$getWorkflowStaticData('global').stats = stats;\n\nreturn {\n  json: {\n    success: true,\n    action: report.action,\n    reportId: report.reportId,\n    complianceStatus: report.complianceStatus,\n    complianceScore: report.complianceScore,\n    criticalFindings: report.criticalFindings,\n    anomaliesDetected: report.anomaliesDetected,\n    timestamp,\n    cumulativeStats: stats\n  }\n};"},"typeVersion":2}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"8270314b-ccbb-4eb9-bbf8-795b9245cda2","connections":{"Route by compliance status":{"main":[[{"node":"Send critical compliance alert","type":"main","index":0},{"node":"Create remediation tickets in Jira","type":"main","index":0},{"node":"Store compliance report in PostgreSQL","type":"main","index":0}],[{"node":"Create remediation tickets in Jira","type":"main","index":0},{"node":"Store compliance report in PostgreSQL","type":"main","index":0}],[{"node":"Store compliance report in PostgreSQL","type":"main","index":0},{"node":"Update existing report in PostgreSQL","type":"main","index":0}]]},"Send critical compliance alert":{"main":[[{"node":"Generate audit-ready HTML compliance report","type":"main","index":0}]]},"Merge scan results and log data":{"main":[[{"node":"Analyze scan results and detect log anomalies","type":"main","index":0}]]},"Email audit-ready report to team":{"main":[[{"node":"Log success and track compliance statistics","type":"main","index":0}]]},"Post compliance summary to Slack":{"main":[[{"node":"Log success and track compliance statistics","type":"main","index":0}]]},"Create remediation tickets in Jira":{"main":[[{"node":"Generate audit-ready HTML compliance report","type":"main","index":0}]]},"Fetch 7 days of SIEM security logs":{"main":[[{"node":"Merge scan results and log data","type":"main","index":1}]]},"Update existing report in PostgreSQL":{"main":[[{"node":"Generate audit-ready HTML compliance report","type":"main","index":0}]]},"Store compliance report in PostgreSQL":{"main":[[{"node":"Generate audit-ready HTML compliance report","type":"main","index":0}]]},"Check for duplicate compliance reports":{"main":[[{"node":"Route by compliance status","type":"main","index":0}]]},"Weekly compliance check every Monday 9 AM":{"main":[[{"node":"Initiate full security scan across environments","type":"main","index":0},{"node":"Fetch 7 days of SIEM security logs","type":"main","index":0}]]},"Generate audit-ready HTML compliance report":{"main":[[{"node":"Filter for non-compliant and warning reports","type":"main","index":0}]]},"Filter for non-compliant and warning reports":{"main":[[{"node":"Post compliance summary to Slack","type":"main","index":0},{"node":"Email audit-ready report to team","type":"main","index":0}]]},"Analyze scan results and detect log anomalies":{"main":[[{"node":"Check for duplicate compliance reports","type":"main","index":0}]]},"Initiate full security scan across environments":{"main":[[{"node":"Merge scan results and log data","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":21,"nodeTypes":{"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.filter":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.postgres":{"count":2},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":5},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Oneclick AI Squad","username":"oneclick-ai","bio":"The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.","verified":true,"links":["https://www.oneclickitsolution.com/"],"avatar":"https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"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/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"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":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":30,"icon":"file:postgres.svg","name":"n8n-nodes-base.postgres","codex":{"data":{"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-i-chose-n8n-over-zapier-in-2020/","icon":"😍","label":"Why I chose n8n over Zapier in 2020"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting 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/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-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/postgres/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Postgres"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNzkgODEiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTc3LjM5MSA0Ny45MjJjLS40NjYtMS40MTItMS42ODgtMi4zOTYtMy4yNjgtMi42MzItLjc0NS0uMTExLTEuNTk4LS4wNjQtMi42MDguMTQ0LTEuNzYuMzYzLTMuMDY1LjUwMS00LjAxOC41MjggMy41OTYtNi4wNzIgNi41MjEtMTIuOTk3IDguMjA0LTE5LjUxNSAyLjcyMi0xMC41NCAxLjI2OC0xNS4zNDEtLjQzMi0xNy41MTNDNzAuNzcgMy4xODUgNjQuMjA2LjA5NyA1Ni4yODcuMDAyYy00LjIyNC0uMDUyLTcuOTMzLjc4Mi05Ljg2NyAxLjM4MmEzNyAzNyAwIDAgMC01Ljc3LS41MjhjLTMuODA5LS4wNjEtNy4xNzQuNzctMTAuMDUgMi40NzZhNDYgNDYgMCAwIDAtNy4wOTgtMS43ODJDMTYuNTYxLjQxMSAxMC45NjggMS4yOTkgNi44NzYgNC4xOSAxLjkyMiA3LjY4OS0uMzc1IDEzLjc3LjA1IDIyLjI2MmMuMTM1IDIuNjk2IDEuNjQzIDEwLjkgNC4wMTggMTguNjggMS4zNjUgNC40NzIgMi44MiA4LjE4NSA0LjMyNiAxMS4wMzggMi4xMzUgNC4wNDYgNC40MTkgNi40MjggNi45ODQgNy4yODQgMS40MzguNDc5IDQuMDQ5LjgxNCA2Ljc5Ny0xLjQ3M2E2IDYgMCAwIDAgMS40MjkgMS4yM2MuNzgzLjQ5NCAxLjc0Ljg5NyAyLjY5NiAxLjEzNiAzLjQ0Ni44NjIgNi42NzQuNjQ2IDkuNDI3LS41NjFsLjA0MSAxLjM2Mi4wNiAxLjg5OWMuMTYzIDQuMDY0LjQ0IDcuMjIzIDEuMjU5IDkuNDM0LjA0NS4xMjIuMTA1LjMwNy4xNjkuNTAzLjQwOSAxLjI1MSAxLjA5MiAzLjM0NiAyLjgzIDQuOTg3IDEuOCAxLjY5OSAzLjk3OCAyLjIyIDUuOTcyIDIuMjIgMSAwIDEuOTU1LS4xMzEgMi43OTItLjMxMSAyLjk4NC0uNjM5IDYuMzczLTEuNjE0IDguODI0LTUuMTA0IDIuMzE4LTMuMyAzLjQ0NC04LjI3IDMuNjQ4LTE2LjEwMWwuMDc0LS42MzQuMDQ4LS40MTQuNTQ2LjA0OC4xNDEuMDFjMy4wMzkuMTM4IDYuNzU1LS41MDYgOS4wMzctMS41NjYgMS44MDMtLjgzNyA3LjU4Mi0zLjg4OCA2LjIyMS04LjAwNyIvPjxwYXRoIGZpbGw9IiMzMzY3OTEiIGQ9Ik03Mi4xOTUgNDguNzIzYy05LjAzNiAxLjg2NC05LjY1Ny0xLjE5NS05LjY1Ny0xLjE5NSA5LjU0MS0xNC4xNTcgMTMuNTI5LTMyLjEyNyAxMC4wODctMzYuNTI1QzYzLjIzNS0uOTk0IDQ2Ljk4MSA0LjY4IDQ2LjcxIDQuODI3bC0uMDg3LjAxNmMtMS43ODUtLjM3MS0zLjc4My0uNTkxLTYuMDI5LS42MjgtNC4wODktLjA2Ny03LjE5IDEuMDcyLTkuNTQ0IDIuODU3IDAgMC0yOC45OTUtMTEuOTQ1LTI3LjY0NyAxNS4wMjMuMjg3IDUuNzM3IDguMjIzIDQzLjQxIDE3LjY4OSAzMi4wMzEgMy40Ni00LjE2MSA2LjgwMy03LjY3OSA2LjgwMy03LjY3OSAxLjY2IDEuMTAzIDMuNjQ4IDEuNjY2IDUuNzMyIDEuNDYzbC4xNjItLjEzN2E2LjMgNi4zIDAgMCAwIC4wNjUgMS42MmMtMi40MzkgMi43MjUtMS43MjIgMy4yMDMtNi41OTcgNC4yMDYtNC45MzMgMS4wMTctMi4wMzUgMi44MjYtLjE0MyAzLjI5OSAyLjI5NC41NzQgNy42IDEuMzg2IDExLjE4NS0zLjYzM2wtLjE0My41NzNjLjk1Ni43NjUgMS42MjYgNC45NzggMS41MTQgOC43OTdzLS4xODggNi40NDEuNTY1IDguNDg5IDEuNTAzIDYuNjU2IDcuOTEyIDUuMjgyYzUuMzU1LTEuMTQ4IDguMTMtNC4xMjEgOC41MTYtOS4wODEuMjc0LTMuNTI2Ljg5NC0zLjAwNS45MzMtNi4xNThsLjQ5Ny0xLjQ5M2MuNTczLTQuNzguMDkxLTYuMzIyIDMuMzktNS42MDVsLjgwMi4wN2MyLjQyOC4xMSA1LjYwNi0uMzkxIDcuNDcxLTEuMjU3IDQuMDE2LTEuODY0IDYuMzk4LTQuOTc2IDIuNDM4LTQuMTU4Ii8+PHBhdGggZD0iTTMyLjc0NyAyNC42NmMtLjgxNC0uMTEzLTEuNTUyLS4wMDgtMS45MjUuMjc0YS43LjcgMCAwIDAtLjI5Mi40N2MtLjA0Ny4zMzYuMTg4LjcwNy4zMzMuODk4LjQwOS41NDIgMS4wMDYuOTE1IDEuNTk4Ljk5N2EyIDIgMCAwIDAgLjI1Ni4wMThjLjk4NiAwIDEuODgzLS43NjggMS45NjItMS4zMzUuMDk5LS43MS0uOTMyLTEuMTgzLTEuOTMxLTEuMzIybTI2Ljk3NS4wMjJjLS4wNzgtLjU1Ni0xLjA2OC0uNzE1LTIuMDA3LS41ODRzLTEuODQ4LjU1NC0xLjc3MiAxLjExMmMuMDYxLjQzNC44NDQgMS4xNzQgMS43NzEgMS4xNzRxLjExNyAwIC4yMzctLjAxNmMuNjE5LS4wODYgMS4wNzMtLjQ3OSAxLjI4OC0uNzA1LjMyOS0uMzQ1LjUxOC0uNzMuNDg0LS45OG0xNS40NzcgMjMuODI4Yy0uMzQ1LTEuMDQyLTEuNDUzLTEuMzc3LTMuMjk2LS45OTctNS40NzEgMS4xMjktNy40My4zNDctOC4wNzMtLjEyNyA0LjI1Mi02LjQ3OCA3Ljc1LTE0LjMwOCA5LjYzNy0yMS42MTQuODk0LTMuNDYxIDEuMzg4LTYuNjc1IDEuNDI4LTkuMjk0LjA0NS0yLjg3Ni0uNDQ1LTQuOTg4LTEuNDU1LTYuMjc5LTQuMDcyLTUuMjAzLTEwLjA0OC03Ljk5NC0xNy4yODMtOC4wNy00Ljk3My0uMDU2LTkuMTc1IDEuMjE3LTkuOTkgMS41NzVhMjUgMjUgMCAwIDAtNS42MjItLjcyMmMtMy43MzQtLjA2LTYuOTYxLjgzNC05LjYzMyAyLjY1NWE0MyA0MyAwIDAgMC03LjgyOC0yLjA1MmMtNi4zNDItMS4wMjEtMTEuMzgxLS4yNDgtMTQuOTc4IDIuMy00LjI5MSAzLjA0LTYuMjcyIDguNDc1LTUuODg4IDE2LjE1Mi4xMjkgMi41ODMgMS42MDEgMTAuNTI5IDMuOTIzIDE4LjEzOSAzLjA1NyAxMC4wMTYgNi4zOCAxNS42ODYgOS44NzcgMTYuODUyYTQuNCA0LjQgMCAwIDAgMS40MDIuMjMyYzEuMjc2IDAgMi44MzktLjU3NSA0LjQ2Ni0yLjUzMWExNjEgMTYxIDAgMCAxIDYuMTU2LTYuOTY2IDkuOSA5LjkgMCAwIDAgNC40MjkgMS4xOTFsLjAxLjEyMWMtLjMxLjM2OC0uNTY0LjY5LS43ODEuOTY1LTEuMDcgMS4zNTgtMS4yOTMgMS42NDEtNC43MzggMi4zNTEtLjk4LjIwMi0zLjU4Mi43MzgtMy42MiAyLjU2My0uMDQxIDEuOTkzIDMuMDc2IDIuODMgMy40MzEgMi45MTkgMS4yMzguMzEgMi40My40NjMgMy41NjguNDYzIDIuNzY2IDAgNS4yLS45MDkgNy4xNDUtMi42NjgtLjA2IDcuMTA2LjIzNiAxNC4xMDcgMS4wODkgMTYuMjQxLjY5OSAxLjc0NiAyLjQwNiA2LjAxNCA3Ljc5OCA2LjAxNC43OTEgMCAxLjY2Mi0uMDkyIDIuNjItLjI5NyA1LjYyNy0xLjIwNyA4LjA3MS0zLjY5NCA5LjAxNi05LjE3Ny41MDYtMi45MyAxLjM3NC05LjkyOCAxLjc4Mi0xMy42ODIuODYyLjI2OSAxLjk3MS4zOTIgMy4xNy4zOTIgMi41MDEgMCA1LjM4Ny0uNTMxIDcuMTk3LTEuMzcyIDIuMDMzLS45NDQgNS43MDItMy4yNjEgNS4wMzctNS4yNzR6TTYxLjggMjMuMTQ3Yy0uMDE5IDEuMTA4LS4xNzEgMi4xMTQtLjMzMyAzLjE2NC0uMTc0IDEuMTI5LS4zNTQgMi4yOTctLjM5OSAzLjcxNS0uMDQ1IDEuMzc5LjEyOCAyLjgxNC4yOTQgNC4yLjMzNyAyLjgwMS42ODIgNS42ODUtLjY1NSA4LjUzMWExMSAxMSAwIDAgMS0uNTkyLTEuMjE4Yy0uMTY2LS40MDMtLjUyNy0xLjA1LTEuMDI3LTEuOTQ2LTEuOTQ0LTMuNDg3LTYuNDk3LTExLjY1Mi00LjE2Ny0xNC45ODQuNjk0LS45OTIgMi40NTYtMi4wMTEgNi44NzktMS40NjN6TTU2LjQzOSA0LjM3NGM2LjQ4Mi4xNDMgMTEuNjA5IDIuNTY4IDE1LjI0IDcuMjA3IDIuNzg0IDMuNTU4LS4yODIgMTkuNzQ5LTkuMTU4IDMzLjcxNmwtLjI2OS0uMzM5LS4xMTItLjE0YzIuMjk0LTMuNzg4IDEuODQ1LTcuNTM2IDEuNDQ2LTEwLjg1OS0uMTY0LTEuMzY0LS4zMTktMi42NTItLjI4LTMuODYxLjA0MS0xLjI4My4yMS0yLjM4Mi4zNzQtMy40NDYuMjAyLTEuMzExLjQwNy0yLjY2Ny4zNS00LjI2NWExLjggMS44IDAgMCAwIC4wMzctLjYwMWMtLjE0NC0xLjUzMy0xLjg5NC02LjEyLTUuNDYyLTEwLjI3My0xLjk1MS0yLjI3MS00Ljc5Ny00LjgxMy04LjY4Mi02LjUyN2EyOS4zIDI5LjMgMCAwIDEgNi41MTUtLjYxMnpNMjAuMTY3IDUzLjI5OGMtMS43OTMgMi4xNTUtMy4wMzEgMS43NDItMy40MzggMS42MDctMi42NTMtLjg4NS01LjczLTYuNDkxLTguNDQ0LTE1LjM4Mi0yLjM0OC03LjY5My0zLjcyLTE1LjQyOC0zLjgyOS0xNy41OTctLjM0My02Ljg2IDEuMzItMTEuNjQxIDQuOTQzLTE0LjIxIDUuODk2LTQuMTgxIDE1LjU4OS0xLjY3OSAxOS40ODQtLjQwOWwtLjE3LjE2M2MtNi4zOTEgNi40NTUtNi4yNCAxNy40ODMtNi4yMjQgMTguMTU3YTIyIDIyIDAgMCAwIC4wNTEgMS4xMzVjLjExIDEuODU1LjMxNSA1LjMwNy0uMjMyIDkuMjE3LS41MDggMy42MzMuNjEyIDcuMTg5IDMuMDcyIDkuNzU2cS4zODMuMzk4Ljc5NS43NWExNjQgMTY0IDAgMCAwLTYuMDA4IDYuODE0em02LjgzLTkuMTEzYy0xLjk4My0yLjA2OS0yLjg4NC00Ljk0Ny0yLjQ3MS03Ljg5Ni41NzctNC4xMy4zNjQtNy43MjcuMjUtOS42NTlsLS4wMzktLjY5NGMuOTM0LS44MjggNS4yNjEtMy4xNDYgOC4zNDYtMi40MzkgMS40MDguMzIzIDIuMjY2IDEuMjgxIDIuNjIzIDIuOTMxIDEuODQ2IDguNTM5LjI0NCAxMi4wOTgtMS4wNDMgMTQuOTU3LS4yNjUuNTg5LS41MTYgMS4xNDYtLjczIDEuNzIybC0uMTY2LjQ0NWMtLjQyIDEuMTI2LS44MTEgMi4xNzMtMS4wNTMgMy4xNjctMi4xMDgtLjAwNi00LjE1OS0uOTA3LTUuNzE4LTIuNTM0em0uMzI0IDExLjUxNmE1IDUgMCAwIDEtMS40OTQtLjY0MmMuMjcxLS4xMjguNzU0LS4zMDEgMS41OTEtLjQ3NCA0LjA1Mi0uODM0IDQuNjc4LTEuNDIzIDYuMDQ1LTMuMTU4LjMxMy0uMzk4LjY2OS0uODQ5IDEuMTYtMS4zOTguNzMzLS44MjEgMS4wNjgtLjY4MiAxLjY3Ni0uNDMuNDkzLjIwNC45NzIuODIxIDEuMTY3IDEuNTAxLjA5Mi4zMjEuMTk1LjkzLS4xNDMgMS40MDQtMi44NTUgMy45OTctNy4wMTUgMy45NDYtMTAuMDAzIDMuMTk4em0yMS4yMDcgMTkuNzM1Yy00Ljk1NyAxLjA2Mi02LjcxMy0xLjQ2Ny03Ljg2OS00LjM1OS0uNzQ3LTEuODY3LTEuMTEzLTEwLjI4NS0uODUzLTE5LjU4MmExLjEgMS4xIDAgMCAwLS4wNDgtLjM1NiA1IDUgMCAwIDAtLjEzOS0uNjU3Yy0uMzg3LTEuMzUzLTEuMzMxLTIuNDg0LTIuNDYyLTIuOTUzLS40NS0uMTg2LTEuMjc1LS41MjgtMi4yNjctLjI3NC4yMTItLjg3MS41NzgtMS44NTUuOTc2LTIuOTIxbC4xNjctLjQ0OGMuMTg4LS41MDUuNDIzLTEuMDI5LjY3My0xLjU4MyAxLjM0Ny0yLjk5MiAzLjE5Mi03LjA5MSAxLjE5LTE2LjM1LS43NS0zLjQ2OC0zLjI1NC01LjE2MS03LjA1LTQuNzY4LTIuMjc2LjIzNS00LjM1OCAxLjE1NC01LjM5NiAxLjY4cS0uMzM0LjE2OS0uNjE4LjMyOWMuMjktMy40OTQgMS4zODUtMTAuMDI0IDUuNDgxLTE0LjE1NiAyLjU3OS0yLjYwMSA2LjAxNC0zLjg4NiAxMC4xOTktMy44MTcgOC4yNDYuMTM1IDEzLjUzNCA0LjM2NyAxNi41MTggNy44OTMgMi41NzEgMy4wMzkgMy45NjQgNi4xIDQuNTIgNy43NTEtNC4xNzktLjQyNS03LjAyMi40LTguNDYzIDIuNDYtMy4xMzUgNC40ODEgMS43MTUgMTMuMTc4IDQuMDQ2IDE3LjM1OC40MjcuNzY2Ljc5NiAxLjQyOC45MTIgMS43MDkuNzU5IDEuODM5IDEuNzQyIDMuMDY3IDIuNDU5IDMuOTY0LjIyLjI3NS40MzMuNTQxLjU5Ni43NzQtMS4yNjYuMzY1LTMuNTM5IDEuMjA4LTMuMzMyIDUuNDIyLS4xNjcgMi4xMTUtMS4zNTYgMTIuMDE2LTEuOTU5IDE1LjUxNC0uNzk3IDQuNjIxLTIuNDk3IDYuMzQzLTcuMjc5IDcuMzY4em0yMC42OTMtMjMuNjhjLTEuMjk0LjYwMS0zLjQ2IDEuMDUyLTUuNTE4IDEuMTQ4LTIuMjczLjEwNy0zLjQzLS4yNTUtMy43MDItLjQ3Ny0uMTI4LTIuNjI2Ljg1LTIuOTAxIDEuODg0LTMuMTkxLjE2My0uMDQ2LjMyMS0uMDkuNDc0LS4xNDRhNCA0IDAgMCAwIC4zMTMuMjNjMS44MjcgMS4yMDYgNS4wODUgMS4zMzYgOS42ODUuMzg2bC4wNS0uMDFjLS42Mi41OC0xLjY4MiAxLjM1OS0zLjE4NyAyLjA1OHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Postgres","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"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/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/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":844,"icon":"fa:filter","name":"n8n-nodes-base.filter","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The Filter node can be used to filter items based on a condition. If the condition is met, the item will be passed on to the next node. If the condition is not met, the item will be omitted. Conditions can be combined together by AND(meet all conditions), or OR(meet at least one condition).","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Filter","color":"#229eff"},"iconData":{"icon":"filter","type":"icon"},"displayName":"Filter","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":29,"name":"SecOps"},{"id":49,"name":"AI Summarization"}],"image":[]}}