AI 驱动的 GitHub 人才搜寻(按语言和位置)到 Google Sheet
高级
这是一个Lead Generation, AI Chatbot领域的自动化工作流,包含 19 个节点。主要使用 Code, Slack, GoogleSheets, Agent, ScheduleTrigger 等节点。 基于 Gemini AI 和 BrowserAct 按语言和位置搜寻 GitHub 顶尖人才至 Google Sheet
前置要求
- •Slack Bot Token 或 Webhook URL
- •Google Sheets API 凭证
- •Google Gemini API Key
使用的节点 (19)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "Z9AisRCBwOHsODBb",
"meta": {
"instanceId": "88804d8e264d231c18413147cc92e4245b20ae7b97d774bad847556f645c8192",
"templateCredsSetupCompleted": true
},
"name": "AI 驱动的 GitHub 人才搜寻(按语言和位置)到 Google Sheet",
"tags": [],
"nodes": [
{
"id": "c83323e8-99b3-4c7f-982a-e2feb19b5cd4",
"name": "计划触发器",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1248,
320
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "9f9068c1-90c8-4379-897b-6bd3c0ac7d1d",
"name": "运行工作流任务",
"type": "n8n-nodes-browseract-workflows.browserAct",
"position": [
-1056,
320
],
"parameters": {
"workflowId": "56789612177594999",
"inputParameters": {
"parameters": [
{
"name": "Language",
"value": "Python"
},
{
"name": "Location",
"value": "Berlin"
},
{
"name": "Total_Page",
"value": "2"
},
{
"name": "Public_Repositories",
"value": "5"
}
]
},
"additionalFields": {
"saveBrowserData": false
}
},
"credentials": {
"browserActApi": {
"id": "AzKMhR2eAlOjzDiJ",
"name": "BrowserAct account"
}
},
"typeVersion": 1
},
{
"id": "cdf80447-589d-4a4e-accd-b707f5d57bb9",
"name": "获取工作流任务详情",
"type": "n8n-nodes-browseract-workflows.browserAct",
"onError": "continueErrorOutput",
"position": [
-880,
320
],
"parameters": {
"taskId": "={{ $json.id }}",
"operation": "getTask",
"maxWaitTime": 600,
"waitForFinish": true,
"pollingInterval": 20
},
"credentials": {
"browserActApi": {
"id": "AzKMhR2eAlOjzDiJ",
"name": "BrowserAct account"
}
},
"typeVersion": 1
},
{
"id": "d9eb5881-55d5-4c0a-b501-65146feb31d5",
"name": "JavaScript 代码",
"type": "n8n-nodes-base.code",
"position": [
-624,
320
],
"parameters": {
"jsCode": "// Get the JSON string using the exact path provided by the user.\nconst jsonString = $input.first().json.output.string;\n\nlet parsedData;\n\n// Check if the string exists before attempting to parse\nif (!jsonString) {\n // Return an empty array or throw an error if no string is found\n // Throwing an error is usually better to stop the workflow if data is missing.\n throw new Error(\"Input string is empty or missing at the specified path: $input.first().json.output.string\");\n}\n\ntry {\n // 1. Parse the JSON string into a JavaScript array of objects\n parsedData = JSON.parse(jsonString);\n} catch (error) {\n // Handle JSON parsing errors (e.g., if the string is malformed)\n throw new Error(`Failed to parse JSON string: ${error.message}`);\n}\n\n// 2. Ensure the parsed data is an array\nif (!Array.isArray(parsedData)) {\n throw new Error('Parsed data is not an array. It cannot be split into multiple items.');\n}\n\n// 3. Map the array of objects into the n8n item format { json: object }\n// Each element in this array will be treated as a new item by n8n, achieving the split.\nconst outputItems = parsedData.map(item => ({\n json: item,\n}));\n\n// 4. Return the new array of items\nreturn outputItems;"
},
"typeVersion": 2
},
{
"id": "29dc23d1-8a9b-4255-b286-919b6d74d105",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-464,
320
],
"parameters": {
"text": "=\n1- first analyze the {{ $json.Summary }} it is their resume they sent and base on that give point to them 0 to 1000 if you have insufficent data or the resume is incomplete give the 0 for ResumeScore\n\n2-summ Using teh formula - FinalScore = ({{ $json.Followers }}×0.5)+({{ $json.TotalRepo }}×3) + ResumeScore - add the result to FinalScore\n\n\nif you face any insufficient data or problem Give 0 to FinalScore that and continue with next item don't send error\n\nsend all the item data + final Score to the structure Parser for Output formatting like this\n{\n\"Name\":{{ $json.Name }},\n\"Location\":{{ $json.Location }},\n\"TotalRepo\":{{ $json.TotalRepo }},\n\"Folowers\":{{ $json.Followers }},\n\"URL\":{{ $json.Url }},\n\"Score\": \"FinalScore\"\n}\n\n\n\n",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": false,
"typeVersion": 2.2
},
{
"id": "1dc89499-f3cd-4934-b1ee-db906c717c60",
"name": "结构化输出解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-320,
528
],
"parameters": {
"jsonSchemaExample": "{\n\"Name\":\"<String>\",\n\"Location\":\"<String>\",\n\"TotalRepo\":\"<String>\",\n\"Folowers\":\"<String>\",\n\"URL\":\"<String>\",\n\"Score\":\"<String>\"\n}"
},
"typeVersion": 1.3
},
{
"id": "939a35bb-c42a-4a7f-b964-4247e91e0111",
"name": "追加或更新表格行",
"type": "n8n-nodes-base.googleSheets",
"position": [
-64,
320
],
"parameters": {
"columns": {
"value": {
"URL": "={{ $json.output.URL }}",
"Name": "={{ $json.output.Name }}",
"Score": "={{ $json.output.Score }}",
"Folowers": "={{ $json.output.Folowers }}",
"Location": "={{ $json.output.Location }}",
"TotalRepo": "={{ $json.output.TotalRepo }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Location",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "TotalRepo",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "TotalRepo",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Folowers",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Folowers",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Score",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1185614504,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit#gid=1185614504",
"cachedResultName": "Source Top GitHub Contributors by Language & Location"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit?usp=drivesdk",
"cachedResultName": "Test For BrowserAct"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "4cadfa65-6904-41c1-acde-54026def1a38",
"name": "Gemini 聊天",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-464,
528
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "U1olizkBYhp4g9AB",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "f92a627f-ff32-4306-9861-b40c0e6e1d4e",
"name": "便签 - 介绍",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
32
],
"parameters": {
"width": 592,
"height": 418,
"content": "## 试试看!"
},
"typeVersion": 1
},
{
"id": "6fdaf305-b5de-4e3e-9043-cc931b9f2763",
"name": "便签 - 如何使用",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
464
],
"parameters": {
"width": 592,
"height": 192,
"content": "## 使用方法"
},
"typeVersion": 1
},
{
"id": "4e9e1ed0-429a-46ea-80b7-b7034e229502",
"name": "便签 - 需要帮助",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1856,
672
],
"parameters": {
"width": 592,
"height": 152,
"content": "### 需要帮助?"
},
"typeVersion": 1
},
{
"id": "226ff98d-1bee-4266-bfa1-23ad201b0fa9",
"name": "便签 - 搜寻阶段",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
96
],
"parameters": {
"color": 5,
"width": 416,
"height": 200,
"content": "### 🔎 1. 自动化搜寻"
},
"typeVersion": 1
},
{
"id": "46248447-0c5f-48f8-97b8-58bdb2cd31a5",
"name": "便签 - AI 评分引擎",
"type": "n8n-nodes-base.stickyNote",
"position": [
-640,
96
],
"parameters": {
"color": 4,
"width": 448,
"height": 192,
"content": "### 🧠 2. AI 评分引擎"
},
"typeVersion": 1
},
{
"id": "4f47741b-61df-4af5-a1f3-ea60cf63c954",
"name": "便签 - 保存候选人",
"type": "n8n-nodes-base.stickyNote",
"position": [
-144,
480
],
"parameters": {
"color": 3,
"width": 464,
"height": 176,
"content": "### 💾 3. 保存排名候选人和发送警报"
},
"typeVersion": 1
},
{
"id": "ab7c68b0-cafa-41b6-93fa-e42ff635e5f4",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
304
],
"parameters": {
"color": 5,
"width": 416,
"height": 176,
"content": ""
},
"typeVersion": 1
},
{
"id": "e81a953c-7c54-427b-9b14-30f175df1677",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-640,
304
],
"parameters": {
"color": 4,
"width": 448,
"height": 352,
"content": ""
},
"typeVersion": 1
},
{
"id": "7e9afec8-7fb8-4c7c-85bc-cde8f6c4fbf3",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-144,
304
],
"parameters": {
"color": 3,
"width": 464,
"content": ""
},
"typeVersion": 1
},
{
"id": "ab2e11fa-747f-40e2-a061-37a765c4a2de",
"name": "发送消息",
"type": "n8n-nodes-base.slack",
"position": [
-576,
688
],
"webhookId": "75fe3be1-722e-4dab-8424-d7cb1ce4ab93",
"parameters": {
"text": "BrowserAct Workflow Faces Problem",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KLV9DJSX",
"cachedResultName": "all-browseract-workflow-test"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "5rQCkyObBqbHIbZA",
"name": "Slack account"
}
},
"typeVersion": 2.3
},
{
"id": "1a3ab789-2d02-41d3-9e3c-c5236cdf4b7a",
"name": "发送消息1",
"type": "n8n-nodes-base.slack",
"position": [
144,
320
],
"webhookId": "e8d87864-f3ee-4010-8eab-b9ce861ca68f",
"parameters": {
"text": "GitHub Contributors Updated",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KLV9DJSX",
"cachedResultName": "all-browseract-workflow-test"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "5rQCkyObBqbHIbZA",
"name": "Slack account"
}
},
"typeVersion": 2.3
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "0805aa19-4e7e-48b3-9d7e-e4f8baf2c207",
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Append or update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Gemini Chat": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Run a workflow task",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Run a workflow task": {
"main": [
[
{
"node": "Get details of a workflow task",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Append or update row in sheet": {
"main": [
[
{
"node": "Send a message1",
"type": "main",
"index": 0
}
]
]
},
"Get details of a workflow task": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
],
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 潜在客户开发, AI 聊天机器人
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
使用 BrowserAct 和 Gemini 查找并筛选有资金支持的线索
通过 BrowserAct 和 Gemini 查找并筛选有资金支持的潜在客户
If
Code
Merge
+9
29 节点Madame AI Team | Kai
潜在客户开发
Product Hunt 发布监控器 (producthunt.com)
使用 BrowserAct 和 Gemini AI 抓取并总结 Product Hunt 反馈
Slack
Google Sheets
Manual Trigger
+6
23 节点Madame AI Team | Kai
市场调研
高级WooCommerce产品对账与同步
使用Google Gemini AI和BrowserAct同步WooCommerce库存并创建产品
If
Code
Merge
+9
31 节点Madame AI Team | Kai
客户关系管理
GitHub 用户活动与数据抓取器(数据丰富引擎)
使用 BrowserAct 抓取详细 GitHub 个人资料到 Google Sheets
Set
Code
Merge
+7
30 节点Madame AI Team | Kai
潜在客户开发
将社交媒体内容聚合自动化到Telegram频道
使用Google Gemini AI将Twitter/X内容聚合到Telegram频道
If
Code
Wait
+7
30 节点Madame AI Team | Kai
内容创作
使用Apollo.io和Google表格的自动化LinkedIn潜在客户丰富管道
使用Apollo.io和Google表格的自动化LinkedIn潜在客户丰富管道
If
Code
Wait
+10
33 节点Rahi Uppal
潜在客户开发
工作流信息
难度等级
高级
节点数量19
分类2
节点类型9
作者
Madame AI Team | Kai
@madame-aiI’m a PhD in Physics turned AI enthusiast, passionate about uncovering how AI is transforming content creation, business, and daily life.
外部链接
在 n8n.io 查看 →
分享此工作流