Mindket

Google Sheets 求职者招聘进度跟踪器

新上架第 1 版 · 更新于

概览

一个 n8n 工作流,把每位求职者都记在同一张 Google 表格里。来一封新邮件就加一行,OpenAI 从主题里读出职位名称。之后表单、表格里的编辑和 Cal.com 预约陆续填上初筛、任务和面试,Gmail 负责给候选人写信。

Google Sheets 求职者招聘进度跟踪器 是一款 n8n 工作流,属于商务类,由 Mindket 上架。可免费获取。当前为第 1 版,最近更新于 。在本页下载,或复制它的 JSON,再导入 n8n 画布。在 n8n 里启用之前,它不会运行。

速览

用在
  • n8n Cloud 或你自己的服务器:导入文件并发布,每小时的检查、两个表单和 webhook 才会运行
  • Google Sheets:装好下面的 Apps Script 之后,在某一行勾选一列,对应的邮件就会发出
  • Cal.com:预约页面需要一个标识符为 code 的问题
  • 表单链接:把两个表单的正式地址写进你自己写的邮件里

平台

连接 4 个应用

运行方式

触发

五个触发器

它从五个地方启动:每小时一次的 Gmail 检查、两个表单、一个表格编辑 webhook 和一次 Cal.com 预约。入职表单需要填写:

  • First Name、Last Name 和 Email
  • Resume 和 Portfolio Link
  • Years Of Experience 和 Expected Salary
  • 第一封邮件里的 Code

动作

  1. Gmail 找到新邮件,OpenAI 从主题里读出职位名称
  2. 把姓名、邮箱地址、职位、日期和一个随机代码写成一行存进表格,并发出第一封邮件
  3. 入职表单和任务表单按代码更新这一行
  4. 在表格里勾选 Screening、Rejected 或 Test approved,会通过 webhook 发出对应的邮件
  5. Cal.com 上有人预约,就把面试标记为已安排

结果

每位候选人一行记录,显示他们进行到哪一步,并在你选定的每一步发出邮件

集成

开始之前要准备好这些。

Gmail

邮件

找到新的求职邮件,并用你自己的账号发出跟进邮件。

需要一个有权读取和发送邮件的 Google 账号

Google Sheets

电子表格

每位候选人一行,求职邮件、两个表单和预约都会更新它。

需要有 Sheets 权限的 Google 账号,以及一个带 20 列的表格

OpenAI

语言模型

用 gpt-4o-mini 从每个邮件主题里读出职位名称,并以 JSON 回答。

需要OpenAI API 密钥

Cal.com

日程预约

候选人预约面试时,把他们拿到的代码一起告诉工作流。

需要Cal.com API 密钥

工作流检查

由 Mindket 于 2026年11月13日检查

步骤
16 个步骤,由 Webhook 调用、由 Gmail 事件、由表单或由 Cal.com 事件启动
AI
1 个步骤调用 AI 模型:OpenAI
登录
需要登录:Gmail、Google Sheets、Cal.com
API 密钥
文件里没有留下 API 密钥
步骤类型
Mindket 的检查器能读懂它 9 种步骤类型中的 8 种,读不懂的是:Cal.com Trigger

以上内容读自工作流文件,并非实际运行的结果。

关于

它是什么

这个 n8n 工作流在一张 Google 表格里跟进每位求职者,从第一封邮件一直到约好面试。16 个节点分成五条线,每条线有自己的触发器,彼此独立。Gmail 每小时查一次新邮件,OpenAI 从邮件主题里读出职位名称。表格里随即多出一行,写着发件人的姓名和邮箱地址、职位、日期和一个随机代码,同时发出第一封邮件。其他几条线就靠这个代码找回这一行:入职表单向候选人要这个代码,任务表单也要,Cal.com 则把它放在一个预约问题的回答里带过来。另有一条线监听你在表格里的编辑,你标记 Screening、Rejected 或 Test approved 时,它就给候选人发邮件。

  1. Gmail 找到新邮件,OpenAI 读出职位名称
  2. 表格新增一行,候选人收到第一封邮件
  3. 候选人带着代码提交入职表单
  4. 你在表格里勾选 Screening、Rejected 或 Test approved
  5. 任务表单和 Cal.com 预约补齐剩下的内容

