{
  "name": "Schedule supplier follow-ups from Airtable POs to Google Calendar with AI, Slack & Gmail",
  "nodes": [
    {
      "id": "713ca09a-2d27-4b59-9660-f13991ac8c90",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1456,
        -688
      ],
      "parameters": {
        "width": 466,
        "height": 528,
        "content": "## 🔄 Automated Supplier Follow-up System\n\n### How it works\nThis workflow monitors overdue purchase orders in Airtable and automatically schedules supplier follow-ups. It uses AI to generate smart meet"
      }
    },
    {
      "id": "843bf4c0-3efa-441c-bc6b-87a619b123a6",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1424,
        -80
      ],
      "parameters": {
        "width": 515,
        "height": 335,
        "content": "## ⏰ Trigger & Data Fetch\nRuns every weekday at 10 AM to pull overdue purchase orders from Airtable that need supplier follow-up."
      }
    },
    {
      "id": "73f26d56-313e-428f-b153-8049bf510b1a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -704,
        -352
      ],
      "parameters": {
        "width": 709,
        "height": 637,
        "content": "## 🤖 AI Processing & Validation\nFilters POs with valid supplier emails, then uses GPT-4 to generate contextual meeting agendas and action steps for each follow-up."
      }
    },
    {
      "id": "8a0996ee-8348-4a5e-840e-7150470fe5dc",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        -208
      ],
      "parameters": {
        "width": 789,
        "height": 407,
        "content": "## 📅 Calendar & Notifications\nCreates Google Calendar events with AI-generated agendas, saves links back to Airtable, and notifies team via Slack and Gmail."
      }
    },
    {
      "id": "b29f16a1-3867-42c1-958e-57ca848bdb78",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        64
      ],
      "parameters": {
        "width": 348.9736842105262,
        "height": 166.70394736842104,
        "content": "## 🔐 Credentials & Security\nUse OAuth2 for Google Calendar, Slack, and Gmail. Airtable requires Personal Access Token. OpenAI uses API key authentication. Replace `example@gmail.com` with your actual "
      }
    },
    {
      "id": "176b525f-5e66-4a49-b0e6-47d9ab321c21",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1312,
        64
      ]
    },
    {
      "id": "ab86a141-9013-4edd-9bce-44a12bd2542a",
      "name": "Fetch Overdue POs from Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -1088,
        64
      ]
    },
    {
      "id": "7821ff3f-9ac7-4c95-af97-f617598c488b",
      "name": "Process Each PO Individually",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -864,
        64
      ]
    },
    {
      "id": "8e936398-7512-45aa-a6be-0f700a070d6f",
      "name": "Save Calendar Link to Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        288,
        -80
      ]
    },
    {
      "id": "485f5691-692c-4977-aaa6-bb2741a4a6ad",
      "name": "Send Slack Notification",
      "type": "n8n-nodes-base.slack",
      "position": [
        512,
        -80
      ]
    },
    {
      "id": "f31c5656-35ec-4e04-8584-9abe0f2b3fd2",
      "name": "Create Calendar Event",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        64,
        -80
      ]
    },
    {
      "id": "49211ded-eed6-4af1-a011-e65cd956694c",
      "name": "Send Email Confirmation",
      "type": "n8n-nodes-base.gmail",
      "position": [
        656,
        48
      ]
    },
    {
      "id": "48acce26-e1d9-4969-9e8b-82e6bb782212",
      "name": "Initial Slack Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        -640,
        -128
      ]
    },
    {
      "id": "0b890412-062b-4154-acf7-0f7e901ce977",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -640,
        64
      ]
    },
    {
      "id": "53ee6663-7282-4931-8689-77f58c3bc3c4",
      "name": "Parse AI Output (Structured JSON)",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -160,
        48
      ]
    },
    {
      "id": "b13dd8d7-21a2-49e3-9b3e-9f5b1209d309",
      "name": "AI Model: GPT-4 Screening Engine",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -416,
        48
      ]
    },
    {
      "id": "5fc101d7-042d-4c29-a196-34cb25230fa6",
      "name": "AI Memory: Candidate Context",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -288,
        48
      ]
    },
    {
      "id": "48c7adba-f3d0-4188-868b-a846a6f74be2",
      "name": "AI Agent: Agent Writer",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -352,
        -192
      ]
    },
    {
      "id": "3fafd43b-dfef-4fbc-8246-a35a325e2b9d",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        -288,
        224
      ]
    },
    {
      "id": "c3902a3a-2d3c-4582-8cd1-1425af11347d",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -1408,
        608
      ]
    },
    {
      "id": "f3850dbc-ea8f-473e-810c-18282922a5a3",
      "name": "Slack - Error Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        -1136,
        608
      ]
    },
    {
      "id": "61d0c47c-df77-443c-bbf0-c53e066c8f78",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1440,
        400
      ],
      "parameters": {
        "width": 496,
        "height": 352,
        "content": "## 🚨 Error Monitoring  \n\n\nCatches errors from key nodes (AI, Notion, Sheets) and sends a Slack alert with details for quick debugging.  \nHelps ensure the automation runs reliably.\n"
      }
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "AI Agent: Agent Writer",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Slack - Error Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Fetch Overdue POs from Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Calendar Event": {
      "main": [
        [
          {
            "node": "Save Calendar Link to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent: Agent Writer": {
      "main": [
        [
          {
            "node": "Create Calendar Event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email Confirmation": {
      "main": [
        [
          {
            "node": "Process Each PO Individually",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Slack Notification": {
      "main": [
        [
          {
            "node": "Send Email Confirmation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Memory: Candidate Context": {
      "ai_memory": [
        [
          {
            "node": "AI Agent: Agent Writer",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Process Each PO Individually": {
      "main": [
        [
          {
            "node": "Initial Slack Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Calendar Link to Airtable": {
      "main": [
        [
          {
            "node": "Send Slack Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Overdue POs from Airtable": {
      "main": [
        [
          {
            "node": "Process Each PO Individually",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Model: GPT-4 Screening Engine": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent: Agent Writer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Output (Structured JSON)": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent: Agent Writer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}