2026-10-03 · 原文发布日
每周自动汇总招聘方官网的在招职位到Airtable
这个n8n模板每周运行:从Airtable读取机构名单,先检查已存的招聘页链接是否有效,失效就用Firecrawl抓官网找到新的招聘页并回写;再抓取页面交给OpenAI提取结构化职位列表,按标题和摘要去重后,把新职位写入Airtable并关联机构、记录状态和发现日期。适合求职跟踪或做职位聚合库的人。
原文要点
原模板每周定时运行:从Airtable读取机构名单,对已存的招聘页链接发请求检查是否返回200;缺失或失效时用Firecrawl抓官网找出疑似招聘页并回写Airtable;再抓招聘页内容交给OpenAI提取结构化职位,按职位标题和摘要与Airtable已有vacancy比对去重;最后把新职位写入Airtable并关联机构、写入状态、截止日期和发现日期。凭据需要Airtable个人访问令牌、Firecrawl API key(以FIRECRAWL_API_KEY环境变量供HTTP请求使用)和OpenAI凭据。
这次做成什么
搭出原模板每周汇总链路的手动触发练习版:在Airtable测试base中验证一条已存招聘页链接、失效时用Firecrawl补抓并回写、用OpenAI提取结构化职位、按标题加摘要与Vacancies查重后写入新职位并关联机构,跑通后再启用每周定时。
准备什么
- n8n账号(云端或自托管均可)并启用手动触发执行
- 一个Airtable base,含Organisations与Vacancies两张表
- Airtable个人访问令牌(仅授予该base读写权限的测试令牌)
- Firecrawl API key和OpenAI API key(建议用低额度测试key)
具体怎么做
建Airtable两张表
在Airtable新建base,Organisations表建字段Organisation Name(单行文本)、Website URL(URL)、Career Page(URL);Vacancies表建Title、Snippet、Status、Deadline、Discovery Date,以及一个Link to Organisations关联字段。先手动录入下文示例CSV中的一行机构数据。
配三个凭据
在n8n的Credentials里新建Airtable Personal Access Token凭据粘贴令牌;新建OpenAI凭据;Firecrawl不提供专用节点,按模板要求在环境变量里设置FIRECRAWL_API_KEY,HTTP Request节点通过该变量带Authorization头。自托管时在启动n8n前export该变量。
搭触发与读取链路
练习版用Manual Trigger代替每周定时;接一个Airtable节点读取Organisations表全部行;再用HTTP Request节点对每行的Career Page发GET,预期返回200即有效。分支:状态非200或字段为空走Firecrawl路径。
失效链接的补抓分支
失效分支用HTTP Request调Firecrawl抓取该机构Website URL的站内链接列表,筛选含career、jobs、join等关键词的候选,取最匹配一条,用Airtable Update节点把新链接写回该机构行的Career Page字段。
提取职位并去重写入
对有效招聘页用Firecrawl抓正文,交给OpenAI节点,提示词见下方材料,要求只输出JSON数组。之后用Airtable Search按Title+Snippet在Vacancies表查重,不存在的用Create节点写入,关联机构并填Status=新发现、Discovery Date=当天日期。
可直接复制的材料
OpenAI职位结构化提取提示词(本站编写)
本站独立编写的示例提示词,{{page_content}}需替换为Firecrawl返回的正文变量;字段名需与Vacancies表映射一致。
你是招聘信息提取器。下面是一家机构招聘页的网页正文。请提取所有正在招聘的职位,只输出一个JSON数组,不要输出任何其他文字。每个元素包含:title(职位名称)、location(地点,未知填"未注明")、snippet(不超过60字的职位摘要)、deadline(申请截止日期,格式YYYY-MM-DD,未知填null)、url(职位详情链接,相对链接请用页面域名补全)。如果页面没有任何在招职位,输出[]。网页正文如下:
{{page_content}}Organisations表测试数据CSV(合成)
本站虚构的合成数据,两条分别覆盖链接有效和缺失两种分支;域名均为示例域,需替换为真实机构。
Organisation Name,Website URL,Career Page
星桥教育科技,https://starbridge-edu.example.com,https://starbridge-edu.example.com/careers
蓝湾数据分析,https://bluebay-data.example.com,Vacancies表字段映射配置
本站按原文描述整理的映射方案;原模板的具体节点参数需在导入后以模板实际配置为准。
{
"table": "Vacancies",
"fields": {
"Title": "从OpenAI输出的title写入",
"Snippet": "从OpenAI输出的snippet写入",
"Status": "固定值:新发现",
"Deadline": "OpenAI输出的deadline,null则留空",
"Discovery Date": "当天日期,格式YYYY-MM-DD",
"Organisation": "关联字段,写入当前Organisations行的记录ID"
},
"dedupeKey": ["Title", "Snippet"]
}输入与输出示例
本站虚构演示,非原作者运行结果;示例域名与职位均为合成。
输入
Organisations表中一行:星桥教育科技,官网https://starbridge-edu.example.com,已存Career Page链接返回404失效;Vacancies表中已有职位“课程运营专员”。对应输出
Firecrawl在官网抓到新链接https://starbridge-edu.example.com/jobs并回写Career Page;OpenAI从新页面提取出2个职位:[{"title":"课程运营专员","snippet":"负责线上课程排期与学员社群运营"},{"title":"前端开发工程师","snippet":"负责教学平台前端开发与性能优化","deadline":"2026-11-15"}];去重后“课程运营专员”被跳过,仅“前端开发工程师”写入Vacancies,Status=新发现,Discovery Date=2026-10-03,并关联星桥教育科技。做完检查这些
- 对失效Career Page链接执行后,Organisations表中该行的Career Page被新链接覆盖更新
- OpenAI节点输出为合法JSON数组,且无职位时输出[]而不是报错文本
- 已存在于Vacancies的同名同摘要职位不会重复创建记录
- 新写入的Vacancies行带有机构关联、Status和Discovery Date三个字段
容易卡住的地方
- Firecrawl key必须通过FIRECRAWL_API_KEY环境变量注入HTTP请求头,漏设会全部401
- Firecrawl、OpenAI、Airtable均可能产生按量费用,练习时先用单机构手动触发控制消耗
- 原模板用OpenAI选定模型,需确认你的账号有该模型权限,否则在节点里换可用模型
- 网页正文过长可能超出模型上下文,建议在提示词前截断或分段处理
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Track and store open job listings with Firecrawl, OpenAI, and Airtable
- 原作者
- Luka Margiani
- 原始发布日期
- 2026-10-02T16:54:51.673Z
- 来源
- https://n8n.io/workflows/20350