适合谁

靠邮件招几个人、又想要一份比收件箱清楚的记录的小团队:创始人、办公室经理和自由职业的招聘顾问。大批量招聘,或者需要权限控制的场合,就别用它。没有任何环节核对输入代码的人是不是代码的主人。表格有多私密,全看它的共享设置。

谁在用,怎么用
行业谁在用怎么用例子
小企业一年只招几个人的老板把每位求职者、每份任务和每场面试都放在一张表里一家咖啡馆的老板一眼就能看出谁还没交任务。
招聘服务自由职业的招聘顾问每个客户一张表,勾选一列就发出对应的进度邮件招聘顾问在三行上勾选 Screening,三位候选人就收到了下一封邮件。
初创公司创始人和运营负责人让表单和预约去填表,团队只管做决定创始人周一打开表格,就知道谁已经约了面试。
工作室和代理公司招设计或开发岗位的招聘经理布置一份带回家做的任务,把它的链接收进 Test Link工作室在表格里逐个看候选人的链接,再勾选 Test Approved。

用在哪里

只要能访问 Gmail、OpenAI、Google Sheets 和 Cal.com,任何 n8n 都能运行它。表格就是看板,你的团队在表格里干活,不用进 n8n。

  • n8n Cloud 或你自己的服务器:导入文件并发布,每小时的检查、两个表单和 webhook 才会运行
  • Google Sheets:装好下面的 Apps Script 之后,在某一行勾选一列,对应的邮件就会发出
  • Cal.com:预约页面需要一个标识符为 code 的问题
  • 表单链接:把两个表单的正式地址写进你自己写的邮件里

设置

点“获取”会把一个压缩包存到你的下载文件夹,里面有 workflow.json 和 Mindket 写的设置说明。作者估计设置要 16 分钟左右。四个 Gmail 节点导入时没有主题也没有正文,要你自己写。

先准备好这些
需要说明
n8nn8n Cloud 或你自己的服务器
Google一个用于 Gmail 和 Google Sheets 的账号,两者各配一个 OAuth2 凭据
OpenAI一个 API 密钥。只有一个节点用它,就是 OpenAI
Cal.com一个账号和它的 API 密钥
一张电子表格README 里列出的 20 列,Code 在 S 列
Apps Script表格里的一小段脚本,把你的编辑发给 Webhook
  1. 在 n8n 里新建一个工作流,打开它的菜单,选 Import from File,选中 workflow.json。
  2. 建好带 20 列的表格,再复制它的 ID:地址里 /d/ 和 /edit 之间那一长串。
  3. 添加一个 Google Sheets OAuth2 凭据。在 Google Sheets、Google Sheets1、Google Sheets2 和 Google Sheets3 里选中它,把 YOUR_SHEET_ID 换成这个 ID。
  4. 添加一个 Gmail OAuth2 凭据,在 Gmail Trigger、Gmail、Gmail1、Gmail2 和 Gmail3 里选中它。
  5. 在 Gmail Trigger 里加一个 Search 过滤条件,只让求职邮件启动运行,比如用你给它们打的标签来筛。
  6. 添加一个 OpenAI 凭据,在 OpenAI 里选中它。
  7. 添加一个 Cal.com 凭据,填你的 API 密钥,在 Cal.com Trigger 里选中它。你发布时,n8n 会自己到 Cal.com 注册 webhook。
  8. 在 Cal.com 里加一个预约问题,标识符设为 code。
  9. 写好四个 Gmail 节点的 Subject 和 Message。
  10. 把下面的 Apps Script 加进表格,填上 Webhook 的正式地址。
  11. 保存,用每个表单的测试地址各提交一次,再点 Publish 发布工作流。

