我的工作流
高级
这是一个自动化工作流,包含 27 个节点。主要使用 Set, Code, Html, Wait, Gmail 等节点。 使用 LinkedIn、Google Sheets 和 AI 简历评分与求职信自动化职位搜索
前置要求
- •Google 账号和 Gmail API 凭证
- •Google Drive API 凭证
- •可能需要目标 API 的认证凭证
- •Google Sheets API 凭证
- •Google Gemini API Key
使用的节点 (27)
分类
-
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "SrQYoBJKHtuSzi6B",
"meta": {
"instanceId": "1da5d9ac3e2974ca203c09fc21d9eb832e61e497fa9e11c9fbcaae0e18a9c185",
"templateCredsSetupCompleted": true
},
"name": "我的工作流",
"tags": [],
"nodes": [
{
"id": "9dd871da-bb3b-4ebe-963b-128fcff34099",
"name": "下载文件",
"type": "n8n-nodes-base.googleDrive",
"position": [
208,
0
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": ""
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "AcZcDztmyUtsa3Kc",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "6bdbd596-b061-427a-b97c-e789fe7090a4",
"name": "从文件提取",
"type": "n8n-nodes-base.extractFromFile",
"position": [
416,
0
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "484e0f62-0d1a-4637-8b58-4942d6d0a4e0",
"name": "获取工作表中的行",
"type": "n8n-nodes-base.googleSheets",
"position": [
624,
0
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1m_p1yu6j10cuHK-bImqz86Oraegz5j9ii2u5LJqxg1g/edit#gid=0",
"cachedResultName": "Filter"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1m_p1yu6j10cuHK-bImqz86Oraegz5j9ii2u5LJqxg1g",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1m_p1yu6j10cuHK-bImqz86Oraegz5j9ii2u5LJqxg1g/edit?usp=drivesdk",
"cachedResultName": "Job Search N8N"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "oD5JyqmvqMOPNTeR",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "c4bc1e36-3acb-4637-a867-085a3079eb14",
"name": "LinkedIn 搜索 URL",
"type": "n8n-nodes-base.code",
"position": [
832,
0
],
"parameters": {
"jsCode": "let url = \"https://www.linkedin.com/jobs/search/?f_TPR=r86400\"\n\nconst keyword = $input.first().json.Keyword\nconst location = $input.first().json.Location\nconst experienceLevel = $input.first().json['Experience Level']\nconst remote = $input.first().json.Remote\nconst easyApply = $input.first().json['Easy Apply']\n\nif (keyword != \"\") {\n url += `&keywords=${keyword}`;\n}\n\nif (location != \"\") {\n url += `&location=${location}`;\n}\n\nif (experienceLevel !== \"\") {\n // Transform experience levels to LinkedIn codes\n // Internship -> 1, Entry level -> 2, Associate -> 3\n // Mid-Senior level -> 4, Director -> 5, Executive -> 6\n const transformedExperiences = experienceLevel\n .split(\",\")\n .map((exp) => {\n switch (exp.trim()) {\n case \"Internship\": return \"1\";\n case \"Entry level\": return \"2\";\n case \"New Grad\": return \"3\";\n default: return \"\";\n }\n })\n .filter(Boolean);\n url += `&f_E=${transformedExperiences.join(\",\")}`;\n}\n\nif (remote.length != \"\") {\n // Transform remote options to LinkedIn codes\n // On-Site -> 1, Remote -> 2, Hybrid -> 3\n const transformedRemote = remote\n .split(\",\")\n .map((e) => {\n switch (e.trim()) {\n case \"Remote\": return \"2\";\n case \"Hybrid\": return \"3\";\n case \"On-Site\": return \"1\";\n default: return \"\";\n }\n })\n .filter(Boolean);\n url += `&f_WT=${transformedRemote.join(\",\")}`;\n}\n\nif (easyApply != \"\") {\n url += \"&f_EA=true\";\n}\n\nreturn {url}\n"
},
"typeVersion": 2
},
{
"id": "dc8f887e-81e6-44bf-a356-13f61d6a0388",
"name": "从 LinkedIn 获取职位",
"type": "n8n-nodes-base.httpRequest",
"position": [
1040,
0
],
"parameters": {
"url": "={{ $json.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "c9e59fa5-49df-47bb-89c0-87ab7845fd2f",
"name": "HTML",
"type": "n8n-nodes-base.html",
"position": [
1248,
0
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "jobs",
"attribute": "href",
"cssSelector": "ul.jobs-search__results-list li div a[class*=\"base-card\"]",
"returnArray": true,
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "c2aec608-8302-4bcd-a00b-2e3d293b89bf",
"name": "拆分输出",
"type": "n8n-nodes-base.splitOut",
"position": [
1456,
0
],
"parameters": {
"options": {},
"fieldToSplitOut": "jobs"
},
"typeVersion": 1
},
{
"id": "00612b80-a789-4615-9942-e62584e22fdf",
"name": "遍历项目",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1568,
816
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "293a9da0-abfd-491c-9ee6-926fb6de30f1",
"name": "等待",
"type": "n8n-nodes-base.wait",
"position": [
-32,
208
],
"webhookId": "12409f66-fbe7-48bd-b9d7-68449f197264",
"parameters": {
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "2f0cb178-8831-458f-9c8c-f9fbbc52abbc",
"name": "HTTP请求",
"type": "n8n-nodes-base.httpRequest",
"position": [
176,
208
],
"parameters": {
"url": "={{ $json.jobs }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "33d05837-7b57-4f7d-9aa1-d79fe3e71753",
"name": "HTML1",
"type": "n8n-nodes-base.html",
"position": [
384,
208
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "Title",
"cssSelector": "div h1"
},
{
"key": "Company",
"cssSelector": "div span a"
},
{
"key": "Location",
"cssSelector": "div span[class*='topcard__flavor topcard__flavor--bullet']"
},
{
"key": "Description",
"cssSelector": "div.description__text.description__text--rich"
},
{
"key": "Job ID",
"attribute": "data-semaphore-content-urn",
"cssSelector": "a[data-item-type='semaphore']",
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "43feb566-7427-455c-9109-2a6ba56764f7",
"name": "编辑字段",
"type": "n8n-nodes-base.set",
"position": [
592,
208
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "240418dc-3349-48d5-ba59-3aa590d71950",
"name": "Description",
"type": "string",
"value": "={{ $json.Description.replaceAll(/\\s+/g, \" \")}}"
},
{
"id": "7b24938f-8b47-488d-9f65-54d036dcffd5",
"name": "Job ID",
"type": "string",
"value": "={{ $json['Job ID'].split(\":\").last() }}"
},
{
"id": "d6addada-9e01-464f-a768-c19f6224c491",
"name": "Apply Link",
"type": "string",
"value": "={{ \"https://www.linkedin.com/jobs/view/\"+ $json['Job ID'].split(\":\").last() }}"
},
{
"id": "21c89d3a-c8b6-44eb-9719-9ae5716a7c76",
"name": "Title",
"type": "string",
"value": "={{ $json.Title }}"
},
{
"id": "da713845-9a81-486e-bff2-1613105e424d",
"name": "Company",
"type": "string",
"value": "={{ $json.Company }}"
},
{
"id": "1a9a31dd-8d51-4f35-b6b6-ca8a348de5d7",
"name": "Location",
"type": "string",
"value": "={{ $json.Location }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "8d9894bd-66fe-4069-aff0-84d351b8b5b4",
"name": "AI 代理",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
32,
464
],
"parameters": {
"text": "=You are a precise job-matching assistant.\n\nReturn ONE JSON object wrapped in ```json fences, followed by the line END_OF_JSON.\nNo extra prose. No Markdown inside the JSON. No comments.\n\nINPUTS\njob_description: {{ $json.Description }}\nmy_resume: {{ $('Extract from File').item.json.text }}\n\nTASKS\n1) Parse job_description → job_analysis with keys:\n title (string), company (string), must_have_skills (string[]), nice_to_have_skills (string[]),\n responsibilities (string[]), years_of_experience (string), education_certifications (string),\n location_constraints (string), domain_industry_focus (string), tech_stack (string[]), measurable_kpis (string[])\n\n2) Parse my_resume → resume_analysis:\n core_skills (string[]),\n tools_tech { programming_languages[], frontend_technologies[], backend_technologies[], databases_devops[] },\n years_of_experience_key_areas (object of short strings),\n accomplishments_with_metrics (string[]),\n education_certs (string[]), domains (string[]), roles_titles (string[]),\n leadership_collaboration (string[]), location_work_auth (string)\n\n3) Scoring (integer 0–100):\n - Skills/Tools overlap: 40\n - Relevant experience & seniority: 25\n - Responsibilities alignment: 15\n - Education/Certs fit: 10\n - Domain/industry fit: 5\n - Logistics (location/work auth/availability): 5\n Allow partial credit; deduct up to 10 via red_flags. Clamp to [0,100], integer.\n\n4) Explain the score:\n For each bucket, provide 1–3 concise evidence bullets. Cite \"JD\" or \"Resume\" and include short quoted fragments (escape quotes).\n\n5) Gaps & Suggestions:\n List missing/weak requirements with 1–2 concrete upskilling steps per gap.\n\n6) Cover letter:\n 150–220 words (2–4 short paragraphs), tailored to the role/company.\n Concrete impacts; no greeting/signature. JSON-safe: escape all \" as \\\", use \\n for newlines.\n\nSTRICT CONTENT RULES (to prevent invalid JSON)\n- Do NOT paste raw paragraphs, markdown (**bold**, lists), headings, or multi-line blocks into any array fields.\n- Every array element must be a short phrase (≤ 140 characters), single line, no line breaks, no asterisks, no bullets.\n- If a JD section is long, summarize into short phrases before placing into arrays.\n- Do NOT include unrelated job text inside arrays or objects. Keep each value semantically atomic.\n- Never invent company/title; use \"\" if unknown.\n- No trailing commas anywhere.\n\nSTRICT OUTPUT RULES\n- Output exactly the following schema (keys and types). No extra keys.\n\nSCHEMA\n```json\n{\n \"job_analysis\": {\n \"title\": \"\",\n \"company\": \"\",\n \"must_have_skills\": [],\n \"nice_to_have_skills\": [],\n \"responsibilities\": [],\n \"years_of_experience\": \"\",\n \"education_certifications\": \"\",\n \"location_constraints\": \"\",\n \"domain_industry_focus\": \"\",\n \"tech_stack\": [],\n \"measurable_kpis\": []\n },\n \"resume_analysis\": {\n \"core_skills\": [],\n \"tools_tech\": {\n \"programming_languages\": [],\n \"frontend_technologies\": [],\n \"backend_technologies\": [],\n \"databases_devops\": []\n },\n \"years_of_experience_key_areas\": {},\n \"accomplishments_with_metrics\": [],\n \"education_certs\": [],\n \"domains\": [],\n \"roles_titles\": [],\n \"leadership_collaboration\": [],\n \"location_work_auth\": \"\"\n },\n \"match_score\": 0,\n \"score_explanation\": [\n { \"category\": \"Skills/Tools overlap (40 points)\", \"score\": 0, \"evidence\": [] },\n { \"category\": \"Relevant experience depth & seniority (25 points)\", \"score\": 0, \"evidence\": [] },\n { \"category\": \"Responsibilities alignment (15 points)\", \"score\": 0, \"evidence\": [] },\n { \"category\": \"Education/Certs fit (10 points)\", \"score\": 0, \"evidence\": [] },\n { \"category\": \"Domain/industry fit (5 points)\", \"score\": 0, \"evidence\": [] },\n { \"category\": \"Logistics (location, work auth, availability) (5 points)\", \"score\": 0, \"evidence\": [] }\n ],\n \"red_flags\": [],\n \"gaps_and_suggestions\": [\n { \"gap\": \"\", \"suggestion\": \"\" }\n ],\n \"cover_letter\": \"\"\n}\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "cc137b01-1f25-4ba5-955d-6fb7f947bcd6",
"name": "Google Gemini 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
32,
640
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "g6RyTSgLpUyQXe6T",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "4ef714a7-1e5d-4c45-b1fd-d961592ec459",
"name": "编辑字段1",
"type": "n8n-nodes-base.set",
"position": [
432,
656
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{ (() => {\n // 0) Read model output from AI Agent node\n const raw = String(($('AI Agent').item.json.output ?? ''));\n\n // 1) Strip code fences\n let s = raw\n .replace(/`{2,3}(?:json)?\\s*/gi, '')\n .replace(/\\s*`{3}\\s*$/gi, '');\n\n // 1b) Normalize curly quotes (Gemini sometimes emits them)\n s = s.replace(/[\\u201C\\u201D]/g, '\"').replace(/\\u2019/g, \"'\");\n\n // 2) Cut at END_OF_JSON if present\n const endIdx = s.indexOf('END_OF_JSON');\n if (endIdx !== -1) s = s.slice(0, endIdx);\n\n // 3) Extract first complete { ... } by brace counting\n const start = s.indexOf('{');\n if (start < 0) return {};\n let depth = 0, inStr = false, esc = false, end = -1;\n for (let i = start; i < s.length; i++) {\n const ch = s[i];\n if (inStr) {\n if (esc) { esc = false; }\n else if (ch === '\\\\') { esc = true; }\n else if (ch === '\"') { inStr = false; }\n } else {\n if (ch === '\"') inStr = true;\n else if (ch === '{') depth++;\n else if (ch === '}') { depth--; if (depth === 0) { end = i + 1; break; } }\n }\n }\n if (end < 0) return {};\n\n const cleaned = s.slice(start, end).trim();\n\n try {\n return JSON.parse(cleaned); // JSON mode expects an OBJECT\n } catch (e) {\n // As a last resort, return an empty object to keep the run alive\n return {};\n }\n})() }}\n"
},
"typeVersion": 3.4
},
{
"id": "b4795633-1f39-4d56-b19d-d2837d987d89",
"name": "AI 代理1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
736,
656
],
"parameters": {
"text": "You are a ruthless resume editor. Compare the inputs and output ONLY crisp, point-wise changes to improve job fit.\n\nInputs:\n- job_description: {{ $json.Description }}\n- my_resume: {{ $('Extract from File').item.json.text }}\n\nInstructions:\n- Output a numbered list; highest-impact first.\n- One line per point; <= 14 words.\n- Start each line with a tag: [ADD], [REMOVE], [REWRITE], [ORDER], [QUANTIFY], [KEYWORDS], [FORMAT], [FOCUS].\n- Base every point on gaps vs. the job_description; do not invent experience.\n- Prefer concrete actions: skills to add, bullets to rewrite, sections to reorder/remove.\n- Include one line: 'Missing keywords: term1, term2, ...' (only if any).\n- No intros, explanations, code fences, or extra text - points only.\n\nOutput: points only, exactly as specified above.",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "5e3518b8-e203-45ba-9d02-356edf668c0c",
"name": "Google Gemini 聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
736,
816
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "g6RyTSgLpUyQXe6T",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "ca1e037d-bb59-455c-8738-f1e1ce89f2b4",
"name": "在 sheet1 中追加或更新行",
"type": "n8n-nodes-base.googleSheets",
"position": [
1072,
656
],
"parameters": {
"columns": {
"value": {
"Link": "={{ $('Edit Fields').item.json['Apply Link'] }}",
"Score": "={{ $('Edit Fields1').item.json.match_score }}",
"Title": "={{ $('Edit Fields').item.json.Title }}",
"Skills": "={{ $('Edit Fields1').item.json.resume_analysis.core_skills }}",
"Locaton": "={{ $('Edit Fields').item.json.Location }}",
"Company ": "={{ $('Edit Fields').item.json.Company }}",
"Cover Letter": "={{ $('Edit Fields1').item.json.cover_letter }}",
"Improvements": "={{ $json.output }}"
},
"schema": [
{
"id": "Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company ",
"type": "string",
"display": true,
"required": false,
"displayName": "Company ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Locaton",
"type": "string",
"display": true,
"required": false,
"displayName": "Locaton",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score",
"type": "string",
"display": true,
"required": false,
"displayName": "Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Cover Letter",
"type": "string",
"display": true,
"required": false,
"displayName": "Cover Letter",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Skills",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Improvements",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Improvements",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Link"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 11035642,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1m_p1yu6j10cuHK-bImqz86Oraegz5j9ii2u5LJqxg1g/edit#gid=11035642",
"cachedResultName": "Result"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1m_p1yu6j10cuHK-bImqz86Oraegz5j9ii2u5LJqxg1g",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1m_p1yu6j10cuHK-bImqz86Oraegz5j9ii2u5LJqxg1g/edit?usp=drivesdk",
"cachedResultName": "Job Search N8N"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "oD5JyqmvqMOPNTeR",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "d2b5241e-c511-42c9-8301-e75c1b5c22c9",
"name": "发送消息",
"type": "n8n-nodes-base.gmail",
"position": [
1984,
800
],
"webhookId": "f0d6158b-a72b-4e84-8f3e-0e8ecfaeda72",
"parameters": {
"sendTo": "<your e-mail address>",
"message": "Hey, your job search results with resume changes are ready in your sheet for today",
"options": {},
"subject": "Job search results",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "Zd1C7CJsZcTcApAG",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "9100d62e-1108-4ba2-b6dd-91576b1c015b",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
112,
-240
],
"parameters": {
"height": 192,
"content": "## 添加 Google Cloud 凭据"
},
"typeVersion": 1
},
{
"id": "ff1c1aad-5ab0-49c3-805a-092e1e371985",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-224
],
"parameters": {
"height": 176,
"content": "## 添加 Google Cloud 凭据"
},
"typeVersion": 1
},
{
"id": "9d6df7e1-3a16-483b-add7-9d0e2fc95498",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1904,
592
],
"parameters": {
"content": "## 添加 Google Cloud 凭据"
},
"typeVersion": 1
},
{
"id": "986e4584-7f86-4a56-97d4-f6a09835808e",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
448
],
"parameters": {
"height": 176,
"content": "## 添加 Google Cloud 凭据"
},
"typeVersion": 1
},
{
"id": "b4e4313d-e9e1-4e81-a613-de7de233eec1",
"name": "便签4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
784
],
"parameters": {
"height": 176,
"content": "## 添加 Gemini 免费层级 API 密钥"
},
"typeVersion": 1
},
{
"id": "65c1327d-e61b-47ee-bd55-8ddf43c58cd8",
"name": "便签5",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
464
],
"parameters": {
"height": 176,
"content": "## 添加 Gemini 免费层级 API 密钥"
},
"typeVersion": 1
},
{
"id": "94653150-71a5-411b-bed3-a0771b9fef44",
"name": "由 Github 模型提供支持",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-48,
0
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 5
}
]
}
},
"typeVersion": 1.2
},
{
"id": "c28849bf-1393-41d1-88e7-aa2d1c8c3c8c",
"name": "### 需要帮助?",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-624
],
"parameters": {
"height": 320,
"content": "# 终极职位搜索工作流 - @jugaldb"
},
"typeVersion": 1
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "25e5c7d3-60ea-47bf-b4bc-cb62a22a3ad7",
"connections": {
"HTML": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"HTML1": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Edit Fields1",
"type": "main",
"index": 0
}
]
]
},
"AI Agent1": {
"main": [
[
{
"node": "Append or update row in sheet1",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields1": {
"main": [
[
{
"node": "AI Agent1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "HTML1",
"type": "main",
"index": 0
}
]
]
},
"Download file": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Download file",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Get row(s) in sheet",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "LinkedIn Search URL",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Search URL": {
"main": [
[
{
"node": "Fetch jobs from LinkedIn",
"type": "main",
"index": 0
}
]
]
},
"Fetch jobs from LinkedIn": {
"main": [
[
{
"node": "HTML",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Append or update row in sheet1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
使用 Mistral AI、LinkedIn 和 Google Sheets 自动化职位搜索与简历定制
使用 Mistral AI、LinkedIn 和 Google Sheets 自动化职位搜索与简历定制
Set
Code
Html
+18
46 节点Jordan Hoyle
个人效率
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他
LinkedIn职位搜索
LinkedIn职位搜索:自动匹配简历(GPT/Gemini)+求职信生成器+Telegram提醒
If
Set
Code
+13
33 节点Hojjat Jashnniloofar
个人效率
发票处理与验证 - n8n 模板
基于Gmail、Drive、表格和OCR AI的发票验证与确认
If
Set
Code
+13
47 节点Dhrumil Patel
财务
宠物店 4
🐶 宠物店预约 AI 代理
If
Set
Code
+41
187 节点Bruno Dias
人工智能
第一轮 Telegram 和 LinkedIn 快速通道 AI 招聘助手
AI候选人筛选流程:LinkedIn到Telegram,集成Gemini与Apify
If
Set
Code
+15
55 节点Dean Pike
人力资源
工作流信息
难度等级
高级
节点数量27
分类-
节点类型15
作者
Jugal
@jugaldbMaster’s in US 🇺🇸 | Travel | Jobs SDE @amazon👨💻 MSCS @illinois1867 🚀 for FREE, ask me how Yapping about education abroad! Free Resources👇🏻
外部链接
在 n8n.io 查看 →
分享此工作流