{
  "id": "RdYMo0ozk6r4oyLm",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Invoice Follow Up Agent",
  "tags": [],
  "nodes": [
    {
      "id": "bf973089-06fa-4da5-a823-9cc6e0823387",
      "name": "Daily Trigger",
      "type": "n8n-nodes-base.cron",
      "position": [
        -980,
        80
      ],
      "parameters": {
        "triggerTimes": {
          "item": [
            {
              "hour": 6
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8c35f2a2-8bb3-4608-b95d-ffa8292fa813",
      "name": "Load Invoices",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -780,
        80
      ],
      "parameters": {
        "range": "Invoices!A1:G1000",
        "options": {},
        "sheetId": "YOUR_SHEET_ID",
        "operation": "lookup",
        "authentication": "oAuth2"
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0874c817-026c-4d88-80e8-e92aa2b51bca",
      "name": "Filter Overdue Invoices",
      "type": "n8n-nodes-base.function",
      "position": [
        -580,
        80
      ],
      "parameters": {
        "functionCode": "\nreturn items.filter(item => {\n  const dueDate = new Date(item.json.due_date);\n  const today = new Date();\n  return item.json.status.toLowerCase() === \"unpaid\" && dueDate < today;\n});\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b296c45e-755c-436f-9791-c2015e7ed0e6",
      "name": "Calculate DPD",
      "type": "n8n-nodes-base.function",
      "position": [
        -380,
        80
      ],
      "parameters": {
        "functionCode": "\nreturn items.map(item => {\n  const dueDate = new Date(item.json.due_date);\n  const today = new Date();\n  const dpd = Math.floor((today - dueDate) / (1000 * 60 * 60 * 24));\n  item.json.dpd = dpd;\n  return item;\n});\n"
      },
      "typeVersion": 1
    },
    {
      "id": "303f0f3b-6fd4-4546-83ba-20158ceb0a8a",
      "name": "Generate Message",
      "type": "n8n-nodes-base.function",
      "position": [
        -180,
        80
      ],
      "parameters": {
        "functionCode": "\nreturn items.map(item => {\n  const dpd = item.json.dpd;\n  let tone = \"\";\n  if (dpd <= 7) {\n    tone = `Hi ${item.json.client_name}, just a quick reminder about your invoice #${item.json.invoice_number} due on ${item.json.due_date}. Let us know if you need anything!`;\n  } else if (dpd <= 14) {\n    tone = `Hi ${item.json.client_name}, your invoice #${item.json.invoice_number} is now ${dpd} days overdue. Please arrange the payment soon.`;\n  } else {\n    tone = `Final Reminder: Invoice #${item.json.invoice_number} is ${dpd} days overdue. Immediate payment is required to avoid further action.`;\n  }\n  item.json.message = tone;\n  return item;\n});\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d636929c-5cc3-4eeb-87cf-c417ee5bc439",
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        20,
        80
      ],
      "parameters": {
        "text": "={{$json.message}}",
        "options": {},
        "subject": "Invoice Reminder"
      },
      "typeVersion": 1
    },
    {
      "id": "22c96891-4f97-42f4-94fc-670639fde6e2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        20
      ],
      "parameters": {
        "color": 3,
        "width": 1300,
        "height": 240,
        "content": "## Flow\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ec179bef-03c4-4a02-8f80-97eb4c6290b5",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        280
      ],
      "parameters": {
        "color": 4,
        "width": 960,
        "height": 900,
        "content": "# AI Invoice & Payment Follow-Up Agent\n\n## \ud83e\udde8 Problem\nFreelancers, agencies, and businesses often deal with late payments from clients. Manually tracking unpaid invoices, calculating how overdue they are, and following up takes time and often leads to inconsistent communication or missed revenue.\n\n## \u2705 Solution\nThis AI Agent automates the entire invoice follow-up process. It scans unpaid invoices daily, calculates how many days they are overdue (Days Past Due / DPD), and sends personalized reminder emails with different tones depending on how long the invoice has been unpaid.\n\n## \ud83d\udc64 This AI Agent Is For:\n- Freelancers and consultants\n- Digital agencies\n- Finance and billing teams\n- Subscription-based services\n- Anyone managing invoice collections\n\n## \ud83d\udce6 Scope\n- Daily scan of unpaid invoices (via Google Sheets)\n- Filters invoices that are overdue\n- Calculates Days Past Due (DPD)\n- Generates personalized reminder messages with varying tone based on DPD\n- Sends follow-up via Email (can be extended to WhatsApp or Slack)\n- Logs all follow-ups for accountability\n\n## \u2699\ufe0f How to Set Up\n1. Replace `YOUR_SHEET_ID` with your actual Google Sheet ID that contains invoice data (columns like `client_name`, `email`, `due_date`, `invoice_number`, `status`)\n2. Customize the reminder messages if needed (in the \u201cGenerate Message\u201d node)\n3. Set your email credentials in the Email node (SMTP or Gmail)\n4. Optionally connect to WhatsApp API, Notion, or Slack for multichannel reminders\n5. Activate the Cron Trigger to run daily\n\n> Optional: Expand the workflow with penalty logic, automated PDF resend, or Google Calendar reminders for internal finance tracking.\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "47470742-6e89-46dd-a951-a7a3c9c6b7da",
  "connections": {
    "Calculate DPD": {
      "main": [
        [
          {
            "node": "Generate Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Trigger": {
      "main": [
        [
          {
            "node": "Load Invoices",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Load Invoices": {
      "main": [
        [
          {
            "node": "Filter Overdue Invoices",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Message": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Overdue Invoices": {
      "main": [
        [
          {
            "node": "Calculate DPD",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}