{"workflow":{"id":13726,"name":"Predict customer churn daily using ML or LLM models and notify via Slack/email","views":33,"recentViews":0,"totalViews":33,"createdAt":"2026-02-26T09:36:56.415Z","description":"This n8n workflow runs daily to analyze active customer behavior, engineers relevant features from usage and transaction data, applies a machine learning or AI-based model to predict churn probability, classifies risk levels, triggers retention actions for at-risk customers, stores predictions for tracking, and notifies relevant teams.\n\n### Key Insights\n- Prediction accuracy heavily depends on feature quality — ensure login frequency, spend trends, support interactions, and engagement metrics are consistently captured and up-to-date.\n- Start with simple rule-based scoring or AI prompting (e.g., OpenAI/Claude) before integrating full ML models for easier testing and faster value.\n- High-risk thresholds (e.g., &gt;70%) should be tuned based on your actual churn data to avoid alert fatigue or missed opportunities.\n\n### Workflow Process\n1. Initiate the workflow with the **Daily Schedule Trigger** node (runs every day at 2 AM).\n2. Query the customer database to fetch active user profiles, recent activity logs, login history, transaction records, and support ticket data.\n3. Perform feature engineering: calculate metrics such as login frequency (daily/weekly), average spend, spend velocity, days since last activity, number of support tickets, NPS/sentiment if available, and other engagement signals.\n4. Feed engineered features into the prediction step: call an ML model endpoint, run a Python code node with a lightweight model, or use an AI agent/LLM to estimate churn probability (0–100%).\n5. Classify each customer into risk tiers: HIGH RISK, MEDIUM RISK, or LOW RISK based on configurable probability thresholds.\n6. For at-risk customers (especially HIGH), trigger retention actions: create personalized campaigns, add to nurture sequences, generate discount codes, or create tasks in CRM.\n7. Store predictions, risk scores, features, and actions taken in an analytics database for historical tracking and model improvement.\n8. Send summarized alerts (e.g., list of high-risk customers with scores and recommended actions) via Email and/or Slack to customer success or retention teams.\n\n### Usage Guide\n- Import the workflow into n8n and configure credentials for your customer database (PostgreSQL/MySQL), ML API (if external), analytics DB, Slack webhook, SMTP/email, and CRM/retention platform.\n- Define feature extraction queries and thresholds carefully in the relevant nodes — test with a small customer subset first.\n- If using AI/LLM for prediction, refine the prompt to include clear examples of churn signals.\n- Run manually via the **Execute workflow** button with sample data to validate data flow, scoring logic, and notifications.\n- Once confident, activate the daily schedule.\n\n### Prerequisites\n- Customer database with readable tables for users, activity logs, transactions, and support interactions\n- ML integration option: either an external ML API endpoint, Python code node with scikit-learn/simple model, or LLM node (OpenAI, Claude, etc.) for probabilistic scoring\n- Separate analytics database (or same DB) with a table ready for churn predictions (customer_id, date, churn_prob, risk_level, etc.)\n- SMTP credentials or email service for alerts\n- Slack webhook URL (optional but recommended for team notifications)\n- CRM or marketing automation API access (e.g., HubSpot, ActiveCampaign, Klaviyo) for creating retention campaigns/tasks\n\n### Customization Options\n- Adjust the daily trigger time or make it hourly for near real-time monitoring of high-value accounts.\n- Change risk classification thresholds or add more tiers in the scoring logic node.\n- Enhance the prediction step: switch from LLM-based to a trained ML model (via Hugging Face, custom endpoint, or Code node).\n- Personalize retention actions: use AI to generate custom email content/offers based on the customer's behavior profile.\n- Add filtering (e.g., only high-value customers &gt; certain MRR) to focus retention efforts.\n- Extend notifications: integrate with Microsoft Teams, Discord, or create tickets in Zendesk/Jira for follow-up.\n- Build feedback loop: after actual churn occurs, update a training dataset or adjust weights/rules in future runs.\n","workflow":{"id":"9pmjBc7dqrEagOoX","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"AI Customer Churn Predictor","tags":[],"nodes":[{"id":"1f854286-b67a-42f9-9711-0056c93f9a0d","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-32,-384],"parameters":{"width":900,"height":1504,"content":"## AI Customer Churn Predictor\n\nAnalyzes user behavior data and predicts churn probability using machine learning algorithms.\n\n## How it works\n\n1. **Trigger** — Runs daily at 2 AM to analyze active customers\n2. **Collect** — Fetches customer profiles, activity logs, and transaction history from database\n3. **Engineer** — Extracts features: login frequency, spend patterns, support tickets, engagement metrics\n4. **Predict** — Uses ML model to calculate churn probability (0-100%)\n5. **Score** — Classifies as HIGH RISK / MEDIUM RISK / LOW RISK\n6. **Remediate** — Creates retention campaigns for at-risk customers\n7. **Store** — Saves predictions to analytics database\n8. **Notify** — Sends alerts and dashboards via Email & Slack\n\n## Setup steps\n\n1. **Database** — Connect your customer database (PostgreSQL/MySQL)\n2. **ML Model** — Configure ML API endpoint or use Python ML node\n3. **Analytics DB** — Set up table for churn predictions\n4. **Slack/Email** — Add webhook URLs and SMTP credentials\n5. **Retention API** — Configure CRM/marketing platform for campaigns\n6. **Test** — Run manually first, then schedule daily execution\n\n**AI Customer Churn Predictor**\n\nThis n8n workflow runs daily to analyze active customer behavior, engineers relevant features from usage and transaction data, applies a machine learning or AI-based model to predict churn probability, classifies risk levels, triggers retention actions for at-risk customers, stores predictions for tracking, and notifies relevant teams.\n\n### Key Insights\n- Prediction accuracy heavily depends on feature quality — ensure login frequency, spend trends, support interactions, and engagement metrics are consistently captured and up-to-date.\n- Start with simple rule-based scoring or AI prompting (e.g., OpenAI/Claude) before integrating full ML models for easier testing and faster value.\n- High-risk thresholds (e.g., &gt;70%) should be tuned based on your actual churn data to avoid alert fatigue or missed opportunities.\n\n### Usage Guide\n- Import the workflow into n8n and configure credentials for your customer database (PostgreSQL/MySQL), ML API (if external), analytics DB, Slack webhook, SMTP/email, and CRM/retention platform.\n- Define feature extraction queries and thresholds carefully in the relevant nodes — test with a small customer subset first.\n- If using AI/LLM for prediction, refine the prompt to include clear examples of churn signals.\n- Run manually via the **Execute workflow** button with sample data to validate data flow, scoring logic, and notifications.\n- Once confident, activate the daily schedule.\n\n### Prerequisites\n- Customer database with readable tables for users, activity logs, transactions, and support interactions\n- ML integration option: either an external ML API endpoint, Python code node with scikit-learn/simple model, or LLM node (OpenAI, Claude, etc.) for probabilistic scoring\n- Separate analytics database (or same DB) with a table ready for churn predictions (customer_id, date, churn_prob, risk_level, etc.)\n- SMTP credentials or email service for alerts\n- Slack webhook URL (optional but recommended for team notifications)\n- CRM or marketing automation API access (e.g., HubSpot, ActiveCampaign, Klaviyo) for creating retention campaigns/tasks\n\n### Customization Options\n- Adjust the daily trigger time or make it hourly for near real-time monitoring of high-value accounts.\n- Change risk classification thresholds or add more tiers in the scoring logic node.\n- Enhance the prediction step: switch from LLM-based to a trained ML model (via Hugging Face, custom endpoint, or Code node).\n- Personalize retention actions: use AI to generate custom email content/offers based on the customer's behavior profile.\n- Add filtering (e.g., only high-value customers &gt; certain MRR) to focus retention efforts.\n- Extend notifications: integrate with Microsoft Teams, Discord, or create tickets in Zendesk/Jira for follow-up.\n- Build feedback loop: after actual churn occurs, update a training dataset or adjust weights/rules in future runs.\n"},"typeVersion":1},{"id":"2ae5a72b-8d07-4274-8d1d-233863fb9a08","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[928,112],"parameters":{"color":3,"width":500,"height":768,"content":"## 1. Trigger & Collect Data\n\nDaily schedule to fetch customer profiles and behavioral data"},"typeVersion":1},{"id":"43bb8c82-df36-49f3-89fe-70d908cd5e4a","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1472,256],"parameters":{"color":5,"width":388,"height":448,"content":"## 2. Feature Engineering\n\nExtract and calculate behavioral features for ML model"},"typeVersion":1},{"id":"45eec6c4-bb3c-40ae-91fd-f3523ced9e7b","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1920,320],"parameters":{"color":4,"width":596,"height":408,"content":"## 3. ML Prediction\n\nRun churn probability predictions and score customers"},"typeVersion":1},{"id":"a0bd3b99-1e56-4d62-9abb-b60829950996","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2592,192],"parameters":{"color":5,"width":550,"height":612,"content":"## 4. Classify & Remediate\n\nRoute customers by risk level and create retention campaigns"},"typeVersion":1},{"id":"197eba11-4fc5-477a-9ec7-73b512f5351c","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[3232,208],"parameters":{"color":3,"width":550,"height":580,"content":"## 5. Report & Notify\n\nStore results and deliver churn analytics to stakeholders"},"typeVersion":1},{"id":"e6ec0958-1d51-45be-a2d3-e9e2edf6b9da","name":"Daily churn analysis at 2 AM","type":"n8n-nodes-base.scheduleTrigger","position":[1056,496],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 2 * * *"}]}},"typeVersion":1.2},{"id":"4c3ff3c6-e6a4-4a16-8a9d-ce732dbccdc3","name":"Fetch active customer profiles","type":"n8n-nodes-base.httpRequest","position":[1280,304],"parameters":{"url":"https://api.example.com/customers/active","options":{}},"typeVersion":4.2},{"id":"ca121dcf-1812-463d-8388-10266013e886","name":"Fetch customer activity logs (30 days)","type":"n8n-nodes-base.httpRequest","position":[1280,496],"parameters":{"url":"https://api.example.com/logs/activity?days=30","options":{}},"typeVersion":4.2},{"id":"ed96d0b9-b6e3-408d-b955-2c3cf2080712","name":"Fetch transaction history (90 days)","type":"n8n-nodes-base.httpRequest","position":[1280,688],"parameters":{"url":"https://api.example.com/transactions?days=90","options":{}},"typeVersion":4.2},{"id":"5ac08f4f-5321-40ad-81a1-f027fd635970","name":"Merge customer and activity data","type":"n8n-nodes-base.merge","position":[1504,496],"parameters":{"mode":"combine","options":{}},"typeVersion":3},{"id":"39030266-1388-4a8f-8b10-4bb70898b93e","name":"Engineer behavioral features","type":"n8n-nodes-base.code","position":[1728,496],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Feature engineering for churn prediction\nconst customer = $input.item.json;\n\n// --- Login Frequency ---\nconst loginDays = customer.activity_logs?.filter(log => log.type === 'login').length || 0;\nconst daysActive = customer.days_since_signup || 1;\nconst loginFrequency = Math.round((loginDays / 30) * 100) / 100; // logins per month\nconst loginTrend = (customer.login_last_7_days || 0) - (customer.login_previous_7_days || 0);\n\n// --- Spend Patterns ---\nconst totalSpend = customer.transactions?.reduce((sum, t) => sum + (t.amount || 0), 0) || 0;\nconst avgTransactionValue = customer.transactions?.length > 0 ? totalSpend / customer.transactions.length : 0;\nconst spendTrend = ((customer.spend_last_30 || 0) - (customer.spend_previous_30 || 0)) / (customer.spend_previous_30 || 1);\nconst daysLastPurchase = customer.days_since_last_purchase || 999;\n\n// --- Engagement Metrics ---\nconst supportTickets = customer.support_tickets || 0;\nconst featureUsage = customer.features_used || 0;\nconst emailEngagement = customer.email_open_rate || 0; // percentage\nconst accountAge = customer.days_since_signup || 1;\n\n// --- Subscription Details ---\nconst planValue = customer.plan_value || 0;\nconst isFreeTier = customer.plan_type === 'free';\nconst daysUntilRenewal = customer.days_until_renewal || 365;\nconst hasCardOnFile = customer.has_payment_method || false;\n\n// --- Feature Adoption ---\nconst adoptionScore = (featureUsage / (customer.available_features || 1)) * 100;\nconst apiCalls = customer.api_usage || 0;\nconst storageUsage = customer.storage_used_percent || 0;\n\n// --- Anomaly Flags ---\nconst suspiciousLogin = loginTrend < -5; // drop in logins\nconst noPurchaseInDays = daysLastPurchase > 60;\nconst lowEngagement = loginFrequency < 2; // less than 2 logins/month\nconst highSupportVolume = supportTickets > 5;\nconst negativeSpendTrend = spendTrend < -0.3; // 30% drop in spend\n\n// --- Compile feature vector ---\nconst features = {\n  customer_id: customer.id,\n  email: customer.email,\n  signup_date: customer.signup_date,\n  plan_type: customer.plan_type,\n  \n  // Core features\n  login_frequency: loginFrequency,\n  login_trend: loginTrend,\n  days_last_purchase: daysLastPurchase,\n  total_spend: totalSpend,\n  avg_transaction_value: avgTransactionValue,\n  spend_trend: spendTrend,\n  account_age_days: accountAge,\n  \n  // Engagement\n  support_tickets: supportTickets,\n  feature_usage_count: featureUsage,\n  adoption_score: adoptionScore,\n  email_engagement: emailEngagement,\n  api_calls: apiCalls,\n  storage_usage_percent: storageUsage,\n  \n  // Subscription\n  plan_value: planValue,\n  is_free_tier: isFreeTier,\n  days_until_renewal: daysUntilRenewal,\n  has_card_on_file: hasCardOnFile,\n  \n  // Anomalies\n  flag_suspicious_login: suspiciousLogin,\n  flag_no_purchase_60days: noPurchaseInDays,\n  flag_low_engagement: lowEngagement,\n  flag_high_support_volume: highSupportVolume,\n  flag_negative_spend_trend: negativeSpendTrend,\n  \n  // Calculated risk indicators\n  anomaly_count: [suspiciousLogin, noPurchaseInDays, lowEngagement, highSupportVolume, negativeSpendTrend].filter(Boolean).length\n};\n\nreturn {\n  json: features\n};"},"typeVersion":2},{"id":"a6e2a4e3-05e5-426f-b6e6-8502ea446f3d","name":"Call ML churn prediction model","type":"n8n-nodes-base.httpRequest","position":[1952,496],"parameters":{"url":"https://ml-api.example.com/predict/churn","method":"POST","options":{},"sendBody":true,"bodyParameters":{"parameters":[{"name":"features","value":"={{ {login_frequency: $json.login_frequency, login_trend: $json.login_trend, days_last_purchase: $json.days_last_purchase, total_spend: $json.total_spend, spend_trend: $json.spend_trend, support_tickets: $json.support_tickets, adoption_score: $json.adoption_score, anomaly_count: $json.anomaly_count} }}"}]}},"typeVersion":4.2},{"id":"241db3b1-befb-4b8e-9758-f84ae5d600c8","name":"Score and classify churn risk","type":"n8n-nodes-base.code","position":[2176,496],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Score churn risk and classify into risk tiers\nconst data = $input.item.json;\nconst mlPrediction = data.churn_probability || 0; // 0-1 scale\n\n// Convert to 0-100 scale\nconst churnScore = Math.round(mlPrediction * 100);\n\n// Classification logic\nlet riskLevel = 'LOW_RISK';\nlet actionRequired = false;\nlet campaignType = 'none';\nlet priority = 'low';\n\nif (churnScore >= 70) {\n  riskLevel = 'HIGH_RISK';\n  actionRequired = true;\n  campaignType = 'aggressive_retention';\n  priority = 'critical';\n} else if (churnScore >= 50) {\n  riskLevel = 'MEDIUM_RISK';\n  actionRequired = true;\n  campaignType = 'engagement_boost';\n  priority = 'high';\n} else if (churnScore >= 30) {\n  riskLevel = 'EARLY_RISK';\n  actionRequired = false;\n  campaignType = 'preventive';\n  priority = 'medium';\n}\n\n// Risk factors summary\nconst riskFactors = [];\nif (data.flag_no_purchase_60days) riskFactors.push('No purchase in 60+ days');\nif (data.flag_low_engagement) riskFactors.push('Low login frequency');\nif (data.flag_negative_spend_trend) riskFactors.push('Declining spend');\nif (data.flag_high_support_volume) riskFactors.push('High support tickets');\nif (data.flag_suspicious_login) riskFactors.push('Unusual login activity');\n\n// Retention strategy\nlet recommendedAction = '';\nif (churnScore >= 70) {\n  recommendedAction = 'Immediate outreach: Offer discount, upgrade incentive, or VIP support';\n} else if (churnScore >= 50) {\n  recommendedAction = 'Engagement campaign: Personalized tutorials, feature highlights';\n} else if (churnScore >= 30) {\n  recommendedAction = 'Monitor closely: Nurture with educational content and updates';\n}\n\nconst timestamp = new Date().toISOString();\nconst predictionDate = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });\n\nreturn {\n  json: {\n    // Customer & Prediction Identity\n    customer_id: data.customer_id,\n    email: data.email,\n    plan_type: data.plan_type,\n    \n    // Churn Score & Classification\n    churn_probability_score: churnScore,\n    churn_probability_percentage: churnScore + '%',\n    risk_level: riskLevel,\n    risk_level_numeric: riskLevel === 'HIGH_RISK' ? 3 : riskLevel === 'MEDIUM_RISK' ? 2 : riskLevel === 'EARLY_RISK' ? 1 : 0,\n    \n    // Key Metrics\n    login_frequency: data.login_frequency,\n    days_since_last_purchase: data.days_last_purchase,\n    total_lifetime_value: data.total_spend,\n    spend_trend_percent: Math.round(data.spend_trend * 100),\n    support_tickets_90days: data.support_tickets,\n    feature_adoption_score: Math.round(data.adoption_score),\n    account_age_days: data.account_age_days,\n    \n    // Risk Indicators\n    risk_factors: riskFactors,\n    risk_factor_count: riskFactors.length,\n    anomaly_flags_count: data.anomaly_count,\n    \n    // Action & Campaign\n    action_required: actionRequired,\n    campaign_type: campaignType,\n    priority: priority,\n    recommended_action: recommendedAction,\n    \n    // Timestamp\n    prediction_date: predictionDate,\n    prediction_timestamp: timestamp,\n    \n    // Original features for reference\n    features: data\n  }\n};"},"typeVersion":2},{"id":"e37bc7ba-bd03-41d3-9be4-0744bbb5b2d7","name":"Route by risk level","type":"n8n-nodes-base.switch","position":[2400,480],"parameters":{"rules":{"values":[{"outputKey":"High Risk","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.risk_level }}","rightValue":"HIGH_RISK"}]},"renameOutput":true},{"outputKey":"Medium Risk","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.risk_level }}","rightValue":"MEDIUM_RISK"}]},"renameOutput":true},{"outputKey":"Low Risk","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.risk_level }}","rightValue":"EARLY_RISK"}]},"renameOutput":true}]},"options":{}},"typeVersion":3},{"id":"c276d68c-d114-4894-a2c1-7b7a2f620762","name":"Create retention campaign task","type":"n8n-nodes-base.httpRequest","position":[2624,400],"parameters":{"url":"https://api.example.com/campaigns/create","method":"POST","options":{},"sendBody":true,"bodyParameters":{"parameters":[{"name":"customer_id","value":"={{ $json.customer_id }}"},{"name":"campaign_type","value":"={{ $json.campaign_type }}"},{"name":"churn_score","value":"={{ $json.churn_probability_score }}"},{"name":"risk_level","value":"={{ $json.risk_level }}"},{"name":"recommended_action","value":"={{ $json.recommended_action }}"},{"name":"priority","value":"={{ $json.priority }}"}]}},"typeVersion":4.2},{"id":"ca4e1fe7-be3f-4551-88f2-321fee4b8318","name":"Store churn predictions in database","type":"n8n-nodes-base.postgres","position":[2624,592],"parameters":{"table":"churn_predictions","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":"77b5a3e0-50ac-4a7a-90fd-5df6a4245a73","name":"Generate churn analytics report","type":"n8n-nodes-base.code","position":[2848,496],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Generate HTML report for churn predictions\nconst data = $input.item.json;\n\nconst statusColor = data.risk_level === 'HIGH_RISK' ? '#ef4444' \n  : data.risk_level === 'MEDIUM_RISK' ? '#f59e0b' \n  : '#22c55e';\n\nconst statusIcon = data.risk_level === 'HIGH_RISK' ? '🚨' \n  : data.risk_level === 'MEDIUM_RISK' ? '⚠️' \n  : '✅';\n\nconst reportHtml = `\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Churn Prediction Report - ${data.customer_id}</title>\n  <style>\n    body { font-family: Arial, sans-serif; color: #1e293b; margin: 0; padding: 24px; background: #f8fafc; }\n    .header { background: #0f172a; color: white; padding: 24px; border-radius: 8px; margin-bottom: 24px; }\n    .header h1 { margin: 0 0 8px 0; font-size: 22px; }\n    .header p { margin: 0; opacity: 0.7; font-size: 13px; }\n    .status-badge { display: inline-block; padding: 8px 16px; border-radius: 20px; font-weight: bold; font-size: 14px; background: ${statusColor}; color: white; margin-top: 12px; }\n    .cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }\n    .card { background: white; border-radius: 8px; padding: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n    .card .value { font-size: 28px; font-weight: bold; color: ${statusColor}; }\n    .card .label { font-size: 12px; color: #64748b; margin-top: 4px; }\n    .section { background: white; border-radius: 8px; padding: 20px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n    .section h2 { margin: 0 0 16px 0; font-size: 16px; border-bottom: 2px solid #e2e8f0; padding-bottom: 8px; }\n    table { width: 100%; border-collapse: collapse; font-size: 13px; }\n    th { background: #f1f5f9; text-align: left; padding: 8px 12px; }\n    td { padding: 8px 12px; border-bottom: 1px solid #e2e8f0; }\n    .action-box { background: ${statusColor}15; border-left: 4px solid ${statusColor}; padding: 12px; margin-top: 12px; border-radius: 4px; }\n    .footer { text-align: center; font-size: 11px; color: #94a3b8; margin-top: 24px; }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1>${statusIcon} Customer Churn Risk Assessment</h1>\n    <p>Customer: ${data.email} | Plan: ${data.plan_type} | Generated: ${data.prediction_date}</p>\n    <div class=\"status-badge\">${data.risk_level.replace(/_/g, ' ')}</div>\n  </div>\n\n  <div class=\"cards\">\n    <div class=\"card\"><div class=\"value\">${data.churn_probability_score}%</div><div class=\"label\">Churn Risk Score</div></div>\n    <div class=\"card\"><div class=\"value\">\\$${Math.round(data.total_lifetime_value)}</div><div class=\"label\">Lifetime Value</div></div>\n    <div class=\"card\"><div class=\"value\">${data.login_frequency.toFixed(1)}</div><div class=\"label\">Logins/Month</div></div>\n    <div class=\"card\"><div class=\"value\">${data.adoption_score}%</div><div class=\"label\">Feature Adoption</div></div>\n  </div>\n\n  <div class=\"section\">\n    <h2>📊 Key Metrics</h2>\n    <table><tbody>\n      <tr><td><strong>Days Since Last Purchase</strong></td><td>${data.days_since_last_purchase}</td></tr>\n      <tr><td><strong>Spend Trend (90 days)</strong></td><td>${data.spend_trend_percent > 0 ? '+' : ''}${data.spend_trend_percent}%</td></tr>\n      <tr><td><strong>Support Tickets (90 days)</strong></td><td>${data.support_tickets_90days}</td></tr>\n      <tr><td><strong>Account Age</strong></td><td>${data.account_age_days} days</td></tr>\n    </tbody></table>\n  </div>\n\n  <div class=\"section\">\n    <h2>⚠️ Risk Factors (${data.risk_factor_count})</h2>\n    <ul>${data.risk_factors.map(f => '<li>' + f + '</li>').join('')}</ul>\n  </div>\n\n  <div class=\"section\">\n    <h2>🎯 Recommended Action</h2>\n    <div class=\"action-box\">\n      <strong>${data.recommended_action}</strong>\n      <br><br>\n      <em>Campaign Type: ${data.campaign_type.replace(/_/g, ' ').toUpperCase()}</em>\n    </div>\n  </div>\n\n  <div class=\"footer\">AI Customer Churn Predictor | ${data.prediction_timestamp}</div>\n</body>\n</html>`;\n\nconst notificationMessage = `${statusIcon} *CHURN RISK ALERT — ${data.email}*\\n\\n` +\n  `*Risk Level:* ${data.risk_level.replace(/_/g, ' ')}\\n` +\n  `*Churn Score:* ${data.churn_probability_score}%\\n` +\n  `*Lifetime Value:* \\$${Math.round(data.total_lifetime_value)}\\n\\n` +\n  `*Key Metrics:*\\n` +\n  `• Logins/Month: ${data.login_frequency.toFixed(1)}\\n` +\n  `• Days Since Purchase: ${data.days_since_last_purchase}\\n` +\n  `• Spend Trend: ${data.spend_trend_percent > 0 ? '+' : ''}${data.spend_trend_percent}%\\n` +\n  `• Feature Adoption: ${data.adoption_score}%\\n\\n` +\n  `*Risk Factors:* ${data.risk_factors.join(', ')}\\n` +\n  `*Action:* ${data.recommended_action}`;\n\nreturn {\n  json: {\n    ...data,\n    reportHtml,\n    notificationMessage,\n    notificationTitle: `${statusIcon} [${data.customer_id}] ${data.risk_level.replace(/_/g, ' ')} - Churn Score: ${data.churn_probability_score}%`,\n    shouldNotify: data.action_required,\n    shouldNotifyAll: true\n  }\n};"},"typeVersion":2},{"id":"749cee1c-71ed-4c46-acf5-2bffb16fd094","name":"Filter at-risk customers","type":"n8n-nodes-base.filter","position":[3072,496],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"notify-condition","operator":{"type":"boolean","operation":"true"},"leftValue":"={{ $json.action_required }}"}]}},"typeVersion":2},{"id":"859e2c70-dded-45ee-a8a0-118a16762657","name":"Post churn alert to Slack","type":"n8n-nodes-base.httpRequest","position":[3296,400],"parameters":{"url":"YOUR_SLACK_WEBHOOK_URL","method":"POST","options":{},"jsonBody":"={\n  \"text\": \"{{ $json.notificationTitle }}\",\n  \"blocks\": [\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"{{ $json.notificationMessage }}\"\n      }\n    }\n  ]\n}","sendBody":true,"specifyBody":"json"},"typeVersion":4.2},{"id":"c871536b-fb9f-4b73-ba8e-9666959da6ab","name":"Email report to customer success team","type":"n8n-nodes-base.emailSend","position":[3296,592],"webhookId":"b4c1a117-f1bd-46e9-8bda-063bd135bebd","parameters":{"html":"={{ $json.reportHtml }}","options":{},"subject":"={{ $json.notificationTitle }}","toEmail":"user@example.com","fromEmail":"noreply@example.com"},"credentials":{"smtp":{"id":"credential-id","name":"SMTP -test"}},"typeVersion":2.1},{"id":"f6b94a2d-c388-4596-9438-f8b593307b22","name":"Log analysis completion","type":"n8n-nodes-base.code","position":[3520,496],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Log churn analysis completion\nconst timestamp = new Date().toISOString();\nconst data = $input.item.json;\n\nconsole.log(`✅ CHURN ANALYSIS: Customer ${data.customer_id} | Risk: ${data.risk_level} | Score: ${data.churn_probability_score}% | Action: ${data.campaign_type} | Time: ${timestamp}`);\n\n// Aggregate statistics\nconst stats = $getWorkflowStaticData('global').stats || {\n  totalAnalyzed: 0,\n  highRiskCount: 0,\n  mediumRiskCount: 0,\n  lowRiskCount: 0,\n  avgChurnScore: 0,\n  lastUpdated: null\n};\n\nif (data.risk_level === 'HIGH_RISK') stats.highRiskCount++;\nelse if (data.risk_level === 'MEDIUM_RISK') stats.mediumRiskCount++;\nelse stats.lowRiskCount++;\n\nstats.totalAnalyzed++;\nstats.lastUpdated = timestamp;\n\n$getWorkflowStaticData('global').stats = stats;\n\nreturn {\n  json: {\n    success: true,\n    customer_id: data.customer_id,\n    risk_level: data.risk_level,\n    churn_score: data.churn_probability_score,\n    timestamp,\n    cumulativeStats: stats\n  }\n};"},"typeVersion":2}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"d4a74901-f1bc-46d0-ae0a-88864d51c3df","connections":{"Route by risk level":{"main":[[{"node":"Create retention campaign task","type":"main","index":0},{"node":"Store churn predictions in database","type":"main","index":0}],[{"node":"Create retention campaign task","type":"main","index":0},{"node":"Store churn predictions in database","type":"main","index":0}],[{"node":"Store churn predictions in database","type":"main","index":0}]]},"Filter at-risk customers":{"main":[[{"node":"Post churn alert to Slack","type":"main","index":0},{"node":"Email report to customer success team","type":"main","index":0}]]},"Post churn alert to Slack":{"main":[[{"node":"Log analysis completion","type":"main","index":0}]]},"Daily churn analysis at 2 AM":{"main":[[{"node":"Fetch active customer profiles","type":"main","index":0},{"node":"Fetch customer activity logs (30 days)","type":"main","index":0},{"node":"Fetch transaction history (90 days)","type":"main","index":0}]]},"Engineer behavioral features":{"main":[[{"node":"Call ML churn prediction model","type":"main","index":0}]]},"Score and classify churn risk":{"main":[[{"node":"Route by risk level","type":"main","index":0}]]},"Call ML churn prediction model":{"main":[[{"node":"Score and classify churn risk","type":"main","index":0}]]},"Create retention campaign task":{"main":[[{"node":"Generate churn analytics report","type":"main","index":0}]]},"Fetch active customer profiles":{"main":[[{"node":"Merge customer and activity data","type":"main","index":0}]]},"Generate churn analytics report":{"main":[[{"node":"Filter at-risk customers","type":"main","index":0}]]},"Merge customer and activity data":{"main":[[{"node":"Engineer behavioral features","type":"main","index":0}]]},"Fetch transaction history (90 days)":{"main":[[{"node":"Merge customer and activity data","type":"main","index":1}]]},"Store churn predictions in database":{"main":[[{"node":"Generate churn analytics report","type":"main","index":0}]]},"Email report to customer success team":{"main":[[{"node":"Log analysis completion","type":"main","index":0}]]},"Fetch customer activity logs (30 days)":{"main":[[{"node":"Merge customer and activity data","type":"main","index":1}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":22,"nodeTypes":{"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.filter":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.postgres":{"count":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":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":844,"icon":"fa:filter","name":"n8n-nodes-base.filter","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The Filter node can be used to filter items based on a condition. If the condition is met, the item will be passed on to the next node. If the condition is not met, the item will be omitted. Conditions can be combined together by AND(meet all conditions), or OR(meet at least one condition).","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Filter","color":"#229eff"},"iconData":{"icon":"filter","type":"icon"},"displayName":"Filter","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":39,"name":"CRM"},{"id":49,"name":"AI Summarization"}],"image":[]}}