This workflow corresponds to n8n.io template #14037 — we link there as the canonical source.
This workflow follows the Chainllm → Google Drive 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": "NpGhpIGVb9oVFGmJ",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Auto-Apply-Template",
"tags": [],
"nodes": [
{
"id": "d3e041d0-f045-445e-8da3-ba03bf19cc3d",
"name": "Scrape Linkedin w/Apify",
"type": "n8n-nodes-base.httpRequest",
"position": [
576,
272
],
"parameters": {
"url": "https://api.apify.com/v2/acts/curious_coder~linkedin-jobs-scraper/run-sync-get-dataset-items",
"method": "POST",
"options": {},
"jsonBody": "{\n \"count\": 100,\n \"scrapeCompany\": true,\n \"splitByLocation\": false,\n \"urls\": [\n \"https://www.linkedin.com/jobs/search/?f_TPR=r3600&f_WT=1%2C3&geoId=YOUR_GEO_ID&keywords=YOUR_KEYWORD_1&origin=JOB_SEARCH_PAGE_SEARCH_BUTTON&refresh=true\",\n \"https://www.linkedin.com/jobs/search/?f_TPR=r3600&f_WT=1%2C3&geoId=YOUR_GEO_ID&keywords=YOUR_KEYWORD_2&origin=JOB_SEARCH_PAGE_SEARCH_BUTTON&refresh=true\"\n ]\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth"
},
"credentials": {
"httpQueryAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "f7bb8b8f-efea-42f4-b177-f1406234ee60",
"name": "Job Description",
"type": "n8n-nodes-base.markdown",
"position": [
1328,
272
],
"parameters": {
"html": "={{ $('Keep only CH').item.json.descriptionHtml }}",
"options": {},
"destinationKey": "job_description"
},
"typeVersion": 1
},
{
"id": "83e7145d-1374-4689-877a-4805ca8a8658",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
272,
272
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 0 7-23 * * *"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f167e6d7-8c9c-4e7e-b5a7-c7aa52646061",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
464,
128
],
"parameters": {
"color": 5,
"width": 308,
"height": 316,
"content": "## 1\ufe0f\u20e3 Scrape LinkedIn Jobs\nScrapes LinkedIn job listings via Apify.\n**Setup:** Add your Apify API key and customize LinkedIn search URLs with your keywords and location."
},
"typeVersion": 1
},
{
"id": "ebe3186c-2da0-4297-8094-0fd047edcddf",
"name": "Remove Big Recruiters",
"type": "n8n-nodes-base.filter",
"position": [
880,
272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f5998b23-2dba-4bbe-9a7d-1fb74fe7e1de",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $('Scrape Linkedin w/Apify').item.json.companyName }}",
"rightValue": "=Recruiter Company 1"
},
{
"id": "2e8YOUR_FOLDER_OR_FILE_ID",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.companyName }}",
"rightValue": "=Recruiter Company 2"
},
{
"id": "fd2YOUR_FOLDER_OR_FILE_ID",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.companyName }}",
"rightValue": "=Recruiter Company 3"
},
{
"id": "2ff6fd6a-8110-40c7-aa83-031ed8f3da2e",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.companyName }}",
"rightValue": "=Recruiter Company 4"
},
{
"id": "f6a4a1fd-b23c-42cd-a776-8d2111154c98",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.companyName }}",
"rightValue": "=Recruiter Company 5"
},
{
"id": "f978d0b0-2d6e-4ee4-94ec-5d25ef58d6d4",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.companyName }}",
"rightValue": "=Recruiter Company 6"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "001d0ce3-741a-41dc-acb5-96e01c464600",
"name": "Keep only [Your Country]",
"type": "n8n-nodes-base.filter",
"position": [
1120,
272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3bd86823-36dc-436a-8edb-aa34df75523e",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('Scrape Linkedin w/Apify').item.json.location }}",
"rightValue": "YOUR_COUNTRY"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "271ff232-81eb-4e20-bf52-325c47ac095e",
"name": "Set Profile",
"type": "n8n-nodes-base.set",
"position": [
592,
496
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "f349a972-4e83-45ba-a2e7-753f6df56f66",
"name": "Profile",
"type": "string",
"value": "=# Master Career Profile: [YOUR NAME]\n\n**Location:** [Your City, Country]\n**Target Roles:** [Your Target Role 1], [Your Target Role 2], [Your Target Role 3]\n**Unique Value Proposition:** [One sentence describing what makes you unique as a candidate]\n\n---\n\n## Section 1: Professional Identity and Future Goals\n* **Current Identity:** [Your current professional title/identity]\n* **Background:** [Brief background - education, location, key focus areas]\n* **Career Objective:** [2-3 sentences about your career goals and the types of projects/companies you want to work for]\n\n---\n\n## Section 2: Professional Experience and Impact\n\n### [Job Title] | [Company Name] | [Location] | [Start Date] \u2013 [End Date]\n* [Key responsibility or achievement 1]\n* [Key responsibility or achievement 2]\n* [Key responsibility or achievement 3]\n\n### [Job Title] | [Company Name] | [Location] | [Start Date] \u2013 [End Date]\n* [Key responsibility or achievement 1]\n* [Key responsibility or achievement 2]\n\n---\n\n## Section 3: Technical Skills\n* **Core Skills:** [Skill 1, Skill 2, Skill 3, ...]\n* **Tools & Platforms:** [Tool 1, Tool 2, Tool 3, ...]\n* **Languages:** [Programming or spoken languages]\n\n---\n\n## Section 4: Education\n* **[Degree]** | [University] | [Year]\n\n---\n\n## Section 5: Key Strengths & Soft Skills\n* [Strength 1]\n* [Strength 2]\n* [Strength 3]\n\n---\n\n## INSTRUCTIONS FOR THIS TEMPLATE:\nFill in ALL sections above with YOUR real information. The AI nodes (GateKeeper, Job Match Scorer, Create Resume) reference this profile to evaluate jobs and generate tailored resumes. The more detailed and accurate your profile, the better the results."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "02268d02-da57-42ae-85b2-f2f45607918a",
"name": "Job Match Scorer",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2384,
160
],
"parameters": {
"text": "=You are an expert Technical Recruiter and Career Coach. \n\nYour task is to evaluate a Job Description against my Master Profile and provide a \"Match Score\" and a brief analysis.\n\n**My Master Profile:**\n{{ $('Set Profile').first().json.Profile }}\n\n**The Job Description:**\n{{ $('Job Description').item.json.job_description }}\n\n**Analysis Instructions:**\n1. **Analyze Key Requirements:** Look for matches in Hard Skills, Soft Skills, and Industry experience.\n2. **Identify Dealbreakers:** Are there mandatory requirements the candidate completely lacks?\n3. **Calculate Score (0-100):**\n - **90-100:** Perfect match. All key skills and industry experience present.\n - **75-89:** Strong match. Most skills present, maybe lacking one nice-to-have.\n - **60-74:** Moderate match. Can do the job but would be pivoting.\n - **<60:** Weak match. Wrong industry, wrong tech stack, or seniority mismatch.\n\n**Output Format (JSON ONLY):**\n{\n \"match_score\": number,\n \"reasoning\": \"One short sentence explaining the score.\",\n \"missing_critical_skills\": [\"Skill A\", \"Skill B\"],\n \"matching_strong_skills\": [\"Skill C\", \"Skill D\"]\n}\n\nCRITICAL OUTPUT RULES:\n- Output RAW JSON only.\n- Do NOT wrap in markdown.\n- Do NOT add explanations.\n- Do NOT add notes.\n- Do NOT add text before or after the JSON.\n- The response MUST start with { and end with }.\nIf you add anything outside the JSON object, the response is invalid.",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "46624637-2442-41a3-ba51-b5124f034198",
"name": "GateKeeper",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"onError": "continueErrorOutput",
"position": [
1552,
160
],
"parameters": {
"text": "=You are a cynical, strict Technical Recruiter. Your job is to REJECT 90% of applicants to save time. \nI will give you a \"Candidate Profile\" and a \"Job Description\". \n\n**Your Default Answer is NO.** Only say YES if the job is a strong match for the candidate's profile.\n\n**Candidate Profile:**\n- **Core Identity:** [CUSTOMIZE: Describe your professional identity in one line]\n- **The \"Sweet Spot\":** [CUSTOMIZE: What combination of skills makes a job perfect for you?]\n- **Experience Level:** [CUSTOMIZE: e.g., Mid-Level (1-3 years)]\n- **Location:** [CUSTOMIZE: Your city/country (or Remote)]\n- **Languages:** [CUSTOMIZE: Your working languages]\n\n**Automatic REJECT Criteria (Kill List):**\n1. [CUSTOMIZE: Rejection rule 1 - e.g., Pure web dev roles with no hardware context]\n2. [CUSTOMIZE: Rejection rule 2 - e.g., Pure manual labor with no programming]\n3. **Seniority Mismatch:** Reject roles requiring significantly more/less experience than you have. Reject Internships.\n4. **Wrong Location:** Reject if outside your target region (unless fully remote).\n5. [CUSTOMIZE: Rejection rule 3 - e.g., Wrong tech stack]\n\n**Job Description:**\n{{ $json.job_description }}\n\n**Evaluation Logic:**\n1. Does this job match your core skills and identity? -> If YES, +50 points.\n2. Is the location acceptable? -> If YES, +20 points.\n3. Is the experience level right? -> If YES, +20 points.\n4. Are there \"Kill List\" keywords present? -> If YES, Score = 0.\n\n**Output JSON ONLY:**\n{\n \"match\": boolean, // true ONLY if score > 70\n \"score\": number, // 0-100\n \"reason\": \"Short, blunt reason. E.g., 'Rejected: Pure electrician role, no software' or 'Accepted: Perfect match'.\"\n}",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "76405c7c-cbde-4199-84c3-310c565da9ef",
"name": "Merge w/ Original Data",
"type": "n8n-nodes-base.merge",
"position": [
1904,
272
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "61329973-e4d0-4fbb-8eea-9315d275b2cb",
"name": "Keep Matches",
"type": "n8n-nodes-base.switch",
"position": [
2112,
272
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8b861c85-1b5e-45f7-8fb9-2120d1bcd31f",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('GateKeeper').item.json.text }}",
"rightValue": "\"match\": true"
}
]
}
}
]
},
"options": {
"allMatchingOutputs": false
}
},
"typeVersion": 3.4
},
{
"id": "8e9ff572-a97e-474b-97d1-96932e7962c3",
"name": "Merge w/ Original Data1",
"type": "n8n-nodes-base.merge",
"position": [
2928,
352
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "bcdc1666-522d-4f3a-8563-3e84cab46a7e",
"name": "Keep Matches1",
"type": "n8n-nodes-base.switch",
"position": [
864,
720
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8b861c85-1b5e-45f7-8fb9-2120d1bcd31f",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.match_score }}",
"rightValue": 80
}
]
}
}
]
},
"options": {
"allMatchingOutputs": false
}
},
"typeVersion": 3.4
},
{
"id": "96f999e7-0ca0-4fe4-825e-a0d21507d702",
"name": "Add Roles to apply",
"type": "n8n-nodes-base.googleSheets",
"position": [
1120,
720
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "trackingId",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "trackingId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "refId",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "refId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyName",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companyName",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyLinkedinUrl",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companyLinkedinUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyLogo",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companyLogo",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "location",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "salaryInfo",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "salaryInfo",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "postedAt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "postedAt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "benefits",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "benefits",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "descriptionHtml",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "descriptionHtml",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "applicantsCount",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "applicantsCount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "applyUrl",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "applyUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "salary",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "salary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "descriptionText",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "descriptionText",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "seniorityLevel",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "seniorityLevel",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "employmentType",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "employmentType",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobFunction",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "jobFunction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "industries",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "industries",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "inputUrl",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "inputUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyAddress",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companyAddress",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyWebsite",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companyWebsite",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyDescription",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companyDescription",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyEmployeesCount",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companyEmployeesCount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_description",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "job_description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "text",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "text",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "match_score",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "match_score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reasoning",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "reasoning",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "missing_critical_skills",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "missing_critical_skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "matching_strong_skills",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "matching_strong_skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companySlogan",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "companySlogan",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {
"useAppend": true
},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2000574340,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "Validated"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_DOCUMENTID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "[Your documentId name]"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "bed21ee0-9a82-4d11-a1d9-d34f911d92f4",
"name": "Parse in JSON",
"type": "n8n-nodes-base.code",
"position": [
2736,
160
],
"parameters": {
"jsCode": "const items = $input.all();\n\nreturn items.map(item => {\n let text = item.json.text;\n\n // Extract JSON block safely (from first { to last })\n const firstBrace = text.indexOf('{');\n const lastBrace = text.lastIndexOf('}');\n \n if (firstBrace === -1 || lastBrace === -1) {\n throw new Error(\"No valid JSON found in AI response.\");\n }\n\n const jsonString = text.slice(firstBrace, lastBrace + 1);\n\n const parsed = JSON.parse(jsonString);\n\n return {\n json: {\n ...item.json,\n ...parsed\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "3975ed37-683e-4926-aacd-c12696fea48c",
"name": "Send a text message",
"type": "n8n-nodes-base.telegram",
"position": [
1344,
720
],
"parameters": {
"text": "=New Jobs To Apply! Check your Excel! \n\nhttps://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"chatId": "YOUR_TELEGRAM_CHAT_ID",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "3e1b8e5d-9227-4d13-ba98-a19e53671e37",
"name": "Create Resume ",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1504,
1152
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-5.1",
"cachedResultName": "GPT-5.1"
},
"options": {
"textFormat": {
"textOptions": {
"type": "json_object"
}
}
},
"responses": {
"values": [
{
"content": "=You are an elite Career Strategist and Executive Resume Writer.\n\nYour task is to analyze the provided Job Description and my Master Profile to generate a highly tailored Resume and Cover Letter in strict JSON format.\n\n**My Master Profile:**\n{{ $('Set Profile1').first().json.Profile }}\n\n**The Job Description:**\n{{ $json.job_description }}\n\n### 1. Sources of Truth (No Hallucinations)\n- Use ONLY what is provided in my 'Master Profile'.\n- **HARD RULE:** Do NOT invent employers, client names, dates, degrees, certifications, metrics, or permits.\n- If a specific skill is missing, focus on adaptability and adjacent skills from the profile.\n\n### 2. Language Rules\n- **Detect Language:** Analyze the Job Description. Write ALL output in the SAME language as the job description.\n- Use formal, professional business language.\n\n### 3. Resume Writing Rules (Concise & Impactful)\n- **Summary:** Ultra-concise (Max 2-3 lines). Focus strictly on the \"Hook\" and \"Value Proposition\" for this specific role.\n- **Experience:** Select the 3 most relevant roles.\n- **Bullets:** Write **EXACTLY 2** high-impact bullet points per role.\n - Focus on Results and Tech (Action Verb + Task + Impact).\n - Keep them short and punchy.\n- **Skills:** Select the top 5 most relevant skills for each category.\n\n### 4. Cover Letter Writing Rules (Human, Concise)\n- **Length:** 180\u2013260 words.\n- **Structure:** NO section headers. Text must flow naturally.\n- **Hook:** Start immediately with relevance to the company or your unique value. Avoid \"I am applying for...\".\n- **Show, don't tell:** Replace adjectives with evidence/metrics.\n- **Connect the dots:** Explain how a past challenge prepares you for this specific role.\n- **Closing:** Confident, polite closing expressing enthusiasm.\n\n### 5. Output Format (Strict JSON)\nYou must output ONLY valid JSON. Do not include markdown formatting (like ```json).\n\n{\n \"meta\": {\n \"language\": \"EN\" // or \"DE\" or adapt to job description language\n },\n \"resume\": {\n \"summary\": \"...\",\n \"experience_1\": {\n \"title\": \"...\",\n \"company\": \"...\",\n \"date\": \"...\",\n \"bullets\": \"Bullet 1\\nBullet 2\"\n },\n \"experience_2\": {\n \"title\": \"...\",\n \"company\": \"...\",\n \"date\": \"...\",\n \"bullets\": \"Bullet 1\\nBullet 2\"\n },\n \"experience_3\": {\n \"title\": \"...\",\n \"company\": \"...\",\n \"date\": \"...\",\n \"bullets\": \"Bullet 1\\nBullet 2\"\n },\n \"skills_tech\": \"Skill1, Skill2, Skill3, Skill4, Skill5\",\n \"skills_industry\": \"Industry1, Industry2, Industry3\",\n \"skills_soft\": \"Soft1, Soft2, Soft3\"\n },\n \"cover_letter\": {\n \"recipient_name\": \"Hiring Team\",\n \"company_name\": \"Target Company Name\",\n \"salutation\": \"Dear Hiring Team,\",\n \"body_text\": \"Paragraph 1 text...\\n\\nParagraph 2 text...\\n\\nParagraph 3 text...\"\n }\n}"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "965d7fd1-5f88-4b0f-a335-a7f662976665",
"name": "Google Sheets Trigger",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
864,
1152
],
"parameters": {
"event": "rowUpdate",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyHour",
"minute": 10
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2000574340,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "Validated"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_DOCUMENTID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "[Your documentId name]"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "6b1ae6f6-f0d0-470f-9302-671b797c7a6d",
"name": "Update Link & Status",
"type": "n8n-nodes-base.googleSheets",
"position": [
2976,
1056
],
"parameters": {
"columns": {
"value": {
"id": "={{ $('Get Job Description').item.json.id }}",
"Resume": "=https://docs.google.com/document/d/{{ $('Update all Resume Variables').item.json.documentId }}",
"Status": "created",
"Cover Letter": "=https://docs.google.com/document/d/{{ $('Update all CL Variables').item.json.documentId }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "trackingId",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "trackingId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "refId",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "refId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "link",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyName",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companyName",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyLinkedinUrl",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companyLinkedinUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyLogo",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companyLogo",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "location",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "salaryInfo",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "salaryInfo",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "postedAt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "postedAt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "benefits",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "benefits",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "descriptionHtml",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "descriptionHtml",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "applicantsCount",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "applicantsCount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "applyUrl",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "applyUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "salary",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "salary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "descriptionText",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "descriptionText",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "seniorityLevel",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "seniorityLevel",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "employmentType",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "employmentType",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobFunction",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "jobFunction",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "industries",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "industries",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "inputUrl",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "inputUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyAddress",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companyAddress",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyWebsite",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companyWebsite",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyDescription",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companyDescription",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyEmployeesCount",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companyEmployeesCount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "job_description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "text",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "text",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Resume",
"type": "string",
"display": true,
"required": false,
"displayName": "Resume",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Cover Letter",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Cover Letter",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "match_score",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "match_score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reasoning",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "reasoning",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "missing_critical_skills",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "missing_critical_skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "matching_strong_skills",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "matching_strong_skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companySlogan",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "companySlogan",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobPosterName",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "jobPosterName",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobPosterTitle",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "jobPosterTitle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobPosterPhoto",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "jobPosterPhoto",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobPosterProfileUrl",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "jobPosterProfileUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2000574340,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "Validated"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_DOCUMENTID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "[Your documentId name]"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "44cec529-1528-42fd-a3dc-c3a07331335c",
"name": "Get Job Description",
"type": "n8n-nodes-base.googleSheets",
"position": [
1280,
1152
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "apply",
"lookupColumn": "Status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2000574340,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "Validated"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_DOCUMENTID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit",
"cachedResultName": "[Your documentId name]"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "84569bdf-c9cf-4e37-b80c-5e391c32ab58",
"name": "Select Language",
"type": "n8n-nodes-base.switch",
"position": [
1856,
1152
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "EN",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "26bb051d-ca58-44f3-a28c-7b595b67d351",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output[0].content[0].text.meta.language }}",
"rightValue": "EN"
}
]
},
"renameOutput": true
},
{
"outputKey": "DE",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7f332c3a-e717-4d07-bc56-e6ae16e8938c",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output[0].content[0].text.meta.language }}",
"rightValue": "DE"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "92d23e4c-3f08-4926-bb1d-8b1e579751a0",
"name": "Make a Copy of EN Resume",
"type": "n8n-nodes-base.googleDrive",
"position": [
2080,
1056
],
"parameters": {
"name": "=Resume_{{ $('Get Job Description').item.json.companyName }}_{{ $('Get Job Description').item.json.row_number }}",
"fileId": {
"__rl": true,
"mode": "id",
"value": "YOUR_FILEID"
},
"options": {},
"operation": "copy"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "b72b62f5-9f8d-48d9-bff3-b64c82caccdd",
"name": "Update all Resume Variables",
"type": "n8n-nodes-base.googleDocs",
"position": [
2304,
1056
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "{{summary}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.summary }}"
},
{
"text": "{{experience_1.title}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_1.title }}"
},
{
"text": "{{experience_1.company}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_1.company }}"
},
{
"text": "{{experience_1.date}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_1.date }}"
},
{
"text": "{{experience_1.bullets}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_1.bullets }}"
},
{
"text": "{{experience_2.title}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_2.title }}"
},
{
"text": "{{experience_2.company}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_2.company }}"
},
{
"text": "{{experience_2.date}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_2.date }}"
},
{
"text": "{{experience_2.bullets}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_2.bullets }}"
},
{
"text": "{{experience_3.title}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_3.title }}"
},
{
"text": "{{experience_3.company}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_3.company }}"
},
{
"text": "{{experience_3.date}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_3.date }}"
},
{
"text": "{{experience_3.bullets}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_3.bullets }}"
},
{
"text": "{{skills_tech}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.skills_tech }}"
},
{
"text": "{{skills_industry}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.skills_industry }}"
},
{
"text": "{{skills_soft}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.skills_soft }}"
}
]
},
"operation": "update",
"documentURL": "={{ $('Make a Copy of EN Resume').item.json.id }}"
},
"credentials": {
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "488402f0-3c50-4a68-bef8-2c3e1bfd9e8a",
"name": "Make a Copy of EN CL",
"type": "n8n-nodes-base.googleDrive",
"position": [
2528,
1056
],
"parameters": {
"name": "=CoverLetter_{{ $('Get Job Description').item.json.companyName }}_{{ $('Get Job Description').item.json.row_number }}",
"fileId": {
"__rl": true,
"mode": "id",
"value": "YOUR_FILEID"
},
"options": {},
"operation": "copy"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "3df41a0b-ef34-417d-ac2e-2e3db19440a6",
"name": "Update all CL Variables",
"type": "n8n-nodes-base.googleDocs",
"position": [
2752,
1056
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "{{salutation}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.cover_letter.salutation }}"
},
{
"text": "{{body_text}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.cover_letter.body_text }}"
},
{
"text": "{{date}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{$now.format('dd-MM-yyyy')}}"
},
{
"text": "{{companyName}}",
"action": "replaceAll",
"replaceText": "={{ $('Get Job Description').item.json.companyName }}"
}
]
},
"operation": "update",
"documentURL": "={{ $('Make a Copy of EN CL').item.json.id }}"
},
"credentials": {
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "317f97b8-df05-46e6-a782-e9ec3830e861",
"name": "Make a Copy of DE Resume",
"type": "n8n-nodes-base.googleDrive",
"position": [
2080,
1248
],
"parameters": {
"name": "=Lebenslauf_{{ $('Get Job Description').item.json.companyName }}_{{ $('Get Job Description').item.json.row_number }}",
"fileId": {
"__rl": true,
"mode": "id",
"value": "YOUR_FILEID"
},
"options": {},
"operation": "copy"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "e753e291-94d4-4d31-9d8b-28829d431dbd",
"name": "Update all Lebenslauf Variables",
"type": "n8n-nodes-base.googleDocs",
"position": [
2304,
1248
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "{{summary}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.summary }}"
},
{
"text": "{{experience_1.title}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_1.title }}"
},
{
"text": "{{experience_1.company}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_1.company }}"
},
{
"text": "{{experience_1.date}}",
"action": "replaceAll",
"matchCase": true,
"replaceText": "={{ $('Create Resume ').item.json.output[0].content[0].text.resume.experience_1.date }}"
},
{
"text": "{{experience_1.bullets}}",
"action": "re
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.
googleDocsOAuth2ApigoogleDriveOAuth2ApigoogleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApihttpQueryAuthopenAiApiopenRouterApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Job seekers who want to automate their entire job search pipeline — from discovering new listings to generating tailored resumes and cover letters — without manually browsing LinkedIn every day.
Source: https://n8n.io/workflows/14037/ — 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.
This workflow is for beauty salons who want consistent, high‑quality social media content without writing every post manually. It also suits agencies and automation builders who manage multiple beauty
This workflow automates the creation, rendering, approval, and posting of TikTok-style POV (Point of View) videos to Instagram, with cross-posting to Facebook and YouTube. It eliminates manual video p
YOUTUBE GUIDE 📣 This template generates up to 2,000 AI-based stock images per day for under $4. It includes prompt generation, image creation, metadata enrichment, upload to Google Drive, and error lo
This n8n template shows you how to turn outbound sales into a fully automated machine: scrape verified leads, research them with AI, and fire off personalized cold emails while you sleep.
The best content automation template in the market is now even better—with “deep research” on time-sensitive topics\! Unlike most n8n content automation templates that are mainly for “demo purposes,”