文件里不含让 Webhook 触发的脚本。Webhook 等的是一个 POST 请求,里面有被编辑单元格的值、它的列号,以及整行数据,格式是列表套列表。下面这段草稿发的正是这些。把它放进表格的 Apps Script 编辑器,再给它加一个 On edit 触发器,因为普通的 onEdit 不能调用别的服务器。

function onSheetEdit(e) {
  var sheet = e.range.getSheet();
  var row = sheet.getRange(e.range.getRow(), 1, 1, sheet.getLastColumn()).getValues();
  UrlFetchApp.fetch('YOUR_WEBHOOK_URL', {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify({ value: e.value, range: { columnStart: e.range.getColumn() }, rowValues: row })
  });
}

如何使用

发布之后不用再按什么。来一封新邮件,表格就多一行,第一封邮件也随之发出。之后你在表格里操作:在某一行勾选 Screening、Rejected 或 Test Approved,对应的邮件就发到 L 列的地址。候选人那边用的是两个表单和预约页面。

五条线
线什么时候开始写下什么
求职邮件Gmail Trigger 每小时检查一次,发现了新邮件一行记录,含姓名、邮箱地址、职位、日期和代码,按 Indeed Email 匹配,随后发出第一封邮件
入职候选人提交 On form submission按 Code 写入他们的资料,Questions 设为 TRUE,工作经验一年或以下的把 Rejected 设为 TRUE
表格编辑Apps Script 向 Webhook 发送请求一封邮件:第 7 列交给 Gmail1,第 5 列交给 Gmail2,第 9 列交给 Gmail3
任务候选人提交 On form submission1按 Code 把 Test Complete 设为 TRUE,链接写进 Test Link
面试有人在 Cal.com 上预约按预约里 code 问题的回答,把 Interview Scheduled 设为 TRUE
想要不同的效果,改这里
要改的在哪里改
哪些邮件算求职Gmail Trigger 的 Search 过滤条件
读职位名称的提示词OpenAI 里的几条消息,它按 { "job": "" } 的结构回答
邮件内容四个 Gmail 节点的 Subject 和 Message。在表格编辑触发的邮件里,S 列的代码是 $json.body.rowValues[0][18]
拒绝规则Google Sheets1 里 Rejected 的表达式
表单问题两个表单节点,以及 Google Sheets1 和 Google Sheets2 里对应的列
哪一列发哪封邮件Switch 的三条规则,分别设为 7、5 和 9

示例

Dana Lee 发来一封求职邮件,主题是 Application: Junior Designer。到了下一次每小时的检查,OpenAI 按下面的结构回答,表格里多出 Dana 的一行,Job 写着 Junior Designer。

{ "job": "Junior Designer" }

Dana 收到第一封邮件,带着她的代码提交入职表单,这一行就填满了。你在她那一行勾选 Screening 时,表格的这次编辑会以下面的结构到达 Webhook,这里做了删减,Gmail1 随即写信到 L 列的地址。

{
  "value": "TRUE",
  "range": { "columnStart": 7 },
  "rowValues": [["…", "Dana", "Lee", "Junior Designer", "FALSE", "TRUE", "TRUE", "…"]]
}

新手与专家

新手:n8n 把工作流画成用线连起来的方框,每个方框叫一个节点,只做一件事。这里的画布上是五排互不相连的节点,把它们串起来的是表格和代码,不是 n8n。凭据是 n8n 替你保管的密钥,你在哪个节点里选中它,就交给哪个节点用。每条线都从它自己的触发器测一遍。之后各个节点会显示它们收到了什么、发出了什么。

专家:有三条线按 Code 找到自己的行,第一条线则按发件人的地址匹配。

每条线怎么找到自己的那一行
线匹配列说明
求职邮件Indeed Email追加或更新,所以同一个地址再来一封邮件,会更新这一行并写入一个新的随机代码
入职Code没有哪一行有这个代码时,追加一行新的
任务Code同上
面试Code预约里自定义问题 code 的回答

