演示 - 分享模板 - 从职位描述构建候选人短名单
高级
这是一个Miscellaneous、AI Summarization、Multimodal AI领域的自动化工作流,包含 40 个节点。主要使用 Set、Limit、Switch、Airtable、SplitOut 等节点。 AI招聘流程:使用Apollo和Airtable从职位到候选人短名单
前置要求
- •Airtable API Key
- •可能需要目标 API 的认证凭证
- •OpenAI API Key
- •Anthropic API Key
使用的节点 (40 个)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "wXaLPxOXY9W7u3s5",
"meta": {
"instanceId": "0159916c04d508cd950e3baa00a9370011011fbb66518ddb067482b4608c554f",
"templateCredsSetupCompleted": true
},
"name": "演示 - 分享模板 - 从职位描述构建候选人短名单",
"tags": [
{
"id": "Y8jwMvLESMhmi72N",
"name": "DEMO",
"createdAt": "2025-05-01T07:54:32.551Z",
"updatedAt": "2025-05-01T07:54:32.551Z"
}
],
"nodes": [
{
"id": "969da01e-2879-4ce1-8cfa-301071ec9950",
"name": "表单提交时",
"type": "n8n-nodes-base.formTrigger",
"position": [
-384,
0
],
"webhookId": "7de1e740-aad1-45f6-8215-f8679930fbff",
"parameters": {
"options": {},
"formTitle": "Job Input",
"formFields": {
"values": [
{
"fieldLabel": "Job Title",
"requiredField": true
},
{
"fieldLabel": "Job Description",
"requiredField": true
},
{
"fieldLabel": "Location",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Target Companies",
"placeholder": "Comma separated domains of target companies to source talent from"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "4a5133d1-5fe7-442a-adc5-d7768ea67da0",
"name": "获取简报",
"type": "n8n-nodes-base.set",
"position": [
1632,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2ebc52f4-1cb1-4b75-b58e-4259646ac1c9",
"name": "LinkedIn_profile",
"type": "string",
"value": "={{ Object.entries($json).map(([key, value]) => `${key}:${value}`).join(', ') }}"
},
{
"id": "dfb6ce70-c157-4bef-8dd4-4282acaa0dcb",
"name": "employment_history",
"type": "string",
"value": "={{ \n $json.employment_history.map(item => \n (item.title || \"Information not available\") + \", \" + \n (item.organization_name || \"Information not available\") + \", \" + \n (item.start_date || \"Information not available\") + \", \" + \n (item.current ? \"Current Role: Yes\" : (item.end_date || \"Information not available\") + \", Current Role: No\")\n ).join(\", \")\n}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "dc324e00-8cff-4211-b0bb-c507cf3e2815",
"name": "自动修复输出解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
1088,
400
],
"parameters": {
"options": {
"prompt": "Instructions:\n--------------\n{instructions}\n--------------\nCompletion:\n--------------\n{completion}\n--------------\n\nAbove, the Completion did not satisfy the constraints given in the Instructions.\nError:\n--------------\n{error}\n--------------\n\nPlease try again. Please only respond with an answer that satisfies the constraints laid out in the Instructions:"
}
},
"typeVersion": 1
},
{
"id": "44a619cc-dd31-4d5f-b92f-de9698d8bf5d",
"name": "OpenAI 聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1072,
560
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "VN9Tey257wj5pSUX",
"name": "Resource Hub Agent"
}
},
"typeVersion": 1.2
},
{
"id": "b13f8c75-28f2-4354-8d70-bf0fa6c0337b",
"name": "结构化输出解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1184,
560
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"candidate_name\": {\n \"type\": \"string\",\n \"description\": \"The full name of the candidate from the LinkedIn profile.\"\n },\n \"candidate_linkedinUrl\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"The LinkedIn profile URL of the candidate.\"\n },\n \"job_title_target\": {\n \"type\": \"string\",\n \"description\": \"The role title extracted from the job description.\"\n },\n \"experience_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short factual reasoning (≤ 40 words) on how the candidate's experience fits the role requirements.\"\n },\n \"industry_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short factual reasoning (≤ 40 words) on how the candidate's past industries align with the target industry.\"\n },\n \"seniority_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short factual reasoning (≤ 40 words) on whether the candidate's seniority matches the role's level.\"\n },\n \"general_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short overall assessment (≤ 40 words) summarizing the candidate's general fit.\"\n },\n \"general_fit_score\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 5,\n \"description\": \"General fit score: 5 = perfect fit, 4 = strong fit, 3 = moderate fit, 2 = weak fit, 1 = very weak fit, 0 = no fit.\"\n }\n },\n \"required\": [\n \"candidate_name\",\n \"candidate_linkedinUrl\",\n \"job_title_target\",\n \"experience_fit_reason\",\n \"industry_fit_reason\",\n \"seniority_fit_reason\",\n \"general_fit_reason\",\n \"general_fit_score\"\n ],\n \"additionalProperties\": false\n}"
},
"typeVersion": 1.2
},
{
"id": "a0bfc042-3318-4532-b017-11c8a0c29a04",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
1328,
224
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Score 4-5",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "963fcbc8-28dd-4a9d-b6bd-b41c3c691005",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.output.general_fit_score }}",
"rightValue": 4
}
]
},
"renameOutput": true
}
]
},
"options": {
"fallbackOutput": "extra"
}
},
"typeVersion": 3.2
},
{
"id": "07044fd4-a20f-4156-876a-59769fc7265e",
"name": "编辑字段1",
"type": "n8n-nodes-base.set",
"position": [
1584,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2bbc9e9b-9aba-4e7a-b6d8-386c4a9484ed",
"name": "Name",
"type": "string",
"value": "={{ $json.output.candidate_name }}"
},
{
"id": "371f7da1-6d6a-4618-b04e-423db8024728",
"name": "LinkedIn",
"type": "string",
"value": "={{ $json.output.candidate_linkedinUrl }}"
},
{
"id": "e91b50b2-dcd6-4282-ac4e-90c1034d654a",
"name": "Title",
"type": "string",
"value": "={{ $json.output.job_title_target }}"
},
{
"id": "6e4abdd7-4e14-4640-9666-646227029d75",
"name": "Experience Fit",
"type": "string",
"value": "={{ $json.output.experience_fit_reason }}"
},
{
"id": "e22b3285-3ab5-4134-b833-9055ee43b06c",
"name": "Industry Fit",
"type": "string",
"value": "={{ $json.output.industry_fit_reason }}"
},
{
"id": "70c74e59-8612-41de-9275-e79f513e0df6",
"name": "Seniority Fit",
"type": "string",
"value": "={{ $json.output.seniority_fit_reason }}"
},
{
"id": "fb11ff0f-60c1-4b63-8db3-dae5269fea64",
"name": "General Fit",
"type": "string",
"value": "={{ $json.output.general_fit_reason }}"
},
{
"id": "0cf1345c-aae8-48d8-9e2d-0b9f8d74b438",
"name": "Score",
"type": "string",
"value": "={{ $json.output.general_fit_score }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0210a953-a2a9-413e-8aaa-088b18ae65dd",
"name": "LinkedIn 档案丰富",
"type": "n8n-nodes-base.httpRequest",
"position": [
2032,
224
],
"parameters": {
"url": "https://real-time-data-enrichment.p.rapidapi.com/get-profile-data-by-url",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 4000
}
}
},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "url",
"value": "={{ $json.LinkedIn }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "real-time-data-enrichment.p.rapidapi.com"
},
{
"name": "x-rapidapi-key",
"value": "<YOUR-API-KEY>"
}
]
}
},
"retryOnFail": false,
"typeVersion": 4.2,
"waitBetweenTries": 5000
},
{
"id": "b7cda9cc-7d41-43e6-a35b-2fb04e1d2d2c",
"name": "OpenAI 聊天模型2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2208,
432
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "VN9Tey257wj5pSUX",
"name": "Resource Hub Agent"
}
},
"typeVersion": 1.2
},
{
"id": "ba1a5442-8bf3-4b69-a9d8-32f484b71659",
"name": "自动修复输出解析器1",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
2320,
432
],
"parameters": {
"options": {
"prompt": "Instructions:\n--------------\n{instructions}\n--------------\nCompletion:\n--------------\n{completion}\n--------------\n\nAbove, the Completion did not satisfy the constraints given in the Instructions.\nError:\n--------------\n{error}\n--------------\n\nPlease try again. Please only respond with an answer that satisfies the constraints laid out in the Instructions:"
}
},
"typeVersion": 1
},
{
"id": "cbd1b94c-e226-43fb-9038-ddfb50b3f95c",
"name": "OpenAI 聊天模型3",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2320,
624
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "VN9Tey257wj5pSUX",
"name": "Resource Hub Agent"
}
},
"typeVersion": 1.2
},
{
"id": "e5f163d5-f202-425b-912e-19b57f53cb0b",
"name": "结构化输出解析器1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2464,
624
],
"parameters": {
"jsonSchemaExample": "{\n \"summary_fit_score\": \"High\",\n \"executive_summary\": \"John Doe shows a strong match for the Senior Account Executive role, bringing 5+ years of SaaS sales experience with consistent overperformance in quota-carrying roles.\",\n \"title_alignment\": {\n \"fit_rating\": \"High\",\n \"reasoning\": \"Currently a Senior AE at a leading SaaS company; prior experience as AE and BDR.\"\n },\n \"skill_alignment\": {\n \"core_skills\": \"Solid experience with outbound sales, CRM management, quota attainment.\",\n \"nice_to_have_skills\": \"Some exposure to HubSpot, but limited experience with multi-channel outbound sequences.\",\n \"reasoning\": \"Demonstrated sales process ownership and closing capabilities across multiple roles.\"\n },\n \"experience_alignment\": {\n \"industry_experience\": \"Primarily SaaS startups, ideal for client context.\",\n \"seniority_experience\": \"Progressed from BDR to AE to Senior AE within 5 years.\",\n \"company_types\": \"Worked in 50-200 FTE SaaS companies, matches client's growth stage.\",\n \"reasoning\": \"Career progression and company types align closely with client needs.\"\n },\n \"education_alignment\": {\n \"fit_rating\": \"Medium\",\n \"reasoning\": \"Bachelor's degree in Business; no advanced degree but not required.\"\n },\n \"cultural_fit_indicators\": {\n \"likely_fit\": \"Yes\",\n \"reasoning\": \"Profile indicates resilience, high energy, and interest in fast-paced environments.\"\n },\n \"potential_red_flags\": [],\n \"additional_positive_signals\": [\n \"President's Club winner 2022, LinkedIn recommendations from former managers.\"\n ],\n \"final_recommendation\": {\n \"recommendation\": \"Strong Yes\",\n \"next_steps_suggested\": \"Recommend client schedule a first-round interview.\"\n }\n}"
},
"typeVersion": 1.2
},
{
"id": "d3b3ac81-05b7-43da-8fb0-9adce71dd23f",
"name": "Anthropic 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2624,
432
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {}
},
"credentials": {
"anthropicApi": {
"id": "0yBOie05CA6IsSGQ",
"name": "Anthropic Key"
}
},
"typeVersion": 1.3
},
{
"id": "3ad0031f-6d11-4f30-9091-9d4baa4534c6",
"name": "自动修复输出解析器2",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
2752,
432
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "1da9e1e4-c00a-42b9-ae90-3839a377bf60",
"name": "OpenAI 聊天模型4",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2720,
624
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "VN9Tey257wj5pSUX",
"name": "Resource Hub Agent"
}
},
"typeVersion": 1.2
},
{
"id": "8568fb71-172a-4289-bcde-c45328e88dde",
"name": "结构化输出解析器2",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2848,
624
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\"Email_Subject\": \"...\",\n\"Email_Body\": \"...\",\n\"LinkedIn_DM\": \"...\"\n}"
},
"typeVersion": 1.2
},
{
"id": "b484f8dc-cdb8-4677-9bc1-32c3b6445518",
"name": "在 AirTable 中创建候选人",
"type": "n8n-nodes-base.airtable",
"position": [
3024,
224
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appe7RcePt0Nv0Oar",
"cachedResultUrl": "https://airtable.com/appe7RcePt0Nv0Oar",
"cachedResultName": "Candidate Search - From Job Description"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblg5upaJXNvBVCcK",
"cachedResultUrl": "https://airtable.com/appe7RcePt0Nv0Oar/tblg5upaJXNvBVCcK",
"cachedResultName": "Candidates"
},
"columns": {
"value": {
"Name": "={{ $('LinkedIn Profile Enrichment').item.json.firstName }} {{ $('LinkedIn Profile Enrichment').item.json.lastName }}",
"Location": "={{ $('LinkedIn Profile Enrichment').item.json.geo.full }}",
"Image URL": "={{ $('LinkedIn Profile Enrichment').item.json.profilePicture }}",
"Job Title": "={{ $('LinkedIn Profile Enrichment').item.json.position[0].title }}",
"Email Body": "={{ $json.output.Email_Body }}",
"Job Searches": "={{ [ $('Add Job to AirTable').first().json.id ] }}",
"LinkedIn URL": "={{ $('Edit Fields1').item.json.LinkedIn }}",
"Email Subject": "={{ $json.output.Email_Subject }}",
"Skill Alignment": "={{ $('Create Candidate Assessment').item.json.output.skill_alignment.reasoning }}",
"Title Alignment": "={{ $('Create Candidate Assessment').item.json.output.title_alignment.reasoning }}",
"LinkedIn Message": "={{ $json.output.LinkedIn_DM }}",
"Positive Signals": "={{ $('Create Candidate Assessment').item.json.output.additional_positive_signals.join('\\n\\n') }}",
"Executive Summary": "={{ $('Create Candidate Assessment').item.json.output.executive_summary }}",
"Summary Fit Score": "={{ $('Create Candidate Assessment').item.json.output.summary_fit_score }}",
"Industry Alignment": "={{ $('Create Candidate Assessment').item.json.output.experience_alignment.industry_experience }}",
"Nice To Have Skills": "={{ $('Create Candidate Assessment').item.json.output.skill_alignment.nice_to_have_skills }}",
"Potential Red Flags": "={{ $('Create Candidate Assessment').item.json.output.potential_red_flags.join('\\n\\n') }}",
"Seniority Alignment": "={{ $('Create Candidate Assessment').item.json.output.experience_alignment.seniority_experience }}",
"Experience Alignment": "={{ $('Create Candidate Assessment').item.json.output.experience_alignment.reasoning }}",
"Final Recommendation": "={{ $('Create Candidate Assessment').item.json.output.final_recommendation.recommendation }}",
"Educational Alignment": "={{ $('Create Candidate Assessment').item.json.output.education_alignment.reasoning }}",
"Next Steps Suggestion": "={{ $('Create Candidate Assessment').item.json.output.final_recommendation.next_steps_suggested }}",
"Title Alignment Score": "={{ $('Create Candidate Assessment').item.json.output.title_alignment.fit_rating }}",
"Company Type Alignment": "={{ $('Create Candidate Assessment').item.json.output.experience_alignment.company_types }}",
"Educational Alignment Score": "={{ $('Create Candidate Assessment').item.json.output.education_alignment.fit_rating }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Location",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Searches",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Searches",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Title (from Job Searches)",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Job Title (from Job Searches)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Description (from Job Searches)",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Job Description (from Job Searches)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Location (from Job Searches)",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Job Location (from Job Searches)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary Fit Score",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Summary Fit Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Executive Summary",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Executive Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Title Alignment Score",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Title Alignment Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Title Alignment",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Title Alignment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Nice To Have Skills",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Nice To Have Skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Skill Alignment",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Skill Alignment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Industry Alignment",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Industry Alignment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Seniority Alignment",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Seniority Alignment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Type Alignment",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Company Type Alignment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Experience Alignment",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Experience Alignment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Educational Alignment Score",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Educational Alignment Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Educational Alignment",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Educational Alignment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Potential Red Flags",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Potential Red Flags",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Positive Signals",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Positive Signals",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Final Recommendation",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Final Recommendation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Next Steps Suggestion",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Next Steps Suggestion",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Subject",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email Subject",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Body",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email Body",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn Message",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "LinkedIn Message",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Image URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Displayed Image",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Displayed Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Profile Image",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Profile Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Core Skills",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Core Skills",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "lVVmIfUpFyo5fIop",
"name": "AS - AirTable New"
}
},
"typeVersion": 2.1
},
{
"id": "0d40609c-7358-4974-b22d-525e0952e748",
"name": "添加职位到 AirTable",
"type": "n8n-nodes-base.airtable",
"position": [
48,
0
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appe7RcePt0Nv0Oar",
"cachedResultUrl": "https://airtable.com/appe7RcePt0Nv0Oar",
"cachedResultName": "Candidate Search - From Job Description"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblx9aVcTjU7nm0fW",
"cachedResultUrl": "https://airtable.com/appe7RcePt0Nv0Oar/tblx9aVcTjU7nm0fW",
"cachedResultName": "Job Searches"
},
"columns": {
"value": {
"Job Title": "={{ $json[\"Job Title\"] }}",
"Job Location": "={{ $json.Location }}",
"Job Description": "={{ $json[\"Job Description\"] }}"
},
"schema": [
{
"id": "Job Title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Description",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Location",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Candidates",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Candidates",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Consultant",
"type": "array",
"display": true,
"options": [
{
"name": "Fred",
"value": "Fred"
},
{
"name": "Nik",
"value": "Nik"
},
{
"name": "Fabi",
"value": "Fabi"
}
],
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Consultant",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "lVVmIfUpFyo5fIop",
"name": "AS - AirTable New"
}
},
"typeVersion": 2.1
},
{
"id": "36f9423a-cd41-49e0-aa29-0053be48e51c",
"name": "创建候选人评估",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2224,
224
],
"parameters": {
"text": "=LinkedIn Profile:\n\n{{JSON.stringify($json)}}\n\nNotes and Initial Assessment:\nExperience Fit: {{ $('Edit Fields1').item.json['Experience Fit'] }}\nIndustry Fit: {{ $('Edit Fields1').item.json['Industry Fit'] }}\nSeniroity Fit: {{ $('Edit Fields1').item.json['Seniority Fit'] }}\nGeneral Fit: {{ $('Edit Fields1').item.json['General Fit'] }}\n\nJob Title: {{ $('Set Fields').item.json['Job Title'] }}\nJob Description: {{ $('Set Fields').item.json['Job Description'] }}\n",
"messages": {
"messageValues": [
{
"message": "Instruction:\nYou are an expert agency recruiter.\nYou are evaluating a candidate for an open position on behalf of a client.\nYou are given:\n\na Job Title\n\na Job Description\n\na LinkedIn Profile of the candidate (full details: experiences, education, skills, etc.)\n\na Short Human-Written Assessment (summary/notes)\n\nYour task is to create a detailed fit assessment based on these inputs.\nYou must think like a recruiter whose goal is to provide a client with a clear, reasoned judgment on the candidate’s fit for the role.\n\n⚡ Important:\n\nAnalyze how well the candidate's experience, skills, seniority, industry background, and education match the role.\n\nEvaluate both hard skills and soft skills based on available information.\n\nIdentify gaps or red flags if any — don't sugarcoat.\n\nIf there are positive signals (e.g., promotions, relevant industries, certifications, KPIs achieved), highlight them.\n\n✅ The output must be structured as a JSON object with the following fields:\n\n{\n \"summary_fit_score\": \"High / Medium / Low\",\n \"executive_summary\": \"Short paragraph summarizing overall fit.\",\n \"title_alignment\": {\n \"fit_rating\": \"High / Medium / Low\",\n \"reasoning\": \"Explain how current and past titles align or don't align.\"\n },\n \"skill_alignment\": {\n \"core_skills\": \"Evaluate match on must-have skills.\",\n \"nice_to_have_skills\": \"Evaluate match on nice-to-have skills.\",\n \"reasoning\": \"Explain the skill fit with examples from the profile.\"\n },\n \"experience_alignment\": {\n \"industry_experience\": \"Does the candidate have relevant industry background?\",\n \"seniority_experience\": \"Is the candidate operating at the right seniority level?\",\n \"company_types\": \"Have they worked at similar types of companies (startup, enterprise, agency, etc.)?\",\n \"reasoning\": \"Break down how the experience history fits.\"\n },\n \"education_alignment\": {\n \"fit_rating\": \"High / Medium / Low\",\n \"reasoning\": \"Evaluate if the education matches client expectations.\"\n },\n \"cultural_fit_indicators\": {\n \"likely_fit\": \"Yes / No / Unknown\",\n \"reasoning\": \"Based on profile wording, background, working style indicators.\"\n },\n \"potential_red_flags\": [\n \"List any gaps, inconsistent history, short tenures, irrelevant background.\"\n ],\n \"additional_positive_signals\": [\n \"List promotions, awards, certifications, high-profile clients, other strong positives.\"\n ],\n \"final_recommendation\": {\n \"recommendation\": \"Strong Yes / Soft Yes / Neutral / Soft No / Strong No\",\n \"next_steps_suggested\": \"E.g., Recommend client interview; recommend technical screening; pass for now.\"\n }\n}\n\nKey Principles for Assessment:\nEvidence-Based: Always link reasoning to actual profile data (titles, descriptions, tenure, etc.).\n\nBalanced: Highlight both strengths and concerns — not just one side.\n\nClient-First Thinking: Frame the assessment in a way that answers:\n➔ \"Would my client be happy interviewing this person based on this profile?\"\n\nExample Output Preview:\n\n{\n \"summary_fit_score\": \"High\",\n \"executive_summary\": \"John Doe shows a strong match for the Senior Account Executive role, bringing 5+ years of SaaS sales experience with consistent overperformance in quota-carrying roles.\",\n \"title_alignment\": {\n \"fit_rating\": \"High\",\n \"reasoning\": \"Currently a Senior AE at a leading SaaS company; prior experience as AE and BDR.\"\n },\n \"skill_alignment\": {\n \"core_skills\": \"Solid experience with outbound sales, CRM management, quota attainment.\",\n \"nice_to_have_skills\": \"Some exposure to HubSpot, but limited experience with multi-channel outbound sequences.\",\n \"reasoning\": \"Demonstrated sales process ownership and closing capabilities across multiple roles.\"\n },\n \"experience_alignment\": {\n \"industry_experience\": \"Primarily SaaS startups, ideal for client context.\",\n \"seniority_experience\": \"Progressed from BDR to AE to Senior AE within 5 years.\",\n \"company_types\": \"Worked in 50-200 FTE SaaS companies, matches client's growth stage.\",\n \"reasoning\": \"Career progression and company types align closely with client needs.\"\n },\n \"education_alignment\": {\n \"fit_rating\": \"Medium\",\n \"reasoning\": \"Bachelor's degree in Business; no advanced degree but not required.\"\n },\n \"cultural_fit_indicators\": {\n \"likely_fit\": \"Yes\",\n \"reasoning\": \"Profile indicates resilience, high energy, and interest in fast-paced environments.\"\n },\n \"potential_red_flags\": [],\n \"additional_positive_signals\": [\n \"President's Club winner 2022, LinkedIn recommendations from former managers.\"\n ],\n \"final_recommendation\": {\n \"recommendation\": \"Strong Yes\",\n \"next_steps_suggested\": \"Recommend client schedule a first-round interview.\"\n }\n}\n\n"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "d862618e-277a-4834-bfc0-d136e9f4d3e2",
"name": "限制",
"type": "n8n-nodes-base.limit",
"position": [
1808,
224
],
"parameters": {
"maxItems": 50
},
"typeVersion": 1
},
{
"id": "be084c1b-b26c-44ce-83d2-36b30c3fbf1f",
"name": "限制1",
"type": "n8n-nodes-base.limit",
"position": [
48,
224
],
"parameters": {
"maxItems": 50
},
"typeVersion": 1
},
{
"id": "0eafb581-632e-464e-8b1c-ebd0955adf2e",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
816,
-224
],
"parameters": {
"content": "## CRM 查找"
},
"typeVersion": 1
},
{
"id": "cad1b0ef-9e8f-4582-b046-c05b9726979e",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
272,
-208
],
"parameters": {
"color": 5,
"content": "## 职位标题变异"
},
"typeVersion": 1
},
{
"id": "c60d77f0-a047-4b50-82ab-ae2084cff794",
"name": "便签 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
368
],
"parameters": {
"color": 5,
"content": "## 评分"
},
"typeVersion": 1
},
{
"id": "07fefcc3-2f4c-4240-8d77-5a9e006c7567",
"name": "GPT-4.1-mini",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
464,
400
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "VN9Tey257wj5pSUX",
"name": "Resource Hub Agent"
}
},
"typeVersion": 1.2
},
{
"id": "7b35a4c2-6c83-4250-b154-1104d5a0c18a",
"name": "评分和预筛选",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
480,
224
],
"parameters": {
"text": "=You are Job-Fit Reasoning Agent.\\nYour task: Given one LinkedIn profile (in JSON format) and one job description (in plain text), output a recruiter-ready fit analysis focused on clear reasoning and a general fit score.\\n\\nLinkedIn Profile to analyze: {{ $json.LinkedIn_profile }}\\nCandidates Employment History:\\n{{ $json.employment_history }}\\n\\nJob Description to Compare with: {{ $('Set Fields').item.json['Job Title'] }} - {{ $('Set Fields').item.json['Job Description'] }}\n\n\\n\\nYou must research the companies mentioned on the work experiences to understand their industry and product to better assess the industry fit based on the companies the candidate worked at. Make sure to gather as much information about their role and company as possible to assess their skills and expertise.\\n\\nYou must analyze and output both:\\n\\nclear reasoning for these four aspects:\\nexperience_fit_reason\\nindustry_fit_reason\\nseniority_fit_reason\\ngeneral_fit_reason\\n\\na general_fit_score (integer from 0 to 5) where:\\n5 = perfect fit,\\n4 = strong fit,\\n3 = moderate fit,\\n2 = weak fit,\\n1 = very weak fit,\\n0 = no fit\\n\\nINPUTS\\n\\nYou will receive:\\n\\ncandidate_profile\\njob_description\\n\\nOUTPUT FORMAT\\n\\nYou must return exactly one minified JSON object — no line breaks, no Markdown, no commentary.\\n\\nThe structure must be:\\n\\n\\\"candidate_name\\\": \\\"\\\",\\n\\n\\\"candidate_linkedinUrl\\\": \\\"\\\",\\n\\\"job_title_target\\\": \\\"\\\",\\n\\\"experience_fit_reason\\\": \\\"\\\",\\n\\\"industry_fit_reason\\\": \\\"\\\",\\n\\\"seniority_fit_reason\\\": \\\"\\\",\\n\\\"general_fit_reason\\\": \\\"\\\",\\n\\\"general_fit_score\\\": 0\\n\\nFormatting Rules:\\n\\nEach reason must be ≤ 40 words, concise and fact-based.\\ngeneral_fit_score must be an integer between 0 and 5.\\nIf any information is missing, mention it conservatively (\\\"Data missing\\\" or \\\"Information not available\\\").\\nMust output valid JSON immediately.\\n\\nCHAIN OF THOUGHTS TO FOLLOW\\n\\nUNDERSTAND the candidate profile and job description.\\nIDENTIFY key experiences, industries, and seniority levels.\\nCROSS-REFERENCE company industries using public information.\\nANALYZE fit for experience, industry, and seniority separately.\\nSUMMARIZE the overall fit in one general reasoning sentence.\\nDECIDE the general_fit_score based on the overall strength of the match.\\nOUTPUT the result following the exact JSON structure.\\n\\nWHAT NOT TO DO\\n\\nNEVER output numeric scores for individual aspects other than general_fit_score.\\nNEVER exceed 40 words per reason.\\nNEVER format in Markdown, tables, or non-JSON formats.\\nNEVER omit any of the six required fields.\\nNEVER guess information.\\nIf uncertain or data is missing, state it clearly.\\nNEVER write vague, generic, or non-factual reasons.",
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "1e89a8d3-1092-4e9d-aef8-0ed4f12c5d47",
"name": "数据结构化",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"onError": "continueRegularOutput",
"position": [
928,
224
],
"parameters": {
"text": "=Format the input into the following JSON:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"candidate_name\": {\n \"type\": \"string\",\n \"description\": \"The full name of the candidate from the LinkedIn profile.\"\n },\n \"candidate_linkedinUrl\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"The LinkedIn profile URL of the candidate.\"\n },\n \"job_title_target\": {\n \"type\": \"string\",\n \"description\": \"The role title extracted from the job description.\"\n },\n \"experience_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short factual reasoning (≤ 40 words) on how the candidate's experience fits the role requirements.\"\n },\n \"industry_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short factual reasoning (≤ 40 words) on how the candidate's past industries align with the target industry.\"\n },\n \"seniority_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short factual reasoning (≤ 40 words) on whether the candidate's seniority matches the role's level.\"\n },\n \"general_fit_reason\": {\n \"type\": \"string\",\n \"description\": \"Short overall assessment (≤ 40 words) summarizing the candidate's general fit.\"\n },\n \"general_fit_score\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 5,\n \"description\": \"General fit score: 5 = perfect fit, 4 = strong fit, 3 = moderate fit, 2 = weak fit, 1 = very weak fit, 0 = no fit.\"\n }\n },\n \"required\": [\n \"candidate_name\",\n \"candidate_linkedinUrl\",\n \"job_title_target\",\n \"experience_fit_reason\",\n \"industry_fit_reason\",\n \"seniority_fit_reason\",\n \"general_fit_reason\",\n \"general_fit_score\"\n ],\n \"additionalProperties\": false\n}\n\n\nInput:\n{{ $json.text }}\n",
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "c72b963a-76c1-49be-8b8c-61cc9c3e66e3",
"name": "生成职位标题变异",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
272,
0
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "GPT-4.1-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Here is the Job Information:\n\nJob Title:\n{{ $('Set Fields').item.json[\"Job Title\"] }}\n\nJob Description:\n{{ $('Set Fields').item.json[\"Job Description\"] }}"
},
{
"role": "system",
"content": "=YOU ARE A WORLD-CLASS EXPERT IN JOB TITLE NORMALIZATION, SEARCH OPTIMIZATION, AND TALENT IDENTIFICATION. YOUR MISSION IS TO TRANSFORM A GIVEN JOB TITLE AND JOB DESCRIPTION INTO A CLEAN, STANDARDIZED TITLE AND GENERATE UP TO 5 VARIATIONS OF SIMILAR JOB TITLES TO MAXIMIZE MATCHING ACCURACY FOR AUTOMATED CANDIDATE SEARCHES.\n\n###INSTRUCTIONS###\n\n- YOU MUST READ AND UNDERSTAND the provided JOB TITLE and JOB DESCRIPTION.\n- YOU MUST CLEAN the original JOB TITLE by removing unnecessary words, overly specific terms, internal jargon, or formatting inconsistencies to produce a STANDARDIZED VERSION.\n- YOU MUST CREATE UP TO 5 VARIATIONS that represent ALTERNATIVE YET EQUIVALENT job titles commonly used in the industry for the same or very similar roles.\n- FOCUS on INDUSTRY-STANDARD TERMS, maintaining RELEVANCE and avoiding niche variations unless widely recognized.\n- PRIORITIZE broader and common titles that would yield HIGH SEARCH MATCHES while remaining ROLE-ACCURATE.\n- OUTPUT MUST BE JSON FORMAT AND EACH ITEM MUST BE A SEPARATED JOB TITLE.\n- INCLUDE the CLEANED TITLE as the first item, followed by the variations.\n\n###CHAIN OF THOUGHTS###\n\nFOLLOW these steps sequentially to ENSURE EXPERT OUTPUT:\n\n1. UNDERSTAND:\n 1.1. CAREFULLY READ the input JOB TITLE and JOB DESCRIPTION.\n 1.2. EXTRACT the core role, seniority, and function from the description.\n\n2. BASICS:\n 2.1. IDENTIFY KEY RESPONSIBILITIES, skills, and the focus of the role.\n 2.2. DETERMINE whether the role is technical, managerial, operational, etc.\n\n3. BREAK DOWN:\n 3.1. STRIP the job title down to its essential function (e.g., \"Marketing Ninja\" → \"Marketing Specialist\").\n 3.2. REMOVE internal lingo, quirky titles, redundant adjectives, and unusual capitalization.\n\n4. ANALYZE:\n 4.1. COMPARE the extracted role with industry standards and benchmark titles.\n 4.2. MAP the role to common synonyms or alternative phrasings used across companies.\n\n5. BUILD:\n 5.1. FORMULATE a CLEAN, INDUSTRY-STANDARD JOB TITLE.\n 5.2. CREATE UP TO 5 VARIATIONS reflecting similar common titles, adjusting for slight seniority shifts if necessary (e.g., \"Software Engineer\" → \"Backend Developer\").\n\n6. EDGE CASES:\n 6.1. IF the job title is already standard, CLEAN only if needed (e.g., remove extra descriptors).\n 6.2. IF the job title is highly specific, GENERALIZE it slightly without losing its essential meaning.\n\n7. FINAL ANSWER:\n 7.1. OUTPUT in the following JSON FORMAT:\n\n{\n\"jobtitle1\": \"...\",\n\"jobtitle2\": \"...\",\n\"jobtitle3\": \"...\",\n\"jobtitle4\": \"...\",\n\"jobtitle5\": \"...\"\n}"
}
]
},
"simplify": false,
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "VN9Tey257wj5pSUX",
"name": "Resource Hub Agent"
}
},
"typeVersion": 1.8
},
{
"id": "1ab51082-aff7-4a69-af50-eb4de77acdbd",
"name": "GPT 4.1-mini",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
944,
400
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "VN9Tey257wj5pSUX",
"name": "Resource Hub Agent"
}
},
"typeVersion": 1.2
},
{
"id": "f6683bf5-59c5-4beb-8475-68b0a74bf46d",
"name": "便签 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
688,
368
],
"parameters": {
"color": 5,
"content": "## 数据结构化"
},
"typeVersion": 1
},
{
"id": "9f67e5a0-062e-4901-a711-fb2eb4bc07a2",
"name": "便签 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1968,
32
],
"parameters": {
"color": 4,
"width": 300,
"content": "## 候选人评估"
},
"typeVersion": 1
},
{
"id": "acf10533-a532-4b3d-aaf3-b0d1efd01522",
"name": "便签 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2576,
32
],
"parameters": {
"color": 4,
"width": 340,
"content": "## 外联消息创建"
},
"typeVersion": 1
},
{
"id": "730a3948-0d6c-466d-a711-41ea4cf48006",
"name": "消息生成",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2640,
224
],
"parameters": {
"text": "=Name of the candidate: {{ $('LinkedIn Profile Enrichment').item.json.firstName }} {{ $('LinkedIn Profile Enrichment').item.json.lastName }}\n\nJob Description:\n{{ $('Set Fields').item.json['Job Title'] }} - {{ $('Set Fields').item.json['Job Description'] }}\n\n\nCandidate to Job Match Assessment:\n{{ JSON.stringify($('Create Candidate Assessment').item.json.output) }}",
"messages": {
"messageValues": [
{
"message": "=You are a recruiting assistant who is specalized in writing outreach emails to candidates who are great fits for a specific job role you are recruiting for. You are given a job description and a detailed assessment of why the candidate would be a fit to use as context for your message. You specifically write a LinkedIn Message and a cold email to the candidate that follows the below principles.\n\nCold email:\n- Less than 75 words\n- Make it 80% about them\n- Conversatinal tone and simple language\n- Prompt with a subtle non-salesy call to action\n- Use formatting with line breaks to make the email skimmable\n- Never start with \"I hope this email finds you well or similar\"\n\nLinkedIn Message:\n- Less than 60 words\n- Very conversational\n- Reference something from their profile why you're reaching out\n- Prompt with a subtle non-sales CTA or question\n\nBoth messages should have a consultative approach that positions you as a trusted career advisor. Use insights from the job description and why it is a match to build trust and rapport. \n\nYou will only return the finished email copy, a subject line and LinkedIn message as a JSON in the followin format:\n\n{\n\"Email_Subject\": \"...\",\n\"Email_Body\": \"...\",\n\"LinkedIn_DM\": \"...\"\n}"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "804b0d8c-dbc6-432e-8e76-ba4ee3e2c478",
"name": "Apollo 人员搜索1",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
880,
0
],
"parameters": {
"url": "https://api.apollo.io/api/v1/mixed_people/search",
"method": "POST",
"options": {
"pagination": {
"pagination": {
"parameters": {
"parameters": [
{
"name": "page",
"value": "={{ $pageCount + 1 }}"
}
]
},
"maxRequests": 5,
"requestInterval": 1000,
"limitPagesFetched": true
}
}
},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "person_titles[]",
"value": "={{ $json['choices[0].message.content'] }}"
},
{
"name": "per_page",
"value": "10"
},
{
"name": "page",
"value": "1"
},
{
"name": "include_similar_titles",
"value": "false"
},
{
"name": "person_locations[]",
"value": "={{ $('Set Fields').item.json.Location }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "accept",
"value": "application/json"
},
{
"name": "x-api-key",
"value": "<YOUR-API-KEY>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "5569f4b8-8cec-4b5e-abe2-9961047c4edc",
"name": "拆分输出1",
"type": "n8n-nodes-base.splitOut",
"position": [
624,
0
],
"parameters": {
"options": {},
"fieldToSplitOut": "choices[0].message.content"
},
"typeVersion": 1
},
{
"id": "22d3cac3-1a18-459b-ab3f-6e0a13cd5341",
"name": "分割输出2",
"type": "n8n-nodes-base.splitOut",
"position": [
1120,
0
],
"parameters": {
"options": {},
"fieldToSplitOut": "people"
},
"typeVersion": 1
},
{
"id": "f81ab349-0341-4ede-b8de-1c54db86862b",
"name": "去重",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
1360,
0
],
"parameters": {
"compare": "selectedFields",
"options": {},
"fieldsToCompare": "id"
},
"typeVersion": 2
},
{
"id": "46abf579-2fd4-4f1a-934f-159b6686938e",
"name": "设置字段",
"type": "n8n-nodes-base.set",
"position": [
-160,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "042c76b7-29ab-4bad-a652-73a1237a1a97",
"name": "Job Title",
"type": "string",
"value": "={{ $json[\"Job Title\"] }}"
},
{
"id": "65c69019-fa6b-442d-a15b-a2b7eaa58ad9",
"name": "Job Description",
"type": "string",
"value": "={{ $json[\"Job Description\"] }}"
},
{
"id": "d0c619d7-1801-467d-82ad-6ec972ca11fd",
"name": "Location",
"type": "string",
"value": "={{ $json.Location }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "619fc71c-5025-42a3-a609-d634347bede7",
"name": "便签6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1888,
400
],
"parameters": {
"color": 5,
"height": 224,
"content": "## LinkedIn 丰富"
},
"typeVersion": 1
},
{
"id": "9c6f3779-b7b4-4464-86b3-5fd664443cf7",
"name": "便签7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-480
],
"parameters": {
"width": 464,
"height": 352,
"content": "## 关于此工作流的 YouTube 视频"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "7dc92dd1-cd91-4dd8-8c25-5e0b82e66701",
"connections": {
"Limit": {
"main": [
[
{
"node": "LinkedIn Profile Enrichment",
"type": "main",
"index": 0
}
]
]
},
"Limit1": {
"main": [
[
{
"node": "Scoring and Prequalification",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Edit Fields1",
"type": "main",
"index": 0
}
],
[]
]
},
"Set Fields": {
"main": [
[
{
"node": "Add Job to AirTable",
"type": "main",
"index": 0
}
]
]
},
"Split Out1": {
"main": [
[
{
"node": "Apollo People Search1",
"type": "main",
"index": 0
}
]
]
},
"Split Out2": {
"main": [
[
{
"node": "Remove Duplicates",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Limit1",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields1": {
"main": [
[
{
"node": "Limit",
"type": "main",
"index": 0
}
]
]
},
"GPT 4.1-mini": {
"ai_languageModel": [
[
{
"node": "Data Structuring",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"GPT-4.1-mini": {
"ai_languageModel": [
[
{
"node": "Scoring and Prequalification",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Data Structuring": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Remove Duplicates": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Message Generation": {
"main": [
[
{
"node": "Create Candidates in AirTable",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Set Fields",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "Create Candidate Assessment",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model3": {
"ai_languageModel": [
[
{
"node": "Auto-fixing Output Parser1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model4": {
"ai_languageModel": [
[
{
"node": "Auto-fixing Output Parser2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Add Job to AirTable": {
"main": [
[
{
"node": "Generate Job Title Mutations",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "Message Generation",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Apollo People Search1": {
"main": [
[
{
"node": "Split Out2",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser": {
"ai_outputParser": [
[
{
"node": "Data Structuring",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser1",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Structured Output Parser2": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser2",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser1": {
"ai_outputParser": [
[
{
"node": "Create Candidate Assessment",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser2": {
"ai_outputParser": [
[
{
"node": "Message Generation",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Create Candidate Assessment": {
"main": [
[
{
"node": "Message Generation",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Profile Enrichment": {
"main": [
[
{
"node": "Create Candidate Assessment",
"type": "main",
"index": 0
}
]
]
},
"Generate Job Title Mutations": {
"main": [
[
{
"node": "Split Out1",
"type": "main",
"index": 0
}
]
]
},
"Scoring and Prequalification": {
"main": [
[
{
"node": "Data Structuring",
"type": "main",
"index": 0
}
]
]
},
"Create Candidates in AirTable": {
"main": [
[]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
这是一个高级难度的工作流,适用于Miscellaneous、AI Summarization、Multimodal AI等场景。适合高级用户,包含 16+ 个节点的复杂工作流
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
每日 WhatsApp 群组智能分析:GPT-4.1 分析与语音消息转录
每日 WhatsApp 群组智能分析:GPT-4.1 分析与语音消息转录
If
Set
Code
+20
52 节点Daniel Lianes
Miscellaneous
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
Other
使用 Gemini AI 和 Airtable 从图片生成 Shopify 产品列表
使用 Gemini AI 和 Airtable 从图片生成 Shopify 产品列表
If
Set
Code
+16
33 节点MANISH KUMAR
Content Creation
动态AI网络研究员:从纯文本到自定义CSV
使用GPT-4和Linkup将纯文本转换为自定义CSV的动态AI网络研究员
Set
Code
Split Out
+7
16 节点Guillaume Duvernay
Miscellaneous
使用AI分析检测病毒式YouTube视频并发送邮件报告
使用AI分析检测病毒式YouTube视频并发送邮件报告
Set
Code
Sort
+14
26 节点gclbck
Miscellaneous
WordPress博客自动化专业版(深度研究)v2.1市场
使用GPT-4o、Perplexity AI和多语言支持自动化SEO优化的博客创建
If
Set
Xml
+27
125 节点Daniel Ng
Content Creation
工作流信息
难度等级
高级
节点数量40
分类3
节点类型15
作者
Fabian Herhold
@fabianherhCo-Founder of Automindz Solutions AI & Automation Agency focused on recruiting
外部链接
在 n8n.io 上查看 →
分享此工作流