This workflow corresponds to n8n.io template #17145 — we link there as the canonical source.
This workflow follows the Form Trigger → Gmail 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": "MJAQXQZIbhboIVGG",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Tensai Resume Pro (Template)",
"tags": [],
"nodes": [
{
"id": "c1f79b83-7d82-4e45-b162-d1a2ee9446a0",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-2112,
720
],
"parameters": {
"options": {
"appendAttribution": false,
"respondWithOptions": {
"values": {
"formSubmittedText": "\u2705 Your response has been recorded. Please check your inbox for the generated resume."
}
}
},
"formTitle": "ATS Optimised Resume Modifier",
"formFields": {
"values": [
{
"fieldLabel": "Company Name",
"placeholder": "Enter Company Name",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Job Desription",
"placeholder": "Enter Job Description here",
"requiredField": true
},
{
"fieldType": "checkbox",
"fieldLabel": "Generate cover letter",
"fieldOptions": {
"values": [
{
"option": "Required"
}
]
}
},
{
"fieldType": "dropdown",
"fieldLabel": "ATS Type",
"defaultValue": "Global ATS",
"fieldOptions": {
"values": [
{
"option": "Global ATS \ud83c\udf0d"
},
{
"option": "German ATS \ud83c\udde9\ud83c\uddea"
},
{
"option": "Japanese ATS \ud83c\uddef\ud83c\uddf5"
}
]
},
"requiredField": true
}
]
},
"formDescription": "Tool designed to help users create resumes that are highly compatible with Applicant Tracking Systems (ATS). It automatically analyzes, optimizes, and formats your resume to ensure it passes automated screening"
},
"typeVersion": 2.3
},
{
"id": "03e80df1-1c82-4887-994f-be212fe44176",
"name": "Get PDF Data Only",
"type": "n8n-nodes-base.set",
"position": [
-896,
720
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "ccd95b23-ca0d-4e0a-a2af-c0e4fc9aae4e",
"name": "text",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "c3e96009-3b80-4e4a-bf0e-d769caabe557",
"name": "Get PDF Files/File",
"type": "n8n-nodes-base.googleDrive",
"position": [
-1504,
720
],
"parameters": {
"filter": {
"folderId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"whatToSearch": "files"
},
"options": {
"fields": [
"id",
"name"
]
},
"resource": "fileFolder",
"returnAll": true,
"queryString": "*.pdf"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "5cf1ea83-3db6-4477-8d90-f7eee673b44a",
"name": "Download Retrieval Files/File",
"type": "n8n-nodes-base.googleDrive",
"position": [
-1312,
720
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "text/plain"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "339aa4f3-2793-4d6f-8650-0fd83701edcb",
"name": "Extract Files/File's Data",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-1088,
720
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "b721b70e-ea9d-4133-af02-e670c4022083",
"name": "Data Parser & Cleaner",
"type": "n8n-nodes-base.code",
"position": [
-720,
720
],
"parameters": {
"jsCode": "// Get the text from the previous node\nconst inputText = $input.first()?.json?.text ?? \"\";\n\n// Clean the text:\n// - Replace Windows and Unix line breaks\n// - Collapse multiple spaces into one\n// - Trim leading/trailing whitespace\nconst cleanedText = inputText\n .replace(/\\r?\\n/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n\n// Return the cleaned text\nreturn [\n {\n json: {\n cleanedText,\n },\n },\n];"
},
"typeVersion": 2
},
{
"id": "14fc8009-02b6-4726-9f36-a1750982d657",
"name": "HTML to PDF",
"type": "n8n-nodes-base.httpRequest",
"position": [
64,
720
],
"parameters": {
"url": "https://api.pdf.co/v1/pdf/convert/from/html",
"method": "POST",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "html",
"value": "={{ $json.content.parts[0].text }}"
},
{
"name": "async",
"value": "false"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-api-key",
"value": "YOUR API KEY HERE"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "072003d6-4bc0-4257-b6b9-5e47c98c8ae9",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
2416,
704
],
"parameters": {
"sendTo": "user@example.com",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>Your ATS Resume is Ready</title>\n\n<style>\nbody{\n margin:0;\n padding:30px;\n background:#f3f6fb;\n font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;\n color:#1f2937;\n}\n\n.email{\n max-width:700px;\n margin:auto;\n background:#ffffff;\n border-radius:16px;\n overflow:hidden;\n box-shadow:0 15px 45px rgba(0,0,0,.08);\n}\n\n.header{\n background:linear-gradient(135deg,#2563eb,#1d4ed8);\n padding:35px;\n text-align:center;\n color:#fff;\n}\n\n.header h1{\n margin:0;\n font-size:28px;\n font-weight:700;\n}\n\n.content{\n padding:35px;\n}\n\n.section-title{\n font-size:17px;\n font-weight:700;\n color:#111827;\n margin-bottom:12px;\n}\n\n.company{\n color:#2563eb;\n font-weight:700;\n}\n\n.card{\n background:#f8fafc;\n border:1px solid #e5e7eb;\n border-radius:12px;\n padding:20px;\n margin-top:18px;\n}\n\n.download-btn{\n display:inline-block;\n margin-top:18px;\n padding:14px 28px;\n background:#2563eb;\n color:#ffffff !important;\n text-decoration:none;\n border-radius:10px;\n font-weight:600;\n font-size:15px;\n}\n\n.download-btn:hover{\n background:#1d4ed8;\n}\n\n.cover-letter{\n margin-top:15px;\n background:#fafafa;\n border-left:5px solid #2563eb;\n border:1px solid #e5e7eb;\n border-radius:10px;\n padding:18px;\n white-space:pre-wrap;\n line-height:1.75;\n font-size:14px;\n}\n\n.warning{\n margin-top:30px;\n background:#fff7ed;\n border:1px solid #fed7aa;\n border-radius:10px;\n padding:18px;\n color:#92400e;\n font-size:14px;\n}\n\n.divider{\n height:1px;\n background:#e5e7eb;\n margin:30px 0;\n}\n\n.footer{\n margin-top:35px;\n background:#f9fafb;\n text-align:center;\n padding:25px;\n font-size:13px;\n color:#6b7280;\n}\n\n.footer a{\n color:#2563eb;\n text-decoration:none;\n font-weight:600;\n}\n\n.footer a:hover{\n text-decoration:underline;\n}\n</style>\n\n</head>\n\n<body>\n\n<div class=\"email\">\n\n<div class=\"header\">\n<h1>Your ATS Resume is Ready!</h1>\n</div>\n\n<div class=\"content\">\n\n<p>Hello,</p>\n\n<p>\nYour resume has been successfully optimized for\n<strong class=\"company\">\n{{ $('On form submission').item.json['Company Name'] }}\n</strong>.\n</p>\n\n<p>\nYour ATS-ready resume is now available for download.\n</p>\n\n<div class=\"card\">\n\n<div class=\"section-title\">\n\ud83d\udcc4 Optimized Resume\n</div>\n\n<p>\nClick the button below to download your optimized resume.\n</p>\n\n<a class=\"download-btn\"\nhref=\"{{ $('HTML to PDF').first().json.url }}\"\ntarget=\"_blank\">\n\nDownload Resume\n\n</a>\n\n</div>\n\n<div class=\"divider\"></div>\n\n<div class=\"section-title\">\nCover Letter\n</div>\n\n<div class=\"cover-letter\">\n{{ $json.content.parts[0].text }}\n</div>\n\n<div class=\"warning\">\n\n<strong>Important</strong><br><br>\n\n\u2022 Your download link will expire in <strong>30 minutes</strong>.<br>\n\n\u2022 AI-generated documents should always be reviewed before submitting them to employers.<br>\n\n\u2022 Please verify names, dates, contact information, and formatting before applying.\n\n</div>\n\n</div>\n\n<div class=\"footer\">\n\nGenerated with \u2764\ufe0f using <strong>Tensai Resume Pro</strong><br><br>\n\n<a href=\"https://n8n.io/creators/hellopaul/\" target=\"_blank\">\nn8n.io/creators/hellopaul\n</a>\n\n</div>\n\n</div>\n\n</body>\n</html>",
"options": {
"appendAttribution": false
},
"subject": "=ATS optimised Resume for {{ $('On form submission').item.json[\"Company Name\"] }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "150e26f0-6829-439d-84ec-06829a6eb9de",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
2176,
704
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3.2,
"alwaysOutputData": true
},
{
"id": "30a28f24-1ec7-4d60-bbf7-8f1e08607ac4",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
-1520,
160
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2f49e5bc-ef73-43a4-b8b2-824cccb9d915",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json[\"Generate cover letter\"][0] }}",
"rightValue": "={{ $json[\"Generate cover letter\"][0] }}"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.3,
"alwaysOutputData": true
},
{
"id": "5f07cbb8-e99d-4ff1-98ee-7e42ec7d6c02",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
352
],
"parameters": {
"color": 3,
"width": 368,
"height": 528,
"content": "## File Input\n**Fetches uploaded PDF(s) from the form submission for further processing.**\n**Converts uploaded PDF(s) into readable text data.**\n\n**Make Insure to create a Folder with resume as .pdf in google drive and update in the respective fields.** "
},
"typeVersion": 1
},
{
"id": "3747d864-706f-4693-9ab5-e85c3c650e7f",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
352
],
"parameters": {
"color": 7,
"width": 560,
"height": 528,
"content": "## Text Extractor \n**Cleans and extracts plain text content from uploaded resumes or job descriptions.**\n\n## Data Filter\n**Keeps only resume text for ATS optimization and removes unwanted data.**\n\n## Data Cleaner\n**Polishes extracted text for clear, structured AI input.**"
},
"typeVersion": 1
},
{
"id": "cb9433fd-b13d-4d89-a760-a84cf2175dd2",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-416,
416
],
"parameters": {
"color": 3,
"width": 608,
"height": 496,
"content": "## AI Resume Optimizer\n**Enhances the resume for ATS compliance and keyword relevance.**\n\n## PDF Convertor\n**Converts the AI Agents output to .pdf format**\n\nInsert the Gemini API Key in the Agent credential node.\nInsert the pdf.co API key in the value parameter of header section.\n"
},
"typeVersion": 1
},
{
"id": "f82951a7-a21c-4e6c-9163-7314d7221537",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
32
],
"parameters": {
"color": 7,
"width": 368,
"height": 288,
"content": "## Logic Switch\n**Checks which inputs are available and routes workflow accordingly.**"
},
"typeVersion": 1
},
{
"id": "c45b7b18-3d1f-410e-9f19-113883e7915e",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-112
],
"parameters": {
"color": 3,
"width": 384,
"height": 448,
"content": "## AI Cover Letter Writer\n**Creates a personalized, ATS-friendly cover letter.**\n\n**Insert the Gemini API key in Agent credential node.**"
},
"typeVersion": 1
},
{
"id": "199b00ae-4f6f-481d-b904-0b7d29c557f6",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2304,
496
],
"parameters": {
"color": 3,
"width": 352,
"height": 384,
"content": "## Email Sender\n**Delivers the generated documents to the user\u2019s email inbox.** \n\n**Connect Your Gmail credentials with n8n and set the email receiver address in the field**\n"
},
"typeVersion": 1
},
{
"id": "9156f278-329b-4eb2-a2df-0883ab1d2f55",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2176,
512
],
"parameters": {
"color": 7,
"width": 304,
"height": 384,
"content": "## Trigger Node \n**Starts the workflow when a user submits the form with Name of the company, Job Description and optional cover letter.**"
},
"typeVersion": 1
},
{
"id": "b81afba7-5856-4fe9-8379-dca289edc42f",
"name": "Create a database page",
"type": "n8n-nodes-base.notion",
"position": [
1712,
720
],
"parameters": {
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"propertiesUi": {
"propertyValues": [
{},
{},
{}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "fa6f7e36-f30f-4425-83af-43f9e1606323",
"name": "Get many database pages",
"type": "n8n-nodes-base.notion",
"position": [
976,
720
],
"parameters": {
"simple": false,
"options": {},
"resource": "databasePage",
"operation": "getAll",
"returnAll": true,
"databaseId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "e2d3bfe3-00e3-4890-93cd-610b2cf8baa6",
"name": "Generate Serial Number",
"type": "n8n-nodes-base.set",
"position": [
1488,
720
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "426b148b-d85c-46a6-bf13-e3d4862c2203",
"name": "property_sl_no",
"type": "number",
"value": "={{ $node[\"Code in JavaScript\"].json[\"total_count\"] + 1 }}\n"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d7b0bec1-7218-4847-abdc-46cc764b9de2",
"name": "Upload file",
"type": "n8n-nodes-base.googleDrive",
"position": [
736,
720
],
"parameters": {
"name": "={{ $json.name }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "0268415c-b218-4352-9e81-d88af12c3f63",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
704,
544
],
"parameters": {
"color": 3,
"width": 1168,
"height": 352,
"content": "## Optional\nConnect your Notion Credential to log all modified resumes into a database.\n \n"
},
"typeVersion": 1
},
{
"id": "a95753f0-a03d-48c7-a279-91ab60d27698",
"name": "Code in JavaScript",
"type": "n8n-nodes-base.code",
"position": [
1216,
720
],
"parameters": {
"jsCode": "const count = $items(\"Get many database pages\").length;\nreturn [{ json: { total_count: count, next_sl_no: count + 1 } }];\n\n"
},
"typeVersion": 2
},
{
"id": "9aa96948-ba72-44eb-9e84-3be4aa64ae94",
"name": "Global ATS AI",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
-272,
720
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"options": {},
"messages": {
"values": [
{
"content": "=You are an ATS Resume Optimizer AI Agent. \nTake resume data {{ $json.cleanedText }} and job description {{ $('On form submission').item.json['Job Desription'] }} as input. \n\nAnalyze the job description and optimize the resume to increase its ATS compatibility by emphasizing relevant skills, keywords, and experiences. \n\nReturn the optimized resume as **pure HTML**, not inside any Markdown code block. \nDo not include ```html or ``` anywhere in the output.\n\nFormatting requirements:\n- The candidate\u2019s **name** should appear at the top, bold and large.\n- **Email, phone number, and location** should be centered directly below the name.\n- Use clear headings for *Skills*, *Experience*, *Education*, etc.\n- Keep the entire resume strictly **one page**.\n- Do **not** include a summary section.\n- Use clean spacing, professional fonts, and simple HTML (no CSS frameworks).\n- Output must contain **only raw HTML code** \u2014 no Markdown, no explanations, no extra text.\n"
}
]
},
"builtInTools": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "fb367c3d-4f44-4ed4-8003-c50e73a0f0cb",
"name": "German ATS AI",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
-256,
1200
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"options": {},
"messages": {
"values": [
{
"content": "=You are a German Resume (Lebenslauf) AI Agent.\n\nTake resume data {{ $json.cleanedText }} and job description {{ $('On form submission').item.json['Job Desription'] }} as input.\n\nAnalyze the job description and convert the resume into a professional German-style Lebenslauf while preserving factual accuracy. Optimize the resume to align with German hiring expectations and ATS systems.\n\nFollow German hiring conventions:\n- Use a structured reverse chronological format.\n- Emphasize measurable achievements and relevant experience.\n- Keep descriptions concise and professional.\n- Include sections for Personal Information, Professional Experience, Education, Skills, Certifications, Languages, and Technical Skills.\n- Do not include a career summary or objective unless explicitly present in the original resume.\n- Do not invent information.\n- Keep the resume concise and limited to one page whenever possible.\n- Use professional European resume formatting.\n\nReturn the resume as **pure HTML**, not inside any Markdown code block.\nDo not include ```html or ``` anywhere in the output.\n\nFormatting requirements:\n- Candidate name should appear prominently at the top.\n- Email, phone number, and location should appear directly below the name.\n- Use clear headings for each section.\n- Maintain professional spacing and alignment.\n- Use only simple HTML.\n- Do not use CSS frameworks.\n- Output must contain only raw HTML code with no explanations or Markdown."
}
]
},
"builtInTools": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "8a048ff2-97b4-43fc-90b6-a156bc11bcc4",
"name": "Japanese Rirekisho ATS",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
-240,
1632
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"options": {},
"messages": {
"values": [
{
"content": "=You are a Japanese Resume (Rirekisho) AI Agent.\n\nTake resume data {{ $json.cleanedText }} and job description {{ $('On form submission').item.json['Job Desription'] }} as input.\n\nAnalyze the job description and convert the resume into a professional Japanese-style Rirekisho while preserving factual accuracy. Adapt the candidate's experience, skills, and achievements to maximize relevance for the target position.\n\nFollow Japanese hiring conventions:\n- Use a clean and structured Rirekisho layout.\n- Prioritize chronological work history.\n- Keep descriptions concise and factual.\n- Avoid exaggerated claims or marketing language.\n- Use professional, modest wording suitable for Japanese employers.\n- Include sections for Personal Information, Education, Employment History, Skills, Certifications, Languages, and Qualifications.\n- Do not invent information.\n- If information required by a traditional Rirekisho is unavailable, omit the section instead of fabricating data.\n- Keep the document strictly one page.\n\nReturn the resume as **pure HTML**, not inside any Markdown code block.\nDo not include ```html or ``` anywhere in the output.\n\nFormatting requirements:\n- Candidate name should appear prominently at the top.\n- Email, phone number, and location should appear below the name.\n- Use clear headings.\n- Maintain generous spacing and excellent readability.\n- Use only simple HTML.\n- Do not use CSS frameworks.\n- Output must contain only raw HTML code with no explanations or Markdown."
}
]
},
"builtInTools": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "1ee8873e-ba5b-4cd6-8b50-07c8394d47d0",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-416,
976
],
"parameters": {
"color": 3,
"width": 608,
"height": 400,
"content": "## German Resume Generator\nConverts the resume into a professional German **Lebenslauf**\n\n### User Action Required\nInput Gemini API credential inside the node"
},
"typeVersion": 1
},
{
"id": "176413b7-b7c8-4db4-ac7f-06fb2fde5ba5",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-416,
1408
],
"parameters": {
"color": 3,
"width": 608,
"height": 400,
"content": "## Japanese Resume Generator\nConverts the resume into a traditional Japanese **Rirekisho** \n\n### User Action Required\nInput Gemini API credential inside the node"
},
"typeVersion": 1
},
{
"id": "15b5a67b-9430-4f76-a9bd-81a4f5519687",
"name": "Switch1",
"type": "n8n-nodes-base.switch",
"position": [
-544,
704
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "01ae9baf-cbf1-4651-96bc-6f334de21052",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('On form submission').item.json['ATS Type'] }}",
"rightValue": "Global ATS \ud83c\udf0d"
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "251ac08e-add6-49c3-b488-fb36b8f480d3",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('On form submission').item.json['ATS Type'] }}",
"rightValue": "German ATS \ud83c\udde9\ud83c\uddea"
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f97ce078-3d92-46df-a647-cc7b460ff647",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('On form submission').item.json['ATS Type'] }}",
"rightValue": "Japanese ATS \ud83c\uddef\ud83c\uddf5"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "ec344e1e-90d4-41d6-8b7b-72e932a63c54",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3552,
336
],
"parameters": {
"width": 928,
"height": 576,
"content": "# \ud83d\ude80 Tensai Resume Pro\n\nTensai Resume Pro is an AI-powered resume optimization workflow that transforms resumes into **ATS-compliant, recruiter-ready documents** tailored to a specific job description. It supports **Global ATS**, **German ATS**, and **Japanese Rirekisho** resume standards, with an optional AI-generated cover letter localized for the selected region.\n\n## \u2728 Features\n\n- \ud83d\udcc4 Extracts text from uploaded PDF resumes\n- \ud83e\udd16 Optimizes resumes using AI based on the target job description\n- \ud83c\udf0d Supports **Global ATS**, **German ATS**, and **Japanese Rirekisho** resume formats\n- \u2709\ufe0f Generates localized AI cover letters (optional)\n- \ud83d\udcd1 Converts AI-generated HTML into professional PDF resumes\n- \u2601\ufe0f Uploads generated resumes to Google Drive\n- \ud83d\uddc3\ufe0f Logs generated resumes to Notion (optional)\n- \ud83d\udce7 Emails the optimized resume and cover letter directly to the user\n\n## \ud83d\udcdd Workflow Notes\n\n- \ud83d\udd34 **Red sections** contain nodes that require **user configuration**, such as API keys, credentials, or external service setup.\n\n- \u2705 Compatible with both **n8n Cloud** and **Self-Hosted** deployments."
},
"typeVersion": 1
},
{
"id": "92ce3db5-2e61-42de-9ecc-e571f8158411",
"name": "Cover Letter Agent",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
64,
144
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"options": {},
"messages": {
"values": [
{
"content": "=You are an expert international career coach and professional cover letter writer.\n\nJob Description:\n{{ $('On form submission').item.json['Job Desription'] }}\n\nCompany:\n{{ $('On form submission').item.json['Company Name'] }}\n\nThe applicant selected the following resume standard:\n\n{{ $('On form submission').item.json['ATS Type'] }}\n\nGenerate the cover letter according to these rules.\n\n------------------------------------\nIf ATS Type = \"Global ATS \ud83c\udf0d\"\n\n- Write the cover letter in English.\n- Follow international ATS standards.\n- Keep it between 250\u2013350 words.\n- Use a modern business tone.\n- Highlight measurable achievements.\n- Include ATS keywords naturally.\n- Finish with a professional call to action.\n\n------------------------------------\nIf ATS Type = \"German ATS \ud83c\udde9\ud83c\uddea\"\n\n- Write the entire cover letter in German.\n- Follow the traditional German Bewerbung style.\n- Use a formal tone (\"Sehr geehrte Damen und Herren\" if no recruiter is known).\n- Structure the letter according to German business conventions.\n- Emphasize qualifications, reliability and relevant experience.\n- End with a formal German closing such as \"Mit freundlichen Gr\u00fc\u00dfen\".\n\n------------------------------------\nIf ATS Type = \"Japanese ATS \ud83c\uddef\ud83c\uddf5\"\n\n- Write the entire cover letter in Japanese.\n- Follow Japanese Shokumu-keirekisho / Japanese cover letter conventions.\n- Use highly respectful and formal Japanese business language.\n- Maintain humility and professionalism.\n- Focus on contribution to the company rather than self-promotion.\n- End using an appropriate Japanese business closing.\n\n------------------------------------\n\nGeneral Rules\n\n- Never invent experience.\n- Tailor the letter specifically to the job description.\n- Mention the company naturally.\n- Return ONLY the cover letter as plain text.\n- No Markdown.\n- No explanations."
}
]
},
"builtInTools": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "3a8b8292-acb5-4348-9422-8807b698a0af",
"name": "Download as PDF",
"type": "n8n-nodes-base.httpRequest",
"position": [
416,
720
],
"parameters": {
"url": "={{ $json.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "07b5361c-dfce-4c0a-8799-426b83ea930f",
"name": "If user request Cover Letter",
"type": "n8n-nodes-base.if",
"position": [
-1312,
160
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "270a48d0-e4b5-4166-85fe-b415d39db4b9",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json[\"Generate cover letter\"][0] }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "caea55d9-130f-435f-a778-dfb983b48db8",
"nodeGroups": [],
"connections": {
"Merge": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "If user request Cover Letter",
"type": "main",
"index": 0
}
]
]
},
"Switch1": {
"main": [
[
{
"node": "Global ATS AI",
"type": "main",
"index": 0
}
],
[
{
"node": "German ATS AI",
"type": "main",
"index": 0
}
],
[
{
"node": "Japanese Rirekisho ATS",
"type": "main",
"index": 0
}
]
]
},
"HTML to PDF": {
"main": [
[
{
"node": "Download as PDF",
"type": "main",
"index": 0
}
]
]
},
"Upload file": {
"main": [
[
{
"node": "Get many database pages",
"type": "main",
"index": 0
}
]
]
},
"German ATS AI": {
"main": [
[
{
"node": "HTML to PDF",
"type": "main",
"index": 0
}
]
]
},
"Global ATS AI": {
"main": [
[
{
"node": "HTML to PDF",
"type": "main",
"index": 0
}
]
]
},
"Download as PDF": {
"main": [
[
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"Get PDF Data Only": {
"main": [
[
{
"node": "Data Parser & Cleaner",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Generate Serial Number",
"type": "main",
"index": 0
}
]
]
},
"Cover Letter Agent": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Get PDF Files/File": {
"main": [
[
{
"node": "Download Retrieval Files/File",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Get PDF Files/File",
"type": "main",
"index": 0
},
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Data Parser & Cleaner": {
"main": [
[
{
"node": "Switch1",
"type": "main",
"index": 0
}
]
]
},
"Create a database page": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Generate Serial Number": {
"main": [
[
{
"node": "Create a database page",
"type": "main",
"index": 0
}
]
]
},
"Japanese Rirekisho ATS": {
"main": [
[
{
"node": "HTML to PDF",
"type": "main",
"index": 0
}
]
]
},
"Get many database pages": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"Extract Files/File's Data": {
"main": [
[
{
"node": "Get PDF Data Only",
"type": "main",
"index": 0
}
]
]
},
"If user request Cover Letter": {
"main": [
[
{
"node": "Cover Letter Agent",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Download Retrieval Files/File": {
"main": [
[
{
"node": "Extract Files/File's Data",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googleDriveOAuth2ApigooglePalmApinotionApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Transform any resume into a professional, ATS-compliant document with AI. Supports Global ATS, German, and Japanese resume formats, generates personalized cover letters, and automates PDF creation and delivery for every job application. Receives an n8n form submission with the…
Source: https://n8n.io/workflows/17145/ — 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.
What it is An automated LinkedIn content system that takes a simple form (idea + optional file), generates LinkedIn posts with OpenAI, stores them in Notion, builds Google Slides carousels, and auto-p
This workflow serves as a complete "AI Receptionist" for mortgage brokers or high-ticket service providers. It automates the messy process of qualifying leads, getting internal approval, and collectin
Understand your customers before you build for them. This workflow, Market Segmentation: Buyer Persona Pain Point Report, automates the grueling process of primary market research. By scraping real-wo
Streamlit Logibot. Uses notion, ollamaChatModel, lmChatOllama, googleDrive. Event-driven trigger; 29 nodes.
This workflow is an AI-powered lighting and look development pipeline designed for VFX production. It transforms a single lighting brief into multiple high-quality cinematic lighting references using