{"workflow":{"id":13944,"name":"Generate weekly supply chain OTIF reports and AI analysis with Notion and GPT-4o","views":62,"recentViews":1,"totalViews":62,"createdAt":"2026-03-08T16:39:29.535Z","description":"*Tags: Logistics, Supply Chain, OTIF, KPI Tracking, Performance Management, AI Analysis, Notion*\n\n### Context\n\nHi! I'm [Samir](https://samirsaci.com/about), Supply Chain Engineer, Data Scientist based in Paris, and founder of [LogiGreen](https://logi-green.com).\n\n&gt; Let's use AI with n8n to automate supply chain performance tracking!\n\nTracking **On-Time In-Full (OTIF)** delivery performance is critical for retail logistics, but manually compiling data, computing KPIs, and writing analysis reports is time-consuming and error-prone.\n\n[![Workflow Overview](https://www.samirsaci.com/content/images/size/w1000/2026/03/image-10.png)](https://youtu.be/tOT8XhQ7eB8)\n\nThis workflow automates the entire process: collecting shipment data, aggregating weekly KPIs, generating AI powered performance analyses, and pushing everything into a Notion dashboard.\n\n[![Notion Dashboard](https://www.samirsaci.com/content/images/size/w1000/2026/03/image-5.png)](https://youtu.be/tOT8XhQ7eB8)\n\nFor business inquiries, you can find me on [LinkedIn](https://www.linkedin.com/in/samir-saci)\n\n### Demo of the workflow\n\nThe workflow collects shipment records from your TMS and WMS, then aggregates them by week.\n\n[![n8n Data Table](https://www.samirsaci.com/content/images/size/w1000/2026/03/image-6.png)](https://youtu.be/tOT8XhQ7eB8)\n\nAn AI Agent analyses each week's performance and generates summary cards in Notion.\n\n[![AI Generated Analysis](https://www.samirsaci.com/content/images/size/w1000/2026/03/image-7.png)](https://youtu.be/tOT8XhQ7eB8)\n\nWeekly OTIF data is automatically pushed to a Notion database for tracking and visualisation.\n\n[![Weekly OTIF Data](https://www.samirsaci.com/content/images/size/w1000/2026/03/image-8.png)](https://youtu.be/tOT8XhQ7eB8)\n\n### Who is this template for?\n\nThis template is ideal for logistics and supply chain teams looking to automate KPI reporting:\n\n- **Supply chain managers** tracking delivery performance across carriers and warehouses\n- **Logistics analysts** who need automated weekly OTIF scorecards\n- **Operations teams** looking to leverage AI for performance insights\n\n### Tutorial\n\nA complete tutorial (with explanations of every node) is available on YouTube:\n\n[![Tutorial + Demo](https://www.samirsaci.com/content/images/2026/03/temp.png)](https://youtu.be/tOT8XhQ7eB8)\n\n### What does this workflow do?\n\nThis automation uses Notion databases and OpenAI AI Agents to build a complete OTIF scorecard:\n\n1. The workflow is triggered manually (or on a schedule).\n2. Shipment data is collected from your TMS and WMS systems.\n3. Records are **aggregated by week**, computing On-Time rate, In-Full rate, and OTIF rate.\n4. An **AI Agent** analyses each week's performance and identifies trends, issues, and recommendations.\n5. Weekly KPI rows are pushed to the **Daily OTIF Summary** database in Notion.\n6. Per-week **AI analysis cards** are created in the **AI Generated Analysis** database.\n7. A second **AI Agent** generates a **global performance summary** across all weeks.\n8. The global summary card is updated in Notion with the overall analysis.\n\n### Next Steps\n\nBefore running the workflow, follow the sticky notes and configure:\n\n- Connect your **Notion API credentials** and update the database IDs in all Notion nodes\n- Add your **OpenAI API Key** to the AI Agent nodes\n- Update the **\"Collect Shipments from TMS & WMS\"** node with your actual data source (API, Google Sheets, or database)\n- Adjust the AI prompts to match your specific KPI thresholds and business context\n- Set up the **Notion template** with the two required databases: \"Daily OTIF Summary\" and \"AI Generated Analysis\"\n- Duplicate the **[Notion template](https://seed-steed-3b7.notion.site/OTIF-Scorecard-for-Retail-Logistics-31b81c23345c81f480b4cde0cf488060?pvs=74)** to your workspace before connecting the workflow\n- (Optional) Change the trigger from manual to a **scheduled cron** for automated weekly reporting\n\n*Submitted: 8 March 2026*\n*Template designed with n8n version 2.10.12*\n","workflow":{"meta":{"instanceId":"","templateCredsSetupCompleted":true},"nodes":[{"id":"e16ae93c-6dc9-4c4c-86f6-4e25c1569e9d","name":"Aggregate by Week","type":"n8n-nodes-base.code","notes":"Groups shipments by ISO week and computes KPIs per week.","position":[3648,4288],"parameters":{"jsCode":"// ============================================\n// OTIF Scorecard: Aggregate Shipments by Week\n// ============================================\n// Input: raw shipment records with on-time flags and lead times\n// Output: one item per week with aggregated KPIs\n\nconst shipments = $input.all().map(i => i.json);\n\nif (shipments.length === 0) {\n  return [{ json: { error: 'No shipments found', count: 0 } }];\n}\n\n// Group by ISO week (Monday start)\nconst byWeek = {};\nfor (const s of shipments) {\n  const dt = new Date(s.Order_Time);\n  const day = dt.getDay();\n  const monday = new Date(dt);\n  monday.setDate(dt.getDate() - ((day + 6) % 7));\n  const weekKey = monday.toISOString().slice(0, 10);\n\n  if (!byWeek[weekKey]) byWeek[weekKey] = [];\n  byWeek[weekKey].push(s);\n}\n\n// Compute KPIs per week\nconst results = [];\nfor (const [weekStart, rows] of Object.entries(byWeek)) {\n  const n = rows.length;\n  const onTime = rows.filter(r => r.Delivery_OnTime === true).length;\n\n  // Week end (Sunday)\n  const monday = new Date(weekStart);\n  const sunday = new Date(monday);\n  sunday.setDate(monday.getDate() + 6);\n  const weekEnd = sunday.toISOString().slice(0, 10);\n\n  // ISO week number\n  const d = new Date(weekStart);\n  d.setDate(d.getDate() + 3 - ((d.getDay() + 6) % 7));\n  const yearStart = new Date(d.getFullYear(), 0, 1);\n  const weekNum = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);\n\n  results.push({\n    json: {\n      Name: `Week ${weekNum}`,\n      weekStart: weekStart,\n      weekEnd: weekEnd,\n      totalShipments: n,\n      onTimeDeliveries: onTime,\n      avgLeadTimeDays: Math.round(rows.reduce((s, r) => s + (r.LT_Days || 0), 0) / n * 10) / 10,\n      avgLeadTimeHrs: Math.round(rows.reduce((s, r) => s + (r.LT_Hours || 0), 0) / n * 10) / 10,\n      transmissionOnTime: Math.round(rows.filter(r => r.Transmission_OnTime === true).length / n * 1000) / 10,\n      loadingOnTime: Math.round(rows.filter(r => r.Loading_OnTime === true).length / n * 1000) / 10,\n      airportOnTime: Math.round(rows.filter(r => r.Airport_OnTime === true).length / n * 1000) / 10,\n      landingOnTime: Math.round(rows.filter(r => r.Landing_OnTime === true).length / n * 1000) / 10,\n      deliveryOnTime: Math.round(onTime / n * 1000) / 10,\n      lateShipments: n - onTime\n    }\n  });\n}\n\n// Sort by weekStart ascending\nresults.sort((a, b) => a.json.weekStart.localeCompare(b.json.weekStart));\n\nreturn results;"},"typeVersion":2},{"id":"7b996737-2b66-491b-a693-2b14f80e6b0e","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[4064,3824],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini","cachedResultName":"gpt-4o-mini"},"options":{"maxTokens":300,"temperature":0.3}},"credentials":{"openAiApi":{"id":"","name":""}},"typeVersion":1.2},{"id":"d98ec9fd-979b-45b2-9d3b-299d6f752914","name":"Fill the report","type":"n8n-nodes-base.notion","position":[4464,3744],"parameters":{"title":"={{ $('Aggregate by Week').item.json.Name }}","simple":false,"options":{"icon":"🚚","iconType":"emoji"},"resource":"databasePage","databaseId":{"__rl":true,"mode":"list","value":"","cachedResultUrl":"","cachedResultName":"Daily OTIF Summary"},"propertiesUi":{"propertyValues":[{"key":"Name|title","title":"={{ $('Aggregate by Week').item.json.Name }}"},{"key":"Airport On-Time %|number","numberValue":"={{ $('Aggregate by Week').item.json.airportOnTime }}"},{"key":"Avg Lead Time (days)|number","numberValue":"={{ $('Aggregate by Week').item.json.avgLeadTimeDays }}"},{"key":"Avg Lead Time (hrs)|number","numberValue":"={{ $('Aggregate by Week').item.json.avgLeadTimeHrs }}"},{"key":"Date|date","range":true,"dateEnd":"={{ $('Aggregate by Week').item.json.weekEnd }}","dateStart":"={{ $('Aggregate by Week').item.json.weekStart }}"},{"key":"Delivery On-Time %|number","numberValue":"={{ $('Aggregate by Week').item.json.deliveryOnTime }}"},{"key":"Landing On-Time %|number","numberValue":"={{ $('Aggregate by Week').item.json.landingOnTime }}"},{"key":"Late Shipments|number","numberValue":"={{ $('Aggregate by Week').item.json.lateShipments }}"},{"key":"Loading On-Time %|number","numberValue":"={{ $('Aggregate by Week').item.json.loadingOnTime }}"},{"key":"On-Time Deliveries|number","numberValue":"={{ $('Aggregate by Week').item.json.onTimeDeliveries }}"},{"key":"Total Shipments|number","numberValue":"={{ $('Aggregate by Week').item.json.totalShipments }}"},{"key":"Transmission On-Time %|number","numberValue":"={{ $('Aggregate by Week').item.json.transmissionOnTime }}"},{"key":"AI Analysis|rich_text"}]}},"credentials":{"notionApi":{"id":"","name":""}},"notesInFlow":true,"typeVersion":2.2},{"id":"e76bc2e5-43d5-4d64-a2de-8d02240742a2","name":"OpenAI Chat Model Global","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[4048,4304],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini","cachedResultName":"gpt-4o-mini"},"options":{"maxTokens":600,"temperature":0.3}},"credentials":{"openAiApi":{"id":"","name":""}},"typeVersion":1.2},{"id":"c00ba339-60ef-4736-8305-36202e2ae857","name":"Collect Shipments from TMS & WMS","type":"n8n-nodes-base.dataTable","position":[3456,4288],"parameters":{"operation":"get","returnAll":true,"dataTableId":{"__rl":true,"mode":"","value":"","cachedResultUrl":"","cachedResultName":""}},"typeVersion":1.1},{"id":"56fce52f-074b-46b3-a4e0-eae75c07fcc2","name":"AI Agent Weekly Performance Summary","type":"@n8n/n8n-nodes-langchain.agent","notes":"AI Agent that generates a per-week analysis comment.","position":[4048,3680],"parameters":{"text":"=Analyse this weekly OTIF scorecard for retail logistics ({{ $json.Name }}, {{ $json.weekStart }} to {{ $json.weekEnd }}):\n\n- Total Shipments: {{ $json.totalShipments }}\n- On-Time Deliveries: {{ $json.onTimeDeliveries }}\n- Late Shipments: {{ $json.lateShipments }}\n- OTIF Rate: {{ Math.round($json.onTimeDeliveries / $json.totalShipments * 1000) / 10 }}%\n- Avg Lead Time: {{ $json.avgLeadTimeDays }} days ({{ $json.avgLeadTimeHrs }} hours)\n\nCheckpoint On-Time Rates:\n- Transmission: {{ $json.transmissionOnTime }}%\n- Loading: {{ $json.loadingOnTime }}%\n- Airport: {{ $json.airportOnTime }}%\n- Landing: {{ $json.landingOnTime }}%\n- Delivery: {{ $json.deliveryOnTime }}%\n\nProvide a brief analysis (3-4 sentences) highlighting: overall performance assessment, the weakest checkpoint causing most delays, and one specific recommendation for improvement. Be concise and data-driven.","options":{"systemMessage":"You are a supply chain performance analyst specialising in retail logistics OTIF (On-Time In-Full) analysis. Provide concise, actionable insights. Use British spelling."},"promptType":"define"},"typeVersion":1.7},{"id":"b1dfca97-d910-48f4-887d-573e2702556e","name":"AI Agent Global Performance Summary","type":"@n8n/n8n-nodes-langchain.agent","notes":"AI Agent that generates a global analysis across all weeks.","position":[4064,4144],"parameters":{"text":"={{ $json.globalPrompt }}\n\nProvide a comprehensive analysis (5-7 sentences) covering:\n1. Overall trend across weeks (improving, declining, or stable)\n2. The most consistent bottleneck checkpoint\n3. Best and worst performing weeks with reasons\n4. Two specific, actionable recommendations\n5. A brief outlook\n\nFormat with bullet points. Be concise and data-driven.","options":{"systemMessage":"You are a supply chain performance analyst specialising in retail logistics OTIF analysis. Provide a global weekly summary for management review. Use British spelling. Do not use markdown headers, only bullet points and plain text."},"promptType":"define"},"typeVersion":1.7},{"id":"880cd90b-78c9-4fbd-a85f-c1e8a8915cfa","name":"Update Global Performance Summary","type":"n8n-nodes-base.notion","position":[4496,3984],"parameters":{"pageId":{"__rl":true,"mode":"id","value":""},"simple":false,"options":{},"resource":"databasePage","operation":"update","propertiesUi":{"propertyValues":[{"key":"Name|title","title":"Overall Performance Summary"},{"key":"Weekly Analysis|rich_text","textContent":"={{ $json.output }}"},{"key":"Type|select","selectValue":"Global Summary"},{"key":"Updated|date","includeTime":false}]}},"credentials":{"notionApi":{"id":"","name":""}},"notesInFlow":true,"typeVersion":2.2},{"id":"9f330093-11f0-4037-80ee-a8ba81262152","name":"Create Weekly Performance Card","type":"n8n-nodes-base.notion","position":[4656,3680],"parameters":{"title":"={{ $('Aggregate by Week').item.json.Name }}","simple":false,"options":{"icon":"📊","iconType":"emoji"},"resource":"databasePage","databaseId":{"__rl":true,"mode":"list","value":"","cachedResultUrl":"","cachedResultName":"AI Analysis"},"propertiesUi":{"propertyValues":[{"key":"Name|title","title":"={{ $('Aggregate by Week').item.json.Name }}"},{"key":"Weekly Analysis|rich_text","textContent":"={{ $json.output }}"},{"key":"Type|select","selectValue":"Weekly Analysis"},{"key":"Updated|date","includeTime":false}]}},"credentials":{"notionApi":{"id":"","name":""}},"notesInFlow":true,"typeVersion":2.2},{"id":"32dd552a-cecd-4602-8497-d92d1a59c8f9","name":"Prepare Global Summary Prompt with Indicators","type":"n8n-nodes-base.code","notes":"Aggregates all weekly KPIs into a single prompt for the global AI summary.","position":[3824,4288],"parameters":{"jsCode":"// ============================================\n// Prepare Global Summary Prompt\n// ============================================\n// Collects all weekly KPIs into a single prompt for the global AI analysis\n\nconst items = $input.all();\nconst weeks = items.map(i => i.json);\n\nweeks.sort((a, b) => a.weekStart.localeCompare(b.weekStart));\n\nlet summary = 'Here are the weekly OTIF scorecards for retail logistics:\\n\\n';\nfor (const w of weeks) {\n  const otif = Math.round(w.onTimeDeliveries / w.totalShipments * 1000) / 10;\n  summary += `${w.Name} (${w.weekStart} to ${w.weekEnd}):\\n`;\n  summary += `  Shipments: ${w.totalShipments}, On-Time: ${w.onTimeDeliveries}, Late: ${w.lateShipments}, OTIF: ${otif}%\\n`;\n  summary += `  Avg Lead Time: ${w.avgLeadTimeDays} days\\n`;\n  summary += `  Checkpoints: Transmission ${w.transmissionOnTime}%, Loading ${w.loadingOnTime}%, Airport ${w.airportOnTime}%, Landing ${w.landingOnTime}%, Delivery ${w.deliveryOnTime}%\\n\\n`;\n}\n\nreturn [{ json: { globalPrompt: summary } }];"},"typeVersion":2},{"id":"7390e7a0-b8b4-4a01-921c-c88b14a743be","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[3264,3584],"parameters":{"width":704,"height":596,"content":"## Supply Chain OTIF Performance Scorecard for Retail Logistics\n\nAutomatically aggregate shipment data, compute weekly OTIF KPIs, generate AI-powered performance analysis, and push everything to a Notion dashboard.\n\n### How it Works\n1. **Collect** raw shipment records from your TMS/WMS data source.\n2. **Aggregate** shipments by ISO week and compute KPIs (OTIF rate, lead times, checkpoint on-time rates).\n3. **AI Weekly Analysis** generates a per-week performance comment using an AI Agent.\n4. **Push to Notion** creates one row per week in the OTIF Summary database and one card per week in the AI Analysis database.\n5. **AI Global Analysis** generates a cross-week summary with trends and recommendations.\n6. **Update Global Card** pushes the overall summary to a dedicated Notion database row.\n\n### Setup\n- [ ] Connect your **data source** (DataTable, database, or API) to the \"Collect Shipments\" node\n- [ ] Add your **OpenAI API Key** to both OpenAI Chat Model nodes\n- [ ] Add your **Notion API credentials** to all Notion nodes\n- [ ] Verify the **Notion database IDs** match your workspace\n\n### Customisation\n- Adjust the AI prompts to change the analysis style or language\n- Modify the Aggregate by Week code to add custom KPI\n"},"typeVersion":1},{"id":"048fe5f8-7fc0-4d3a-950b-f1246f23b344","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[3264,4192],"parameters":{"color":7,"width":340,"height":252,"content":"## 1. Trigger and collect shipment records"},"typeVersion":1},{"id":"08031ce3-58b4-407a-bc25-773375a71b26","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[3616,4192],"parameters":{"color":7,"width":348,"height":252,"content":"## 2. Aggregate shipments and compute KPIs"},"typeVersion":1},{"id":"8d801606-75aa-466d-a13a-4bd60fdbb56a","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[3984,3584],"parameters":{"color":7,"width":372,"height":412,"content":"## 3. AI Agent generates a per-week performance analysis"},"typeVersion":1},{"id":"a7a3a19c-43a4-46b4-81aa-bd2ef3558422","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[4368,3584],"parameters":{"color":7,"width":472,"height":316,"content":"## 4. Push weekly KPIs and AI analysis cards to Notion"},"typeVersion":1},{"id":"eeedc70d-7b24-4d2d-ac4c-99234ec9b53b","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[3984,4000],"parameters":{"color":7,"width":372,"height":452,"content":"## 5. AI Agent generates a global cross-week performance summary"},"typeVersion":1},{"id":"bcca7e93-e8d2-4a94-8b47-09709c745427","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[4368,3904],"parameters":{"color":7,"width":476,"height":220,"content":"## 6. Update the global performance summary card in Notion"},"typeVersion":1},{"id":"acbf456d-dadf-4663-98ca-21895de8ffe5","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[4368,4144],"parameters":{"width":480,"height":304,"content":"## [Tutorial](https://www.youtube.com/watch?v=tOT8XhQ7eB8)\n@[youtube](tOT8XhQ7eB8)"},"typeVersion":1},{"id":"cf03fa28-3cf7-42db-a649-9ec75db6fa3c","name":"Weekly Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[3280,4288],"parameters":{"rule":{"interval":[{"field":"weeks"}]}},"typeVersion":1.3}],"pinData":{},"connections":{"Weekly Trigger":{"main":[[{"node":"Collect Shipments from TMS & WMS","type":"main","index":0}]]},"Aggregate by Week":{"main":[[{"node":"AI Agent Weekly Performance Summary","type":"main","index":0},{"node":"Prepare Global Summary Prompt with Indicators","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Agent Weekly Performance Summary","type":"ai_languageModel","index":0}]]},"OpenAI Chat Model Global":{"ai_languageModel":[[{"node":"AI Agent Global Performance Summary","type":"ai_languageModel","index":0}]]},"Collect Shipments from TMS & WMS":{"main":[[{"node":"Aggregate by Week","type":"main","index":0}]]},"AI Agent Global Performance Summary":{"main":[[{"node":"Update Global Performance Summary","type":"main","index":0}]]},"AI Agent Weekly Performance Summary":{"main":[[{"node":"Fill the report","type":"main","index":0},{"node":"Create Weekly Performance Card","type":"main","index":0}]]},"Prepare Global Summary Prompt with Indicators":{"main":[[{"node":"AI Agent Global Performance Summary","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":19,"nodeTypes":{"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.notion":{"count":3},"n8n-nodes-base.dataTable":{"count":1},"n8n-nodes-base.stickyNote":{"count":8},"@n8n/n8n-nodes-langchain.agent":{"count":2},"n8n-nodes-base.scheduleTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Samir Saci","username":"samirsaci","bio":"Automation, AI and Analytics for Supply Chain Operations, Business Optimisation and Content Creation for Marketing.\nLinkedin: www.linkedin.com/in/samir-saci","verified":true,"links":["https://samirsaci.com/about"],"avatar":"https://gravatar.com/avatar/d3644476a59e5813c5f00a7933977e2be8805cbdc574958b9cc6a53b45bedd6a?r=pg&d=retro&size=200"},"nodes":[{"id":487,"icon":"file:notion.svg","name":"n8n-nodes-base.notion","codex":{"data":{"resources":{"generic":[{"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 "}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.notion/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/notion/"}]},"categories":["Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"Notion"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjU4Mjc2IDYuOTc2NzlDOC44MjA0NyA3Ljk4MjM4IDkuMjg0NzkgNy45MDU2NiAxMS42MDkxIDcuNzUwNTdMMzMuNTIwNiA2LjQzNDg4QzMzLjk4NTMgNi40MzQ4OCAzMy41OTg5IDUuOTcxMjcgMzMuNDQzOSA1Ljg5NDIzTDI5LjgwNDkgMy4yNjM0OEMyOS4xMDc2IDIuNzIyMTMgMjguMTc4NiAyLjEwMjE3IDI2LjM5ODIgMi4yNTcyNkw1LjE4MTE1IDMuODA0NzZDNC40MDczNiAzLjg4MTQ4IDQuMjUyODIgNC4yNjgzNyA0LjU2MDk2IDQuNTc4NDdMNy41ODI3NiA2Ljk3Njc5Wk04Ljg5ODI5IDEyLjA4MzNWMzUuMTM4MUM4Ljg5ODI5IDM2LjM3NzEgOS41MTc0NiAzNi44NDA3IDEwLjkxMSAzNi43NjRMMzQuOTkxOSAzNS4zNzA2QzM2LjM4NjIgMzUuMjkzOSAzNi41NDE1IDM0LjQ0MTcgMzYuNTQxNSAzMy40MzUyVjEwLjUzNTFDMzYuNTQxNSA5LjUzMDE5IDM2LjE1NDkgOC45ODgyOSAzNS4zMDE0IDkuMDY1NjRMMTAuMTM2NyAxMC41MzUxQzkuMjA3OTkgMTAuNjEzMSA4Ljg5ODIxIDExLjA3NzcgOC44OTgyMSAxMi4wODMzSDguODk4MjlaTTMyLjY3MDggMTMuMzJDMzIuODI1MiAxNC4wMTcgMzIuNjcwOCAxNC43MTMzIDMxLjk3MjUgMTQuNzkxN0wzMC44MTIzIDE1LjAyMjlWMzIuMDQzNEMyOS44MDQ5IDMyLjU4NDggMjguODc1OSAzMi44OTQ0IDI4LjEwMTggMzIuODk0NEMyNi44NjI1IDMyLjg5NDQgMjYuNTUyMSAzMi41MDcyIDI1LjYyMzcgMzEuMzQ3NEwxOC4wMzQzIDE5LjQzMjlWMzAuOTYwNUwyMC40MzU5IDMxLjUwMjRDMjAuNDM1OSAzMS41MDI0IDIwLjQzNTkgMzIuODk0NCAxOC40OTgzIDMyLjg5NDRMMTMuMTU2OCAzMy4yMDQyQzEzLjAwMTYgMzIuODk0NCAxMy4xNTY4IDMyLjEyMTQgMTMuNjk4NiAzMS45NjY1TDE1LjA5MjUgMzEuNTgwMlYxNi4zMzg1TDEzLjE1NzIgMTYuMTgzNEMxMy4wMDE5IDE1LjQ4NjQgMTMuMzg4NSAxNC40ODE0IDE0LjQ3MzMgMTQuNDAzNUwyMC4yMDM1IDE0LjAxNzJMMjguMTAxOCAyNi4wODY4VjE1LjQwOTdMMjYuMDg4MSAxNS4xNzg2QzI1LjkzMzUgMTQuMzI2NSAyNi41NTIxIDEzLjcwNzggMjcuMzI2NSAxMy42MzExTDMyLjY3MDggMTMuMzJaTTMuMzk5NzMgMS43MTU5OEwyNS40Njg4IDAuMDkwNzQ1N0MyOC4xNzkgLTAuMTQxNjg4IDI4Ljg3NjMgMC4wMTQwMjQ1IDMwLjU3OTYgMS4yNTEzNUwzNy42MjQzIDYuMjAyNzZDMzguNzg2NyA3LjA1NDIxIDM5LjE3NDIgNy4yODYwMiAzOS4xNzQyIDguMjE0MTlWMzUuMzcwNkMzOS4xNzQyIDM3LjA3MjYgMzguNTU0MiAzOC4wNzkxIDM2LjM4NjUgMzguMjMzMUwxMC43NTc3IDM5Ljc4MDdDOS4xMzA0OSAzOS44NTgzIDguMzU2MDcgMzkuNjI2NCA3LjUwMzkyIDM4LjU0MjZMMi4zMTYwOCAzMS44MTE3QzEuMzg2NTggMzAuNTcyNiAxIDI5LjY0NTcgMSAyOC41NjEzVjQuNDIyODNDMSAzLjAzMTA1IDEuNjIwMTkgMS44NzAwNSAzLjM5OTczIDEuNzE1OThWMS43MTU5OFoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo="},"displayName":"Notion","typeVersion":2,"nodeCategories":[{"id":4,"name":"Productivity"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1315,"icon":"fa:table","name":"n8n-nodes-base.dataTable","codex":{"data":{"alias":["data","table","knowledge","data table","table","sheet","database","data base","mysql","postgres","postgresql","airtable","supabase","noco","notion"],"details":"Data table","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.datatable/"}]},"categories":["Core Nodes","Development"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\",\"transform\"]","defaults":{"name":"Data table"},"iconData":{"icon":"table","type":"icon"},"displayName":"Data table","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":49,"name":"AI Summarization"}],"image":[]}}