Gemini AI와 Decodo 크롤러를 사용하여 이력서와 직업을 자동으로 매칭
고급
이것은HR, AI Summarization분야의자동화 워크플로우로, 20개의 노드를 포함합니다.주로 Set, Gmail, Merge, Switch, Webhook 등의 노드를 사용하며. Gemini AI와 Decodo 크롤러를 사용하여 이력서와 직업을 자동으로 일치시킵니다.
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •Google Gemini API Key
사용된 노드 (20)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "689fa22e68cd4198e4ae37f3cc44f498087edd235a867e22515be823bab694c7"
},
"nodes": [
{
"id": "22f926f5-4580-42f2-8546-ba24afed4714",
"name": "스티커 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2032,
-48
],
"parameters": {
"width": 576,
"height": 848,
"content": "## Match Resumes to Jobs Automatically with Gemini AI and Decodo Scraping\n\nSign up for Decodo [HERE](https://visit.decodo.com/discount) for Discount\n\nThis automation intelligently connects candidate profiles to job opportunities. It takes an intake form with a short summary, resume link, and optional LinkedIn profile, then enriches the data using Decodo and Gemini. The workflow analyzes skills, experience, and role relevance, ranks top matches, and emails a polished HTML report directly to your inbox—saving hours of manual review and matching effort.\n\n## Who’s it for?\n\nThis template is designed for recruiters, hiring managers, and talent operations teams who handle large candidate volumes and want faster, more accurate shortlisting. It’s also helpful for job seekers or career coaches who wish to identify high-fit openings automatically using structured AI analysis.\n\n## How it works\n\n1. Receive an intake form containing a candidate’s resume, summary, and LinkedIn URL.\n2. Parse and summarize the resume with Gemini for core skills and experience.\n3. Enrich the data using Decodo scraping to gather extra profile details.\n4. Merge insights and rank job matches from Decodo’s job data.\n5. Generate an HTML shortlist and email it automatically through Gmail.\n\n## How to set up\n\n1. Connect credentials for Gmail, Google Gemini, and Decodo.\n2. Update the Webhook path and test your form connection.\n3. Customize variables such as location or role preferences.\n4. Enable **Send as HTML** in the Gmail node for clean reports.\n5. Publish as **self-hosted** if community nodes are included.\n"
},
"typeVersion": 1
},
{
"id": "28b37b94-1b3b-445a-94e9-0c5c5cb1164c",
"name": "Set: 캡처 폼 필드",
"type": "n8n-nodes-base.set",
"position": [
-1008,
400
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "62bbfb3c-6407-4889-9673-5ef912ab0afb",
"name": "short_summary",
"type": "string",
"value": "={{ $json.body.data.fields[1].value }}"
},
{
"id": "069dd205-fd11-445e-8693-422963e1b9c0",
"name": "resume_url_link",
"type": "string",
"value": "={{ $json.body.data.fields[2].value[0].url }}"
},
{
"id": "784f8da9-1eea-446f-9f6d-2d0a1ddbdb03",
"name": "user_email",
"type": "string",
"value": "={{ $json.body.data.fields[0].value }}"
},
{
"id": "4a69f2d3-c3a8-485c-a2f0-bb82e0af07f8",
"name": "user_linkedin",
"type": "string",
"value": "={{ $json.body.data.fields[3].value }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f6e12bf7-06ea-46b0-8a48-ab97f79fa7df",
"name": "Switch: LinkedIn URL 존재 여부?",
"type": "n8n-nodes-base.switch",
"position": [
-752,
400
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "If LinkedIn User is Exist",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5a366206-392c-47d6-a343-2c208468a765",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.user_linkedin }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "If LinkedIn User is not Exist",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3dcf4c0f-6438-4f72-a0b8-6086674ee4de",
"operator": {
"type": "string",
"operation": "empty",
"singleValue": true
},
"leftValue": "{{ $json.user_linkedin }}",
"rightValue": "1"
}
]
},
"renameOutput": true
}
]
},
"options": {
"allMatchingOutputs": true
}
},
"typeVersion": 3.3
},
{
"id": "aa12ccf5-3ea4-4c71-8851-59162005486c",
"name": "Decodo: LinkedIn 프로필 스크래핑",
"type": "@decodo/n8n-nodes-decodo.decodo",
"position": [
-416,
112
],
"parameters": {
"geo": "=",
"url": "={{ $json.user_linkedin }}",
"markdown": false
},
"credentials": {
"decodoApi": {
"id": "Xc6AkeDSHbyutWEs",
"name": "Decodo Credentials Hendra"
}
},
"typeVersion": 1
},
{
"id": "bd966978-c767-42e8-97f5-e7d222bcbe17",
"name": "Gemini 모델: 프로필 추출",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-128,
224
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "dmfdKTqDcz24VUn2",
"name": "Fahmi Gemini"
}
},
"typeVersion": 1
},
{
"id": "0e3e2f0b-9a9e-4b11-a7e0-150eefba831e",
"name": "Merge: 후보자 프로필 조립",
"type": "n8n-nodes-base.merge",
"position": [
160,
384
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "c483118c-1301-45ee-82db-a9c3d03bfef6",
"name": "Gemini 모델: 채용공고 매칭",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
384,
400
],
"parameters": {
"text": "=Short Summary User: {{ $('Set: Capture Form Fields').item.json.short_summary }}\n---\nUser Resume and Experience: {{ $json.content.parts[0].text }}\n---\nLinkedIn User: {{ $json.output }}",
"options": {
"systemMessage": "=# System Message — Smart Job Match Finder Agent\n\nYou are a Smart Job Match Finder Agent, an intelligent assistant that analyzes a user’s resume, personal summary and linkedin profile to automatically find the most relevant job openings available online.\n\nYou specialize in connecting people with jobs that truly match their skills, experience, and career goals — not just keywords. You also evaluate and score how well each job aligns with the user’s background.\n\nYou use Decodo Tool to scrape and extract accurate, up-to-date job postings from trusted online job boards.\n\nYour output will using format clean HTML that can passed Email format.\n\nAssume the user is semi-technical: they can provide their resume file url, short personal summary and linkedin profile, but they expect a clear, structured, and Email-Ready-output — not long explanations.\n\n---\n\n##Tools\n\nDecodo Tool:\n\nUse this tool to scrape and extract job postings directly from websites like:\n\n- LinkedIn Jobs\n- JobStreet\n\n---\n\n##Rules\n\n1. Mandatory Tool Use: Always use Decodo Tool for scraping job listings.\n2. User Input Requirements:\n \n The user provides:\n \n - Their resume files url (skills, work experience, education).\n - A short personal summary or preferred job type (e.g. \"I want to find remote React Developer jobs in Singapore\").\n - Their LinkedIn Profiles \n3. Job Search Process:\n - Search and scrape job postings that match the user’s skills, experience, and preferences.\n - Compare the user profile (resume + summary) with each job description.\n - Select and display the top 10 most relevant matches.\n4. Output Format:\n \n Present the output in clean HTML (Email-ready).\n Use this structure for each result:\n ---\n ## Job Title: [Job Title]\n ## Company: [Company Name]\n ## Location: [Location]\n ## Work Type: [Remote / Hybrid / On-site]\n ## Salary Range: [If available]\n ## Source: [Platform Name]\n ## Job URL: [Link]\n ## Match Score: [Percentage, e.g., 85%] Why It Matches: [Short explanation of relevant skills/experience]Missing Skills: [List of missing or less relevant areas]\n ---\n5. Email-Ready-Format: Present the output in clean, minimal HTMl that can be directly passed to the Gmail node (no extra formatting required).\n6. Tone & Style:\nProfessional, structured, and encouraging — never robotic or overly formal.\nAvoid filler words like “of course,” “I understand,” or “let’s see.”\n \n---\n\n##Scoring Criteria\n\n- 50% — Skill and Technology Alignment\n- 25% — Experience and Role Match\n- 15% — Location / Work Type Preference\n- 10% — Keyword Similarity in Job Description\n\n---\n\n##Fallback Behavior\n\n- If no relevant jobs are found, politely inform the user and suggest adjusting keywords or expanding preferred locations.\n- If the resume text is too short, request additional experience details.\n- Never output raw HTML or irrelevant scraping data."
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "2cca0409-c0fb-4f46-8605-0936fdaee306",
"name": "Decodo Tool: 채용 게시판 스크래핑",
"type": "@decodo/n8n-nodes-decodo.decodoTool",
"position": [
624,
656
],
"parameters": {},
"credentials": {
"decodoApi": {
"id": "kfy3Vs5AgxfDGzpC",
"name": "Johan Decodo"
}
},
"typeVersion": 1
},
{
"id": "b2f4d75b-e8ff-4ac4-9707-3384d2e94ce6",
"name": "Gemini 모델: 채용공고 매칭 및 점수 산정",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
336,
656
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "dmfdKTqDcz24VUn2",
"name": "Fahmi Gemini"
}
},
"typeVersion": 1
},
{
"id": "db2dff4a-d475-4436-8cec-dfcc16cb19ad",
"name": "Gmail: 이력서 요약 및 상위 매칭 채용공고 전송",
"type": "n8n-nodes-base.gmail",
"position": [
816,
400
],
"webhookId": "af883a34-a4f5-4da4-b7a0-2cfd8ec493ef",
"parameters": {
"sendTo": "={{ $('Set: Capture Form Fields').item.json.user_email }}",
"message": "={{ $json.output }}",
"options": {
"appendAttribution": false
},
"subject": "Top Job Matches for you"
},
"credentials": {
"gmailOAuth2": {
"id": "qgKvcsu98l6EQuaR",
"name": "Johan Gmail"
}
},
"typeVersion": 2.1
},
{
"id": "b57abcaf-9e67-4fa0-b654-8c64b4f1cdb0",
"name": "Webhook: 인테이크 폼 수신 (POST)",
"type": "n8n-nodes-base.webhook",
"position": [
-1296,
400
],
"webhookId": "ca18f47b-399e-4689-9795-80ac1d23829b",
"parameters": {
"path": "ca18f47b-399e-4689-9795-80ac1d23829b",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "924bdbd9-2c10-4dd8-982d-b1f6b06e57f9",
"name": "LLM: LinkedIn 세부정보 추출",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
-192,
0
],
"parameters": {
"text": "={{ $json.data.results[0].content }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "Name",
"required": true,
"description": "Name of the LinkedIn User"
},
{
"name": "Headline",
"required": true,
"description": "Headline of the LinkedIn User"
},
{
"name": "Location",
"required": true,
"description": "Location of the LinkedIn User"
},
{
"name": "About summary",
"required": true,
"description": "About summary of the LinkedIn User"
},
{
"name": "Experience (detailed roles and companies)",
"required": true,
"description": "Experience (detailed roles and companies) of the LinkedIn User"
},
{
"name": "Education",
"required": true,
"description": "Education of the LinkedIn User"
},
{
"name": "Licenses & Certifications",
"required": true,
"description": "Licenses & Certifications of the LinkedIn User"
},
{
"name": "Volunteer Experience",
"required": true,
"description": "Volunteer Experience of the LinkedIn User"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "a1caa677-8e09-4e98-a8a5-fa7eabc304d1",
"name": "Gemini: 이력서 파싱",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
-144,
400
],
"parameters": {
"text": "What's in this document or picture?",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash",
"cachedResultName": "models/gemini-2.5-flash"
},
"options": {},
"resource": "document",
"documentUrls": "={{ $json.resume_url_link }}"
},
"credentials": {
"googlePalmApi": {
"id": "dmfdKTqDcz24VUn2",
"name": "Fahmi Gemini"
}
},
"typeVersion": 1
},
{
"id": "18343f38-02e8-43b9-83c6-abf47eea0df4",
"name": "스티커 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1408,
-48
],
"parameters": {
"color": 4,
"width": 2432,
"height": 960,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "13375db6-f665-4836-a1f2-462e32158b44",
"name": "스티커 노트4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1376,
256
],
"parameters": {
"color": 5,
"width": 256,
"height": 336,
"content": "Copy the Webhook URL to your Form\n\nYou can test this workflow using form below\nhttps://tally.so/r/3jOA51\n"
},
"typeVersion": 1
},
{
"id": "941d37e2-a662-4724-b14f-1409f9bbdb0b",
"name": "스티커 노트5",
"type": "n8n-nodes-base.stickyNote",
"position": [
544,
640
],
"parameters": {
"color": 3,
"height": 256,
"content": "\n\n\n\n\n\n\n\n\n\n\n\nCommunity node; works on self-hosted n8n. Make sure to add your Decodo API credentials."
},
"typeVersion": 1
},
{
"id": "1efa3fda-067d-4e7f-aa92-82012467ddea",
"name": "스티커 노트6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
96
],
"parameters": {
"color": 3,
"height": 256,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\nCommunity node; works on self-hosted n8n. Make sure to add your Decodo API credentials."
},
"typeVersion": 1
},
{
"id": "59c3159f-e0e7-4b61-aad8-5c0486f29a0c",
"name": "스티커 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1088,
320
],
"parameters": {
"color": 5,
"width": 256,
"height": 272,
"content": "Make sure to adjust the form fields capture intake from the webhook"
},
"typeVersion": 1
},
{
"id": "3a08bdbc-3236-4b67-a26b-25e28647b76c",
"name": "스티커 노트7",
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
272
],
"parameters": {
"color": 5,
"height": 320,
"content": "You can adjust the email massage by editing the prompt from the agent, or make your email massage by yourself, but make sure to use HTML format."
},
"typeVersion": 1
},
{
"id": "d38d21c2-745c-4502-90c0-deb5024d9bf0",
"name": "스티커 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1392,
-32
],
"parameters": {
"color": 3,
"width": 480,
"height": 96,
"content": "> **Disclaimer:** This workflow relies on a **community Decodo node** and therefore requires **self-hosted n8n**. Install the node from the community marketplace and configure the Decodo API credential."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"a1caa677-8e09-4e98-a8a5-fa7eabc304d1": {
"main": [
[
{
"node": "0e3e2f0b-9a9e-4b11-a7e0-150eefba831e",
"type": "main",
"index": 1
}
]
]
},
"28b37b94-1b3b-445a-94e9-0c5c5cb1164c": {
"main": [
[
{
"node": "f6e12bf7-06ea-46b0-8a48-ab97f79fa7df",
"type": "main",
"index": 0
}
]
]
},
"f6e12bf7-06ea-46b0-8a48-ab97f79fa7df": {
"main": [
[
{
"node": "aa12ccf5-3ea4-4c71-8851-59162005486c",
"type": "main",
"index": 0
}
],
[
{
"node": "a1caa677-8e09-4e98-a8a5-fa7eabc304d1",
"type": "main",
"index": 0
}
]
]
},
"c483118c-1301-45ee-82db-a9c3d03bfef6": {
"main": [
[
{
"node": "db2dff4a-d475-4436-8cec-dfcc16cb19ad",
"type": "main",
"index": 0
}
]
]
},
"924bdbd9-2c10-4dd8-982d-b1f6b06e57f9": {
"main": [
[
{
"node": "0e3e2f0b-9a9e-4b11-a7e0-150eefba831e",
"type": "main",
"index": 0
}
]
]
},
"2cca0409-c0fb-4f46-8605-0936fdaee306": {
"ai_tool": [
[
{
"node": "c483118c-1301-45ee-82db-a9c3d03bfef6",
"type": "ai_tool",
"index": 0
}
]
]
},
"aa12ccf5-3ea4-4c71-8851-59162005486c": {
"main": [
[
{
"node": "924bdbd9-2c10-4dd8-982d-b1f6b06e57f9",
"type": "main",
"index": 0
}
]
]
},
"b2f4d75b-e8ff-4ac4-9707-3384d2e94ce6": {
"ai_languageModel": [
[
{
"node": "c483118c-1301-45ee-82db-a9c3d03bfef6",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"bd966978-c767-42e8-97f5-e7d222bcbe17": {
"ai_languageModel": [
[
{
"node": "924bdbd9-2c10-4dd8-982d-b1f6b06e57f9",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"0e3e2f0b-9a9e-4b11-a7e0-150eefba831e": {
"main": [
[
{
"node": "c483118c-1301-45ee-82db-a9c3d03bfef6",
"type": "main",
"index": 0
}
]
]
},
"b57abcaf-9e67-4fa0-b654-8c64b4f1cdb0": {
"main": [
[
{
"node": "28b37b94-1b3b-445a-94e9-0c5c5cb1164c",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 인사, AI 요약
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Decodo와 Gemini를 사용한 Trustpilot 및 Sitejabber 감정 분석 및 Sheets에 저장
Decodo 및 Gemini를 사용하여 Trustpilot 및 Sitejabber 감성 분석 및 Sheets에 저장
Set
Merge
Form Trigger
+
Set
Merge
Form Trigger
18 노드Fahmi Fahreza
시장 조사
AI를 사용한 Gmail에서 Airtable로의 이력서 스크리닝 및 지원자 점수 매기기 자동화
AI를 사용한 이력서 스크리닝 및 지원자 점수 매기기 자동화: Gmail에서 Airtable로
Set
Merge
Airtable
+
Set
Merge
Airtable
16 노드Fahmi Fahreza
인사
이력서와 직무 설명 매칭
Gemini LLM, Gmail 및 Notion 채용 공고 파일을 사용한 자동화된 이력서 점수 매기기
Wait
Gmail
Merge
+
Wait
Gmail
Merge
22 노드Agentick AI
인사
경쟁사 콘텐츠 격차 분석기: 자동화된 웹사이트 주제 매핑
Gemini AI, Apify, Google Sheets를 사용한 경쟁사 콘텐츠 격차 분석
If
Set
Code
+
If
Set
Code
30 노드Mychel Garzon
기타
Fireflies 회의 녹취 및 요약 자동화
Gemini 및 Gmail을 사용하여 Fireflies 트랜스크립트에서 자동화된 회의 요약
Set
Code
Gmail
+
Set
Code
Gmail
26 노드Davide
문서 추출
CoinGecko 암호화폐 가격 예측 파이프라인: Gemini AI, Decodo 및 Gmail
CoinGecko 암호화폐 가격 예측 파이프라인: Gemini AI, Decodo 및 Gmail
Set
Code
Gmail
+
Set
Code
Gmail
24 노드Fahmi Fahreza
암호화폐 거래