{
  "id": "9baty6kiaNoqX8W2",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Personal AI Job Application Auto-Responder",
  "tags": [],
  "nodes": [
    {
      "id": "9a500987-094d-47c0-897f-63a5360c2b54",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        304
      ],
      "parameters": {
        "width": 920,
        "height": 848,
        "content": "## Personal AI Job Application Auto-Responder\n\nThis workflow automatically scans incoming job-related emails and LinkedIn messages, tailors professional replies using your resume and preferences, sends them, and tracks applications in Google Sheets.\n\n### Who\u2019s it for\n\u2022 Job seekers applying to 10+ jobs per week\n\u2022 Professionals receiving recruiter inbound messages\n\u2022 Career switchers managing high application volume\n\n### How it works / What it does\n1. Captures new job emails or LinkedIn messages\n2. Analyzes if it's a relevant job opportunity\n3. Loads your resume and preferences\n4. AI generates personalized, human reply\n5. Sends the tailored response\n6. Logs everything with status in Google Sheet\n\n### How to set up\n1. Import this workflow\n2. Set up credentials (Gmail, Google Sheets, OpenAI/Anthropic)\n3. Update your resume text and preferences\n4. Activate workflow\n\n### Requirements\n\u2022 Gmail access (or IMAP)\n\u2022 Google Sheets\n\u2022 OpenAI / Anthropic / Grok API\n\u2022 Your latest resume\n\n### How to customize the workflow\n\u2022 Change AI tone in the AI node\n\u2022 Modify Python filter keywords\n\u2022 Update Google Sheet columns\n\u2022 Adjust wait times"
      },
      "typeVersion": 1
    },
    {
      "id": "cc8eea8a-f5cd-475d-862e-cee829cfbdc7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        560
      ],
      "parameters": {
        "color": 4,
        "width": 732,
        "height": 480,
        "content": "## 1. Trigger & Intake"
      },
      "typeVersion": 1
    },
    {
      "id": "bc3b8c62-2443-4af5-8231-dd4eb5fe320f",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        464
      ],
      "parameters": {
        "color": 3,
        "width": 780,
        "height": 620,
        "content": "## 2. Analysis & AI Reply"
      },
      "typeVersion": 1
    },
    {
      "id": "c8387521-b96e-4e79-9856-190fc5d0a41a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2112,
        528
      ],
      "parameters": {
        "color": 6,
        "width": 944,
        "height": 580,
        "content": "## 3. Send & Track"
      },
      "typeVersion": 1
    },
    {
      "id": "d9fd012e-2a24-4280-9e4c-2bbb35752e99",
      "name": "Webhook - New Job Message",
      "type": "n8n-nodes-base.webhook",
      "position": [
        704,
        688
      ],
      "parameters": {
        "path": "job-application-inbound",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 1.1
    },
    {
      "id": "99cef0b5-9c9e-4bfd-bf9c-f8291d191c2e",
      "name": "Poll New Job Emails",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        704,
        880
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "*/20 * * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ce6ea5fe-41ac-45d1-90c8-4653f370e2d5",
      "name": "Prepare Message Context",
      "type": "n8n-nodes-base.set",
      "position": [
        928,
        784
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "name": "sender",
              "type": "string",
              "value": "={{ $json.from || $json.body?.from }}"
            },
            {
              "name": "subject",
              "type": "string",
              "value": "={{ $json.subject || $json.body?.subject }}"
            },
            {
              "name": "body",
              "type": "string",
              "value": "={{ $json.text || $json.body?.text || $json.body }}"
            },
            {
              "name": "messageId",
              "type": "string",
              "value": "={{ $json.messageId || Date.now().toString() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0e577153-a8c2-4721-a055-bae4527129ad",
      "name": "Python - Detect Job Message",
      "type": "n8n-nodes-base.code",
      "position": [
        1152,
        784
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "language": "python"
      },
      "typeVersion": 2
    },
    {
      "id": "6a6efe0d-6d16-4bb0-b904-3faab650ec0c",
      "name": "Filter Relevant Jobs",
      "type": "n8n-nodes-base.filter",
      "position": [
        1376,
        784
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "conditions": [
            {
              "operator": {
                "type": "boolean",
                "operation": "true"
              },
              "leftValue": "={{ $json.isJobRelated }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a81db93d-86d4-4ad7-bd50-fc79f20a897b",
      "name": "Wait 1 - Rate Limit",
      "type": "n8n-nodes-base.wait",
      "position": [
        1600,
        784
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e23cc314-87c2-4840-9864-d9f98f136c51",
      "name": "AI - Generate Tailored Reply",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1824,
        784
      ],
      "parameters": {
        "text": "=Act as an expert job application writer. Write a professional, natural, and personalized reply for this job message.\n\nMy Resume:\n{{ $json.resume || 'Experienced software engineer with 4+ years in full-stack development...' }}\n\nMy Preferences:\n{{ $json.preferences || 'Prefer remote/hybrid, strong interest in AI/ML, Python, React' }}\n\nJob Message:\nSubject: {{ $json.subject }}\nFrom: {{ $json.sender }}\nBody: {{ $json.body }}\n\nWrite a concise, enthusiastic, and tailored reply under 170 words.",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "3c2c4198-28af-43bb-bf15-cd6374d6709a",
      "name": "JS - Format Reply",
      "type": "n8n-nodes-base.code",
      "position": [
        2176,
        784
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const item = $input.item.json;\nreturn {\n  json: {\n    ...item,\n    replyText: item.response || item.text || 'Thank you for reaching out...',\n    status: 'Replied',\n    appliedDate: new Date().toISOString().split('T')[0]\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "f7185315-b72d-4db9-9108-5834f4c9747e",
      "name": "Wait 2 - Review Buffer",
      "type": "n8n-nodes-base.wait",
      "position": [
        2400,
        784
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5b5d878a-02c3-4a4a-8031-8bbad65720cc",
      "name": "Send Tailored Reply",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2624,
        688
      ],
      "parameters": {
        "url": "https://api.sendgrid.com/v3/mail/send",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"personalizations\": [{\"to\": [{\"email\": \"{{ $json.sender }}\"}]}],\n  \"from\": {\"email\": \"your-email@gmail.com\", \"name\": \"Your Name\"},\n  \"subject\": \"Re: {{ $json.subject }}\",\n  \"content\": [{\"type\": \"text/plain\", \"value\": \"{{ $json.replyText }}\"}]\n}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "4625d3cc-d3a6-4de6-9355-282c588df14b",
      "name": "Update Google Sheet Tracker",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2624,
        880
      ],
      "parameters": {
        "url": "https://sheets.googleapis.com/v4/spreadsheets/YOUR_SHEET_ID/values/Sheet1!A1:append?valueInputOption=USER_ENTERED",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"values\": [[\"{{ $json.appliedDate }}\", \"{{ $json.extractedJobTitle }}\", \"{{ $json.sender }}\", \"{{ $json.subject }}\", \"Replied\", \"{{ new Date().toISOString() }}\"]]\n}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "6e0d4de6-ed5a-468f-8a70-5c59c52b2780",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1696,
        992
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cd221363-e458-4673-9a06-f0f1e8dad885",
  "connections": {
    "JS - Format Reply": {
      "main": [
        [
          {
            "node": "Wait 2 - Review Buffer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI - Generate Tailored Reply",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Poll New Job Emails": {
      "main": [
        [
          {
            "node": "Prepare Message Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 1 - Rate Limit": {
      "main": [
        [
          {
            "node": "AI - Generate Tailored Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Relevant Jobs": {
      "main": [
        [
          {
            "node": "Wait 1 - Rate Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 2 - Review Buffer": {
      "main": [
        [
          {
            "node": "Send Tailored Reply",
            "type": "main",
            "index": 0
          },
          {
            "node": "Update Google Sheet Tracker",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Message Context": {
      "main": [
        [
          {
            "node": "Python - Detect Job Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook - New Job Message": {
      "main": [
        [
          {
            "node": "Prepare Message Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Python - Detect Job Message": {
      "main": [
        [
          {
            "node": "Filter Relevant Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI - Generate Tailored Reply": {
      "main": [
        [
          {
            "node": "JS - Format Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}