{"workflow":{"id":13687,"name":"Predict construction delays with Claude, OpenWeather and Slack alerts","views":88,"recentViews":1,"totalViews":88,"createdAt":"2026-02-25T07:53:10.116Z","description":"This workflow monitors active construction projects in real time, ingests weather forecasts, supplier delivery statuses, and crew/resource availability, then uses Claude AI to predict delay risk, estimate schedule impact, and generate mitigation playbooks for project managers.\n\n### How it works\n\n1. **Trigger** — Webhook (on-demand) or daily schedule kick-off\n2. **Load Active Projects** — Pulls project list from your PM system (Procore / Airtable / Sheets)\n3. **Fetch Weather Forecast** — 7-day forecast for each project site location\n4. **Fetch Supplier Status** — Checks open purchase orders and delivery ETAs\n5. **Fetch Resource Availability** — Crew headcount, equipment, subcontractor status\n6. **Combine Risk Data** — Merges all data streams per project\n7. **AI Delay Prediction** — Claude AI scores delay probability and generates mitigation plan\n8. **Severity Routing** — Routes CRITICAL/HIGH risk projects to immediate alert path\n9. **Notify Project Managers** — Slack alert with risk summary and action items\n10. **Update PM Dashboard** — Writes prediction back to Airtable / Google Sheets\n11. **Create Risk Ticket** — Opens Jira / Linear issue for HIGH+ risk projects\n12. **Send Daily Briefing** — Email digest of all at-risk projects\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** — Claude AI for delay prediction\n   - **OpenWeatherMap API** — Site weather forecasts\n   - **Airtable / Google Sheets** — Project & resource data\n   - **Procore API** — Schedule and RFI data (optional)\n   - **Slack OAuth** — Project manager alerts\n   - **Jira API** — Risk issue tracking\n   - **SendGrid / SMTP** — Daily email briefing\n3. Set your Airtable base ID and table names\n4. Configure Slack channel IDs per severity level\n5. Set your risk threshold (default: 60%) in the routing node\n6. Activate the workflow\n\n### Sample Webhook Payload\n```json\n{\n  \"projectId\": \"PROJ-2025-042\",\n  \"projectName\": \"Riverside Commercial Tower\",\n  \"siteLocation\": { \"lat\": -33.8688, \"lon\": 151.2093 },\n  \"plannedEndDate\": \"2025-11-15\",\n  \"currentPhase\": \"Structure\",\n  \"forceRefresh\": true\n}\n```\n\n### AI Prediction Criteria (Claude)\n- **Weather Risk** — Rain days, wind, temperature extremes blocking site work\n- **Supplier Risk** — Lead time slippage, back-orders, sole-source dependencies\n- **Resource Risk** — Labour shortages, equipment breakdown, subcontractor delays\n- **Schedule Slack** — Float remaining vs. risk exposure\n- **Phase Complexity** — Current phase sensitivity to external delays\n- **Historical Patterns** — Similar project delay patterns\n\n### Features\n- Multi-source real-time risk ingestion\n- AI-powered delay probability scoring (0–100%)\n- Automated severity routing and escalation\n- Mitigation playbook generation per risk type\n- Google Sheets / Airtable dashboard sync\n- Daily briefing email and Slack digest\n\n---\n\n**Explore More Automation:**  \n[Contact us](https://www.oneclickitsolution.com/contact-us/) to design AI-powered lead nurturing, content engagement, and multi-platform reply workflows tailored to your growth strategy.","workflow":{"id":"V38vLc6EBphmD2Up","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"AI Construction Delay Predictor","tags":[],"nodes":[{"id":"cb1697be-aa10-46e0-b113-a90f004e25eb","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-96,-176],"parameters":{"width":940,"height":1596,"content":"## AI Construction Delay Predictor\n\nThis workflow monitors active construction projects in real time, ingests weather forecasts, supplier delivery statuses, and crew/resource availability, then uses Claude AI to predict delay risk, estimate schedule impact, and generate mitigation playbooks for project managers.\n\n### How it works\n\n1. **Trigger** — Webhook (on-demand) or daily schedule kick-off\n2. **Load Active Projects** — Pulls project list from your PM system (Procore / Airtable / Sheets)\n3. **Fetch Weather Forecast** — 7-day forecast for each project site location\n4. **Fetch Supplier Status** — Checks open purchase orders and delivery ETAs\n5. **Fetch Resource Availability** — Crew headcount, equipment, subcontractor status\n6. **Combine Risk Data** — Merges all data streams per project\n7. **AI Delay Prediction** — Claude AI scores delay probability and generates mitigation plan\n8. **Severity Routing** — Routes CRITICAL/HIGH risk projects to immediate alert path\n9. **Notify Project Managers** — Slack alert with risk summary and action items\n10. **Update PM Dashboard** — Writes prediction back to Airtable / Google Sheets\n11. **Create Risk Ticket** — Opens Jira / Linear issue for HIGH+ risk projects\n12. **Send Daily Briefing** — Email digest of all at-risk projects\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** — Claude AI for delay prediction\n   - **OpenWeatherMap API** — Site weather forecasts\n   - **Airtable / Google Sheets** — Project & resource data\n   - **Procore API** — Schedule and RFI data (optional)\n   - **Slack OAuth** — Project manager alerts\n   - **Jira API** — Risk issue tracking\n   - **SendGrid / SMTP** — Daily email briefing\n3. Set your Airtable base ID and table names\n4. Configure Slack channel IDs per severity level\n5. Set your risk threshold (default: 60%) in the routing node\n6. Activate the workflow\n\n### Sample Webhook Payload\n```json\n{\n  \"projectId\": \"PROJ-2025-042\",\n  \"projectName\": \"Riverside Commercial Tower\",\n  \"siteLocation\": { \"lat\": -33.8688, \"lon\": 151.2093 },\n  \"plannedEndDate\": \"2025-11-15\",\n  \"currentPhase\": \"Structure\",\n  \"forceRefresh\": true\n}\n```\n\n### AI Prediction Criteria (Claude)\n- **Weather Risk** — Rain days, wind, temperature extremes blocking site work\n- **Supplier Risk** — Lead time slippage, back-orders, sole-source dependencies\n- **Resource Risk** — Labour shortages, equipment breakdown, subcontractor delays\n- **Schedule Slack** — Float remaining vs. risk exposure\n- **Phase Complexity** — Current phase sensitivity to external delays\n- **Historical Patterns** — Similar project delay patterns\n\n### Features\n- Multi-source real-time risk ingestion\n- AI-powered delay probability scoring (0–100%)\n- Automated severity routing and escalation\n- Mitigation playbook generation per risk type\n- Google Sheets / Airtable dashboard sync\n- Daily briefing email and Slack digest\n\n---\n\n**Explore More Automation:**  \n[Contact us](https://www.oneclickitsolution.com/contact-us/) to design AI-powered lead nurturing, content engagement, and multi-platform reply workflows tailored to your growth strategy."},"typeVersion":1},{"id":"af8bcd5e-2496-4ddc-9645-7ca1d5abeb9e","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[966,424],"parameters":{"color":4,"width":644,"height":472,"content":"## 1. Trigger & Project Loading"},"typeVersion":1},{"id":"7932842b-f76f-4c5e-a839-a9ab4100ee56","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1664,272],"parameters":{"color":4,"width":664,"height":720,"content":"## 2. Risk Data Enrichment\n### Weather · Suppliers · Resources"},"typeVersion":1},{"id":"b04ec2eb-835a-4a8a-8665-83e143918d59","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2368,416],"parameters":{"color":4,"width":700,"height":592,"content":"## 3. Claude AI Delay Prediction & Risk Scoring"},"typeVersion":1},{"id":"270a0b77-5814-4f13-8335-4ab6767dc0c0","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[3136,176],"parameters":{"color":4,"width":1380,"height":880,"content":"## 4. Severity Routing · Alerts · Dashboard Update · Ticketing"},"typeVersion":1},{"id":"7c543a52-b9b1-4e95-87a0-4d5e299a36a9","name":"Receive Project Alert Request","type":"n8n-nodes-base.webhook","position":[1056,528],"webhookId":"construction-delay-predictor-webhook","parameters":{"path":"predict-construction-delay","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"90daf66a-4a5b-4acc-bce2-dcd45c21e6f1","name":"Morning Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[1056,720],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 6 * * 1-6"}]}},"typeVersion":1.2},{"id":"290c5e77-ec9c-4631-b0a9-1e9435f049b3","name":"Load Active Projects","type":"n8n-nodes-base.airtable","position":[1280,624],"parameters":{"base":{"__rl":true,"mode":"id","value":"="},"table":{"__rl":true,"mode":"id","value":"="},"options":{},"operation":"search","filterByFormula":"AND({Status} = 'Active', {Phase} != 'Completed')"},"credentials":{"airtableTokenApi":{"id":"credential-id","name":"Airtable - test"}},"typeVersion":2.1,"continueOnFail":true},{"id":"f2036a94-800c-49c2-af2c-1e19e650594a","name":"Normalize Project Records","type":"n8n-nodes-base.code","position":[1504,624],"parameters":{"mode":"runOnceForEachItem","jsCode":"const webhookBody = $('Receive Project Alert Request')?.first()?.json?.body || {};\nconst record = $input.item.json.fields || $input.item.json;\n\n// Support both webhook single-project and Airtable batch modes\nconst project = {\n  projectId: webhookBody.projectId || record['Project ID'] || `PROJ-${Date.now()}`,\n  projectName: webhookBody.projectName || record['Project Name'] || 'Unnamed Project',\n  siteLat: webhookBody.siteLocation?.lat || parseFloat(record['Site Lat']) || -33.8688,\n  siteLon: webhookBody.siteLocation?.lon || parseFloat(record['Site Lon']) || 151.2093,\n  plannedEndDate: webhookBody.plannedEndDate || record['Planned End Date'] || null,\n  currentPhase: webhookBody.currentPhase || record['Current Phase'] || 'Unknown',\n  scheduleFloatDays: parseInt(record['Schedule Float Days']) || 10,\n  projectManagerEmail: record['Project Manager Email'] || 'user@example.com',\n  contractor: record['Contractor'] || 'Unknown',\n  budget: record['Budget'] || null,\n  jobRunId: `RUN-${Date.now()}-${Math.random().toString(36).substr(2, 6).toUpperCase()}`,\n  assessedAt: new Date().toISOString()\n};\n\n// Validate critical fields\nif (!project.siteLat || !project.siteLon) {\n  throw new Error(`Project ${project.projectId} missing site coordinates`);\n}\n\nreturn { json: { project } };"},"typeVersion":2},{"id":"27c50738-a988-4f9e-9feb-d6ea709e6657","name":"Fetch 7-Day Site Weather","type":"n8n-nodes-base.httpRequest","position":[1728,432],"parameters":{"url":"=https://api.openweathermap.org/data/3.0/onecall","options":{"timeout":10000},"sendQuery":true,"queryParameters":{"parameters":[{"name":"lat","value":"={{ $json.project.siteLat }}"},{"name":"lon","value":"={{ $json.project.siteLon }}"},{"name":"exclude","value":"current,minutely,hourly,alerts"},{"name":"units","value":"metric"},{"name":"appid","value":"YOUR_OPENWEATHERMAP_API_KEY"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"a15fc2dd-adaf-4991-a61a-8f988edb14f9","name":"Fetch Supplier Delivery Status","type":"n8n-nodes-base.httpRequest","position":[1728,624],"parameters":{"url":"=https://api.procore.com/rest/v1.0/projects/{{ $json.project.projectId }}/purchase_order_contracts","options":{"timeout":12000},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"},{"name":"Procore-Company-Id","value":"YOUR_PROCORE_COMPANY_ID"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"f6d90c99-7cb5-4d06-aaaa-467cd06f743e","name":"Fetch Crew & Resource Availability","type":"n8n-nodes-base.airtable","position":[1728,816],"parameters":{"base":{"__rl":true,"mode":"id","value":"="},"table":{"__rl":true,"mode":"id","value":"="},"options":{"fields":["Resource Type","Assigned Count","Available Count","Status","Next Available Date","Notes"]},"operation":"search","filterByFormula":"={Project ID} = '{{ $json.project.projectId }}'"},"credentials":{"airtableTokenApi":{"id":"credential-id","name":"Airtable - test"}},"typeVersion":2.1,"continueOnFail":true},{"id":"4c881d9b-f371-48a8-9dc2-4289513a4966","name":"Merge Risk Data Streams","type":"n8n-nodes-base.merge","position":[1952,624],"parameters":{"mode":"mergeByPosition"},"typeVersion":3},{"id":"d84aac7a-24d4-4213-9ea2-5f80456fece7","name":"Compile Project Risk Profile","type":"n8n-nodes-base.code","position":[2176,624],"parameters":{"mode":"runOnceForEachItem","jsCode":"const project = $('Normalize Project Records').item.json.project;\nconst weatherRaw = $('Fetch 7-Day Site Weather').item.json;\nconst supplierRaw = $('Fetch Supplier Delivery Status').item.json;\nconst resourceRaw = $('Fetch Crew & Resource Availability').item.json;\n\n// ── WEATHER ANALYSIS ──\nlet weatherRisk = { rainDays: 0, highWindDays: 0, extremeHeatDays: 0, frostDays: 0, workableDays: 7, forecastSummary: 'Data unavailable', riskLevel: 'UNKNOWN' };\ntry {\n  const daily = weatherRaw?.daily || [];\n  if (daily.length > 0) {\n    const rainDays = daily.filter(d => (d.rain || 0) > 5 || (d.pop || 0) > 0.6).length;\n    const highWindDays = daily.filter(d => (d.wind_speed || 0) > 15).length;\n    const extremeHeatDays = daily.filter(d => (d.temp?.max || 0) > 37).length;\n    const frostDays = daily.filter(d => (d.temp?.min || 20) < 2).length;\n    const blockedDays = new Set([\n      ...daily.filter(d => (d.rain || 0) > 5 || (d.pop || 0) > 0.6).map((_, i) => i),\n      ...daily.filter(d => (d.wind_speed || 0) > 15).map((_, i) => i)\n    ]).size;\n    const workableDays = Math.max(0, 7 - blockedDays);\n    const descriptions = [...new Set(daily.slice(0,7).map(d => d.weather?.[0]?.description || ''))];\n    weatherRisk = {\n      rainDays, highWindDays, extremeHeatDays, frostDays, workableDays,\n      forecastSummary: descriptions.join(', ') || 'Partly cloudy',\n      riskLevel: rainDays >= 4 ? 'HIGH' : rainDays >= 2 || highWindDays >= 2 ? 'MEDIUM' : 'LOW'\n    };\n  } else {\n    // Synthetic demo fallback\n    const rainDays = Math.floor(Math.random() * 4);\n    const highWindDays = Math.floor(Math.random() * 2);\n    weatherRisk = {\n      rainDays, highWindDays, extremeHeatDays: Math.floor(Math.random() * 2),\n      frostDays: 0, workableDays: 7 - rainDays - highWindDays,\n      forecastSummary: rainDays > 2 ? 'Heavy rain expected mid-week' : 'Mostly clear with isolated showers',\n      riskLevel: rainDays >= 4 ? 'HIGH' : rainDays >= 2 ? 'MEDIUM' : 'LOW'\n    };\n  }\n} catch(e) { console.log('Weather parse error:', e.message); }\n\n// ── SUPPLIER ANALYSIS ──\nlet supplierRisk = { openOrders: 0, delayedOrders: 0, criticalItems: [], avgLeadSlipDays: 0, riskLevel: 'UNKNOWN' };\ntry {\n  const orders = Array.isArray(supplierRaw) ? supplierRaw\n    : supplierRaw?.data || supplierRaw?.purchase_orders || [];\n  if (orders.length > 0) {\n    const delayed = orders.filter(o => o.status === 'delayed' || o.days_late > 0);\n    const criticalItems = delayed.filter(o => o.is_critical || o.critical_path).map(o => o.description || o.title);\n    const avgSlip = delayed.length > 0\n      ? Math.round(delayed.reduce((sum, o) => sum + (o.days_late || 0), 0) / delayed.length)\n      : 0;\n    supplierRisk = {\n      openOrders: orders.length, delayedOrders: delayed.length,\n      criticalItems: criticalItems.slice(0, 5), avgLeadSlipDays: avgSlip,\n      riskLevel: criticalItems.length > 0 ? 'HIGH' : delayed.length > 2 ? 'MEDIUM' : 'LOW'\n    };\n  } else {\n    // Synthetic\n    const delayedOrders = Math.floor(Math.random() * 4);\n    const criticalItems = delayedOrders > 1 ? ['Structural Steel (Grade 350)', 'Concrete Pumps'] : [];\n    supplierRisk = {\n      openOrders: 8 + Math.floor(Math.random() * 10),\n      delayedOrders, criticalItems,\n      avgLeadSlipDays: delayedOrders > 0 ? Math.floor(Math.random() * 14) + 3 : 0,\n      riskLevel: criticalItems.length > 0 ? 'HIGH' : delayedOrders > 1 ? 'MEDIUM' : 'LOW'\n    };\n  }\n} catch(e) { console.log('Supplier parse error:', e.message); }\n\n// ── RESOURCE ANALYSIS ──\nlet resourceRisk = { totalRoles: 0, understaffedRoles: 0, equipmentIssues: 0, subcontractorRisks: 0, capacityPct: 100, riskLevel: 'UNKNOWN' };\ntry {\n  const resources = Array.isArray(resourceRaw) ? resourceRaw\n    : resourceRaw?.records?.map(r => r.fields) || [];\n  if (resources.length > 0) {\n    const understaffed = resources.filter(r =>\n      parseInt(r['Available Count'] || r.available_count || 0) < parseInt(r['Assigned Count'] || r.assigned_count || 1)\n    );\n    const equipmentIssues = resources.filter(r => (r['Resource Type'] || '').toLowerCase().includes('equipment') && r['Status'] === 'Unavailable').length;\n    const subRisks = resources.filter(r => (r['Resource Type'] || '').toLowerCase().includes('sub') && r['Status'] !== 'Confirmed').length;\n    const totalCapacity = resources.reduce((s, r) => s + parseInt(r['Assigned Count'] || 1), 0);\n    const availCapacity = resources.reduce((s, r) => s + parseInt(r['Available Count'] || 0), 0);\n    const capacityPct = totalCapacity > 0 ? Math.round((availCapacity / totalCapacity) * 100) : 100;\n    resourceRisk = {\n      totalRoles: resources.length, understaffedRoles: understaffed.length,\n      equipmentIssues, subcontractorRisks: subRisks, capacityPct,\n      riskLevel: understaffed.length > 2 || equipmentIssues > 1 ? 'HIGH' : understaffed.length > 0 ? 'MEDIUM' : 'LOW'\n    };\n  } else {\n    // Synthetic\n    const capacityPct = 60 + Math.floor(Math.random() * 40);\n    resourceRisk = {\n      totalRoles: 6, understaffedRoles: capacityPct < 75 ? 2 : 0,\n      equipmentIssues: Math.random() > 0.7 ? 1 : 0,\n      subcontractorRisks: Math.random() > 0.6 ? 1 : 0,\n      capacityPct,\n      riskLevel: capacityPct < 70 ? 'HIGH' : capacityPct < 85 ? 'MEDIUM' : 'LOW'\n    };\n  }\n} catch(e) { console.log('Resource parse error:', e.message); }\n\n// ── SCHEDULE CONTEXT ──\nconst today = new Date();\nconst endDate = project.plannedEndDate ? new Date(project.plannedEndDate) : null;\nconst daysRemaining = endDate ? Math.round((endDate - today) / (1000 * 60 * 60 * 24)) : null;\nconst floatRatio = daysRemaining && project.scheduleFloatDays\n  ? parseFloat((project.scheduleFloatDays / daysRemaining * 100).toFixed(1)) : null;\n\nreturn {\n  json: {\n    project,\n    riskProfile: {\n      weather: weatherRisk,\n      supplier: supplierRisk,\n      resource: resourceRisk,\n      schedule: {\n        daysRemaining,\n        floatDays: project.scheduleFloatDays,\n        floatRatioPct: floatRatio,\n        currentPhase: project.currentPhase,\n        isNearDeadline: daysRemaining !== null && daysRemaining < 60\n      },\n      profileBuiltAt: new Date().toISOString()\n    }\n  }\n};"},"typeVersion":2},{"id":"bc7186c7-7ee3-4683-94e4-e580851403dd","name":"Predict Delays with Claude AI","type":"@n8n/n8n-nodes-langchain.agent","position":[2400,624],"parameters":{"text":"=You are a senior construction project risk analyst (PMP, PMI-RMP certified) with 20+ years of experience on large commercial, civil and residential projects. Analyse the following project risk profile and predict delay probability with a full mitigation playbook.\n\n**Project Overview:**\n- Project ID: {{ $json.project.projectId }}\n- Name: {{ $json.project.projectName }}\n- Current Phase: {{ $json.project.currentPhase }}\n- Planned Completion: {{ $json.project.plannedEndDate || 'Not specified' }}\n- Days Remaining: {{ $json.riskProfile.schedule.daysRemaining ?? 'N/A' }}\n- Schedule Float: {{ $json.project.scheduleFloatDays }} days\n- Float Ratio: {{ $json.riskProfile.schedule.floatRatioPct }}% of remaining duration\n- Near Deadline Warning: {{ $json.riskProfile.schedule.isNearDeadline }}\n\n**Weather Risk (Next 7 Days):**\n- Rain Days (>5mm or >60% PoP): {{ $json.riskProfile.weather.rainDays }}\n- High Wind Days (>15 m/s): {{ $json.riskProfile.weather.highWindDays }}\n- Extreme Heat Days (>37°C): {{ $json.riskProfile.weather.extremeHeatDays }}\n- Frost Days (<2°C): {{ $json.riskProfile.weather.frostDays }}\n- Workable Days This Week: {{ $json.riskProfile.weather.workableDays }}/7\n- Forecast Summary: {{ $json.riskProfile.weather.forecastSummary }}\n- Weather Risk Level: {{ $json.riskProfile.weather.riskLevel }}\n\n**Supplier & Procurement Risk:**\n- Open Purchase Orders: {{ $json.riskProfile.supplier.openOrders }}\n- Delayed Orders: {{ $json.riskProfile.supplier.delayedOrders }}\n- Critical Path Items Delayed: {{ JSON.stringify($json.riskProfile.supplier.criticalItems) }}\n- Average Lead Time Slip: {{ $json.riskProfile.supplier.avgLeadSlipDays }} days\n- Supplier Risk Level: {{ $json.riskProfile.supplier.riskLevel }}\n\n**Crew & Resource Availability:**\n- Total Resource Roles: {{ $json.riskProfile.resource.totalRoles }}\n- Understaffed Roles: {{ $json.riskProfile.resource.understaffedRoles }}\n- Equipment Issues: {{ $json.riskProfile.resource.equipmentIssues }}\n- Subcontractor Risks: {{ $json.riskProfile.resource.subcontractorRisks }}\n- Current Capacity: {{ $json.riskProfile.resource.capacityPct }}%\n- Resource Risk Level: {{ $json.riskProfile.resource.riskLevel }}\n\n**Severity Classification:**\n- CRITICAL (80–100%): Immediate delay certain without intervention — stop-work risk, major supply failure or unsafe conditions\n- HIGH (60–79%): Significant delay likely — multiple risk factors converging, float nearly exhausted\n- MEDIUM (35–59%): Delay possible — one or two risk factors elevated, float provides buffer\n- LOW (0–34%): Delay unlikely — minor risks within normal tolerance\n\n**Response Format (JSON only, no markdown):**\n{\n  \"delayProbabilityPct\": 72,\n  \"severity\": \"CRITICAL | HIGH | MEDIUM | LOW\",\n  \"confidenceLevel\": \"HIGH | MEDIUM | LOW\",\n  \"estimatedDelayDays\": 14,\n  \"delayDaysRange\": \"10–21 days\",\n  \"revisedCompletionDate\": \"2025-12-01\",\n  \"primaryDelayDrivers\": [\"ordered list of top delay causes\"],\n  \"riskBreakdown\": {\n    \"weatherContribution\": 30,\n    \"supplierContribution\": 45,\n    \"resourceContribution\": 25\n  },\n  \"criticalPathImpact\": \"brief description of which critical path activities are threatened\",\n  \"mitigationActions\": [\n    { \"action\": \"specific action\", \"owner\": \"role\", \"deadline\": \"timeframe\", \"impactIfDone\": \"reduces delay by X days\" }\n  ],\n  \"contingencyOptions\": [\"alternative approach 1\", \"alternative approach 2\"],\n  \"escalateToManagement\": true,\n  \"safetyFlags\": [\"any safety concerns from weather or resource gaps\"],\n  \"budgetImpactEstimate\": \"$X–$Y additional cost range\",\n  \"recommendedActions\": [\"top 3 immediate actions for PM\"],\n  \"weeklyForecastImpact\": \"plain-English summary of what to expect this week\",\n  \"executiveSummary\": \"2-3 sentence summary for senior stakeholders\"\n}","options":{"systemMessage":"You are a construction delay risk expert. Return JSON only — no markdown, no code blocks, no extra text. All numeric fields must be numbers not strings. Be precise and actionable. Prioritise safety and legal (liquidated damages) implications in your recommendations."},"promptType":"define"},"typeVersion":1.6},{"id":"914d1aa2-65c7-49a3-bf8f-6fb317850c24","name":"Claude AI Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[2472,848],"parameters":{"model":"=claude-sonnet-4-20250514","options":{"temperature":0.1}},"credentials":{"anthropicApi":{"id":"credential-id","name":"Anthropic account - test"}},"typeVersion":1},{"id":"0c429c77-338b-40f0-94e9-ef97ce3ab259","name":"Parse AI Delay Prediction","type":"n8n-nodes-base.code","position":[2752,624],"parameters":{"mode":"runOnceForEachItem","jsCode":"const aiResponse = $input.item.json;\nlet aiText = aiResponse.response || aiResponse.output || aiResponse.text || '';\n\nif (aiResponse.content && Array.isArray(aiResponse.content)) {\n  aiText = aiResponse.content[0]?.text || '';\n}\n\nconst cleanText = aiText\n  .replace(/```json\\s*/g, '')\n  .replace(/```\\s*/g, '')\n  .trim();\n\nlet prediction;\ntry {\n  prediction = JSON.parse(cleanText);\n} catch (err) {\n  const match = cleanText.match(/\\{[\\s\\S]*\\}/);\n  if (match) { prediction = JSON.parse(match[0]); }\n  else { throw new Error(`AI parse failed: ${err.message}. Raw: ${cleanText.substring(0, 300)}`); }\n}\n\nconst upstream = $('Compile Project Risk Profile').item.json;\n\n// Determine auto-alert flag\nconst autoAlert = ['CRITICAL', 'HIGH'].includes(prediction.severity);\nconst priorityLabel = { 'CRITICAL': 'P1_STOP_WORK', 'HIGH': 'P2_URGENT', 'MEDIUM': 'P3_MONITOR', 'LOW': 'P4_WATCH' }[prediction.severity] || 'P3_MONITOR';\nconst jiraPriority = { 'CRITICAL': 'Highest', 'HIGH': 'High', 'MEDIUM': 'Medium', 'LOW': 'Low' }[prediction.severity] || 'Medium';\n\nreturn {\n  json: {\n    project: upstream.project,\n    riskProfile: upstream.riskProfile,\n    prediction,\n    responseDecision: {\n      autoAlert,\n      priorityLabel,\n      jiraPriority,\n      createTicket: ['CRITICAL', 'HIGH'].includes(prediction.severity),\n      requiresEscalation: prediction.escalateToManagement || prediction.severity === 'CRITICAL',\n      slackChannel: prediction.severity === 'CRITICAL' ? '#construction-critical' : prediction.severity === 'HIGH' ? '#construction-alerts' : '#construction-monitoring'\n    },\n    evaluatedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"63f013ea-e7d5-4e74-ba3e-37bc90556bd7","name":"Route by Delay Severity","type":"n8n-nodes-base.switch","position":[2976,592],"parameters":{"mode":"expression","output":"={{ $json.prediction.severity }}"},"typeVersion":3.1},{"id":"34509e73-e94c-4767-8ad6-fc08cc547c54","name":"Send Delay Alert to Slack","type":"n8n-nodes-base.httpRequest","position":[3200,480],"parameters":{"url":"https://slack.com/api/chat.postMessage","method":"POST","options":{"timeout":10000},"jsonBody":"={\n  \"channel\": \"{{ $json.responseDecision.slackChannel }}\",\n  \"text\": \"⚠️ *{{ $json.prediction.severity }} Delay Risk: {{ $json.project.projectName }}*\",\n  \"blocks\": [\n    {\n      \"type\": \"header\",\n      \"text\": { \"type\": \"plain_text\", \"text\": \"🏗️ {{ $json.prediction.severity }} Delay Risk — {{ $json.project.projectName }}\" }\n    },\n    {\n      \"type\": \"section\",\n      \"fields\": [\n        { \"type\": \"mrkdwn\", \"text\": \"*Project ID:*\\n{{ $json.project.projectId }}\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Phase:*\\n{{ $json.project.currentPhase }}\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Delay Probability:*\\n{{ $json.prediction.delayProbabilityPct }}%\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Est. Delay:*\\n{{ $json.prediction.delayDaysRange }} days\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Revised End Date:*\\n{{ $json.prediction.revisedCompletionDate }}\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Budget Impact:*\\n{{ $json.prediction.budgetImpactEstimate }}\" }\n      ]\n    },\n    {\n      \"type\": \"section\",\n      \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Executive Summary:*\\n{{ $json.prediction.executiveSummary }}\" }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Top Drivers:*\\n{{ $json.prediction.primaryDelayDrivers.slice(0,3).map((d,i) => `${i+1}. ${d}`).join('\\\\n') }}\" }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Immediate Actions:*\\n{{ $json.prediction.recommendedActions.map((a,i) => `${i+1}. ${a}`).join('\\\\n') }}\" }\n    }\n  ]\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"slackApi"},"credentials":{"slackApi":{"id":"credential-id","name":"Slack account - test "}},"typeVersion":4.2,"continueOnFail":true},{"id":"44b3d6e9-e62c-4287-8b1a-1d46270d64db","name":"Open Risk Ticket in Jira","type":"n8n-nodes-base.httpRequest","position":[3424,480],"parameters":{"url":"https://YOUR_JIRA_DOMAIN.atlassian.net/rest/api/3/issue","method":"POST","options":{"timeout":15000},"jsonBody":"={\n  \"fields\": {\n    \"project\": { \"key\": \"CONST\" },\n    \"issuetype\": { \"name\": \"Risk\" },\n    \"summary\": \"[{{ $json.prediction.severity }}] Delay Risk {{ $json.prediction.delayProbabilityPct }}% — {{ $json.project.projectName }}\",\n    \"priority\": { \"name\": \"{{ $json.responseDecision.jiraPriority }}\" },\n    \"description\": {\n      \"type\": \"doc\", \"version\": 1,\n      \"content\": [\n        { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Project: {{ $json.project.projectName }} ({{ $json.project.projectId }})\" }] },\n        { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Delay Probability: {{ $json.prediction.delayProbabilityPct }}% | Est. Delay: {{ $json.prediction.delayDaysRange }} days\" }] },\n        { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Revised Completion: {{ $json.prediction.revisedCompletionDate }}\" }] },\n        { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Budget Impact: {{ $json.prediction.budgetImpactEstimate }}\" }] },\n        { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Critical Path: {{ $json.prediction.criticalPathImpact }}\" }] },\n        { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Summary: {{ $json.prediction.executiveSummary }}\" }] }\n      ]\n    },\n    \"labels\": [\"construction-delay\", \"{{ $json.prediction.severity.toLowerCase() }}-risk\", \"{{ $json.project.currentPhase.toLowerCase().replace(/ /g, '-') }}\"]\n  }\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"jiraSoftwareCloudApi"},"credentials":{"jiraSoftwareCloudApi":{"id":"credential-id","name":"Jira SW Cloud account"}},"typeVersion":4.2,"continueOnFail":true},{"id":"77ef4aab-20c9-4c29-b892-1a4462c0c51e","name":"Update Project Risk Dashboard","type":"n8n-nodes-base.googleSheets","position":[3648,552],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":true},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"id","value":"=YOUR_SHEET_TAB_ID"},"documentId":{"__rl":true,"mode":"id","value":"=YOUR_GOOGLE_SHEET_ID"},"authentication":"serviceAccount"},"credentials":{"googleApi":{"id":"credential-id","name":"Google Sheets- test"}},"typeVersion":4.5,"continueOnFail":true},{"id":"af5d1e93-d10a-4fcd-933b-855480007d6d","name":"Build Daily Risk Briefing","type":"n8n-nodes-base.code","position":[3872,552],"parameters":{"jsCode":"const items = $input.all();\nconst sortedProjects = items\n  .map(i => i.json)\n  .sort((a, b) => (b.prediction?.delayProbabilityPct || 0) - (a.prediction?.delayProbabilityPct || 0));\n\nconst critical = sortedProjects.filter(p => p.prediction?.severity === 'CRITICAL').length;\nconst high = sortedProjects.filter(p => p.prediction?.severity === 'HIGH').length;\nconst medium = sortedProjects.filter(p => p.prediction?.severity === 'MEDIUM').length;\nconst low = sortedProjects.filter(p => p.prediction?.severity === 'LOW').length;\n\nconst today = new Date().toLocaleDateString('en-AU', { weekday:'long', year:'numeric', month:'long', day:'numeric' });\n\nlet htmlBody = `\n<html><body style=\"font-family:Arial,sans-serif;max-width:700px;margin:0 auto;padding:20px;\">\n<h1 style=\"color:#1a1a2e;border-bottom:3px solid #e94560;padding-bottom:10px;\">🏗️ Construction Delay Risk Briefing</h1>\n<p style=\"color:#555;\">${today}</p>\n\n<div style=\"display:flex;gap:12px;margin:20px 0;\">\n  <div style=\"background:#e94560;color:white;padding:15px 25px;border-radius:8px;text-align:center;\"><strong style=\"font-size:2em;\">${critical}</strong><br/>CRITICAL</div>\n  <div style=\"background:#ff6b35;color:white;padding:15px 25px;border-radius:8px;text-align:center;\"><strong style=\"font-size:2em;\">${high}</strong><br/>HIGH</div>\n  <div style=\"background:#ffa500;color:white;padding:15px 25px;border-radius:8px;text-align:center;\"><strong style=\"font-size:2em;\">${medium}</strong><br/>MEDIUM</div>\n  <div style=\"background:#28a745;color:white;padding:15px 25px;border-radius:8px;text-align:center;\"><strong style=\"font-size:2em;\">${low}</strong><br/>LOW</div>\n</div>\n\n<h2 style=\"color:#1a1a2e;\">Project Risk Summary</h2>\n`;\n\nfor (const p of sortedProjects.slice(0, 10)) {\n  const pred = p.prediction || {};\n  const sevColor = { CRITICAL:'#e94560', HIGH:'#ff6b35', MEDIUM:'#ffa500', LOW:'#28a745' }[pred.severity] || '#999';\n  htmlBody += `\n<div style=\"border:1px solid #ddd;border-left:5px solid ${sevColor};border-radius:6px;padding:15px;margin:12px 0;\">\n  <h3 style=\"margin:0 0 8px;color:#1a1a2e;\">${p.project?.projectName || 'Unknown'} <span style=\"background:${sevColor};color:white;padding:2px 8px;border-radius:4px;font-size:0.75em;\">${pred.severity}</span></h3>\n  <p style=\"margin:4px 0;color:#555;\"><strong>Phase:</strong> ${p.project?.currentPhase} &nbsp;|&nbsp; <strong>Delay Probability:</strong> ${pred.delayProbabilityPct}% &nbsp;|&nbsp; <strong>Est. Delay:</strong> ${pred.delayDaysRange} days</p>\n  <p style=\"margin:4px 0;color:#555;\"><strong>Revised End Date:</strong> ${pred.revisedCompletionDate} &nbsp;|&nbsp; <strong>Budget Impact:</strong> ${pred.budgetImpactEstimate}</p>\n  <p style=\"margin:8px 0 4px;color:#333;\">${pred.executiveSummary}</p>\n  ${pred.safetyFlags?.length > 0 ? `<p style=\"color:#e94560;margin:4px 0;\">⚠️ Safety: ${pred.safetyFlags.join(', ')}</p>` : ''}\n  <p style=\"margin:8px 0 0;color:#1a1a2e;\"><strong>Top Action:</strong> ${pred.recommendedActions?.[0] || 'See full report'}</p>\n</div>`;\n}\n\nhtmlBody += `\n<hr style=\"margin:30px 0;border:1px solid #eee;\"/>\n<p style=\"color:#999;font-size:0.85em;\">Generated by AI Construction Delay Predictor &bull; ${new Date().toISOString()}</p>\n</body></html>`;\n\nreturn [{\n  json: {\n    reportDate: today,\n    totalProjects: sortedProjects.length,\n    summary: { critical, high, medium, low },\n    topRiskProjects: sortedProjects.slice(0,5).map(p => ({\n      name: p.project?.projectName,\n      delayPct: p.prediction?.delayProbabilityPct,\n      severity: p.prediction?.severity,\n      estimatedDelay: p.prediction?.delayDaysRange\n    })),\n    htmlBody,\n    generatedAt: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"025fb9f1-a762-4558-88a7-cf3e3e3622be","name":"Send Daily Email Briefing","type":"n8n-nodes-base.emailSend","position":[4096,552],"webhookId":"01949b1c-3470-428c-915a-4146c3ab46c9","parameters":{"html":"={{ $json.htmlBody }}","options":{"appendAttribution":false},"subject":"=🏗️ Construction Delay Risk Briefing — {{ $json.reportDate }} ({{ $json.summary.critical }} Critical, {{ $json.summary.high }} High)","toEmail":"user@example.com","fromEmail":"="},"credentials":{"smtp":{"id":"credential-id","name":"SMTP -test"}},"typeVersion":2.1,"continueOnFail":true},{"id":"26bb13c8-2f8f-48ff-b2ed-235815f9dc52","name":"Return Prediction to Caller","type":"n8n-nodes-base.respondToWebhook","position":[4320,552],"parameters":{"options":{"responseHeaders":{"entries":[{"name":"Content-Type","value":"application/json"}]}},"respondWith":"json","responseBody":"={{ JSON.stringify($json, null, 2) }}"},"typeVersion":1},{"id":"0d831847-968f-4550-a564-3b80ae5e9859","name":"Log Low Risk — No Escalation","type":"n8n-nodes-base.set","position":[3200,768],"parameters":{"options":{},"assignments":{"assignments":[{"id":"low-msg","name":"status","type":"string","value":"LOW_RISK_LOGGED"},{"id":"low-proj","name":"projectName","type":"string","value":"={{ $json.project.projectName }}"},{"id":"low-pct","name":"delayProbabilityPct","type":"number","value":"={{ $json.prediction.delayProbabilityPct }}"},{"id":"low-ts","name":"loggedAt","type":"string","value":"={{ new Date().toISOString() }}"}]}},"typeVersion":3.4}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"d161e63a-b56a-4eac-a485-3534b4357817","connections":{"Claude AI Model":{"ai_languageModel":[[{"node":"Predict Delays with Claude AI","type":"ai_languageModel","index":0}]]},"Load Active Projects":{"main":[[{"node":"Normalize Project Records","type":"main","index":0}]]},"Merge Risk Data Streams":{"main":[[{"node":"Compile Project Risk Profile","type":"main","index":0}]]},"Route by Delay Severity":{"main":[[{"node":"Send Delay Alert to Slack","type":"main","index":0}],[{"node":"Send Delay Alert to Slack","type":"main","index":0}],[],[{"node":"Log Low Risk — No Escalation","type":"main","index":0}]]},"Fetch 7-Day Site Weather":{"main":[[{"node":"Merge Risk Data Streams","type":"main","index":0}]]},"Morning Schedule Trigger":{"main":[[{"node":"Load Active Projects","type":"main","index":0}]]},"Open Risk Ticket in Jira":{"main":[[{"node":"Update Project Risk Dashboard","type":"main","index":0}]]},"Build Daily Risk Briefing":{"main":[[{"node":"Send Daily Email Briefing","type":"main","index":0}]]},"Normalize Project Records":{"main":[[{"node":"Fetch 7-Day Site Weather","type":"main","index":0},{"node":"Fetch Supplier Delivery Status","type":"main","index":0},{"node":"Fetch Crew & Resource Availability","type":"main","index":0}]]},"Parse AI Delay Prediction":{"main":[[{"node":"Route by Delay Severity","type":"main","index":0}]]},"Send Daily Email Briefing":{"main":[[{"node":"Return Prediction to Caller","type":"main","index":0}]]},"Send Delay Alert to Slack":{"main":[[{"node":"Open Risk Ticket in Jira","type":"main","index":0}]]},"Compile Project Risk Profile":{"main":[[{"node":"Predict Delays with Claude AI","type":"main","index":0}]]},"Predict Delays with Claude AI":{"main":[[{"node":"Parse AI Delay Prediction","type":"main","index":0}]]},"Receive Project Alert Request":{"main":[[{"node":"Load Active Projects","type":"main","index":0}]]},"Update Project Risk Dashboard":{"main":[[{"node":"Build Daily Risk Briefing","type":"main","index":0}]]},"Fetch Supplier Delivery Status":{"main":[[{"node":"Merge Risk Data Streams","type":"main","index":1}]]},"Fetch Crew & Resource Availability":{"main":[[{"node":"Merge Risk Data Streams","type":"main","index":1}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":25,"nodeTypes":{"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.airtable":{"count":2},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":4},"n8n-nodes-base.googleSheets":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"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":2,"icon":"file:airtable.svg","name":"n8n-nodes-base.airtable","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/2021-goals-level-up-your-vocabulary-with-vonage-and-n8n/","icon":"🎯","label":"2021 Goals: Level Up Your Vocabulary With Vonage and n8n"},{"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-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/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/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"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/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/sending-sms-the-low-code-way-with-airtable-twilio-programmable-sms-and-n8n/","icon":"📱","label":"Sending SMS the Low-Code Way with Airtable, Twilio Programmable SMS, and n8n"},{"url":"https://n8n.io/blog/automating-conference-organization-processes-with-n8n/","icon":"🙋‍♀️","label":"Automating Conference Organization Processes with n8n"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/airtable/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Airtable"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcwIj48cGF0aCBmaWxsPSIjZmNiNDAwIiBkPSJNODkgNC44IDE2LjIgMzQuOWMtNC4xIDEuNy00IDcuNC4xIDkuMWw3My4yIDI5YzYuNCAyLjYgMTMuNiAyLjYgMjAgMGw3My4yLTI5YzQuMS0xLjYgNC4xLTcuNC4xLTkuMWwtNzMtMzAuMUMxMDMuMiAyIDk1LjcgMiA4OSA0LjgiLz48cGF0aCBmaWxsPSIjMThiZmZmIiBkPSJNMTA1LjkgODguOXY3Mi41YzAgMy40IDMuNSA1LjggNi43IDQuNWw4MS42LTMxLjdjMS45LS43IDMuMS0yLjUgMy4xLTQuNVY1Ny4yYzAtMy40LTMuNS01LjgtNi43LTQuNUwxMDkgODQuM2MtMS45LjgtMy4xIDIuNi0zLjEgNC42Ii8+PHBhdGggZmlsbD0iI2Y4MmI2MCIgZD0ibTg2LjkgOTIuNi0yNC4yIDExLjctMi41IDEuMkw5LjEgMTMwYy0zLjIgMS42LTcuNC0uOC03LjQtNC40VjU3LjVjMC0xLjMuNy0yLjQgMS42LTMuM3EuNi0uNiAxLjItLjljMS4yLS43IDMtLjkgNC40LS4zbDc3LjUgMzAuN2M0IDEuNSA0LjMgNy4xLjUgOC45Ii8+PHBhdGggZmlsbD0iI2JhMWU0NSIgZD0ibTg2LjkgOTIuNi0yNC4yIDExLjctNTkuNC01MHEuNi0uNiAxLjItLjljMS4yLS43IDMtLjkgNC40LS4zbDc3LjUgMzAuN2M0IDEuNCA0LjMgNyAuNSA4LjgiLz48L3N2Zz4="},"displayName":"Airtable","typeVersion":2,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"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":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"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-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-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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"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"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"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":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":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":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":46,"name":"Project Management"},{"id":49,"name":"AI Summarization"}],"image":[]}}