2026-09-05 · 原文发布日
监控竞品网页变动并邮件推送AI分级摘要
竞品情报n8n流程:每天读取Google Sheets里登记的竞品URL,抓取页面转成规范化文本并生成指纹哈希,没变化的页面跳过AI分析;有变化的算增删行diff交给Gemini打0到5分的重要度并生成标题、摘要和“为什么重要”,最后只把达到阈值的变动按分数排序成HTML邮件经Gmail发出,同时更新表格快照。
原文要点
该流程每天运行,读取Google Sheets名为Pages的表,列包括url、name、last_hash、last_snapshot、last_checked。它逐个抓取页面HTML,转成规范化可读文本并生成哈希,容忍噪音标记;哈希没变就跳过AI。变化页计算增删行diff并受配置上限限制,交Google Gemini/PaLM输出0到5重要度、类别、标题、摘要和为什么重要,再合并回页面记录。随后把每个页面的最新hash、快照文本和last_checked写回Sheets;最后聚合达到阈值的变更,按分数排序生成HTML摘要,经Gmail发送,没有达标变更就不发。配置含收件人、significance阈值和diff大小上限。
这次做成什么
搭一条可复核的竞品监测练习:Sheets登记URL→每日抓取→规范化文本与哈希→无变化跳过→有变化算diff→Gemini分级→写回快照→达到阈值才汇成HTML邮件;给出表结构、评分提示词、阈值配置和合成数据,不提供虚构可导入n8n文件。
准备什么
- n8n可定时运行,且网络能访问目标竞品公开页面
- Google Sheets OAuth凭据,能读写同一Spreadsheet的Pages工作表
- Gemini/PaLM API Key用于diff评分,调用量需自行控制
- Gmail OAuth2凭据,仅授权发送 digest 给指定收件人
- Pages表已建且列名完全为url,name,last_hash,last_snapshot,last_checked
具体怎么做
建Pages表与配置
新建Google Sheet,工作表命名Pages,第一行写url,name,last_hash,last_snapshot,last_checked。n8n加Settings/Set节点:spreadsheet_id、recipient_email="compete@example.com"、significance_threshold=3、max_diff_lines=120、user_agent="Mozilla/5.0 compatible-monitor"。字段映射统一为url,name,last_hash,last_snapshot,last_checked,current_text,current_hash,diff,score,category,headline,summary,why_it_matters。
每日读取并逐页抓取
Schedule Trigger设每天一次。Google Sheets Read选spreadsheet_id与Pages,输出每行。接SplitInBatches或Loop逐条处理,HTTP Request GET {{$json.url}},响应格式text,超时建议30秒,失败写入fetch_error但不中断全表。HTML-to-Text/Function节点去script、style、noscript,压缩空白,统一小写标签差异,得到current_text。
哈希判变与diff截断
Function节点对current_text做稳定哈希,可用SHA-256,写成current_hash。若current_hash===last_hash,设changed=false并跳过Gemini。若不同,按行对比last_snapshot与current_text,生成added_lines与removed_lines,超过max_diff_lines即截断并标记diff_truncated=true;首行last_hash为空时视为首次快照,score流程可跳过或标baseline。
Gemini分级并写回快照
把url,name,diff和配置上限交给Gemini,要求只输出JSON:score整数0-5、category、headline、summary、why_it_matters。Function校验score越界则钳到0-5,缺字段设空串。无论是否发信,都用Google Sheets Update按url匹配写回last_hash=current_hash、last_snapshot=current_text、last_checked=当前ISO时间;抓取失败则只更新last_checked并保留旧快照。
聚合阈值并HTML邮件
Collect所有changed=true且score>=significance_threshold的记录,按score降序、再按name升序。HTML模板含生成时间、阈值、每条headline链接到url、score徽标、category、summary、why_it_matters、截断提示。Gmail Send到recipient_email,主题“竞品变动摘要:N条≥阈值”。若聚合为空,走NoOp不发信;测试先用合成快照而非真实竞品高频抓取。
可直接复制的材料
Pages表起始CSV
本站合成示例;换成你要监控的公开URL,确认遵守目标站条款与抓取频率。
url,name,last_hash,last_snapshot,last_checked
https://example-a.com/pricing,竞品A价格页,,,
https://example-b.com/changelog,竞品B更新日志,,,
https://example-c.com/careers,竞品C招聘页,,,Gemini变更分级提示词
本站独立编写;模型、温度、JSON模式与token上限需在你的Gemini节点核对,示例不保证固定耗时或费用。
你是竞品情报分析师。输入给你页面名称、URL、旧快照与新快照的增删行diff。只输出JSON,不要Markdown。字段:score为0到5整数;category从pricing,feature,messaging,security,hiring,other中选一个;headline不超过24字;summary不超过80字;why_it_matters不超过80字。评分标准:0无实质变化;1文案或格式微调;2小功能/小幅价格/岗位增减;3影响部分客户的重要功能、套餐或合规表述;4核心价格、核心能力、重大安全或市场定位变化;5可能立即改变采购决策的突变。若diff被截断,在summary末尾注明“diff已截断”。输出示例:{"score":4,"category":"pricing","headline":"入门版涨价并砍免费额度","summary":"月付从19到29,免费额度从1000次降到200次,diff已截断","why_it_matters":"低价获客话术失效,销售需更新报价对比表"}监控配置与判定规则
本站练习配置;significance_threshold、diff上限和是否首快照跳过都可改,免费模板不代表Gemini/Gmail免费。
{"spreadsheet_id":"REPLACE_SHEET_ID","sheet_tab":"Pages","recipient_email":"compete@example.com","significance_threshold":3,"max_diff_lines":120,"max_snapshot_chars":20000,"request_timeout_ms":30000,"concurrency":1,"baseline_policy":"first_seen_skip_ai","send_empty_digest":false,"hash_algorithm":"sha256","sort_order":"score_desc_then_name_asc"}输入与输出示例
本站虚构演示,数字字段相互对应,非作者运行结果,未声称实测。
输入
Pages放3条合成URL。竞品A旧快照含“Pro ¥19/月,免费1000次”,新快照为“Pro ¥29/月,免费200次,新增SSO”;竞品B哈希不变;竞品C首次登记无last_hash。阈值=3,max_diff_lines=120。对应输出
期望聚合只含竞品A:current_hash不同,diff显示-免费1000次/+免费200次、-¥19/+¥29、+新增SSO,Gemini示意输出score=4、category=pricing、headline=“涨价并加SSO”;竞品B changed=false跳过AI;竞品C按baseline_policy写回快照不评分。HTML邮件共1条,主题“竞品变动摘要:1条≥阈值”,三条Pages均更新last_checked,B的last_snapshot不变。做完检查这些
- Pages列名与字段映射完全一致,读写节点选同一spreadsheet和Pages
- 同一页面current_text不变时current_hash稳定,changed=false且不进Gemini节点
- 旧快照删除行以-开头、新增行以+开头,超过max_diff_lines时diff_truncated=true
- score低于阈值不进入HTML,但last_hash、last_snapshot、last_checked仍写回
- 聚合为空时Gmail分支不执行,收件箱不应出现空摘要邮件
容易卡住的地方
- 广告、时间戳和动态脚本会造成假变化,规范化必须去script/style并稳定空白
- last_snapshot过长会撑爆Sheets单元格,需用max_snapshot_chars截断并知道会丢尾部证据
- 整页改版会让diff接近全量,评分可能失真,应限制行数并人工抽查
- 并发抓取易触发目标站限流,配置保持concurrency=1并遵守robots与条款
- 首次抓取没有旧快照,若误送AI会把基线当大变更
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Monitor competitor pages and email AI-ranked digests with Sheets, Gemini, Gmail
- 原作者
- Lhoussaine Ait Aissa
- 原始发布日期
- 2026-09-05T14:32:49.516Z
- 来源
- https://n8n.io/workflows/19249