{"workflow":{"id":13139,"name":"Monitor data integrity and route severity-based alerts with GPT-4o, email and Slack","views":8,"recentViews":0,"totalViews":8,"createdAt":"2026-02-01T04:57:58.539Z","description":"## How It Works\nThis workflow automates continuous data integrity monitoring and intelligent alert management across multiple data sources. Designed for data engineers, IT operations teams, and business intelligence analysts, it solves the critical challenge of detecting data anomalies and orchestrating appropriate responses based on severity levels. The system operates on scheduled intervals, fetching data from software metrics APIs and BI dashboards, then merging these sources for comprehensive analysis. It employs AI-powered validation and orchestration agents to detect anomalies, assess severity, and determine optimal response strategies. The workflow intelligently routes alerts based on severity classification, triggering critical notifications via email and Slack for high-priority issues while sending standard reports for routine findings. By maintaining detailed compliance audit logs and preparing executive summaries, it ensures stakeholders receive timely, actionable intelligence while creating audit trails for data quality monitoring initiatives.\n\n## Setup Steps\n1. Configure Schedule Data Integrity Check trigger with monitoring frequency\n2. Connect Workflow Configuration node with data source parameters\n3. Set up Fetch Software Metrics and Fetch BI Dashboard Data nodes with respective API credentials\n4. Configure Merge Data Sources node for data consolidation logic\n5. Connect Data Validation Agent with OpenAI/Nvidia API credentials for anomaly detection\n6. Set up Orchestration Agent with AI API credentials for severity assessment\n7. Configure Check for Anomalies node with routing conditions\n8. Connect Route by Severity node with classification logic\n  \n## Prerequisites\nOpenAI or Nvidia API credentials for AI-powered analysis, API access to software metrics platforms\n## Use Cases\nSaaS platforms monitoring service health metrics, e-commerce businesses tracking inventory data quality\n## Customization\nAdjust scheduling frequency for monitoring intervals, modify severity thresholds for alert classification\n## Benefits\nReduces mean time to detection by 75%, eliminates manual data quality checks","workflow":{"id":"ChSJMM8u3RMVAc9Xja2BN","meta":{"instanceId":"b91e510ebae4127f953fd2f5f8d40d58ca1e71c746d4500c12ae86aad04c1502"},"name":"Intelligent AI-Driven Data Integrity Monitoring System","tags":[],"nodes":[{"id":"c74626fd-8824-418e-8296-5ea7f7397791","name":"Schedule Data Integrity Check","type":"n8n-nodes-base.scheduleTrigger","position":[-448,288],"parameters":{"rule":{"interval":[{"field":"minutes","minutesInterval":15}]}},"typeVersion":1.3},{"id":"2365a95d-a84e-49fa-92b7-60009a3b49fe","name":"Workflow Configuration","type":"n8n-nodes-base.set","position":[-224,288],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"metricsApiUrl","type":"string","value":"<__PLACEHOLDER_VALUE__Software Metrics API URL__>"},{"id":"id-2","name":"biDashboardApiUrl","type":"string","value":"<__PLACEHOLDER_VALUE__BI Dashboard API URL__>"},{"id":"id-3","name":"anomalyThreshold","type":"number","value":0.75},{"id":"id-4","name":"criticalAlertEmail","type":"string","value":"<__PLACEHOLDER_VALUE__Critical Alert Email Address__>"},{"id":"id-5","name":"executiveReportEmail","type":"string","value":"<__PLACEHOLDER_VALUE__Executive Report Email Address__>"},{"id":"id-6","name":"slackCriticalChannel","type":"string","value":"<__PLACEHOLDER_VALUE__Slack Critical Alerts Channel ID__>"},{"id":"id-7","name":"slackHighPriorityChannel","type":"string","value":"<__PLACEHOLDER_VALUE__Slack High Priority Channel ID__>"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"d98adc00-af2b-47ce-89f1-af26f52fba68","name":"Fetch Software Metrics","type":"n8n-nodes-base.httpRequest","position":[0,192],"parameters":{"url":"={{ $('Workflow Configuration').first().json.metricsApiUrl }}","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"905249ca-c017-43aa-85b2-707e2af14517","name":"Fetch BI Dashboard Data","type":"n8n-nodes-base.httpRequest","position":[0,384],"parameters":{"url":"={{ $('Workflow Configuration').first().json.biDashboardApiUrl }}","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.3},{"id":"0e636a03-812c-4307-bfd3-24435d60abb4","name":"Merge Data Sources","type":"n8n-nodes-base.code","position":[224,288],"parameters":{"jsCode":"// Merge data from both HTTP requests into a single structured object\nconst items = $input.all();\n\n// Initialize containers for the data\nlet metricsData = null;\nlet biData = null;\n\n// Process all input items to find data from both sources\nfor (const item of items) {\n  // Check if this item came from Fetch Software Metrics\n  if (item.json.metrics || item.json.software) {\n    metricsData = item.json;\n  }\n  // Check if this item came from Fetch BI Dashboard Data\n  else if (item.json.dashboard || item.json.bi) {\n    biData = item.json;\n  }\n  // If the structure is unknown, try to identify by other characteristics\n  else if (!metricsData) {\n    metricsData = item.json;\n  } else if (!biData) {\n    biData = item.json;\n  }\n}\n\n// Create the merged structured object\nconst mergedData = {\n  metrics: metricsData || {},\n  biData: biData || {},\n  timestamp: new Date().toISOString()\n};\n\n// Return the merged data as a single item\nreturn [{ json: mergedData }];"},"typeVersion":2},{"id":"1265483a-c584-47c9-bb9d-5fa3c5d8b97d","name":"OpenAI Model - Data Validation","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[456,512],"parameters":{"model":{"__rl":true,"mode":"id","value":"gpt-4o"},"options":{"temperature":0.2},"builtInTools":{}},"credentials":{"openAiApi":{"id":"credential-id","name":"OpenAi account"}},"typeVersion":1.3},{"id":"262668b0-74c1-4da0-8658-a66730e1d08a","name":"Validation Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[704,512],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"hasAnomaly\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether an anomaly was detected\"\n    },\n    \"anomalyScore\": {\n      \"type\": \"number\",\n      \"description\": \"Numerical score indicating the severity of the anomaly\"\n    },\n    \"anomalyType\": {\n      \"type\": \"string\",\n      \"description\": \"Type or category of the detected anomaly\"\n    },\n    \"affectedSystems\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"List of systems affected by the anomaly\"\n    },\n    \"dataIntegrityIssues\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"List of data integrity issues identified\"\n    },\n    \"complianceViolations\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"List of compliance violations detected\"\n    },\n    \"gdprConcerns\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"GDPR-related concerns identified\"\n    },\n    \"isoConcerns\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"ISO compliance concerns identified\"\n    },\n    \"recommendations\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Recommended actions to address the issues\"\n    },\n    \"severity\": {\n      \"type\": \"string\",\n      \"description\": \"Overall severity level of the findings\"\n    }\n  }\n}"},"typeVersion":1.3},{"id":"6c94a73c-ed6b-4e91-b852-f94387e411a3","name":"Data Validation Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[448,288],"parameters":{"text":"=Data to validate: {{ JSON.stringify($json) }}","options":{"systemMessage":"You are a Data Validation Agent specialized in inspecting structured software metrics, logs, and BI dashboards for data integrity and anomaly signals.\n\nYour task is to:\n1. Analyze incoming data for completeness, consistency, and accuracy\n2. Detect anomalies including: missing data points, unexpected value ranges, statistical outliers, data type mismatches, timestamp inconsistencies, duplicate records\n3. Identify data integrity issues: referential integrity violations, schema violations, data quality degradation\n4. Flag compliance concerns related to GDPR (data retention, consent tracking, data minimization) and ISO standards (audit trails, access controls, data classification)\n5. Calculate anomaly score (0-1 scale) based on severity and frequency of issues\n6. Classify anomaly type: data_quality, security, compliance, performance, availability\n7. List affected systems and components\n8. Provide specific recommendations for remediation\n9. Assign severity level: low, medium, high, critical\n\nIMPORTANT: You are in READ-ONLY mode. Never suggest making production changes autonomously. All recommendations must require human approval.\n\nReturn structured JSON output with all required fields."},"promptType":"define","hasOutputParser":true},"typeVersion":3.1},{"id":"f15be92f-e155-4157-9add-43040deb9d3f","name":"Check for Anomalies","type":"n8n-nodes-base.if","position":[800,288],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"id-1","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $('Data Validation Agent').item.json.hasAnomaly }}","rightValue":true}]}},"typeVersion":2.3},{"id":"cfc91152-1c98-4926-9599-ec895c670904","name":"OpenAI Model - Orchestration","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[1032,512],"parameters":{"model":{"__rl":true,"mode":"id","value":"gpt-4o"},"options":{"temperature":0.3},"builtInTools":{}},"credentials":{"openAiApi":{"id":"credential-id","name":"OpenAi account"}},"typeVersion":1.3},{"id":"ba9dbaac-395a-4670-9280-13af5379bbf0","name":"Orchestration Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1160,512],"parameters":{"schemaType":"manual","inputSchema":"{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"alertType\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"notificationChannels\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t}\n\t\t},\n\t\t\"escalationRequired\": {\n\t\t\t\"type\": \"boolean\"\n\t\t},\n\t\t\"executiveReportRequired\": {\n\t\t\t\"type\": \"boolean\"\n\t\t},\n\t\t\"actionItems\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t}\n\t\t},\n\t\t\"complianceDocumentation\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"auditTrailRequired\": {\n\t\t\t\"type\": \"boolean\"\n\t\t},\n\t\t\"severity\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"priority\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"},"typeVersion":1.3},{"id":"e69755c9-2996-49fb-83e0-01ab0daa29c9","name":"Orchestration Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[1024,288],"parameters":{"text":"=Anomaly data: {{ JSON.stringify($json) }}","options":{"systemMessage":"You are an Orchestration Agent responsible for coordinating automated alerts, executive reporting, and workflow escalation for data integrity issues.\n\nYour task is to:\n1. Analyze the anomaly data from the Data Validation Agent\n2. Determine appropriate notification channels based on severity: critical → email + Slack, high → Slack, medium/low → executive report only\n3. Decide if escalation to human review is required (always true for critical and high severity)\n4. Determine if executive report generation is needed\n5. Create specific action items for IT teams with clear priorities\n6. Generate compliance documentation references for GDPR and ISO standards\n7. Specify audit trail requirements for regulatory compliance\n8. Assign priority level: P0 (critical), P1 (high), P2 (medium), P3 (low)\n\nIMPORTANT CONSTRAINTS:\n- You MUST NOT make any deployment or production changes autonomously\n- All actions require human approval and oversight\n- Focus on alerting, reporting, and documentation\n- Ensure compliance with internal IT policies, GDPR, and ISO standards\n- Maintain detailed audit trails for all decisions\n\nReturn structured JSON output with all required fields."},"promptType":"define","hasOutputParser":true},"typeVersion":3.1},{"id":"b5ca6335-0778-44b5-9fc0-69f5d1440b64","name":"Route by Severity","type":"n8n-nodes-base.switch","position":[1376,272],"parameters":{"rules":{"values":[{"outputKey":"Critical","conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.severity }}","rightValue":"critical"}]},"renameOutput":true},{"outputKey":"High","conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.severity }}","rightValue":"high"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra","renameFallbackOutput":"Medium/Low"}},"typeVersion":3.4},{"id":"48608800-94ed-4b84-8b0e-baa5f2fbbfe1","name":"Send Critical Alert Email","type":"n8n-nodes-base.emailSend","position":[1824,176],"webhookId":"7dc4f87c-c4dd-49c4-8043-6a14d322e8f0","parameters":{"html":"=<html>\n<head>\n  <style>\n    body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }\n    .header { background-color: #d32f2f; color: white; padding: 20px; text-align: center; }\n    .content { padding: 20px; }\n    .section { margin-bottom: 20px; }\n    .section-title { font-weight: bold; color: #d32f2f; margin-bottom: 10px; font-size: 16px; }\n    .detail-item { margin-bottom: 8px; }\n    .label { font-weight: bold; }\n    .severity-critical { color: #d32f2f; font-weight: bold; }\n    .footer { background-color: #f5f5f5; padding: 15px; margin-top: 20px; font-size: 12px; color: #666; }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1>🚨 CRITICAL DATA INTEGRITY ALERT</h1>\n  </div>\n  \n  <div class=\"content\">\n    <div class=\"section\">\n      <div class=\"section-title\">Anomaly Details</div>\n      <div class=\"detail-item\"><span class=\"label\">Type:</span> {{ $json.anomalyType }}</div>\n      <div class=\"detail-item\"><span class=\"label\">Description:</span> {{ $json.anomalyDescription }}</div>\n      <div class=\"detail-item\"><span class=\"label\">Detected At:</span> {{ $json.detectedAt }}</div>\n    </div>\n    \n    <div class=\"section\">\n      <div class=\"section-title\">Affected Systems</div>\n      <div class=\"detail-item\">{{ $json.affectedSystems }}</div>\n    </div>\n    \n    <div class=\"section\">\n      <div class=\"section-title\">Compliance Violations</div>\n      <div class=\"detail-item\">{{ $json.complianceViolations }}</div>\n    </div>\n    \n    <div class=\"section\">\n      <div class=\"section-title\">Severity Assessment</div>\n      <div class=\"detail-item\"><span class=\"label\">Severity Level:</span> <span class=\"severity-critical\">{{ $json.severity }}</span></div>\n      <div class=\"detail-item\"><span class=\"label\">Anomaly Score:</span> {{ $json.anomalyScore }}</div>\n    </div>\n    \n    <div class=\"section\">\n      <div class=\"section-title\">Recommended Actions</div>\n      <div class=\"detail-item\">{{ $json.recommendedActions }}</div>\n    </div>\n  </div>\n  \n  <div class=\"footer\">\n    <p>This is an automated alert from the AI-Driven Data Integrity Monitoring System.</p>\n    <p>Immediate action is required. Please review and respond according to your incident response procedures.</p>\n  </div>\n</body>\n</html>","options":{"appendAttribution":true},"subject":"=CRITICAL: Data Integrity Anomaly Detected - {{ $json.anomalyType }}","toEmail":"={{ $('Workflow Configuration').first().json.criticalAlertEmail }}","fromEmail":"user@example.com"},"typeVersion":2.1},{"id":"75030d6e-5ecb-4d92-85de-8a302d7100e5","name":"Send Critical Slack Alert","type":"n8n-nodes-base.slack","position":[1824,368],"webhookId":"3db1d0e5-443f-4bf4-81bf-41892bc90b55","parameters":{"text":"=🚨 CRITICAL DATA INTEGRITY ALERT\n\n*Anomaly Type:* {{ $json.anomalyType }}\n*Severity:* {{ $json.severity }}\n*Anomaly Score:* {{ $json.anomalyScore }}\n*Affected Systems:* {{ $json.affectedSystems.join(', ') }}\n\n*Compliance Violations:*\n{{ $json.complianceViolations.join('\\n') }}\n\n*Recommended Actions:*\n{{ $json.recommendations.join('\\n') }}\n\n⚠️ Human review and approval required before taking action.","select":"channel","channelId":{"__rl":true,"mode":"id","value":"={{ $('Workflow Configuration').first().json.slackCriticalChannel }}"},"otherOptions":{},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"credential-id","name":"Slack account"}},"typeVersion":2.4},{"id":"9f2b8037-b261-46ed-9ba3-390217763569","name":"Send High Priority Slack Alert","type":"n8n-nodes-base.slack","position":[1824,752],"webhookId":"fb46c8d3-3026-44f6-bc93-c2a8b708bcc4","parameters":{"text":"=⚠️ HIGH PRIORITY: Data Integrity Issue\n\n*Anomaly Type:* {{ $json.anomalyType }}\n*Severity:* {{ $json.severity }}\n*Anomaly Score:* {{ $json.anomalyScore }}\n*Affected Systems:* {{ $json.affectedSystems.join(', ') }}\n\n*Data Integrity Issues:*\n{{ $json.dataIntegrityIssues.join('\\n') }}\n\n*Recommendations:*\n{{ $json.recommendations.join('\\n') }}","select":"channel","channelId":{"__rl":true,"mode":"id","value":"={{ $('Workflow Configuration').first().json.slackHighPriorityChannel }}"},"otherOptions":{},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"credential-id","name":"Slack account"}},"typeVersion":2.4},{"id":"3e425569-929f-43ca-967d-afc938eafa78","name":"Prepare Executive Report","type":"n8n-nodes-base.set","position":[1536,576],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"reportTitle","type":"string","value":"=Data Integrity Monitoring Report - {{ $now.toFormat('yyyy-MM-dd HH:mm') }}"},{"id":"id-2","name":"anomalySummary","type":"string","value":"={{ $json.anomalyType }}"},{"id":"id-3","name":"severityLevel","type":"string","value":"={{ $json.severity }}"},{"id":"id-4","name":"affectedSystemsList","type":"string","value":"={{ $json.affectedSystems.join(', ') }}"},{"id":"id-5","name":"complianceStatus","type":"string","value":"={{ $json.complianceViolations.length > 0 ? 'Violations Detected' : 'Compliant' }}"},{"id":"id-6","name":"actionItemsSummary","type":"string","value":"={{ $json.recommendations.join('; ') }}"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"5cd4c527-719a-45c9-af40-851215d39d12","name":"Send Executive Report","type":"n8n-nodes-base.emailSend","position":[1824,560],"webhookId":"822ba056-9dd2-4fbc-8ba0-ac234ce87102","parameters":{"html":"=<!DOCTYPE html>\n<html>\n<head>\n  <style>\n    body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }\n    .header { background-color: #2c3e50; color: white; padding: 20px; text-align: center; }\n    .section { margin: 20px 0; padding: 15px; border-left: 4px solid #3498db; background-color: #f8f9fa; }\n    .section-title { font-size: 18px; font-weight: bold; color: #2c3e50; margin-bottom: 10px; }\n    .content { padding: 10px; }\n    .metric { display: inline-block; margin: 10px 20px 10px 0; }\n    .metric-label { font-weight: bold; color: #555; }\n    .metric-value { color: #3498db; font-size: 16px; }\n    .status-ok { color: #27ae60; font-weight: bold; }\n    .status-warning { color: #f39c12; font-weight: bold; }\n    .status-critical { color: #e74c3c; font-weight: bold; }\n    .footer { margin-top: 30px; padding: 15px; background-color: #ecf0f1; text-align: center; font-size: 12px; color: #7f8c8d; }\n    ul { margin: 10px 0; padding-left: 20px; }\n    li { margin: 5px 0; }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1>Executive Report: Data Integrity Monitoring</h1>\n    <p>Report Date: {{ $now.toFormat('MMMM dd, yyyy') }}</p>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">📊 Executive Summary</div>\n    <div class=\"content\">\n      <p>This report provides a comprehensive overview of data integrity monitoring activities, anomaly detection results, and compliance status for the reporting period.</p>\n      <div class=\"metric\">\n        <span class=\"metric-label\">Total Data Sources Monitored:</span>\n        <span class=\"metric-value\">{{ $('Merge Data Sources').item.json.totalSources || 'N/A' }}</span>\n      </div>\n      <div class=\"metric\">\n        <span class=\"metric-label\">Anomalies Detected:</span>\n        <span class=\"metric-value\">{{ $('Data Validation Agent').item.json.anomalyCount || 0 }}</span>\n      </div>\n      <div class=\"metric\">\n        <span class=\"metric-label\">Overall Status:</span>\n        <span class=\"metric-value {{ $('Orchestration Agent').item.json.overallStatus === 'OK' ? 'status-ok' : ($('Orchestration Agent').item.json.overallStatus === 'WARNING' ? 'status-warning' : 'status-critical') }}\">{{ $('Orchestration Agent').item.json.overallStatus || 'UNDER REVIEW' }}</span>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">🔍 Anomaly Overview</div>\n    <div class=\"content\">\n      <p><strong>Summary:</strong> {{ $('Data Validation Agent').item.json.anomalySummary || 'No significant anomalies detected during this monitoring period.' }}</p>\n      <ul>\n        <li><strong>Critical Issues:</strong> {{ $('Orchestration Agent').item.json.criticalCount || 0 }}</li>\n        <li><strong>High Priority Issues:</strong> {{ $('Orchestration Agent').item.json.highPriorityCount || 0 }}</li>\n        <li><strong>Medium Priority Issues:</strong> {{ $('Orchestration Agent').item.json.mediumPriorityCount || 0 }}</li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">💻 Affected Systems</div>\n    <div class=\"content\">\n      <p>The following systems have been identified with data integrity concerns:</p>\n      <ul>\n        <li><strong>Software Metrics Platform:</strong> {{ $('Fetch Software Metrics').item.json.status || 'Operational' }}</li>\n        <li><strong>BI Dashboard:</strong> {{ $('Fetch BI Dashboard Data').item.json.status || 'Operational' }}</li>\n        <li><strong>Data Integration Layer:</strong> {{ $('Merge Data Sources').item.json.integrationStatus || 'Operational' }}</li>\n      </ul>\n      <p><em>Detailed system-level analysis: {{ $('Orchestration Agent').item.json.affectedSystemsDetails || 'All systems within acceptable parameters.' }}</em></p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">✅ Compliance Status</div>\n    <div class=\"content\">\n      <p><strong>GDPR Compliance:</strong> <span class=\"{{ $('Orchestration Agent').item.json.gdprCompliant ? 'status-ok' : 'status-critical' }}\">{{ $('Orchestration Agent').item.json.gdprCompliant ? 'COMPLIANT' : 'NON-COMPLIANT' }}</span></p>\n      <p><strong>ISO 27001 Compliance:</strong> <span class=\"{{ $('Orchestration Agent').item.json.isoCompliant ? 'status-ok' : 'status-critical' }}\">{{ $('Orchestration Agent').item.json.isoCompliant ? 'COMPLIANT' : 'NON-COMPLIANT' }}</span></p>\n      <p><em>Compliance Notes:</em> {{ $('Orchestration Agent').item.json.complianceNotes || 'All compliance requirements are being met. Regular audits continue as scheduled.' }}</p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">⚠️ Data Integrity Issues</div>\n    <div class=\"content\">\n      <p>{{ $('Data Validation Agent').item.json.integrityIssuesDescription || 'No critical data integrity issues identified. All data sources are synchronized and validated.' }}</p>\n      <ul>\n        <li><strong>Data Consistency:</strong> {{ $('Data Validation Agent').item.json.consistencyScore || '98%' }}</li>\n        <li><strong>Data Completeness:</strong> {{ $('Data Validation Agent').item.json.completenessScore || '99%' }}</li>\n        <li><strong>Data Accuracy:</strong> {{ $('Data Validation Agent').item.json.accuracyScore || '97%' }}</li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">🎯 Recommended Actions</div>\n    <div class=\"content\">\n      <p>Based on the analysis, the following actions are recommended:</p>\n      <ul>\n        <li>{{ $('Orchestration Agent').item.json.recommendation1 || 'Continue regular monitoring schedule' }}</li>\n        <li>{{ $('Orchestration Agent').item.json.recommendation2 || 'Review and update data validation rules quarterly' }}</li>\n        <li>{{ $('Orchestration Agent').item.json.recommendation3 || 'Conduct team training on data quality best practices' }}</li>\n        <li>{{ $('Orchestration Agent').item.json.recommendation4 || 'Implement automated remediation for common issues' }}</li>\n      </ul>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">📅 Next Steps</div>\n    <div class=\"content\">\n      <ul>\n        <li><strong>Immediate:</strong> {{ $('Orchestration Agent').item.json.immediateAction || 'Address any critical alerts identified in this report' }}</li>\n        <li><strong>Short-term (1-2 weeks):</strong> {{ $('Orchestration Agent').item.json.shortTermAction || 'Review and optimize data validation thresholds' }}</li>\n        <li><strong>Long-term (1-3 months):</strong> {{ $('Orchestration Agent').item.json.longTermAction || 'Enhance monitoring capabilities with additional data sources' }}</li>\n      </ul>\n      <p><strong>Next Report:</strong> {{ $now.plus({ days: 7 }).toFormat('MMMM dd, yyyy') }}</p>\n    </div>\n  </div>\n\n  <div class=\"footer\">\n    <p>This report was automatically generated by the AI-Driven Data Integrity Monitoring System</p>\n    <p>For questions or concerns, please contact the Data Governance Team</p>\n    <p>&copy; {{ $now.toFormat('yyyy') }} Company Name. All rights reserved.</p>\n  </div>\n</body>\n</html>","options":{"appendAttribution":true},"subject":"=Executive Report: Data Integrity Monitoring - {{ $now.toFormat('yyyy-MM-dd') }}","toEmail":"={{ $('Workflow Configuration').first().json.executiveReportEmail }}","fromEmail":"user@example.com"},"typeVersion":2.1},{"id":"42d21581-aa7c-40e1-a5c5-f55b7fd77779","name":"Log Compliance Audit Trail","type":"n8n-nodes-base.code","position":[2048,288],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Comprehensive Audit Trail Log for GDPR and ISO Compliance\n\nconst timestamp = new Date().toISOString();\nconst inputData = $input.item.json;\n\n// Extract anomaly details from previous nodes\nconst anomalyDetails = {\n  detectedAt: timestamp,\n  anomalyType: inputData.anomalyType || 'Unknown',\n  severity: inputData.severity || 'Unknown',\n  affectedSystems: inputData.affectedSystems || [],\n  dataPoints: inputData.dataPoints || {},\n  validationResults: inputData.validationResults || {},\n  orchestrationDecisions: inputData.orchestrationDecisions || {}\n};\n\n// Extract actions taken\nconst actionsTaken = {\n  alertsSent: inputData.alertsSent || [],\n  remediationSteps: inputData.remediationSteps || [],\n  escalationLevel: inputData.escalationLevel || 'None',\n  automatedActions: inputData.automatedActions || []\n};\n\n// Extract notification channels used\nconst notificationChannels = {\n  email: inputData.emailSent || false,\n  slack: inputData.slackSent || false,\n  recipients: inputData.recipients || [],\n  messageIds: inputData.messageIds || []\n};\n\n// Compliance documentation\nconst complianceDocumentation = {\n  gdprCompliance: {\n    dataProcessingLawfulness: 'Automated monitoring for data integrity',\n    legalBasis: 'Legitimate interest - Article 6(1)(f) GDPR',\n    dataMinimization: 'Only necessary metrics collected',\n    purposeLimitation: 'Data integrity and security monitoring',\n    retentionPeriod: '90 days',\n    dataSubjectRights: 'Audit logs available upon request'\n  },\n  isoCompliance: {\n    standard: 'ISO 27001:2013',\n    controlObjective: 'A.12.4.1 Event Logging',\n    evidenceType: 'Automated audit trail',\n    reviewFrequency: 'Real-time monitoring with daily reviews'\n  }\n};\n\n// User approval status\nconst userApprovalStatus = {\n  requiresApproval: inputData.severity === 'critical' || inputData.severity === 'high',\n  approvalStatus: inputData.approvalStatus || 'Pending',\n  approvedBy: inputData.approvedBy || null,\n  approvalTimestamp: inputData.approvalTimestamp || null,\n  approvalComments: inputData.approvalComments || ''\n};\n\n// Create comprehensive audit log entry\nconst auditLogEntry = {\n  logId: `AUDIT-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n  timestamp: timestamp,\n  workflowName: 'AI-Driven Data Integrity Monitoring',\n  workflowExecutionId: $execution.id,\n  anomalyDetails: anomalyDetails,\n  actionsTaken: actionsTaken,\n  notificationChannels: notificationChannels,\n  complianceDocumentation: complianceDocumentation,\n  userApprovalStatus: userApprovalStatus,\n  metadata: {\n    nodeExecutionId: $execution.id,\n    executionMode: $execution.mode,\n    retentionDate: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000).toISOString(),\n    complianceVersion: '1.0',\n    auditTrailVersion: '2.0'\n  }\n};\n\n// Log to console for debugging\nconsole.log('Compliance Audit Trail Created:', auditLogEntry);\n\n// Return the audit log entry\nreturn {\n  json: auditLogEntry\n};"},"typeVersion":2},{"id":"c5fd76b7-7e1c-498c-9396-11a41035004f","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[752,-320],"parameters":{"color":4,"width":608,"height":352,"content":"## Prerequisites\nOpenAI or Nvidia API credentials for AI-powered analysis, API access to software metrics platforms\n## Use Cases\nSaaS platforms monitoring service health metrics, e-commerce businesses tracking inventory data quality\n## Customization\nAdjust scheduling frequency for monitoring intervals, modify severity thresholds for alert classification\n## Benefits\nReduces mean time to detection by 75%, eliminates manual data quality checks"},"typeVersion":1},{"id":"b28afeb9-0dd2-4c1a-8dfa-9d34f8091cae","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[272,-336],"parameters":{"width":448,"height":352,"content":"## Setup Steps\n1. Configure Schedule Data Integrity Check trigger with monitoring frequency\n2. Connect Workflow Configuration node with data source parameters\n3. Set up Fetch Software Metrics and Fetch BI Dashboard Data nodes with respective API credentials\n4. Configure Merge Data Sources node for data consolidation logic\n5. Connect Data Validation Agent with OpenAI/Nvidia API credentials for anomaly detection\n6. Set up Orchestration Agent with AI API credentials for severity assessment\n7. Configure Check for Anomalies node with routing conditions\n8. Connect Route by Severity node with classification logic"},"typeVersion":1},{"id":"1266b91f-f6ab-4e0c-ad6e-97fedc372d0b","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-464,-288],"parameters":{"width":704,"height":288,"content":"## How It Works\nThis workflow automates continuous data integrity monitoring and intelligent alert management across multiple data sources. Designed for data engineers, IT operations teams, and business intelligence analysts, it solves the critical challenge of detecting data anomalies and orchestrating appropriate responses based on severity levels. The system operates on scheduled intervals, fetching data from software metrics APIs and BI dashboards, then merging these sources for comprehensive analysis. It employs AI-powered validation and orchestration agents to detect anomalies, assess severity, and determine optimal response strategies. The workflow intelligently routes alerts based on severity classification, triggering critical notifications via email and Slack for high-priority issues while sending standard reports for routine findings. By maintaining detailed compliance audit logs and preparing executive summaries, it ensures stakeholders receive timely, actionable intelligence while creating audit trails for data quality monitoring initiatives."},"typeVersion":1},{"id":"38989ff0-5c6e-437a-a494-961a8bce2cba","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-512,80],"parameters":{"color":7,"width":896,"height":544,"content":"## Multi-Source Data Collection\n**What:** Fetches and merges data from software metrics APIs and BI dashboard sources on scheduled intervals\n**Why:** Ensures comprehensive monitoring coverage by combining operational metrics with business intelligence for complete visibility\n"},"typeVersion":1},{"id":"b29b03fa-367d-4ce9-ab2e-6389f5d6f565","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[992,80],"parameters":{"color":7,"width":1216,"height":896,"content":"## Severity-Based Alert Routing\n**What:** Routes alerts through severity-specific channels with tailored messaging for critical, high-priority, and standard notifications\n**Why:** Ensures urgent issues receive immediate attention while preventing alert fatigue from routine findings"},"typeVersion":1},{"id":"8e8723fe-7105-417f-ac7c-128a1243d5ac","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[400,80],"parameters":{"color":7,"width":544,"height":720,"content":"## AI-Powered Anomaly Detection\n**What:** Processes merged data through dual AI agents for validation and intelligent orchestration of anomaly findings\n**Why:** Leverages AI to detect subtle patterns and determine appropriate severity classifications beyond simple threshold-based rules\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"d8316c61-cb28-4db0-bc3f-5bb0c6f4d068","connections":{"Route by Severity":{"main":[[{"node":"Send Critical Alert Email","type":"main","index":0},{"node":"Send Critical Slack Alert","type":"main","index":0}],[{"node":"Send High Priority Slack Alert","type":"main","index":0}],[{"node":"Prepare Executive Report","type":"main","index":0}]]},"Merge Data Sources":{"main":[[{"node":"Data Validation Agent","type":"main","index":0}]]},"Check for Anomalies":{"main":[[{"node":"Orchestration Agent","type":"main","index":0}]]},"Orchestration Agent":{"main":[[{"node":"Route by Severity","type":"main","index":0}]]},"Data Validation Agent":{"main":[[{"node":"Check for Anomalies","type":"main","index":0}]]},"Send Executive Report":{"main":[[{"node":"Log Compliance Audit Trail","type":"main","index":0}]]},"Fetch Software Metrics":{"main":[[{"node":"Merge Data Sources","type":"main","index":0}]]},"Workflow Configuration":{"main":[[{"node":"Fetch Software Metrics","type":"main","index":0},{"node":"Fetch BI Dashboard Data","type":"main","index":0}]]},"Fetch BI Dashboard Data":{"main":[[{"node":"Merge Data Sources","type":"main","index":0}]]},"Prepare Executive Report":{"main":[[{"node":"Send Executive Report","type":"main","index":0}]]},"Validation Output Parser":{"ai_outputParser":[[{"node":"Data Validation Agent","type":"ai_outputParser","index":0}]]},"Send Critical Alert Email":{"main":[[{"node":"Log Compliance Audit Trail","type":"main","index":0}]]},"Send Critical Slack Alert":{"main":[[{"node":"Log Compliance Audit Trail","type":"main","index":0}]]},"Orchestration Output Parser":{"ai_outputParser":[[{"node":"Orchestration Agent","type":"ai_outputParser","index":0}]]},"OpenAI Model - Orchestration":{"ai_languageModel":[[{"node":"Orchestration Agent","type":"ai_languageModel","index":0}]]},"Schedule Data Integrity Check":{"main":[[{"node":"Workflow Configuration","type":"main","index":0}]]},"OpenAI Model - Data Validation":{"ai_languageModel":[[{"node":"Data Validation Agent","type":"ai_languageModel","index":0}]]},"Send High Priority Slack Alert":{"main":[[{"node":"Log Compliance Audit Trail","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":25,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.slack":{"count":2},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.emailSend":{"count":2},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.httpRequest":{"count":2},"@n8n/n8n-nodes-langchain.agent":{"count":2},"n8n-nodes-base.scheduleTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":2},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Cheng Siong Chin","username":"cschin","bio":"Dr. Cheng Siong CHIN is an n8n workflow creator specializing in AI-powered automation, agent orchestration, and intelligent system integrations. He designs and builds end-to-end workflows that combine LLMs, APIs, and data pipelines to streamline complex processes and deliver production-ready automation solutions. Contact me to discuss custom AI workflows and agent architectures.\n","verified":true,"links":["https://gravatar.com/mysticluminary9fa255f7f5"],"avatar":"https://gravatar.com/avatar/54544f98e839bb9dd9a764ad1e6823eeddb6db5138d201e42f291a7b0a73303f?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":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting 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/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/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/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/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/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"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/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/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.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/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/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/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":49,"name":"AI Summarization"}],"image":[]}}