Filter 用严格模式把被编辑单元格的值和文本 TRUE 作比较,Switch 读取 range.columnStart。Webhook 一收到请求就立即答复。

注意事项

大部分风险来自对外敞开的入口和空白的邮件。

  • 空白邮件:四个 Gmail 节点没有主题也没有正文,发布之前先写好
  • 没过滤的收件箱:触发器没有 Search 过滤条件,每封新邮件都会启动一次运行。这个版本的触发器还会取到你自己发出的邮件,所以你的跟进邮件可能被当成新的求职邮件
  • 代码填错:表单找不到带这个代码的行时,会新加一行不完整的记录
  • 一年规则只在表格里标记 Rejected,不会发任何邮件。n8n 通过 Sheets API 写入,这不会触发你的编辑触发器,所以要发拒信,得你自己填一次这个值
  • 对外敞开的入口:任何拿到表单地址的人都能提交,Webhook 也接受任何 POST 请求,所以要打开它的 Authentication,并让脚本发送同样的请求头
  • 个人数据:邮件主题会发给 OpenAI,候选人的资料存在表格里,也会经过 Gmail 和 Cal.com
  • 费用:每封新邮件一次简短的 OpenAI 调用
  • 凭据:这个 JSON 里没有任何凭据,也没有作者表格里的任何东西

README 和文件

README

Google Sheets 求职者招聘进度跟踪器

一个 n8n 工作流。一封新的求职邮件会变成 Google 表格里的一行,之后两个表单、表格里的一次编辑和一次 Cal.com 预约,带着每位候选人走过初筛、任务和面试。

包里有什么

  • workflow.json:n8n 导出的工作流,16 个节点,分成五条互不相连的线,每条线有自己的触发器。里面没有任何凭据,也没有作者的表格。webhook 的路径在原来的副本里是随机的,这里改成了 hiring-sheet-edit。
  • README.md:这份设置说明,压缩包里的是英文版。

开始之前

  • 一个 n8n 实例,n8n Cloud 或自己的服务器都行。
  • 一个用于 Gmail 和 Google Sheets 的 Google 账号。
  • 一个 OpenAI API 密钥。
  • 一个 Cal.com 账号和它的 API 密钥,给预约那条线用。
  • 下面说的那张表格,以及后面那段把你的编辑告诉 Webhook 的 Apps Script 小脚本。

表格

建一张表格,在第 1 行按下面的顺序写这 20 个列名,从 A 列一直到 T 列:

Indeed Email, First Name, Last Name, Job, Rejected, Questions, Screening, Test Complete, Test Approved,
Interview Scheduled, Hire, Email, Resume, Portfolio Link, Years of Experience, Expected Salary, Notes, Date Added,
Code, Test Link

表格编辑那条线按位置读列,所以这些列别挪位置。

| 列 | 位置 | 为什么要紧 |
|---|---|---|
| Rejected | E,第 5 列 | 编辑这里会发出 Gmail2 的邮件 |
| Screening | G,第 7 列 | 编辑这里会发出 Gmail1 的邮件 |
| Test Approved | I,第 9 列 | 编辑这里会发出 Gmail3 的邮件 |
| Email | L,第 12 列 | 三封编辑邮件发往的地址 |

Indeed Email 存的是求职邮件的发件地址。Code 是之后每一步用来匹配的键。

