{"workflow":{"id":13725,"name":"Generate monthly AI financial reports with OpenAI and email/Slack distribution","views":49,"recentViews":0,"totalViews":49,"createdAt":"2026-02-26T09:20:48.430Z","description":"This n8n workflow automatically fetches monthly financial statements, normalizes the data, performs KPI calculations and trend analysis, detects anomalies, generates AI-powered executive insights and recommendations, creates professional reports, and distributes them to stakeholders while maintaining historical records.\n\n### Key Insights\n- Consistent data formats from accounting systems (QuickBooks, Xero, etc.) are critical for reliable normalization and analysis.\n- AI-generated insights are only as good as the input data quality — always validate fetched statements and mappings first.\n- Monthly scheduling ensures timely reporting; consider adding manual triggers for ad-hoc runs during testing.\n\n### Workflow Process\n1. Initiate the workflow with the **Monthly Schedule Trigger** node (runs on the 1st of each month at 8 AM).\n2. Fetch current period financial statements (P&L, balance sheet, cash flow) using the accounting API nodes.\n3. Fetch previous period data for accurate YoY/MoM comparisons.\n4. Merge all statements, normalize formats, validate integrity, and calculate standardized KPIs/metrics using data transformation nodes.\n5. Analyze trends, variances, and detect anomalies/unusual patterns.\n6. Send cleaned financial data to an AI model (OpenAI/Claude) to generate natural language executive summaries, key insights, and actionable management recommendations.\n7. Format and generate professional HTML/PDF reports (with charts/visualizations if configured).\n8. Store the report and metrics in a database for historical tracking, post summary to Slack, and email the full report to management/stakeholders.\n\n### Usage Guide\n- Import the workflow into n8n and configure credentials for your accounting system(s), AI provider, database, Slack webhook, and email (SMTP).\n- Map fields correctly in the normalization/validation nodes to match your source data structure.\n- Test end-to-end with sample/historical financial data before enabling the schedule.\n- Execute manually first via the **Execute workflow** button to verify each step (especially API fetches and AI output quality).\n\n### Prerequisites\n- API access to accounting system (QuickBooks, Xero, SAP, or direct database connection)\n- OpenAI or Claude API key for insight generation\n- Database (PostgreSQL, MySQL, etc.) with tables ready for reports and metrics storage\n- SMTP server or email service credentials\n- Slack webhook (optional for notifications)\n- PDF/HTML generation tools (if using external services like WeasyPrint via code node or Make.com-style nodes)\n\n### Customization Options\n- Adjust the schedule (e.g., quarterly instead of monthly) in the trigger node.\n- Modify the AI prompt in the LLM node to change the style/tone of summaries or add specific focus areas (e.g., cost control, revenue growth).\n- Extend anomaly detection rules or add more KPIs in the analysis section.\n- Change distribution channels (add Teams, Discord, Google Drive upload, etc.) by modifying or adding nodes after report generation.\n- Add conditional branching for high-priority alerts (e.g., if major anomaly detected → immediate notification).\n","workflow":{"id":"jztwkBCtrmbaV357","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"AI Financial Report Analyzer","tags":[],"nodes":[{"id":"fa3d6986-029c-4604-b411-018d91531334","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-320,-64],"parameters":{"width":920,"height":850,"content":"## AI Financial Report Analyzer\n\nAutomates financial data analysis and generates executive summaries with AI-powered insights, anomaly detection, and management recommendations.\n\n## How it works\n\n1. **Trigger** — Runs monthly on the 1st at 8 AM to analyze financial data\n2. **Extract** — Fetches P&L statements, balance sheets, cash flow data from accounting systems\n3. **Normalize** — Standardizes formats and validates data integrity\n4. **Analyze** — Calculates KPIs, financial ratios, YoY/MoM trends\n5. **Detect** — Identifies anomalies, trends, and unusual patterns\n6. **Insights** — Uses AI to generate natural language summaries and management recommendations\n7. **Generate** — Creates professional PDF/HTML reports with visualizations\n8. **Distribute** — Sends to stakeholders via Email, Slack, and stores in document management\n\n## Setup steps\n\n1. **Accounting APIs** — Connect QuickBooks, Xero, SAP, or financial database\n2. **Data Validation** — Configure field mappings and normalization rules\n3. **AI/LLM** — Set up OpenAI or Claude API for insights generation\n4. **PDF Generation** — Configure report styling and layouts\n5. **Database** — Create tables for reports, metrics, and historical data\n6. **Distribution** — Add Slack webhooks, SMTP, OneDrive/Google Drive credentials\n7. **Test** — Validate with sample financial data, then activate"},"typeVersion":1},{"id":"23b8cef1-684a-4b1a-87f9-6bff9e1b6853","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[800,96],"parameters":{"color":3,"width":520,"height":882,"content":"## 1. Trigger & Extract Data\n\nMonthly schedule and fetch financial statements from accounting systems"},"typeVersion":1},{"id":"ac588f16-6d13-438b-8ed4-0eced4a8258b","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1344,176],"parameters":{"color":3,"width":376,"height":642,"content":"## 2. Data Normalization & Validation\n\nStandardize formats and calculate financial metrics & ratios"},"typeVersion":1},{"id":"e95b2ae4-4412-4ffc-b1bc-f66705a08392","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1744,176],"parameters":{"color":3,"width":408,"height":650,"content":"## 3. Analysis & Anomaly Detection\n\nDetect trends, analyze variance, and identify unusual patterns"},"typeVersion":1},{"id":"390d4191-07c1-448e-a44b-08fb019eb14d","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2192,144],"parameters":{"color":3,"width":416,"height":678,"content":"## 4. AI Insights & Report Generation\n\nGenerate executive summaries and professional reports with visualizations"},"typeVersion":1},{"id":"165661f0-6e1f-41de-a766-8036adfae0a2","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2656,160],"parameters":{"color":3,"width":672,"height":662,"content":"## 5. Distribution & Notification\n\nSend reports to stakeholders and store for historical tracking"},"typeVersion":1},{"id":"575a55b8-8934-49d1-bee6-6fa1c9d71dfc","name":"Monthly analysis on 1st at 8 AM","type":"n8n-nodes-base.scheduleTrigger","position":[896,528],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 8 1 * *"}]}},"typeVersion":1.2},{"id":"8ed15a21-42ed-49f6-9fcd-bbfc354da12d","name":"Fetch P&L statement","type":"n8n-nodes-base.httpRequest","position":[1120,240],"parameters":{"url":"https://api.accounting.example.com/financial/income-statement","options":{}},"typeVersion":4.2},{"id":"d47ff1e3-00de-4315-ac5e-b2cad509911d","name":"Fetch balance sheet","type":"n8n-nodes-base.httpRequest","position":[1120,432],"parameters":{"url":"https://api.accounting.example.com/financial/balance-sheet","options":{}},"typeVersion":4.2},{"id":"35dc354f-bca6-42ec-a9c3-fa5051be8735","name":"Fetch cash flow statement","type":"n8n-nodes-base.httpRequest","position":[1120,624],"parameters":{"url":"https://api.accounting.example.com/financial/cash-flow","options":{}},"typeVersion":4.2},{"id":"70c8bc63-01e0-4f90-92d3-69a880c68154","name":"Fetch previous period data for comparison","type":"n8n-nodes-base.httpRequest","position":[1120,816],"parameters":{"url":"https://api.accounting.example.com/financial/historical","options":{}},"typeVersion":4.2},{"id":"232f5f9e-6fd7-4bb9-a133-3578fd459b48","name":"Merge all financial statements","type":"n8n-nodes-base.merge","position":[1344,528],"parameters":{"mode":"combine","options":{}},"typeVersion":3},{"id":"9e0a3cfb-9abf-4c63-b4b6-e69d4e17c778","name":"Normalize and validate financial data","type":"n8n-nodes-base.code","position":[1568,528],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Normalize and validate financial data\nconst data = $input.item.json;\n\n// Extract financial statements\nconst incomeStatement = data.income_statement || {};\nconst balanceSheet = data.balance_sheet || {};\nconst cashFlow = data.cash_flow || {};\nconst previous = data.previous_period || {};\n\nconst currentDate = new Date();\nconst reportMonth = currentDate.toLocaleString('en-US', { month: 'long', year: 'numeric' });\nconst reportId = `FRA-${currentDate.getFullYear()}-M${String(currentDate.getMonth() + 1).padStart(2, '0')}`;\nconst timestamp = currentDate.toISOString();\n\n// --- P&L Metrics ---\nconst revenue = incomeStatement.total_revenue || 0;\nconst costOfRevenue = incomeStatement.cost_of_revenue || 0;\nconst grossProfit = revenue - costOfRevenue;\nconst grossMargin = revenue > 0 ? (grossProfit / revenue * 100) : 0;\nconst operatingExpenses = incomeStatement.operating_expenses || 0;\nconst operatingIncome = grossProfit - operatingExpenses;\nconst operatingMargin = revenue > 0 ? (operatingIncome / revenue * 100) : 0;\nconst netIncome = incomeStatement.net_income || 0;\nconst netMargin = revenue > 0 ? (netIncome / revenue * 100) : 0;\nconst ebitda = incomeStatement.ebitda || operatingIncome + (incomeStatement.depreciation || 0);\n\n// --- Balance Sheet Metrics ---\nconst totalAssets = balanceSheet.total_assets || 0;\nconst totalLiabilities = balanceSheet.total_liabilities || 0;\nconst totalEquity = balanceSheet.total_equity || 0;\nconst currentAssets = balanceSheet.current_assets || 0;\nconst currentLiabilities = balanceSheet.current_liabilities || 0;\nconst cashAndEquivalents = balanceSheet.cash || 0;\nconst accountsReceivable = balanceSheet.accounts_receivable || 0;\nconst inventory = balanceSheet.inventory || 0;\nconst fixedAssets = balanceSheet.fixed_assets || 0;\nconst longTermDebt = balanceSheet.long_term_debt || 0;\n\n// --- Cash Flow Metrics ---\nconst operatingCashFlow = cashFlow.operating_cash_flow || 0;\nconst investingCashFlow = cashFlow.investing_cash_flow || 0;\nconst financingCashFlow = cashFlow.financing_cash_flow || 0;\nconst freeCashFlow = operatingCashFlow - (cashFlow.capital_expenditures || 0);\n\n// --- Financial Ratios ---\nconst currentRatio = currentLiabilities > 0 ? (currentAssets / currentLiabilities).toFixed(2) : 'N/A';\nconst quickRatio = currentLiabilities > 0 ? ((currentAssets - inventory) / currentLiabilities).toFixed(2) : 'N/A';\nconst debtToEquity = totalEquity > 0 ? (totalLiabilities / totalEquity).toFixed(2) : 'N/A';\nconst debtToAssets = totalAssets > 0 ? (totalLiabilities / totalAssets * 100).toFixed(2) : 'N/A';\nconst returnOnAssets = totalAssets > 0 ? (netIncome / totalAssets * 100).toFixed(2) : 'N/A';\nconst returnOnEquity = totalEquity > 0 ? (netIncome / totalEquity * 100).toFixed(2) : 'N/A';\nconst assetTurnover = revenue > 0 && totalAssets > 0 ? (revenue / totalAssets).toFixed(2) : 'N/A';\nconst interestCoverage = incomeStatement.interest_expense > 0 ? (ebitda / incomeStatement.interest_expense).toFixed(2) : 'N/A';\n\n// --- YoY/MoM Comparison ---\nconst prevRevenue = previous.revenue || revenue;\nconst prevNetIncome = previous.net_income || netIncome;\nconst prevTotalAssets = previous.total_assets || totalAssets;\n\nconst revenueChange = prevRevenue > 0 ? ((revenue - prevRevenue) / prevRevenue * 100).toFixed(2) : 0;\nconst incomeChange = prevNetIncome !== 0 ? ((netIncome - prevNetIncome) / Math.abs(prevNetIncome) * 100).toFixed(2) : 0;\nconst assetChange = prevTotalAssets > 0 ? ((totalAssets - prevTotalAssets) / prevTotalAssets * 100).toFixed(2) : 0;\n\n// --- Working Capital & Cash Analysis ---\nconst workingCapital = currentAssets - currentLiabilities;\nconst cashConversionCycle = (accountsReceivable + inventory) > 0 ? Math.round((accountsReceivable + inventory) / (revenue / 365)) : 0;\nconst daysInventoryOutstanding = revenue > 0 ? Math.round((inventory / (costOfRevenue / 365))) : 0;\nconst daysReceivablesOutstanding = revenue > 0 ? Math.round((accountsReceivable / (revenue / 365))) : 0;\nconst freeCashFlowMargin = revenue > 0 ? (freeCashFlow / revenue * 100).toFixed(2) : 0;\n\n// --- Financial Health Score (0-100) ---\nlet healthScore = 50; // Base score\nif (currentRatio >= 1.5) healthScore += 10; // Good liquidity\nif (debtToEquity < 1) healthScore += 10; // Healthy leverage\nif (netMargin > 10) healthScore += 10; // Good profitability\nif (freeCashFlow > 0) healthScore += 10; // Positive FCF\nif (revenueChange > 5) healthScore += 5; // Revenue growth\nif (returnOnEquity > 15) healthScore += 5; // Good ROE\nif (currentRatio < 1) healthScore -= 15; // Poor liquidity\nif (debtToEquity > 2) healthScore -= 15; // High leverage\nif (netMargin < 0) healthScore -= 20; // Unprofitable\nhealthScore = Math.max(0, Math.min(100, healthScore));\n\n// --- Health Category ---\nlet healthCategory = 'Excellent';\nif (healthScore < 30) healthCategory = 'Critical';\nelse if (healthScore < 50) healthCategory = 'Poor';\nelse if (healthScore < 70) healthCategory = 'Fair';\nelse if (healthScore < 85) healthCategory = 'Good';\n\nreturn {\n  json: {\n    // Report Identity\n    reportId,\n    reportMonth,\n    timestamp,\n    \n    // P&L Statement\n    revenue: Math.round(revenue),\n    cost_of_revenue: Math.round(costOfRevenue),\n    gross_profit: Math.round(grossProfit),\n    gross_margin_percent: parseFloat(grossMargin.toFixed(2)),\n    operating_expenses: Math.round(operatingExpenses),\n    operating_income: Math.round(operatingIncome),\n    operating_margin_percent: parseFloat(operatingMargin.toFixed(2)),\n    ebitda: Math.round(ebitda),\n    net_income: Math.round(netIncome),\n    net_margin_percent: parseFloat(netMargin.toFixed(2)),\n    \n    // Balance Sheet\n    total_assets: Math.round(totalAssets),\n    total_liabilities: Math.round(totalLiabilities),\n    total_equity: Math.round(totalEquity),\n    current_assets: Math.round(currentAssets),\n    current_liabilities: Math.round(currentLiabilities),\n    cash_equivalents: Math.round(cashAndEquivalents),\n    accounts_receivable: Math.round(accountsReceivable),\n    inventory: Math.round(inventory),\n    fixed_assets: Math.round(fixedAssets),\n    long_term_debt: Math.round(longTermDebt),\n    working_capital: Math.round(workingCapital),\n    \n    // Cash Flow\n    operating_cash_flow: Math.round(operatingCashFlow),\n    investing_cash_flow: Math.round(investingCashFlow),\n    financing_cash_flow: Math.round(financingCashFlow),\n    free_cash_flow: Math.round(freeCashFlow),\n    free_cash_flow_margin_percent: parseFloat(freeCashFlowMargin),\n    \n    // Financial Ratios\n    current_ratio: currentRatio,\n    quick_ratio: quickRatio,\n    debt_to_equity: debtToEquity,\n    debt_to_assets_percent: debtToAssets,\n    return_on_assets_percent: returnOnAssets,\n    return_on_equity_percent: returnOnEquity,\n    asset_turnover: assetTurnover,\n    interest_coverage: interestCoverage,\n    \n    // Operational Metrics\n    days_inventory_outstanding: daysInventoryOutstanding,\n    days_receivables_outstanding: daysReceivablesOutstanding,\n    cash_conversion_cycle_days: cashConversionCycle,\n    \n    // YoY/MoM Changes\n    revenue_change_percent: parseFloat(revenueChange),\n    net_income_change_percent: parseFloat(incomeChange),\n    total_assets_change_percent: parseFloat(assetChange),\n    \n    // Health Score\n    financial_health_score: healthScore,\n    financial_health_category: healthCategory,\n    \n    // Original data\n    original_data: data\n  }\n};"},"typeVersion":2},{"id":"b27ded34-c82c-4c72-b3d5-f50c7612a1bc","name":"Analyze trends and detect anomalies","type":"n8n-nodes-base.code","position":[1792,528],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Analyze financial trends and detect anomalies\nconst data = $input.item.json;\n\n// --- Revenue Trend Analysis ---\nconst revenueTrend = data.revenue_change_percent > 5 ? 'Growing' \n  : data.revenue_change_percent > 0 ? 'Stable Growth' \n  : data.revenue_change_percent > -5 ? 'Minor Decline' \n  : 'Significant Decline';\n\nconst marginTrend = data.operating_margin_percent > 15 ? 'Healthy' \n  : data.operating_margin_percent > 5 ? 'Acceptable' \n  : data.operating_margin_percent > 0 ? 'Weak' \n  : 'Unprofitable';\n\n// --- Anomaly Detection ---\nconst anomalies = [];\nconst warnings = [];\nconst recommendations = [];\n\n// Liquidity anomalies\nif (parseFloat(data.current_ratio) < 1) {\n  anomalies.push('Critical: Current ratio below 1.0 indicates potential liquidity crisis');\n  recommendations.push('Improve short-term liquidity by increasing current assets or reducing current liabilities');\n}\nif (parseFloat(data.current_ratio) < 1.5) {\n  warnings.push('Low current ratio may indicate tight working capital management');\n}\nif (data.cash_equivalents < data.current_liabilities * 0.2) {\n  warnings.push('Cash reserves are low relative to current liabilities');\n}\n\n// Profitability anomalies\nif (data.net_margin_percent < 0) {\n  anomalies.push('Critical: Company is unprofitable with negative net margin');\n  recommendations.push('Review cost structure and operating expenses to achieve profitability');\n}\nif (data.net_margin_percent < 5 && data.revenue > 0) {\n  warnings.push('Low net profit margin indicates thin profitability');\n}\nif (data.gross_margin_percent < 20) {\n  warnings.push('Low gross margin suggests high cost of goods sold');\n  recommendations.push('Analyze pricing strategy and COGS reduction opportunities');\n}\n\n// Leverage anomalies\nif (parseFloat(data.debt_to_equity) > 2) {\n  anomalies.push('Critical: Debt-to-equity ratio exceeds 2.0, high financial risk');\n  recommendations.push('Consider debt reduction or equity injection to strengthen balance sheet');\n}\nif (parseFloat(data.debt_to_equity) > 1.5) {\n  warnings.push('High leverage may limit financial flexibility');\n}\n\n// Cash flow anomalies\nif (data.free_cash_flow < 0) {\n  anomalies.push('Critical: Negative free cash flow unsustainable long-term');\n  recommendations.push('Reduce capital expenditures or improve operating cash flow generation');\n}\nif (data.free_cash_flow < data.net_income * 0.5) {\n  warnings.push('Free cash flow significantly lower than net income (quality of earnings concern)');\n  recommendations.push('Investigate working capital changes and cash conversion efficiency');\n}\n\n// Growth vs. profitability\nif (data.revenue_change_percent > 10 && data.net_income_change_percent < data.revenue_change_percent - 5) {\n  warnings.push('Revenue growth outpacing profit growth indicates margin pressure');\n  recommendations.push('Monitor cost control and operational efficiency during growth phase');\n}\n\n// ROE anomalies\nif (parseFloat(data.return_on_equity_percent) < 10) {\n  warnings.push('Return on equity below 10% suggests suboptimal capital efficiency');\n}\nif (parseFloat(data.return_on_equity_percent) > 30) {\n  recommendations.push('Exceptional ROE - consider whether leverage is sustainable');\n}\n\n// Working capital issues\nif (data.cash_conversion_cycle_days > 90) {\n  warnings.push('Long cash conversion cycle indicates working capital pressure');\n  recommendations.push('Improve inventory turnover or accelerate receivables collection');\n}\n\n// Asset utilization\nif (parseFloat(data.asset_turnover) < 0.5) {\n  warnings.push('Low asset turnover suggests inefficient use of assets');\n  recommendations.push('Review asset base efficiency and consider divestments if needed');\n}\n\n// Interest coverage\nif (data.interest_coverage !== 'N/A' && parseFloat(data.interest_coverage) < 2) {\n  anomalies.push('Low interest coverage ratio (< 2.0) indicates debt service risk');\n  recommendations.push('Prioritize debt reduction or EBITDA improvement');\n}\n\n// Revenue stability check\nif (Math.abs(data.revenue_change_percent) > 20) {\n  warnings.push('Large revenue variance from prior period warrants investigation');\n}\n\n// --- Key Strengths ---\nconst strengths = [];\nif (parseFloat(data.current_ratio) > 2) strengths.push('Strong liquidity position');\nif (data.net_margin_percent > 15) strengths.push('Excellent profit margins');\nif (parseFloat(data.debt_to_equity) < 0.5) strengths.push('Conservative debt levels');\nif (data.free_cash_flow > data.net_income) strengths.push('Strong cash generation');\nif (data.revenue_change_percent > 10) strengths.push('Robust revenue growth');\nif (parseFloat(data.return_on_equity_percent) > 20) strengths.push('Excellent return on equity');\n\n// --- Performance Rating ---\nlet performanceRating = 'Average';\nif (anomalies.length > 2) performanceRating = 'Poor';\nelse if (anomalies.length > 0 || warnings.length > 3) performanceRating = 'Below Average';\nelse if (warnings.length > 0) performanceRating = 'Average';\nelse if (strengths.length > 3) performanceRating = 'Strong';\nelse if (strengths.length > 5) performanceRating = 'Excellent';\n\nreturn {\n  json: {\n    ...data,\n    \n    // Trend Analysis\n    revenue_trend: revenueTrend,\n    margin_trend: marginTrend,\n    \n    // Anomalies & Warnings\n    critical_anomalies: anomalies,\n    anomaly_count: anomalies.length,\n    warnings: warnings,\n    warning_count: warnings.length,\n    \n    // Recommendations\n    strategic_recommendations: recommendations,\n    \n    // Strengths\n    key_strengths: strengths,\n    strength_count: strengths.length,\n    \n    // Overall Assessment\n    performance_rating: performanceRating,\n    analysis_timestamp: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"145cc376-6846-4a02-8d91-d2be55c6f62c","name":"Generate AI-powered insights","type":"n8n-nodes-base.httpRequest","position":[2016,528],"parameters":{"url":"https://api.openai.com/v1/chat/completions","method":"POST","options":{},"sendBody":true,"bodyParameters":{"parameters":[{"name":"model","value":"gpt-4o-mini"},{"name":"messages","value":"=[{\"role\": \"system\", \"content\": \"You are a financial analyst expert. Generate concise, executive-level financial insights based on the provided data.\"}, {\"role\": \"user\", \"content\": \"Analyze this financial data and provide 3-4 key insights:\\n\\nRevenue: $\" + $json.revenue + \"\\nNet Income: $\" + $json.net_income + \"\\nNet Margin: \" + $json.net_margin_percent + \"%\\nCash Flow: $\" + $json.free_cash_flow + \"\\nDebt/Equity: \" + $json.debt_to_equity + \"\\nHealth Score: \" + $json.financial_health_score + \"/100\\n\\nAnomalies: \" + $json.critical_anomalies.join(', ') + \"\\nRecommendations: \" + $json.strategic_recommendations.join(', ') + \"\"}]"},{"name":"temperature","value":"0.7"},{"name":"max_tokens","value":"500"}]}},"typeVersion":4.2},{"id":"d281d367-1a9b-45c9-a7ee-4851da626664","name":"Extract and format AI insights","type":"n8n-nodes-base.code","position":[2240,528],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Extract AI insights from API response\nconst response = $input.item.json;\nconst data = $input.item.json.original_data || {};\n\nlet aiInsights = '';\nif (response.choices && response.choices.length > 0) {\n  aiInsights = response.choices[0].message.content;\n}\n\nconst executiveSummary = `\nFINANCIAL PERFORMANCE SUMMARY (${data.reportMonth}):\n\n🎯 KEY METRICS:\n- Total Revenue: $${(data.revenue / 1000000).toFixed(1)}M (${data.revenue_change_percent > 0 ? '+' : ''}${data.revenue_change_percent}% YoY)\n- Net Income: $${(data.net_income / 1000000).toFixed(1)}M\n- Operating Margin: ${data.operating_margin_percent.toFixed(1)}%\n- Free Cash Flow: $${(data.free_cash_flow / 1000000).toFixed(1)}M\n- Financial Health Score: ${data.financial_health_score}/100 (${data.financial_health_category})\n\n📊 BALANCE SHEET STRENGTH:\n- Current Ratio: ${data.current_ratio} (Liquidity)\n- Debt-to-Equity: ${data.debt_to_equity} (Leverage)\n- Return on Equity: ${data.return_on_equity_percent}%\n- Working Capital: $${(data.working_capital / 1000000).toFixed(1)}M\n\n🚨 CRITICAL ITEMS (${data.anomaly_count}):\n${data.critical_anomalies.length > 0 ? data.critical_anomalies.map(a => '- ' + a).join('\\n') : '- No critical anomalies detected'}\n\n⚠️ WARNINGS (${data.warning_count}):\n${data.warnings.length > 0 ? data.warnings.map(w => '- ' + w).join('\\n') : '- No warnings'}\n\n💪 STRENGTHS (${data.strength_count}):\n${data.key_strengths.length > 0 ? data.key_strengths.map(s => '- ' + s).join('\\n') : '- Standard performance'}\n\n🎯 STRATEGIC RECOMMENDATIONS:\n${data.strategic_recommendations.length > 0 ? data.strategic_recommendations.map(r => '- ' + r).join('\\n') : '- No immediate actions required'}\n\n🤖 AI ANALYSIS:\n${aiInsights}\n`;\n\nreturn {\n  json: {\n    ...data,\n    ai_insights: aiInsights,\n    executive_summary: executiveSummary,\n    summary_generated: true\n  }\n};"},"typeVersion":2},{"id":"9a54d6f7-4178-4302-b38d-6466b9ff38c2","name":"Generate professional HTML report","type":"n8n-nodes-base.code","position":[2464,528],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Generate professional HTML report\nconst data = $input.item.json;\n\nconst healthColor = data.financial_health_category === 'Excellent' ? '#22c55e' \n  : data.financial_health_category === 'Good' ? '#84cc16' \n  : data.financial_health_category === 'Fair' ? '#f59e0b' \n  : data.financial_health_category === 'Poor' ? '#ef4444' \n  : '#6b7280';\n\nconst healthIcon = data.financial_health_category === 'Excellent' ? '⭐⭐⭐' \n  : data.financial_health_category === 'Good' ? '⭐⭐' \n  : data.financial_health_category === 'Fair' ? '⭐' \n  : '❌';\n\nconst reportHtml = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Financial Report - ${data.reportMonth}</title>\n  <style>\n    * { margin: 0; padding: 0; box-sizing: border-box; }\n    body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; color: #1f2937; background: #f3f4f6; }\n    .container { max-width: 1200px; margin: 0 auto; padding: 20px; }\n    .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 40px; border-radius: 12px; margin-bottom: 30px; }\n    .header h1 { font-size: 32px; margin-bottom: 10px; }\n    .header p { opacity: 0.9; font-size: 14px; }\n    .metrics-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-bottom: 30px; }\n    .metric-card { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }\n    .metric-value { font-size: 32px; font-weight: bold; color: #667eea; margin-bottom: 5px; }\n    .metric-label { font-size: 12px; color: #6b7280; text-transform: uppercase; letter-spacing: 0.5px; }\n    .metric-change { font-size: 12px; margin-top: 5px; padding: 4px 8px; border-radius: 4px; display: inline-block; }\n    .metric-change.positive { background: #d1fae5; color: #047857; }\n    .metric-change.negative { background: #fee2e2; color: #dc2626; }\n    .section { background: white; padding: 30px; border-radius: 8px; margin-bottom: 20px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }\n    .section h2 { font-size: 18px; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 2px solid #e5e7eb; }\n    .health-badge { display: inline-block; padding: 12px 24px; border-radius: 8px; background: ${healthColor}; color: white; font-weight: bold; margin: 10px 0; }\n    .alert { padding: 15px; margin: 10px 0; border-radius: 6px; border-left: 4px solid; }\n    .alert-critical { background: #fee2e2; border-color: #dc2626; color: #991b1b; }\n    .alert-warning { background: #fef3c7; border-color: #f59e0b; color: #92400e; }\n    .alert-success { background: #d1fae5; border-color: #10b981; color: #065f46; }\n    table { width: 100%; border-collapse: collapse; margin-top: 15px; }\n    th { background: #f3f4f6; padding: 12px; text-align: left; font-size: 12px; font-weight: 600; text-transform: uppercase; border-bottom: 2px solid #e5e7eb; }\n    td { padding: 12px; border-bottom: 1px solid #e5e7eb; }\n    .footer { text-align: center; padding: 20px; color: #6b7280; font-size: 12px; margin-top: 40px; }\n    .footer p { margin: 5px 0; }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">\n      <h1>Financial Report</h1>\n      <p>Executive Summary for ${data.reportMonth}</p>\n      <p>Report ID: ${data.reportId}</p>\n    </div>\n\n    <div class=\"metrics-grid\">\n      <div class=\"metric-card\">\n        <div class=\"metric-value\">\\$${(data.revenue / 1000000).toFixed(1)}M</div>\n        <div class=\"metric-label\">Total Revenue</div>\n        <div class=\"metric-change ${data.revenue_change_percent > 0 ? 'positive' : 'negative'}\">${data.revenue_change_percent > 0 ? '+' : ''}${data.revenue_change_percent}% YoY</div>\n      </div>\n      <div class=\"metric-card\">\n        <div class=\"metric-value\">\\$${(data.net_income / 1000000).toFixed(1)}M</div>\n        <div class=\"metric-label\">Net Income</div>\n        <div class=\"metric-change ${data.net_income_change_percent > 0 ? 'positive' : 'negative'}\">${data.net_income_change_percent > 0 ? '+' : ''}${data.net_income_change_percent}%</div>\n      </div>\n      <div class=\"metric-card\">\n        <div class=\"metric-value\">${data.net_margin_percent.toFixed(1)}%</div>\n        <div class=\"metric-label\">Net Margin</div>\n        <div class=\"metric-change ${data.net_margin_percent > 10 ? 'positive' : 'warning'}\">Operating Health</div>\n      </div>\n      <div class=\"metric-card\">\n        <div class=\"metric-value\">\\$${(data.free_cash_flow / 1000000).toFixed(1)}M</div>\n        <div class=\"metric-label\">Free Cash Flow</div>\n        <div class=\"metric-change ${data.free_cash_flow > 0 ? 'positive' : 'negative'}\">Cash Generation</div>\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <h2>📊 Financial Health Assessment</h2>\n      <div class=\"health-badge\">${healthIcon} ${data.financial_health_category} (Score: ${data.financial_health_score}/100)</div>\n      <table>\n        <tr><td><strong>Current Ratio</strong></td><td>${data.current_ratio} (Liquidity)</td></tr>\n        <tr><td><strong>Debt-to-Equity</strong></td><td>${data.debt_to_equity} (Leverage)</td></tr>\n        <tr><td><strong>Return on Equity</strong></td><td>${data.return_on_equity_percent}% (ROE)</td></tr>\n        <tr><td><strong>Asset Turnover</strong></td><td>${data.asset_turnover}x</td></tr>\n        <tr><td><strong>Working Capital</strong></td><td>\\$${(data.working_capital / 1000000).toFixed(1)}M</td></tr>\n      </table>\n    </div>\n\n    ${data.critical_anomalies.length > 0 ? `\n    <div class=\"section\">\n      <h2>🚨 Critical Anomalies (${data.anomaly_count})</h2>\n      ${data.critical_anomalies.map(a => `<div class=\"alert alert-critical\">⚠️ ${a}</div>`).join('')}\n    </div>\n    ` : ''}\n\n    ${data.warnings.length > 0 ? `\n    <div class=\"section\">\n      <h2>⚠️ Warnings & Observations (${data.warning_count})</h2>\n      ${data.warnings.map(w => `<div class=\"alert alert-warning\">📌 ${w}</div>`).join('')}\n    </div>\n    ` : ''}\n\n    ${data.key_strengths.length > 0 ? `\n    <div class=\"section\">\n      <h2>💪 Key Strengths (${data.strength_count})</h2>\n      ${data.key_strengths.map(s => `<div class=\"alert alert-success\">✓ ${s}</div>`).join('')}\n    </div>\n    ` : ''}\n\n    <div class=\"section\">\n      <h2>🎯 Strategic Recommendations</h2>\n      <ol style=\"margin-left: 20px; line-height: 1.8;\">\n        ${data.strategic_recommendations.length > 0 ? data.strategic_recommendations.map(r => `<li>${r}</li>`).join('') : '<li>Continue monitoring financial metrics quarterly</li>'}\n      </ol>\n    </div>\n\n    <div class=\"section\">\n      <h2>🤖 AI-Powered Analysis</h2>\n      <p style=\"line-height: 1.6; white-space: pre-wrap; color: #4b5563;\">${data.ai_insights}</p>\n    </div>\n\n    <div class=\"section\">\n      <h2>📈 Detailed Metrics</h2>\n      <table>\n        <thead>\n          <tr><th>Metric</th><th>Value</th></tr>\n        </thead>\n        <tbody>\n          <tr><td>Gross Profit</td><td>\\$${(data.gross_profit / 1000000).toFixed(1)}M</td></tr>\n          <tr><td>Gross Margin</td><td>${data.gross_margin_percent.toFixed(1)}%</td></tr>\n          <tr><td>Operating Income</td><td>\\$${(data.operating_income / 1000000).toFixed(1)}M</td></tr>\n          <tr><td>EBITDA</td><td>\\$${(data.ebitda / 1000000).toFixed(1)}M</td></tr>\n          <tr><td>Operating Cash Flow</td><td>\\$${(data.operating_cash_flow / 1000000).toFixed(1)}M</td></tr>\n          <tr><td>Days Receivables Outstanding</td><td>${data.days_receivables_outstanding} days</td></tr>\n          <tr><td>Days Inventory Outstanding</td><td>${data.days_inventory_outstanding} days</td></tr>\n          <tr><td>Cash Conversion Cycle</td><td>${data.cash_conversion_cycle_days} days</td></tr>\n          <tr><td>Total Assets</td><td>\\$${(data.total_assets / 1000000).toFixed(1)}M</td></tr>\n          <tr><td>Total Liabilities</td><td>\\$${(data.total_liabilities / 1000000).toFixed(1)}M</td></tr>\n          <tr><td>Total Equity</td><td>\\$${(data.total_equity / 1000000).toFixed(1)}M</td></tr>\n        </tbody>\n      </table>\n    </div>\n\n    <div class=\"footer\">\n      <p><strong>AI Financial Report Analyzer</strong></p>\n      <p>Generated: ${data.timestamp}</p>\n      <p>This report is for management review and decision-making purposes</p>\n    </div>\n  </div>\n</body>\n</html>\n`;\n\nreturn {\n  json: {\n    ...data,\n    report_html: reportHtml,\n    report_generated: true,\n    report_title: `Financial Report - ${data.reportMonth}`,\n    report_size_kb: Math.round(reportHtml.length / 1024)\n  }\n};"},"typeVersion":2},{"id":"abdb8991-a0f3-4fef-aa36-c62a80fab38e","name":"Store report in database","type":"n8n-nodes-base.postgres","position":[2688,528],"parameters":{"table":"financial_reports","schema":{"__rl":true,"mode":"list","value":"public"},"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"credentials":{"postgres":{"id":"credential-id","name":"Postgres-test"}},"typeVersion":2.5},{"id":"b67b4383-3cb0-45ac-bb00-19eb5763bba4","name":"Post report summary to Slack","type":"n8n-nodes-base.httpRequest","position":[2912,432],"parameters":{"url":"YOUR_SLACK_WEBHOOK_URL","method":"POST","options":{},"jsonBody":"={\n  \"text\": \"📊 Monthly Financial Report - {{ $json.reportMonth }}\",\n  \"blocks\": [\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"*Financial Report for {{ $json.reportMonth }}*\\n\\n💰 *Revenue:* ${{ ($json.revenue / 1000000).toFixed(1) }}M ({{ $json.revenue_change_percent > 0 ? '+' : '' }}{{ $json.revenue_change_percent }}% YoY)\\n💵 *Net Income:* ${{ ($json.net_income / 1000000).toFixed(1) }}M\\n📈 *Net Margin:* {{ $json.net_margin_percent.toFixed(1) }}%\\n💸 *Free Cash Flow:* ${{ ($json.free_cash_flow / 1000000).toFixed(1) }}M\\n⭐ *Health Score:* {{ $json.financial_health_score }}/100 ({{ $json.financial_health_category }})\\n\\n🎯 *Performance:* {{ $json.performance_rating }}\\n🚨 *Anomalies:* {{ $json.anomaly_count }}\\n⚠️ *Warnings:* {{ $json.warning_count }}\"\n      }\n    }\n  ]\n}","sendBody":true,"specifyBody":"json"},"typeVersion":4.2},{"id":"9baeaf5c-5030-4215-8199-ca0302039cdd","name":"Email report to management","type":"n8n-nodes-base.emailSend","position":[2912,624],"webhookId":"a106e982-1943-4ff5-a636-ddf7cccfacea","parameters":{"html":"={{ $json.report_html }}","options":{},"subject":"{{ $json.report_title }}","toEmail":"user@example.com","fromEmail":"noreply@example.com"},"credentials":{"smtp":{"id":"credential-id","name":"SMTP -test"}},"typeVersion":2.1},{"id":"cfbdf0ec-94f2-41b5-8c62-d0bfade59083","name":"Log report generation completion","type":"n8n-nodes-base.code","position":[3136,528],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Log report completion and track statistics\nconst timestamp = new Date().toISOString();\nconst data = $input.item.json;\n\nconsole.log(`✅ FINANCIAL REPORT GENERATED: ${data.reportId} | Month: ${data.reportMonth} | Revenue: $${(data.revenue/1000000).toFixed(1)}M | Health: ${data.financial_health_score}/100 | Status: ${data.performance_rating} | Time: ${timestamp}`);\n\n// Aggregate statistics\nconst stats = $getWorkflowStaticData('global').stats || {\n  total_reports_generated: 0,\n  avg_revenue: 0,\n  avg_net_margin: 0,\n  avg_health_score: 0,\n  critical_months: 0,\n  excellent_months: 0,\n  total_anomalies: 0,\n  last_generated: null\n};\n\nstats.total_reports_generated++;\nstats.avg_revenue = ((stats.avg_revenue * (stats.total_reports_generated - 1)) + data.revenue) / stats.total_reports_generated;\nstats.avg_net_margin = ((stats.avg_net_margin * (stats.total_reports_generated - 1)) + data.net_margin_percent) / stats.total_reports_generated;\nstats.avg_health_score = ((stats.avg_health_score * (stats.total_reports_generated - 1)) + data.financial_health_score) / stats.total_reports_generated;\nif (data.financial_health_category === 'Critical') stats.critical_months++;\nif (data.financial_health_category === 'Excellent') stats.excellent_months++;\nstats.total_anomalies += data.anomaly_count;\nstats.last_generated = timestamp;\n\n$getWorkflowStaticData('global').stats = stats;\n\nreturn {\n  json: {\n    success: true,\n    report_id: data.reportId,\n    month: data.reportMonth,\n    revenue: data.revenue,\n    health_score: data.financial_health_score,\n    health_category: data.financial_health_category,\n    performance_rating: data.performance_rating,\n    anomalies: data.anomaly_count,\n    warnings: data.warning_count,\n    timestamp,\n    cumulativeStats: stats\n  }\n};"},"typeVersion":2}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"8bb8c85c-5b9d-4e56-8673-f03c1f259acf","connections":{"Fetch P&L statement":{"main":[[{"node":"Merge all financial statements","type":"main","index":0}]]},"Fetch balance sheet":{"main":[[{"node":"Merge all financial statements","type":"main","index":1}]]},"Store report in database":{"main":[[{"node":"Post report summary to Slack","type":"main","index":0},{"node":"Email report to management","type":"main","index":0}]]},"Fetch cash flow statement":{"main":[[{"node":"Merge all financial statements","type":"main","index":0}]]},"Email report to management":{"main":[[{"node":"Log report generation completion","type":"main","index":0}]]},"Generate AI-powered insights":{"main":[[{"node":"Extract and format AI insights","type":"main","index":0}]]},"Post report summary to Slack":{"main":[[{"node":"Log report generation completion","type":"main","index":0}]]},"Extract and format AI insights":{"main":[[{"node":"Generate professional HTML report","type":"main","index":0}]]},"Merge all financial statements":{"main":[[{"node":"Normalize and validate financial data","type":"main","index":0}]]},"Monthly analysis on 1st at 8 AM":{"main":[[{"node":"Fetch P&L statement","type":"main","index":0},{"node":"Fetch balance sheet","type":"main","index":0},{"node":"Fetch cash flow statement","type":"main","index":0},{"node":"Fetch previous period data for comparison","type":"main","index":0}]]},"Generate professional HTML report":{"main":[[{"node":"Store report in database","type":"main","index":0}]]},"Analyze trends and detect anomalies":{"main":[[{"node":"Generate AI-powered insights","type":"main","index":0}]]},"Normalize and validate financial data":{"main":[[{"node":"Analyze trends and detect anomalies","type":"main","index":0}]]},"Fetch previous period data for comparison":{"main":[[{"node":"Merge all financial statements","type":"main","index":1}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":21,"nodeTypes":{"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.postgres":{"count":1},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.httpRequest":{"count":6},"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":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"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":49,"name":"AI Summarization"}],"image":[]}}