Arbeitsstellen aus Excel anfordern und den Bewerbungsstatus verfolgen
Experte
Dies ist ein Personal Productivity, Multimodal AI-Bereich Automatisierungsworkflow mit 24 Nodes. Hauptsächlich werden If, Set, Cron, Gmail, Filter und andere Nodes verwendet. Automatisierte Bewerbungen und Statusverfolgung auf Basis von LinkedIn, Indeed und Google Sheets
Voraussetzungen
- •Google-Konto + Gmail API-Anmeldedaten
- •Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
- •Google Sheets API-Anmeldedaten
Verwendete Nodes (24)
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
"name": "Apply to Jobs from Excel and Track Application Status",
"tags": [
{
"id": "job-automation",
"name": "Job Automation",
"createdAt": "2025-01-15T00:00:00.000Z",
"updatedAt": "2025-01-15T00:00:00.000Z"
}
],
"nodes": [
{
"id": "template-overview",
"name": "📋 Vorlagenübersicht",
"type": "n8n-nodes-base.stickyNote",
"position": [
380,
160
],
"parameters": {
"color": 4,
"width": 389,
"height": 464,
"content": "## 🎯 Job Application Automation System\n\n**What it does:**\n- Reads job listings from Google Sheets\n- Automatically applies to jobs with personalized cover letters\n- Tracks application status every 2 days\n- Sends email notifications for updates\n- Maintains complete application history\n\n**Who's it for:**\n- Job seekers wanting to automate repetitive applications\n- Recruiters managing bulk applications\n- Career coaches tracking client progress\n\n**Requirements:**\n- Google Sheets with job data\n- Gmail account for notifications\n- Resume stored online (Google Drive recommended)\n- Job platform API access (LinkedIn, Indeed)\n\n**Setup Instructions:**\n1. Create Google Sheet with required columns\n2. Configure your spreadsheet ID in 'Configuration' node\n3. Set up Google Sheets and Gmail credentials\n4. Update email addresses in notification nodes\n5. Test with 1-2 jobs before full automation\n\n**⚠️ Important:** Replace mock HTTP requests with actual job platform APIs. Current implementation is for demonstration purposes."
},
"typeVersion": 1
},
{
"id": "sheet-structure",
"name": "📊 Tabellenstruktur",
"type": "n8n-nodes-base.stickyNote",
"position": [
820,
160
],
"parameters": {
"color": 7,
"width": 295,
"height": 284,
"content": "## 📊 Excel Sheet Structure\n\nRequired columns:\n- Job_ID: Unique identifier\n- Company: Company name\n- Position: Job title\n- Status: Not Applied, Applied, etc.\n- Applied_Date: Application date\n- Last_Checked: Last status check\n- Application_ID: Platform reference\n- Notes: Additional info\n- Job_URL: Direct job link\n- Priority: High, Medium, Low"
},
"typeVersion": 1
},
{
"id": "setup-notes",
"name": "⚙️ Einrichtungshinweise",
"type": "n8n-nodes-base.stickyNote",
"position": [
1180,
160
],
"parameters": {
"color": 6,
"width": 295,
"height": 224,
"content": "## 🔧 Configuration Setup\n\n1. Replace 'YOUR_GOOGLE_SHEET_ID' with actual ID\n2. Add your resume URL (Google Drive link)\n3. Customize cover letter template\n4. Update email addresses\n\n**Security Note:** Never hardcode API keys!\nUse n8n's credential store for all auth."
},
"typeVersion": 1
},
{
"id": "daily-trigger",
"name": "🕘 Täglicher Bewerbungsauslöser",
"type": "n8n-nodes-base.cron",
"position": [
240,
480
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 * * 1-5"
}
]
}
},
"typeVersion": 1
},
{
"id": "configuration",
"name": "⚙️ Konfiguration",
"type": "n8n-nodes-base.set",
"position": [
460,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "spreadsheet-id",
"name": "spreadsheetId",
"type": "string",
"value": "REPLACE_WITH_YOUR_GOOGLE_SHEET_ID"
},
{
"id": "resume-url",
"name": "resumeUrl",
"type": "string",
"value": "https://drive.google.com/file/d/YOUR_RESUME_ID/view"
},
{
"id": "cover-letter",
"name": "coverLetterTemplate",
"type": "string",
"value": "Dear Hiring Manager,\n\nI am excited to apply for the {{position}} role at {{company}}. With my experience in software development and {{skills}}, I believe I would be a valuable addition to your team.\n\nI am particularly drawn to {{company}} because of your innovation in the tech industry. I would love to contribute to your continued success.\n\nBest regards,\nYour Name"
},
{
"id": "user-email",
"name": "userEmail",
"type": "string",
"value": "your-email@example.com"
}
]
}
},
"typeVersion": 3
},
{
"id": "read-jobs",
"name": "📖 Jobs-Tabelle lesen",
"type": "n8n-nodes-base.googleSheets",
"position": [
680,
480
],
"parameters": {
"range": "A:J",
"keyRow": 1,
"dataMode": "autoMapInputData",
"sheetName": "Jobs",
"documentId": "={{ $json.spreadsheetId }}",
"requestMethod": "GET",
"authentication": "oAuth2"
},
"typeVersion": 4
},
{
"id": "filter-pending",
"name": "🎯 Ausstehende Bewerbungen filtern",
"type": "n8n-nodes-base.filter",
"position": [
900,
480
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "not-applied",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.Status }}",
"rightValue": "Not Applied"
},
{
"id": "has-url",
"operator": {
"type": "string",
"operation": "isNotEmpty"
},
"leftValue": "={{ $json.Job_URL }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "split-jobs",
"name": "🔄 Jobs einzeln verarbeiten",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1120,
480
],
"parameters": {
"options": {
"reset": false
},
"batchSize": 1
},
"typeVersion": 3
},
{
"id": "prepare-data",
"name": "📝 Bewerbungsdaten vorbereiten",
"type": "n8n-nodes-base.set",
"position": [
1340,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "job-platform",
"name": "platform",
"type": "string",
"value": "={{ $json.Job_URL.includes('linkedin.com') ? 'linkedin' : $json.Job_URL.includes('indeed.com') ? 'indeed' : 'generic' }}"
},
{
"id": "personalized-cover",
"name": "personalizedCoverLetter",
"type": "string",
"value": "={{ $('Configuration').first().json.coverLetterTemplate.replace('{{position}}', $json.Position).replace('{{company}}', $json.Company).replace('{{skills}}', 'relevant technical skills') }}"
},
{
"id": "application-date",
"name": "applicationDate",
"type": "string",
"value": "={{ $now.format('yyyy-MM-dd') }}"
},
{
"id": "resume-url",
"name": "resumeUrl",
"type": "string",
"value": "={{ $('Configuration').first().json.resumeUrl }}"
}
]
}
},
"typeVersion": 3
},
{
"id": "platform-router",
"name": "🔀 Nach Plattform weiterleiten",
"type": "n8n-nodes-base.switch",
"position": [
1560,
480
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "linkedin-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.platform }}",
"rightValue": "linkedin"
}
]
}
},
"typeVersion": 3
},
{
"id": "linkedin-apply",
"name": "💼 Bewerben über LinkedIn",
"type": "n8n-nodes-base.httpRequest",
"position": [
1780,
380
],
"parameters": {
"url": "https://api.linkedin.com/v2/jobs/applications",
"options": {
"retry": {
"enabled": true,
"maxTries": 3
},
"timeout": 30000
},
"sendBody": true,
"sendHeaders": true,
"requestMethod": "POST",
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "jobId",
"value": "={{ $json.Job_ID }}"
},
{
"name": "coverLetter",
"value": "={{ $json.personalizedCoverLetter }}"
},
{
"name": "resumeUrl",
"value": "={{ $json.resumeUrl }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"nodeCredentialType": "linkedInOAuth2Api"
},
"typeVersion": 4
},
{
"id": "indeed-apply",
"name": "🔍 Bewerben über Indeed",
"type": "n8n-nodes-base.httpRequest",
"position": [
1780,
580
],
"parameters": {
"url": "https://api.indeed.com/ads/applications",
"options": {
"retry": {
"enabled": true,
"maxTries": 3
},
"timeout": 30000
},
"sendBody": true,
"sendHeaders": true,
"requestMethod": "POST",
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "jobkey",
"value": "={{ $json.Job_ID }}"
},
{
"name": "message",
"value": "={{ $json.personalizedCoverLetter }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"nodeCredentialType": "indeedApi"
},
"typeVersion": 4
},
{
"id": "process-result",
"name": "📊 Bewerbungsergebnis verarbeiten",
"type": "n8n-nodes-base.set",
"position": [
2000,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "application-status",
"name": "applicationStatus",
"type": "string",
"value": "={{ $json.statusCode >= 200 && $json.statusCode < 300 ? 'Applied' : 'Failed' }}"
},
{
"id": "app-id",
"name": "applicationId",
"type": "string",
"value": "={{ $json.body?.applicationId || $json.body?.id || 'AUTO_' + $now.format('yyyyMMddHHmmss') }}"
},
{
"id": "status-notes",
"name": "statusNotes",
"type": "string",
"value": "={{ $json.statusCode >= 200 && $json.statusCode < 300 ? 'Application submitted successfully via ' + $('Prepare Application Data').first().json.platform : 'Application failed: ' + $json.statusCode }}"
},
{
"id": "job-data",
"name": "originalJobData",
"type": "object",
"value": "={{ $('Prepare Application Data').first().json }}"
}
]
}
},
"typeVersion": 3
},
{
"id": "update-status",
"name": "📝 Job-Status aktualisieren",
"type": "n8n-nodes-base.googleSheets",
"position": [
2220,
480
],
"parameters": {
"range": "D{{ $json.originalJobData.row_index }}:H{{ $json.originalJobData.row_index }}",
"keyRow": 1,
"values": {
"values": [
[
"={{ $json.applicationStatus }}",
"={{ $json.originalJobData.applicationDate }}",
"={{ $json.originalJobData.applicationDate }}",
"={{ $json.applicationId }}",
"={{ $json.statusNotes }}"
]
]
},
"dataMode": "autoMapInputData",
"sheetName": "Jobs",
"documentId": "={{ $('Configuration').first().json.spreadsheetId }}",
"requestMethod": "UPDATE",
"authentication": "oAuth2",
"valueInputMode": "raw"
},
"typeVersion": 4
},
{
"id": "send-notification",
"name": "📧 Bewerbungsbenachrichtigung senden",
"type": "n8n-nodes-base.gmail",
"position": [
2440,
480
],
"parameters": {
"email": "={{ $('Configuration').first().json.userEmail }}",
"message": "<h3>Application Status Update</h3>\n<p><strong>Company:</strong> {{ $json.originalJobData.Company }}</p>\n<p><strong>Position:</strong> {{ $json.originalJobData.Position }}</p>\n<p><strong>Status:</strong> {{ $json.applicationStatus }}</p>\n<p><strong>Date:</strong> {{ $json.originalJobData.applicationDate }}</p>\n<p><strong>Platform:</strong> {{ $json.originalJobData.platform }}</p>\n<p><strong>Notes:</strong> {{ $json.statusNotes }}</p>\n<p><strong>Application ID:</strong> {{ $json.applicationId }}</p>",
"subject": "Job Application: {{ $json.originalJobData.Company }} - {{ $json.originalJobData.Position }}",
"operation": "sendEmail",
"emailFormat": "html"
},
"typeVersion": 2
},
{
"id": "status-tracking-info",
"name": "📊 Statusverfolgungsinfo",
"type": "n8n-nodes-base.stickyNote",
"position": [
380,
740
],
"parameters": {
"color": 7,
"width": 329,
"height": 204,
"content": "## 📈 Status Tracking Workflow\n\nThis section runs every 2 days to:\n- Check status of applied jobs\n- Update the spreadsheet\n- Send notifications for changes\n\n**Note:** Replace mock status checks with actual API calls to job platforms for real status updates."
},
"typeVersion": 1
},
{
"id": "status-trigger",
"name": "🕐 Statusprüfungsauslöser",
"type": "n8n-nodes-base.cron",
"position": [
240,
980
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 10 */2 * *"
}
]
}
},
"typeVersion": 1
},
{
"id": "read-applied",
"name": "📖 Bewerbte Jobs lesen",
"type": "n8n-nodes-base.googleSheets",
"position": [
460,
980
],
"parameters": {
"range": "A:J",
"keyRow": 1,
"dataMode": "autoMapInputData",
"sheetName": "Jobs",
"documentId": "={{ $('Configuration').first().json.spreadsheetId }}",
"requestMethod": "GET",
"authentication": "oAuth2"
},
"typeVersion": 4
},
{
"id": "filter-applied",
"name": "🎯 Bewerbte Jobs filtern",
"type": "n8n-nodes-base.filter",
"position": [
680,
980
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "applied-filter",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.Status }}",
"rightValue": "Applied"
}
]
}
},
"typeVersion": 2
},
{
"id": "split-status",
"name": "🔄 Status einzeln prüfen",
"type": "n8n-nodes-base.splitInBatches",
"position": [
900,
980
],
"parameters": {
"options": {
"reset": false
},
"batchSize": 1
},
"typeVersion": 3
},
{
"id": "mock-status-check",
"name": "🔍 Mock-Statusprüfung",
"type": "n8n-nodes-base.set",
"position": [
1120,
980
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "mock-status",
"name": "newStatus",
"type": "string",
"value": "={{ ['Applied', 'Under Review', 'Interview Scheduled', 'Rejected'][Math.floor(Math.random() * 4)] }}"
},
{
"id": "check-date",
"name": "checkDate",
"type": "string",
"value": "={{ $now.format('yyyy-MM-dd') }}"
},
{
"id": "status-notes",
"name": "statusNotes",
"type": "string",
"value": "Status checked automatically via API"
}
]
}
},
"typeVersion": 3
},
{
"id": "status-changed",
"name": "🔄 Prüfen, ob Status geändert wurde",
"type": "n8n-nodes-base.if",
"position": [
1340,
980
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "status-changed",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.Status }}",
"rightValue": "={{ $json.newStatus }}"
}
]
}
},
"typeVersion": 2
},
{
"id": "update-changed",
"name": "📝 Geänderten Status aktualisieren",
"type": "n8n-nodes-base.googleSheets",
"position": [
1560,
980
],
"parameters": {
"range": "D{{ $json.row_index }}:F{{ $json.row_index }}",
"keyRow": 1,
"values": {
"values": [
[
"={{ $json.newStatus }}",
"={{ $json.Applied_Date }}",
"={{ $json.checkDate }}"
]
]
},
"dataMode": "autoMapInputData",
"sheetName": "Jobs",
"documentId": "={{ $('Configuration').first().json.spreadsheetId }}",
"requestMethod": "UPDATE",
"authentication": "oAuth2",
"valueInputMode": "raw"
},
"typeVersion": 4
},
{
"id": "send-status-update",
"name": "📧 Statusupdate senden",
"type": "n8n-nodes-base.gmail",
"position": [
1780,
980
],
"parameters": {
"email": "={{ $('Configuration').first().json.userEmail }}",
"message": "<h3>Application Status Changed</h3>\n<p><strong>Company:</strong> {{ $json.Company }}</p>\n<p><strong>Position:</strong> {{ $json.Position }}</p>\n<p><strong>Previous Status:</strong> {{ $json.Status }}</p>\n<p><strong>New Status:</strong> {{ $json.newStatus }}</p>\n<p><strong>Last Checked:</strong> {{ $json.checkDate }}</p>\n<p><strong>Notes:</strong> {{ $json.statusNotes }}</p>",
"subject": "Status Update: {{ $json.Company }} - {{ $json.Position }}",
"operation": "sendEmail",
"emailFormat": "html"
},
"typeVersion": 2
}
],
"settings": {
"executionOrder": "v1"
},
"updatedAt": "2025-01-15T00:00:00.000Z",
"versionId": "1",
"staticData": null,
"connections": {
"configuration": {
"main": [
[
{
"node": "read-jobs",
"type": "main",
"index": 0
}
]
]
},
"read-jobs": {
"main": [
[
{
"node": "filter-pending",
"type": "main",
"index": 0
}
]
]
},
"indeed-apply": {
"main": [
[
{
"node": "process-result",
"type": "main",
"index": 0
}
]
]
},
"read-applied": {
"main": [
[
{
"node": "filter-applied",
"type": "main",
"index": 0
}
]
]
},
"update-status": {
"main": [
[
{
"node": "send-notification",
"type": "main",
"index": 0
}
]
]
},
"platform-router": {
"main": [
[
{
"node": "linkedin-apply",
"type": "main",
"index": 0
}
],
[
{
"node": "indeed-apply",
"type": "main",
"index": 0
}
]
]
},
"mock-status-check": {
"main": [
[
{
"node": "status-changed",
"type": "main",
"index": 0
}
]
]
},
"linkedin-apply": {
"main": [
[
{
"node": "process-result",
"type": "main",
"index": 0
}
]
]
},
"filter-applied": {
"main": [
[
{
"node": "split-status",
"type": "main",
"index": 0
}
]
]
},
"status-trigger": {
"main": [
[
{
"node": "read-applied",
"type": "main",
"index": 0
}
]
]
},
"update-changed": {
"main": [
[
{
"node": "send-status-update",
"type": "main",
"index": 0
}
]
]
},
"split-status": {
"main": [
[
{
"node": "mock-status-check",
"type": "main",
"index": 0
}
]
]
},
"status-changed": {
"main": [
[
{
"node": "update-changed",
"type": "main",
"index": 0
}
]
]
},
"split-jobs": {
"main": [
[
{
"node": "prepare-data",
"type": "main",
"index": 0
}
]
]
},
"prepare-data": {
"main": [
[
{
"node": "platform-router",
"type": "main",
"index": 0
}
]
]
},
"daily-trigger": {
"main": [
[
{
"node": "configuration",
"type": "main",
"index": 0
}
]
]
},
"process-result": {
"main": [
[
{
"node": "update-status",
"type": "main",
"index": 0
}
]
]
},
"filter-pending": {
"main": [
[
{
"node": "split-jobs",
"type": "main",
"index": 0
}
]
]
}
},
"triggerCount": 2
}Häufig gestellte Fragen
Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Experte - Persönliche Produktivität, Multimodales KI
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
Automatisierte Bewerbungsjagd von mehreren Jobbörsen
Automatisierung der Jobsuche und -Bewerbung mit 5 Jobplattformen und AI-Lebenslaufgenerator
If
Set
Code
+
If
Set
Code
34 NodesGerald Denor
Persönliche Produktivität
WordPress-Blog-Automatisierung Professional Edition (Deep Research) v2.1 Markt
Automatisierung der Erstellung von SEO-optimierten Blogs mit GPT-4o, Perplexity AI und mehrsprachiger Unterstützung
If
Set
Xml
+
If
Set
Xml
125 NodesDaniel Ng
Content-Erstellung
KI-Lead-Mining-Agent
Automatisierte Lead-Generierung und Kalt-E-Mail-Versand unter Verwendung von Apify, KI und Gmail
If
Set
Wait
+
If
Set
Wait
20 NodesRakin Jakaria
Lead-Generierung
Automatisierte lokale Lead-Suche und Kalt-E-Mail-Versand
Automatisches Auffinden lokaler Leads und Versenden von Kalt-E-Mails mit Apify, KI und Gmail
If
Set
Wait
+
If
Set
Wait
18 NodesMeak
Content-Erstellung
Automatischer Motor für virale Inhalte auf LinkedIn und X
Automatisiertes Erstellen und Veröffentlichen von viralen Inhalten für LinkedIn und X mittels KI
If
Set
Wait
+
If
Set
Wait
156 NodesDiptamoy Barman
Content-Erstellung
Mein Kalt-E-Mail-Generator
Anthropic, GPT-4 und Google Sheets zum Generieren personalisierter Kalte-E-Mails verwenden
If
Set
Code
+
If
Set
Code
24 NodesBhuvanesh R
Lead-Pflege
Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes24
Kategorie2
Node-Typen10
Autor
VipinW
@vxi14Externe Links
Auf n8n.io ansehen →
Diesen Workflow teilen