设置

  1. 在 n8n 里新建一个工作流,打开它的菜单,选 Import from File,选中 workflow.json。
  2. 建好带 20 列的表格,再复制它的 ID:地址里 /d/ 和 /edit 之间那一长串。
  3. 添加一个 Google Sheets OAuth2 凭据。在 Google Sheets、Google Sheets1、Google Sheets2 和 Google Sheets3 里选中它,把 YOUR_SHEET_ID 换成这个 ID。每个节点用的都是第一个工作表,也就是 gid=0。
  4. 添加一个 Gmail OAuth2 凭据,在 Gmail Trigger、Gmail、Gmail1、Gmail2 和 Gmail3 里选中它。
  5. 在 Gmail Trigger 里加一个 Search 过滤条件,只让求职邮件启动运行,比如用你给它们打的标签来筛。
  6. 添加一个 OpenAI 凭据,在 OpenAI 里选中它。
  7. 添加一个 Cal.com 凭据,填你的 API 密钥,在 Cal.com Trigger 里选中它。你发布时,n8n 会自己到 Cal.com 注册 webhook,所以没有地址要复制。
  8. 在 Cal.com 里加一个预约问题,标识符设为 code。Google Sheets3 从这个问题读取回答。
  9. 写好 Gmail、Gmail1、Gmail2 和 Gmail3 的 Subject 和 Message。文件里它们是空的。
  10. 把下面的 Apps Script 加进表格,填上 Webhook 的正式地址。
  11. 保存,用每个表单的测试地址各提交一次,再点 Publish 发布,这样每小时的检查、两个表单和 webhook 才会运行。

表格编辑的 webhook

文件里不含让 Webhook 触发的脚本。Webhook 等的是一个 POST 请求,里面有被编辑单元格的值、它的列号,以及整行数据,格式是列表套列表。下面这段草稿发的正是这些。把它放进表格的 Apps Script 编辑器,替换 YOUR_WEBHOOK_URL,再到 Triggers 里给它加一个 On edit 触发器:普通的 onEdit 不能调用别的服务器。

function onSheetEdit(e) {
  var sheet = e.range.getSheet();
  var row = sheet.getRange(e.range.getRow(), 1, 1, sheet.getLastColumn()).getValues();
  UrlFetchApp.fetch('YOUR_WEBHOOK_URL', {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify({ value: e.value, range: { columnStart: e.range.getColumn() }, rowValues: row })
  });
}

只有 value 是文本 TRUE 时,Filter 才会放行,所以要勾选复选框,或者直接输入 TRUE。接着 Switch 把第 7 列交给 Gmail1,第 5 列交给 Gmail2,第 9 列交给 Gmail3,每个节点都写信到 rowValues[0][11],也就是 L 列。

什么时候运行什么

| 线 | 什么时候开始 | 做什么 |
|---|---|---|
| 求职邮件 | Gmail Trigger 每小时检查一次,发现了新邮件 | OpenAI 从主题里读出职位名称,Google Sheets 按 Indeed Email 匹配,新增或更新这一行,Gmail 写信给发件人 |
| 入职 | 候选人提交 On form submission | Google Sheets1 更新按 Code 匹配到的行,把 Questions 设为 TRUE,并设置 Rejected |
| 表格编辑 | Apps Script 向 Webhook 发送请求 | Gmail1、Gmail2 或 Gmail3 写信给候选人 |
| 任务 | 候选人提交 On form submission1 | Google Sheets2 把 Test Complete 设为 TRUE,把链接存进 Test Link |
| 面试 | 有人在 Cal.com 上预约 | Google Sheets3 把 Interview Scheduled 设为 TRUE |

五条线在画布上互不相连,只有表格和代码把它们串在一起。

新行的 Code 来自 Math.floor(Math.random() * 999999),是一个最多六位的数字。First Name 和 Last Name 是把发件人的显示名在第一个空格处拆开得到的。Date Added 的写法类似 02/11/26 09:30AM。

Years Of Experience 为 1 或以下时,Google Sheets1 把 Rejected 设为 TRUE,否则设为 FALSE。

