This workflow corresponds to n8n.io template #14063 — we link there as the canonical source.
This workflow follows the Agent → 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": "XVOX4SIp4BzcfpNs",
"name": "Automate job applications with Telegram, SerpAPI, and OpenAI",
"tags": [
{
"id": "0f9SAyGcLm0ORsVP",
"name": "telegram",
"createdAt": "2025-11-13T18:01:50.147Z",
"updatedAt": "2025-11-13T18:01:50.147Z"
},
{
"id": "Mef3Bfa6ka4NeYPU",
"name": "messenger",
"createdAt": "2026-03-20T21:16:09.503Z",
"updatedAt": "2026-03-20T21:16:09.503Z"
},
{
"id": "HP4DHZ39Ro9hcp28",
"name": "cv",
"createdAt": "2025-12-26T18:00:49.562Z",
"updatedAt": "2025-12-26T18:00:49.562Z"
},
{
"id": "IpgAKzog3drfAEtk",
"name": "application",
"createdAt": "2025-12-26T18:00:42.473Z",
"updatedAt": "2025-12-26T18:00:42.473Z"
},
{
"id": "Tn6IgIGKc7IYO0gi",
"name": "teams",
"createdAt": "2025-12-26T18:01:13.573Z",
"updatedAt": "2025-12-26T18:01:13.573Z"
},
{
"id": "UuJEZh1xyaeiFwva",
"name": "cover letter",
"createdAt": "2025-12-26T18:00:53.840Z",
"updatedAt": "2025-12-26T18:00:53.840Z"
},
{
"id": "XYTdN8U3IPUGzNaj",
"name": "automation",
"createdAt": "2025-12-26T18:01:00.673Z",
"updatedAt": "2025-12-26T18:01:00.673Z"
},
{
"id": "oGLByJdC8wyqSWDN",
"name": "job",
"createdAt": "2025-12-26T18:00:44.367Z",
"updatedAt": "2025-12-26T18:00:44.367Z"
},
{
"id": "qoHYK3nc9zpxkc5O",
"name": "slack",
"createdAt": "2025-12-26T18:01:15.019Z",
"updatedAt": "2025-12-26T18:01:15.019Z"
}
],
"nodes": [
{
"id": "08a69784-6434-4570-90b6-26143ee4536f",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-1312,
720
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {
"userIds": "YOUR_TELEGRAM_USER_ID"
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "77bf0cb3-bcaa-4396-a361-a394cc543f78",
"name": "No Operation, do nothing",
"type": "n8n-nodes-base.noOp",
"position": [
-192,
560
],
"parameters": {},
"typeVersion": 1
},
{
"id": "4dd0352e-185c-4436-a4a8-85a8d92ee3be",
"name": "No Operation, do nothing1",
"type": "n8n-nodes-base.noOp",
"position": [
544,
976
],
"parameters": {},
"typeVersion": 1
},
{
"id": "07a9ae87-18a5-464e-ae9a-e1d39c9c212e",
"name": "Extract Job results from SERP-API response",
"type": "n8n-nodes-base.code",
"position": [
-640,
928
],
"parameters": {
"jsCode": "\nconst inputs = $input.all();\nconst out = [];\n\nfor (const i of inputs) {\n const jobs = i.json.jobs_results || [];\n for (const j of jobs) {\n const dext = j.detected_extensions || {};\n const apply = Array.isArray(j.apply_options) ? j.apply_options : [];\n\n const a0 = apply[0] || {};\n const a1 = apply[1] || {};\n const a2 = apply[2] || {};\n const a3 = apply[3] || {};\n const a4 = apply[4] || {};\n const a5 = apply[5] || {};\n const a6 = apply[6] || {};\n const a7 = apply[7] || {};\n const a8 = apply[8] || {};\n const a9 = apply[9] || {};\n const a10 = apply[10] || {};\n\n out.push({\n json: {\n via: j.via ?? null,\n title: j.title ?? null,\n job_id: j.job_id ?? null,\n location: j.location ?? null,\n posted_at: dext.posted_at ?? j.posted_at ?? null,\n salary: j.salary ?? dext.salary ?? null,\n type: dext.schedule_type ?? j.schedule_type ?? null,\n share_link: j.share_link ?? null,\n description: j.description ?? null,\n company: j.company_name ?? j.company ?? null,\n\n link1: a0.link ?? null,\n application_platform_1: a0.title ?? null,\n link2: a1.link ?? null,\n application_platform_2: a1.title ?? null,\n link3: a2.link ?? null,\n application_platform_3: a2.title ?? null,\n link4: a3.link ?? null,\n application_platform_4: a3.title ?? null,\n link5: a4.link ?? null,\n application_platform_5: a4.title ?? null,\n link6: a5.link ?? null,\n application_platform_6: a5.title ?? null,\n link7: a6.link ?? null,\n application_platform_7: a6.title ?? null,\n link8: a7.link ?? null,\n application_platform_8: a7.title ?? null,\n link9: a8.link ?? null,\n application_platform_9: a8.title ?? null,\n link10: a9.link ?? null,\n application_platform_10: a9.title ?? null,\n link11: a10.link ?? null,\n application_platform_11: a10.title ?? null,\n }\n });\n }\n}\n\nreturn out;\n"
},
"typeVersion": 2
},
{
"id": "ed5f295b-90a9-4149-b8c8-2ff9f95c5aeb",
"name": "Search google jobs listings with SERP-API",
"type": "n8n-nodes-serpapi.serpApi",
"position": [
-864,
928
],
"parameters": {
"q": "={{ $json.message.text }}",
"operation": "google_jobs",
"requestOptions": {},
"additionalFields": {
"gl": "us",
"location": "united states"
}
},
"typeVersion": 1
},
{
"id": "908b1a93-8a68-4775-85db-e804bfae2159",
"name": "Filter unwanted results based on your criteria",
"type": "n8n-nodes-base.if",
"position": [
-416,
928
],
"parameters": {
"options": {
"ignoreCase": true
},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "c7896112-6d44-45df-a837-1d58b9dbccc5",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.title }}",
"rightValue": "student"
},
{
"id": "71698759-9966-4fb9-9304-5819576901e5",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.title }}",
"rightValue": "intern"
},
{
"id": "a0828b1c-4923-4d4d-a181-d0d9b0882f7e",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.title }}",
"rightValue": "freelance"
},
{
"id": "f3f0efa2-f449-40de-95c1-e951a6e55be8",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.title }}",
"rightValue": "temporary"
},
{
"id": "3ef31078-948d-4f97-8c88-0d08fac89cef",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.title }}",
"rightValue": "=internship"
},
{
"id": "0bcb62ef-8310-4004-aad5-cffbb1462432",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.type }}",
"rightValue": "internship"
},
{
"id": "c6c43c25-3db0-4137-bb62-8f4933a75bcf",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.type }}",
"rightValue": "part-time"
},
{
"id": "2295d117-f4cb-4425-bfcf-7ff6982af2b9",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('Extract Job results from SERP-API response').item.json.title }}",
"rightValue": "your_excluded_term"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "ae1e2e3a-f98b-4127-8cd8-6af0baf7b6bc",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-192,
1024
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "6c0901f5-b24f-4748-8729-4056c33110d2",
"name": "Send Telegram message & approval card for each job",
"type": "n8n-nodes-base.telegram",
"onError": "continueRegularOutput",
"position": [
176,
1072
],
"parameters": {
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"message": "={{\n(() => {\n const LIMIT = 4000;\n\n const title = $json.title ?? '';\n const company = $json.company ?? '';\n const location = $json.location ?? '';\n const salary = $json.salary ?? '';\n const description = $json.description ?? '';\n\n // Build hyperlinks (Markdown with URL sanitization)\n const links = [];\n for (let i = 1; i <= 10; i++) {\n const rawLink = $json[`link${i}`] ?? null;\n const platform = $json[`application_platform_${i}`] ?? null;\n if (rawLink && platform) {\n try {\n // Prevent broken links from special characters\n const safeLink = encodeURI(rawLink.trim());\n links.push(`[${i}. ${platform}](${safeLink})`);\n } catch (e) {\n // Fallback: output as plain text\n links.push(`${i}. ${platform}: ${rawLink}`);\n }\n }\n }\n\n const build = (desc) => {\n return [title, company, location, salary, desc, links.join('\\n')]\n .map(v => v ?? '')\n .join('\\n')\n .replace(/\\n{2,}/g, '\\n')\n .trim();\n };\n\n // Try building message with description\n let msg = build(description);\n if (msg.length <= LIMIT) return msg;\n\n // Drop description if too long\n msg = build('');\n if (msg.length > LIMIT) {\n msg = msg.slice(0, LIMIT - 3) + '...';\n }\n return msg;\n})()\n}}\n",
"options": {},
"operation": "sendAndWait",
"approvalOptions": {
"values": {
"approvalType": "double"
}
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "7b724308-45a0-411f-b810-bed5848de31c",
"name": "Check if job was approved",
"type": "n8n-nodes-base.if",
"position": [
176,
864
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9e6bd3a4-7e3a-4e67-9960-9ef51bb76cf2",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('Send Telegram message & approval card for each job').item.json.data.approved }}",
"rightValue": false
}
]
}
},
"typeVersion": 2.2
},
{
"id": "7158bce9-51d8-4166-8e3b-3c8fe84a49c2",
"name": "Notify user about end of the loop",
"type": "n8n-nodes-base.telegram",
"position": [
768,
672
],
"parameters": {
"text": "All done for now \u2014 your documents are being prepared!",
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "dd55233d-67d6-4834-9238-c9b2a913eba7",
"name": "Create customized cover letter",
"type": "n8n-nodes-htmlcsstopdf.htmlcsstopdf",
"position": [
768,
864
],
"parameters": {
"css_content": ":root { --primary: #0f172a; --accent: #38bdf8; --text-white: #f8fafc; --text-dim: #94a3b8; --bg-page: #f1f5f9; --card-bg: #ffffff; --text-main: #334155; /* Compact sizing for single-page layout */ --radius: 12px; --shadow: 0 15px 40px -10px rgba(0,0,0,0.2); } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Inter', sans-serif; background-color: var(--bg-page); color: var(--text-main); display: flex; justify-content: center; padding: 20px; /* Less outer margin */ min-height: 100vh; line-height: 1.5; /* Slightly tighter line height */ -webkit-font-smoothing: antialiased; } .page { background: var(--card-bg); width: 100%; max-width: 820px; border-radius: var(--radius); box-shadow: var(--shadow); overflow: hidden; position: relative; /* Optional: force fixed height if desired, but auto is safer */ height: auto; } /* --- KOMPAKTER HEADER --- */ .header { background-color: var(--primary); color: var(--text-white); padding: 30px 40px; /* Much less padding */ display: flex; flex-direction: column; gap: 25px; /* Less spacing between sections */ } /* Identity and contact in one row */ .header-top { display: flex; justify-content: space-between; align-items: center; gap: 20px; } /* Left: image and name */ .identity-group { display: flex; align-items: center; gap: 18px; text-align: left; } .profile-photo { width: 75px; /* Smaller */ height: 75px; border-radius: 50%; object-fit: cover; border: 2px solid rgba(255,255,255,0.1); } .name-block .name { font-size: 1.8rem; /* Smaller than before (2.2rem) */ font-weight: 700; line-height: 1; color: #fff; margin-bottom: 5px; } .name-block .role { font-size: 0.9rem; color: var(--accent); text-transform: uppercase; letter-spacing: 0.05em; font-weight: 500; } /* Right: contact */ .contact-column { display: flex; flex-direction: column; gap: 8px; /* Very compact */ align-items: flex-end; } .contact-item { display: flex; align-items: center; gap: 10px; color: var(--text-white); text-decoration: none; font-size: 0.85rem; /* Smaller for space */ font-weight: 400; opacity: 0.9; } .contact-item svg { width: 16px; height: 16px; color: var(--accent); } /* Header Bottom: Badges */ .header-bottom { border-top: 1px solid rgba(255,255,255,0.15); padding-top: 15px; display: flex; align-items: center; gap: 15px; } .section-label { font-size: 0.7rem; text-transform: uppercase; color: var(--text-dim); font-weight: 700; letter-spacing: 0.05em; white-space: nowrap; margin-right: 5px; } .badges-row { display: flex; flex-wrap: wrap; gap: 8px; } .badge-item { display: inline-flex; align-items: center; gap: 6px; background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.1); padding: 5px 12px; /* Smaller buttons */ border-radius: 4px; color: #e2e8f0; font-size: 0.75rem; /* Smaller font */ text-decoration: none; } .badge-item svg { width: 14px; height: 14px; } /* --- MAIN CONTENT (Space-efficient) --- */ main { padding: 35px 40px; /* Less inner padding */ } .recipient-block { margin-bottom: 25px; /* Less spacing */ display: flex; justify-content: space-between; align-items: flex-end; font-size: 0.9rem; color: #64748b; border-bottom: 1px solid #e2e8f0; padding-bottom: 10px; } .subject { font-size: 1.2rem; font-weight: 700; color: var(--primary); margin-bottom: 20px; } .highlight-text { font-weight: 600; color: var(--primary); } .content { font-size: 0.925rem; /* Key for single page: slightly smaller text */ color: var(--text-main); line-height: 1.55; } .content p { margin-bottom: 1rem; /* More compact paragraphs */ text-align: justify; } .greeting { margin-top: 2rem; } .signature { font-weight: 700; font-size: 1.1rem; color: var(--primary); margin-top: 5px; } /* Print optimization (PDF) */ @media print { body { padding: 0; background: white; } .page { box-shadow: none; border-radius: 0; max-width: 100%; width: 100%; } /* Force background colors when printing */ .header { -webkit-print-color-adjust: exact; print-color-adjust: exact; } } /* Mobile Adjustments */ @media (max-width: 600px) { .header { padding: 20px; } .header-top { flex-direction: column; align-items: flex-start; } .contact-column { align-items: flex-start; margin-top: 10px; } .header-bottom { flex-direction: column; align-items: flex-start; gap: 10px; } main { padding: 25px; } }",
"html_content": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Cover Letter - Your Name</title>\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n <link rel=\"stylesheet\" href=\"style_one_page.css\">\n</head>\n<body>\n\n <div class=\"page\">\n \n <header class=\"header\">\n \n <div class=\"header-top\">\n <div class=\"identity-group\">\n <img src=\"https://example.com/your-profile-photo.jpg\" alt=\"Your Name\" class=\"profile-photo\">\n <div class=\"name-block\">\n <h1 class=\"name\">Your Name</h1>\n <h2 class=\"role\">Your Job Title</h2>\n </div>\n </div>\n\n <div class=\"contact-column\">\n <a href=\"mailto:your.email@example.com\" class=\"contact-item\">\n your.email@example.com\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"/>\n <polyline points=\"22,6 12,13 2,6\"/>\n </svg>\n </a>\n <a href=\"tel:+49XXXXXXXXXX\" class=\"contact-item\">\n +49 XXX XXXX XXXX\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 16.92z\"/>\n </svg>\n </a>\n <div class=\"contact-item\">\n Your City, Country\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"/>\n <circle cx=\"12\" cy=\"10\" r=\"3\"/>\n </svg>\n </div>\n </div>\n </div>\n\n <div class=\"header-bottom\">\n <span class=\"section-label\">Certificates & Portfolio:</span>\n <div class=\"badges-row\">\n <a href=\"https://www.linkedin.com/in/yourprofile/\" target=\"_blank\" class=\"badge-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"/><rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"/><circle cx=\"4\" cy=\"4\" r=\"2\"/></svg>\n LinkedIn\n </a>\n <a href=\"https://n8n.io/creators/yourprofile/\" target=\"_blank\" class=\"badge-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5\"/></svg>\n n8n Creator\n </a>\n <a href=\"https://example.com/your-certificate-1\" target=\"_blank\" class=\"badge-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"8\" r=\"7\" /><polyline points=\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\" /></svg>\n IBM AI Developer\n </a>\n <a href=\"https://example.com/your-certificate-2\" target=\"_blank\" class=\"badge-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 15l-2 5l2 2l2 -2l-2 -5z\"/><circle cx=\"12\" cy=\"9\" r=\"7\"/><path d=\"M12 6v6\"/><path d=\"M9 9h6\"/></svg>\n AI for Business\n </a>\n </div>\n </div>\n\n </header>\n\n <main>\n <section class=\"recipient-block\">\n <div class=\"address\">\n To: <span class=\"highlight-text\">{{ $('Document job results in Google sheet').item.json.company }}</span>\n </div>\n <div class=\"date\">\n Your City, <span id=\"current-date\"></span>\n </div>\n </section>\n\n <div class=\"subject\">\n Application as <span class=\"highlight-text\"> {{ $('Document job results in Google sheet').item.json.title }} </span>\n </div>\n\n <div class=\"content\">\n <p>Dear {{ $('Document job results in Google sheet').item.json.company }} Team,</p>\n\n <p>The advertised position appeals to me strongly, and I would like to apply for it.</p>\n\n <p>[Describe your relevant experience and key achievements. Mention specific tools, projects, or results that demonstrate your qualifications.]</p>\n\n <p>I would be delighted to discuss the concrete AI/automation use cases I have implemented and explore potential collaboration.</p>\n\n <p class=\"greeting\">Best regards,</p>\n <div class=\"signature\">Your Name</div>\n </div>\n </main>\n\n </div>\n\n <script>\n const dateElement = document.getElementById('current-date');\n const today = new Date();\n \n const options = { year: 'numeric', month: 'long', day: 'numeric' };\n dateElement.textContent = today.toLocaleDateString('en-US', options);\n </script>\n</body>\n</html>",
"output_format": "file"
},
"typeVersion": 1
},
{
"id": "e1a7d39d-574b-414c-b72f-7f6b6fe6a02a",
"name": "Upload cover letter to Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
992,
864
],
"parameters": {
"name": "=YourName_CoverLetter_{{ $('Document job results in Google sheet').item.json.company}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"cachedResultUrl": "https://drive.google.com/drive/folders/YOUR_GOOGLE_DRIVE_FOLDER_ID",
"cachedResultName": "Job_applications"
}
},
"typeVersion": 3
},
{
"id": "d857bb90-49c7-4e56-b032-bbdb9dcc1e60",
"name": "Create folder for attachments",
"type": "n8n-nodes-base.googleDrive",
"position": [
1216,
864
],
"parameters": {
"name": "={{ $('Document job results in Google sheet').item.json.title }}_{{ $('Document job results in Google sheet').item.json.company }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"cachedResultUrl": "https://drive.google.com/drive/folders/YOUR_GOOGLE_DRIVE_FOLDER_ID",
"cachedResultName": "Job_applications"
},
"resource": "folder"
},
"typeVersion": 3
},
{
"id": "e2050764-092b-44fe-af19-c47493387ce9",
"name": "Move cover letter to attachments folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
1440,
864
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Upload cover letter to Drive').item.json.id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"operation": "move"
},
"typeVersion": 3
},
{
"id": "9bb3bc59-25a0-41d0-a08c-281c63a4e20a",
"name": "Create customized CV",
"type": "n8n-nodes-htmlcsstopdf.htmlcsstopdf",
"position": [
1664,
864
],
"parameters": {
"css_content": ":root { /* Same color palette as cover letter */ --primary: #0f172a; /* Deep Navy */ --accent: #38bdf8; /* Sky Blue */ --text-white: #f8fafc; --text-dim: #94a3b8; --bg-page: #f1f5f9; --card-bg: #ffffff; --text-main: #334155; --text-light: #64748b; --radius: 12px; --shadow: 0 15px 40px -10px rgba(0,0,0,0.2); } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Inter', sans-serif; background-color: var(--bg-page); color: var(--text-main); display: flex; justify-content: center; padding: 20px; min-height: 100vh; line-height: 1.5; -webkit-font-smoothing: antialiased; } .page { background: var(--card-bg); width: 100%; max-width: 900px; /* Slightly wider for CV */ border-radius: var(--radius); box-shadow: var(--shadow); overflow: hidden; position: relative; } /* --- HEADER (matches cover letter) --- */ .header { background-color: var(--primary); color: var(--text-white); padding: 30px 40px; display: flex; flex-direction: column; gap: 20px; } .header-top { display: flex; justify-content: space-between; align-items: center; } .identity-group { display: flex; align-items: center; gap: 20px; } .profile-photo { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid rgba(255,255,255,0.1); } .name-block .name { font-size: 2rem; font-weight: 700; line-height: 1; color: #fff; margin-bottom: 5px; } .name-block .role { font-size: 1rem; color: var(--accent); font-weight: 500; } /* Header Contact Row */ .header-contact { display: flex; flex-wrap: wrap; gap: 15px; font-size: 0.85rem; color: var(--text-dim); padding-top: 15px; border-top: 1px solid rgba(255,255,255,0.1); } .contact-item { display: flex; align-items: center; gap: 6px; color: var(--text-white); text-decoration: none; transition: color 0.2s; } .contact-item:hover { color: var(--accent); } .contact-item svg { width: 14px; height: 14px; color: var(--accent); } /* --- GRID LAYOUT --- */ .cv-grid { display: grid; grid-template-columns: 2fr 1fr; /* 2/3 Main, 1/3 Sidebar */ min-height: 800px; } /* --- LEFT COLUMN (Experience) --- */ .main-column { padding: 35px 40px; } .section-title { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--text-light); font-weight: 700; margin-bottom: 20px; display: flex; align-items: center; gap: 10px; } .section-title::after { content: ''; flex: 1; height: 1px; background: #e2e8f0; } .section-title svg { width: 16px; height: 16px; color: var(--primary); } /* Job Items */ .job-item { margin-bottom: 25px; position: relative; padding-left: 20px; border-left: 2px solid #e2e8f0; } .job-item::before { content: ''; position: absolute; left: -6px; top: 0; width: 10px; height: 10px; border-radius: 50%; background: var(--bg-page); border: 2px solid var(--accent); } .job-header { margin-bottom: 8px; } .job-title { font-size: 1rem; font-weight: 700; color: var(--primary); } .job-company { font-size: 0.9rem; font-weight: 600; color: var(--text-main); } .job-meta { font-size: 0.8rem; color: var(--text-light); margin-top: 2px; } .job-desc { font-size: 0.9rem; color: var(--text-main); line-height: 1.5; } .job-desc ul { list-style-type: none; padding-left: 0; } .job-desc li { position: relative; padding-left: 15px; margin-bottom: 4px; } .job-desc li::before { content: '\u2022'; position: absolute; left: 0; color: var(--accent); font-weight: bold; } /* --- RIGHT COLUMN (Sidebar) --- */ .sidebar-column { background-color: #f8fafc; /* Very light grey */ padding: 35px 30px; border-left: 1px solid #e2e8f0; } .sidebar-section { margin-bottom: 30px; } .sidebar-title { font-size: 0.8rem; text-transform: uppercase; font-weight: 700; color: var(--primary); margin-bottom: 15px; letter-spacing: 0.05em; } /* Skills Tags */ .skill-tags { display: flex; flex-wrap: wrap; gap: 8px; } .tag { background: #fff; border: 1px solid #cbd5e1; padding: 4px 10px; border-radius: 6px; font-size: 0.8rem; font-weight: 500; color: var(--text-main); } .tag.highlight { background: rgba(56, 189, 248, 0.1); border-color: var(--accent); color: var(--primary); } /* List Items (Languages, Certs) */ .info-list { list-style: none; font-size: 0.9rem; } .info-list li { margin-bottom: 10px; } .info-label { display: block; font-weight: 600; color: var(--text-main); } .info-detail { display: block; font-size: 0.85rem; color: var(--text-light); } /* Mobile */ @media (max-width: 700px) { .cv-grid { grid-template-columns: 1fr; } .sidebar-column { border-left: none; border-top: 1px solid #e2e8f0; background: #fff; } .header { padding: 25px; } .header-top { flex-direction: column; align-items: flex-start; gap: 20px; } } @media print { body { padding: 0; background: white; } .page { box-shadow: none; max-width: 100%; border-radius: 0; } .header { -webkit-print-color-adjust: exact; print-color-adjust: exact; } .tag.highlight { -webkit-print-color-adjust: exact; print-color-adjust: exact; } /* Page break control */ .job-item { break-inside: avoid; } }",
"html_content": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>CV - Your Name</title>\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n <style>\n :root {\n --primary: #0f172a; /* Deep Navy */\n --accent: #2563eb; /* Stronger blue for links */\n --text-white: #f8fafc;\n --text-dim: #94a3b8;\n --bg-page: #f1f5f9;\n --card-bg: #ffffff;\n --text-main: #334155;\n --text-light: #64748b;\n --a4-width: 210mm;\n --a4-height: 296mm;\n }\n\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n font-family: 'Inter', sans-serif;\n background-color: #555; \n color: var(--text-main);\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n gap: 20px;\n -webkit-font-smoothing: antialiased;\n }\n\n .page {\n background: var(--card-bg);\n width: var(--a4-width);\n min-height: var(--a4-height);\n box-shadow: 0 10px 30px rgba(0,0,0,0.3);\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n }\n\n /* --- HEADER --- */\n .header {\n background-color: var(--primary);\n color: var(--text-white);\n padding: 35px 40px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .header-top { display: flex; justify-content: space-between; align-items: center; }\n .identity-group { display: flex; align-items: center; gap: 20px; }\n \n .profile-photo {\n width: 85px; height: 85px; border-radius: 50%;\n object-fit: cover; border: 3px solid rgba(255,255,255,0.1);\n }\n\n .name-block .name { font-size: 2.2rem; font-weight: 700; line-height: 1; color: #fff; margin-bottom: 5px; }\n .name-block .role { font-size: 1.1rem; color: #60a5fa; font-weight: 500; }\n\n .dynamic-tag {\n background: rgba(255,255,255,0.1);\n padding: 5px 12px; border-radius: 4px;\n font-size: 0.85rem; color: #cbd5e1;\n display: inline-block; margin-top: 10px;\n border: 1px solid rgba(255,255,255,0.15);\n }\n\n /* Fixed Hover Effect */\n .header-contact {\n display: flex; flex-wrap: wrap; gap: 20px;\n font-size: 0.9rem; color: var(--text-dim);\n padding-top: 20px; border-top: 1px solid rgba(255,255,255,0.1);\n }\n \n /* Specific selector to prevent group hovering */\n .contact-item { \n display: flex; align-items: center; gap: 8px; \n color: var(--text-white); text-decoration: none; \n transition: color 0.2s ease;\n }\n .contact-item svg { \n width: 16px; height: 16px; color: #60a5fa; \n transition: color 0.2s ease;\n }\n \n /* Only affect the specific hovered item */\n .contact-item:hover { color: #60a5fa; }\n .contact-item:hover svg { color: #fff; }\n\n /* --- CONTENT GRID --- */\n .cv-grid {\n display: grid; grid-template-columns: 68% 32%;\n flex-grow: 1;\n }\n\n .main-column { padding: 40px; }\n .sidebar-column { background-color: #f8fafc; padding: 40px 30px; border-left: 1px solid #e2e8f0; }\n\n .section-title {\n font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.1em;\n color: var(--text-light); font-weight: 700; margin-bottom: 25px;\n display: flex; align-items: center; gap: 10px;\n }\n .section-title svg { width: 18px; height: 18px; color: var(--primary); }\n .section-title::after { flex: 1; height: 1px; background: #e2e8f0; content: ''; }\n\n /* --- HYPERLINKS --- */\n .link-highlight {\n display: inline-flex; align-items: center; gap: 6px;\n color: var(--accent); font-weight: 600; text-decoration: none;\n background: rgba(37, 99, 235, 0.05); padding: 2px 8px;\n border-radius: 4px; transition: all 0.2s; border: 1px solid transparent;\n }\n .link-highlight:hover {\n background: rgba(37, 99, 235, 0.1); border-color: rgba(37, 99, 235, 0.2);\n }\n .link-highlight svg { width: 12px; height: 12px; flex-shrink: 0; }\n\n /* --- TIMELINE --- */\n .company-group { margin-bottom: 30px; }\n .company-header { display: flex; align-items: baseline; gap: 8px; margin-bottom: 10px; }\n .company-name { font-size: 1.15rem; font-weight: 700; color: var(--primary); }\n .company-loc { font-size: 0.9rem; color: var(--text-light); }\n\n .role-item, .job-item {\n position: relative; padding-left: 20px; border-left: 2px solid #e2e8f0; padding-bottom: 20px;\n }\n .role-item:last-child { border-left-color: transparent; padding-bottom: 0; }\n \n .role-item::before, .job-item::before {\n content: ''; position: absolute; left: -6px; top: 5px;\n width: 10px; height: 10px; border-radius: 50%;\n background: #fff; border: 2px solid var(--accent); z-index: 1;\n }\n .job-item::before { border-color: var(--text-light); } \n\n .role-title, .job-title { font-size: 1rem; font-weight: 600; color: var(--text-main); }\n .role-meta, .job-meta { font-size: 0.85rem; color: var(--text-light); margin-bottom: 6px; display: block; }\n \n ul { list-style: none; padding-left: 0; margin-top: 5px; }\n li { position: relative; padding-left: 15px; margin-bottom: 4px; font-size: 0.95rem; color: var(--text-main); line-height: 1.5; }\n li::before { content: '\u2022'; position: absolute; left: 0; color: var(--accent); font-weight: bold; }\n\n /* Sidebar Elements */\n .sidebar-section { margin-bottom: 40px; }\n .sidebar-title { font-size: 0.85rem; font-weight: 700; color: var(--primary); margin-bottom: 15px; text-transform: uppercase; }\n \n .skill-tags { display: flex; flex-wrap: wrap; gap: 8px; }\n .tag {\n background: #fff; border: 1px solid #cbd5e1; padding: 4px 10px;\n border-radius: 4px; font-size: 0.85rem; font-weight: 500; color: var(--text-main);\n }\n .tag.highlight { background: #eff6ff; border-color: var(--accent); color: var(--accent); }\n\n /* Sidebar Links (Certifications) */\n .info-link { text-decoration: none; display: block; }\n .info-link:hover .info-label { color: var(--accent); }\n\n /* Mini Header Page 2 */\n .header-mini {\n background-color: var(--primary); color: var(--text-white);\n padding: 15px 40px; display: flex; justify-content: space-between;\n align-items: center; font-size: 0.9rem; color: var(--text-dim);\n }\n .header-mini strong { color: #fff; }\n\n @media print {\n body { background: white; padding: 0; gap: 0; }\n .page { width: 100%; height: auto; box-shadow: none; margin: 0; page-break-after: always; }\n .page:last-child { page-break-after: auto; }\n .header, .header-mini { -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n .tag.highlight { -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n .link-highlight { border: 1px solid #e2e8f0; }\n }\n </style>\n</head>\n<body>\n\n <div class=\"page\">\n \n <header class=\"header\">\n <div class=\"header-top\">\n <div class=\"identity-group\">\n <img src=\"https://example.com/your-profile-photo.jpg\" alt=\"Your Name\" class=\"profile-photo\">\n <div class=\"name-block\">\n <h1 class=\"name\">Your Name</h1>\n <h2 class=\"role\">Your Job Title</h2>\n <div class=\"dynamic-tag\">\n Tailored for <strong>{{ $('AI Agent').item.json.output.position }}</strong> at <strong>{{ $('AI Agent').item.json.output.company }}</strong>\n </div>\n </div>\n </div>\n </div>\n <div class=\"header-contact\">\n <a href=\"mailto:your.email@example.com\" class=\"contact-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"/><polyline points=\"22,6 12,13 2,6\"/></svg>\n your.email@example.com\n </a>\n <span class=\"contact-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 16.92z\"/></svg>\n +49 XXX XXXX XXXX\n </a>\n <a href=\"https://www.linkedin.com/in/yourprofile/\" target=\"_blank\" class=\"contact-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"/><rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"/><circle cx=\"4\" cy=\"4\" r=\"2\"/></svg>\n linkedin.com/in/yourprofile\n </a>\n <span class=\"contact-item\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></svg>\n Your City\n </span>\n </div>\n </header>\n\n <div class=\"cv-grid\">\n <div class=\"main-column\">\n <div class=\"section-title\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"></path></svg>\n Professional Experience\n </div>\n\n <div class=\"company-group\">\n <div class=\"company-header\">\n <span class=\"company-name\">Company A</span>\n <span class=\"company-loc\">| Your City</span>\n </div>\n <div class=\"role-item\">\n <div class=\"role-title\">Your Current Role Title</div>\n <span class=\"role-meta\">Apr 2025 \u2013 Present</span>\n <ul>\n <li><strong>AI Rollout:</strong> Integration and Administration of AI Tools (Langdock & OpenAI).</li>\n <li><strong>Automation:</strong> Building n8n , Langdock & Zapier workflows.</li>\n <li><strong>Market Research:</strong> C-Level compensation analysis & working on Executive Search projects.</li>\n </ul>\n </div>\n <div class=\"role-item\">\n <div class=\"role-title\">Market Analyst</div>\n <span class=\"role-meta\">Oct 2021 \u2013 Mar 2025</span>\n <ul>\n <li>Market research for executive search; competitor intelligence.</li>\n <li>Data Analytics & BI project evaluations (Power BI, Excel).</li>\n </ul>\n </div>\n </div>\n\n <div class=\"company-group\" style=\"margin-bottom:0;\">\n <div class=\"company-header\">\n <span class=\"company-name\">Company B</span>\n <span class=\"company-loc\">| Your City</span>\n </div>\n <div class=\"role-item\">\n <div class=\"role-title\">Market Research Project Manager</div>\n <span class=\"role-meta\">Apr 2021 \u2013 Sep 2021</span>\n <ul>\n <li>Management of international market research projects & Key Accounts.</li>\n </ul>\n </div>\n <div class=\"role-item\" style=\"border-left:none; padding-bottom:0;\">\n <div class=\"role-title\">Market Research Associate</div>\n <span class=\"role-meta\">Dec 2019 \u2013 Apr 2021</span>\n <ul>\n <li>Selection & training of interviewers; quality management.</li>\n </ul>\n </div>\n </div>\n </div>\n\n <div class=\"sidebar-column\">\n \n <div class=\"sidebar-section\">\n <div class=\"sidebar-title\">AI, Automation & Data</div>\n <div class=\"skill-tags\">\n <span class=\"tag highlight\">n8n</span>\n <span class=\"tag highlight\">Langdock</span>\n <span class=\"tag highlight\">OpenAI API</span>\n <span class=\"tag highlight\">Generative AI</span>\n <span class=\"tag\">Zapier</span>\n <span class=\"tag\">Google Vertex</span>\n <span class=\"tag\">Prompt Eng.</span>\n <span class=\"tag\">Power BI</span>\n <span class=\"tag\">Excel (Adv.)</span>\n <span class=\"tag\">Project Mgmt</span>\n </div>\n </div>\n\n <div class=\"sidebar-section\">\n <div class=\"sidebar-title\">Certifications</div>\n <div style=\"display:flex; flex-direction:column; gap:12px;\">\n <div>\n <div style=\"font-weight:600; font-size:0.9rem; margin-bottom:4px;\">IBM AI Developer</div>\n <a href=\"https://example.com/your-certificate-1\" target=\"_blank\" class=\"link-highlight\" style=\"font-size:0.8rem;\">\n View Certificate\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>\n </a>\n </div>\n <div>\n <div style=\"font-weight:600; font-size:0.9rem; margin-bottom:4px;\">AI for Business</div>\n <a href=\"https://example.com/your-certificate-2\" target=\"_blank\" class=\"link-highlight\" style=\"font-size:0.8rem;\">\n View Certificate\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>\n </a>\n </div>\n <div>\n <div style=\"font-weight:600; font-size:0.9rem; margin-bottom:4px;\">n8n Creator</div>\n <a href=\"https://n8n.io/creators/yourprofile/\" target=\"_blank\" class=\"link-highlight\" style=\"font-size:0.8rem;\">\n View Profile\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>\n </a>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n\n <div class=\"page\">\n <div class=\"header-mini\">\n <span><strong>Your Name</strong> - CV Continued</span>\n <span>Page 2 / 2</span>\n </div>\n\n <div class=\"cv-grid\">\n <div class=\"main-column\">\n \n <div class=\"section-title\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 20h9\"></path><path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"></path></svg>\n Previous Roles\n </div>\n\n <div class=\"job-item\">\n <div class=\"job-title\">Research Assistant</div>\n <div class=\"company-name\" style=\"font-size:1rem;\">Company</div>\n <span class=\"job-meta\">Jun 2018 \u2013 Mar 2019</span>\n <ul><li>Literature research, data processing & teaching support.</li></ul>\n </div>\n\n <div class=\"job-item\">\n <div class=\"job-title\">Housing Policy Intern</div>\n <div class=\"company-name\" style=\"font-size:1rem;\">Company</div>\n <span class=\"job-meta\">Aug 2017 \u2013 Sep 2017</span>\n </div>\n\n <div class=\"job-item\">\n <div class=\"job-title\">Management Assistant</div>\n <div class=\"company-name\" style=\"font-size:1rem;\">Company</div>\n <span class=\"job-meta\">May 2017 \u2013 Aug 2017</span>\n </div>\n\n <div class=\"job-item\">\n <div class=\"job-title\">Program Coordinator & Trainer</div>\n <div class=\"company-name\" style=\"font-size:1rem;\">Company</div>\n <span class=\"job-meta\">2013 \u2013 2015</span>\n <ul><li>Disaster Management & Team Lead (20 FTEs).</li></ul>\n </div>\n\n <div class=\"section-title\" style=\"margin-top:40px;\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line><polyline points=\"10 9 9 9 8 9\"></polyline></svg>\n Publications\n </div>\n <div style=\"font-size:0.9rem; display:flex; flex-direction:column; gap:12px;\">\n <div>\n <a href=\"https://example.com/your-publication-1\" target=\"_blank\" class=\"link-highlight\">\n Publication Title 1\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>\n </a>\n </div>\n <div>\n <a href=\"https://example.com/your-publication-2\" target=\"_blank\" class=\"link-highlight\">\n Publication Title 2\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>\n </a>\n </div>\n <div>\n <a href=\"https://example.com/your-publication-3\" target=\"_blank\" class=\"link-highlight\">\n Publication Title 3\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>\n </a>\n </div>\n <div>\n <a href=\"https://example.com/your-publication-4\" target=\"_blank\" class=\"link-highlight\">\n Publication Title 4\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>\n </a>\n <div style=\"font-size:0.85rem; color:var(--text-light); margin-top:4px; padding-left:4px;\">\n <em>Publication Subtitle.</em> (2020)\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"sidebar-column\">\n \n <div class=\"sidebar-section\">\n <div class=\"sidebar-title\">Education</div>\n <div style=\"margin-bottom:15px;\">\n <div style=\"font-weight:600;\">Your Degree (M.Sc.)</div>\n <div style=\"font-size:0.85rem; color:#64748b;\">Your University</div>\n <div style=\"font-size:0.85rem; color:#94a3b8;\">2017 \u2013 2019</div>\n </div>\n <div>\n <div style=\"font-weight:600;\">Your Degree (B.A.)</div>\n <div style=\"font-size:0.85rem; color:#64748b;\">Your University</div>\n <div style=\"font-size:0.85rem; color:#94a3b8;\">2014</div>\n </div>\n </div>\n\n <div class=\"sidebar-section\">\n <div class=\"sidebar-title\">Languages</div>\n <div style=\"display:flex; flex-direction:column; gap:10px;\">\n <div>\n <div style=\"font-weight:600; font-size:0.9rem;\">German</div>\n <div style=\"font-size:0.85rem; color:#64748b;\">Full Professional</div>\n </div>\n <div>\n <div style=\"font-weight:600; font-size:0.9rem;\">English</div>\n <div style=\"font-size:0.85rem; color:#64748b;\">Professional Working</div>\n </div>\n <div>\n <div style=\"font-weight:600; font-size:0.9rem;\">Arabic</div>\n <div style=\"font-size:0.85rem; color:#64748b;\">Native</div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n\n</body>\n</html>",
"output_format": "file"
},
"typeVersion": 1
},
{
"id": "421d58f8-3993-4929-89fb-12f7a5b7d035",
"name": "Upload customized CV",
"type": "n8n-nodes-base.googleDrive",
"position": [
1888,
864
],
"parameters": {
"name": "=YourName_CV_for_{{ $('Document job results in Google sheet').item.json.company}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"cachedResultUrl": "https://drive.google.com/drive/folders/YOUR_GOOGLE_DRIVE_FOLDER_ID",
"cachedResultName": "Job_applications"
}
},
"typeVersion": 3
},
{
"id": "7cd4cf9b-4382-48e8-8d13-afc09a0d0c8c",
"name": "Move CV to attachments folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
2112,
864
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Upload customized CV').item.json.id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Create folder for attachments').item.json.id }}"
},
"operation": "move"
},
"typeVersion": 3
},
{
"id": "9c78ad96-06de-40b6-a0c8-73baba33e951",
"name": "Document link to attachments folder",
"type": "n8n-nodes-base.googleSheets",
"position": [
2336,
864
],
"parameters": {
"columns": {
"value": {
"via": "={{ $('Document job results in Google sheet').item.json.via }}",
"type": "={{ $('Document job results in Google sheet').item.json.type }}",
"link1": "={{ $('Document job results in Google sheet').item.json.link1 }}",
"link2": "={{ $('Document job results in Google sheet').item.json.link2 }}",
"link3": "={{ $('Document job results in Google sheet').item.json.link3 }}",
"link4": "={{ $('Document job results in Google sheet').item.json.link4 }}",
"link5": "={{ $('Document job results in Google sheet').item.json.link5 }}",
"link6": "={{ $('Document job results in Google sheet').item.json.link6 }}",
"link7": "={{ $('Document job results in Google sheet').item.json.link7 }}",
"link8": "={{ $('Document job results in Google sheet').item.json.link8 }}",
"link9": "={{ $('Document job results in Google sheet').item.json.link9 }}",
"title": "={{ $('Document job results in Google sheet').item.json.title }}",
"job_id": "={{ $('Document job results in Google sheet').item.json.job_id }}",
"link10": "={{ $('Document job results in Google sheet').item.json.link10 }}",
"salary": "={{ $('Document job results in Google sheet').item.json.salary }}",
"company": "={{ $('Document job results in Google sheet').item.json.company }}",
"location": "={{ $('Document job results in Google sheet').item.json.location }}",
"posted_at": "={{ $('Document job results in Google sheet').item.json.posted_at }}",
"share_link": "={{ $('Document job results in Google sheet').item.json.share_link }}",
"description": "={{ $('Document job results in Google sheet').item.json.description }}",
"link_drive_ornder": "=https://drive.google.com/drive/u/0/folders/{{ $('Create folder for attachments').item.json.id }}",
"application_platform_1": "={{ $('Document job results in Google sheet').item.json.application_platform_1 }}",
"application_platform_2": "={{
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.
telegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is for job seekers who want to automate their entire application pipeline — from discovering job postings to generating personalized cover letters, CVs, and organizing everything in Google Drive and Google Sheets. It is especially useful for professionals applying…
Source: https://n8n.io/workflows/14063/ — 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.
Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.
This template is designed for marketers, content creators, and e-commerce brands who want to automate the creation of professional ad videos at scale. It’s ideal for teams looking to generate consiste
This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.
LinkedIn URL → Scrape → Match → Screen → Decide, all automated
This workflow turns a single Telegram prompt into a fully generated, visually consistent, one-minute video using Veo 3. It’s built for creators, agencies, and brands that want fast, scalable short-for