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": "設定: フォームフィールドを取得",
"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": "分岐: 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": "結合: 候補者プロフィールを組み立て",
"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ツール: 求人ボードをスクレイピング",
"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への履歴書き選考と応募者スコアリングの自動化
GmailからAirtableへのアルバイト選考と応募者スコアリングをAIで自動化
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
仮想通貨取引