改变结果

  • 哪些邮件算求职邮件:Gmail Trigger 的 Search 过滤条件。
  • 读职位名称的提示词:OpenAI 里的几条消息。这是一次 gpt-4o-mini 调用,按 { "job": "" } 的结构回答。
  • 邮件内容:四个 Gmail 节点的 Subject 和 Message。在三封编辑邮件里,$json.body.rowValues[0] 是整行数据,所以 S 列的代码是 rowValues[0][18],从 0 开始数。
  • 拒绝规则:Google Sheets1 里 Rejected 的表达式。
  • 表单问题:两个表单节点的字段,以及 Google Sheets1 和 Google Sheets2 里对应的列。
  • 哪一列发哪封邮件:Switch 的三条规则,分别设为 7、5 和 9。

注意事项

  • 空白邮件:四个 Gmail 节点没有主题也没有正文,写好之前发不出任何有用的内容。列名透露了一个顺序:第一封邮件请候选人填入职表单,并附上代码;Gmail1 布置任务,发出任务表单;Gmail3 请候选人预约面试;Gmail2 用来婉拒。
  • 没过滤的收件箱:文件里的触发器没有 Search 过滤条件,所以这个账号收到的每封新邮件都会启动一次运行。这个版本的触发器还会取到你自己发出的邮件,所以工作流自己发的邮件可能被当成新的求职邮件。发布之前先加好过滤条件。
  • 代码填错:Google Sheets1 和 Google Sheets2 找不到带这个代码的行时会追加一行,所以代码打错会留下一行不完整的记录。表单也不核对填代码的人是不是代码的主人。
  • 同一个发件人再来一封邮件,会更新同一行并换上新的 Code,旧代码就失效了。
  • 一年规则只在表格里把候选人标成 Rejected,自己不发任何邮件。n8n 通过 Sheets API 写入这个值,这不会触发你的编辑触发器,所以只有你亲手填这个值时,拒信才会发出。
  • 对外敞开的入口:任何拿到表单地址的人都能提交,Webhook 也接受任何 POST 请求。打开它的 Authentication,并让脚本发送同样的请求头。
  • 个人数据:邮件主题会发给 OpenAI,候选人的资料存在表格里,也会经过 Gmail 和 Cal.com。看看你所在地区对招聘数据有什么要求。
  • 费用:每封新邮件一次简短的 OpenAI 调用。Gmail、Google Sheets 和表单在 n8n 里不另外花钱。
文件
README.md  7 KB
workflow.json  39 KB

2 个文件,共 47 KB,以 zip 压缩包下载。

更新内容

  • 第 1 版 · 2026-11-03

评价

还没有评分

写评价

还没有评价。

Mindket 的更多商品

查看 Mindket 的全部商品

anaksor-ocr

Sokheng · 工具包

这个模型从文档、收据和路牌照片里读取高棉语和英语文字,用一个检测器找文本行,再用识别器读每一行。适合需要在 Python 里做高棉语 OCR 的开发者。

新上架

Qwen2.5-7B-Instruct-GGUF

Qwen · 工具包

Qwen2.5-7B-Instruct 的 GGUF 文件,提供八种量化大小,可通过 llama.cpp 在本地聊天。适合想在自己电脑上用 7.6B 强力模型、又不想搭 Python 环境的人。

新上架

ACE-Step 1.5 XL SFT

ACE-Step · 工具包

用 4B 扩散解码器根据文字生成音乐,50 步并带引导控制,音频质量高于基础版。适合拥有 12 GB 或更多显存 GPU 的创作者。

新上架

商务类的相似商品

查看商务类的全部商品

pplx-decider-v1.1-27b

perplexity-ai · 工具包

根据文字和图片为一个决策挑出最合适的选项,比如哪个团队应该处理一条请求,并给出每个选项的概率,适合构建分流和审核工作流的开发者。

新上架

NuExtract3

numind · 工具包

以文本或图像读取文档,按你要的字段填写 JSON 模板,或把页面转成 Markdown。这是一个 4B 模型,适合处理扫描件、表单和发票的团队。

新上架

Drex DLM

nace-ai · 工具包

一次推理就对一份文档的是非题、选择题和打分题给出每个选项的概率。这是 Nace.AI 的 8B 决策模型,你可以自己运行,许可证为非商业。

新上架