This workflow corresponds to n8n.io template #14924 — we link there as the canonical source.
This workflow follows the Agent → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"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
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automatically scans incoming job emails and LinkedIn messages, intelligently detects genuine opportunities, and sends personalized, professional replies using your resume and preferences.
Source: https://n8n.io/workflows/14924/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
⏺ 🚀 How it works
L&D_AgentsAI_ATIVO. Uses httpRequest, agent, googleCalendarTool, toolSerpApi. Webhook trigger; 93 nodes.
CLINICAINTEGRAL_secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 89 nodes.
Remi 1.1. Uses lmChatOpenAi, memoryPostgresChat, openAi, postgres. Webhook trigger; 89 nodes.
This n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La