使用BrowserAct实现电商店铺新品自动监控
高级
这是一个Market Research领域的自动化工作流,包含 24 个节点。主要使用 If, Code, Merge, Slack, GoogleSheets 等节点。 使用BrowserAct和Slack警报监控Shopify店铺新品
前置要求
- •Slack Bot Token 或 Webhook URL
- •Google Sheets API 凭证
分类
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "jSHygjNuZdSzA83e",
"meta": {
"instanceId": "88804d8e264d231c18413147cc92e4245b20ae7b97d774bad847556f645c8192",
"templateCredsSetupCompleted": true
},
"name": "使用 BrowserAct 实现电商店铺新品自动监控",
"tags": [],
"nodes": [
{
"id": "4a57ae79-3420-41de-8712-3bfb0638ee44",
"name": "计划触发器",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-544,
-128
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "ae8004bb-cbc4-463d-bfa1-f4e0025f89a3",
"name": "获取表格中的行",
"type": "n8n-nodes-base.googleSheets",
"position": [
-416,
-128
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=0",
"cachedResultName": "Competitor Store List"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
"cachedResultName": "Shopify New Product Monitor"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "a4c4d616-994b-47f7-a480-d7b25df1678e",
"name": "创建表格",
"type": "n8n-nodes-base.googleSheets",
"position": [
0,
-112
],
"parameters": {
"title": "={{ $json.Name }}",
"options": {},
"operation": "create",
"documentId": {
"__rl": true,
"mode": "list",
"value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
"cachedResultName": "Shopify New Product Monitor"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "96c17b4b-81fc-4367-a1f5-48f6df2012e8",
"name": "发送消息",
"type": "n8n-nodes-base.slack",
"position": [
1280,
-112
],
"webhookId": "81bd3bf5-c72c-4329-a71f-356d8e418601",
"parameters": {
"text": "=New Product Added to {{ $('Loop Over Items').first().json.Name }}\nWebsite Please Check it out\n------------------------------------------------------\n{{ $('Schedule Trigger').first().json['Readable date']}}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09LWT82KHN",
"cachedResultName": "new_product_added"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "5rQCkyObBqbHIbZA",
"name": "Slack account"
}
},
"typeVersion": 2.3
},
{
"id": "09378204-fcb5-4ab3-bc55-d152ced637ff",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
832,
-128
],
"parameters": {
"mode": "chooseBranch",
"useDataOfInput": 2
},
"typeVersion": 3.2
},
{
"id": "e02d1d99-71f7-4f28-b32c-cf87350b6f6c",
"name": "便利贴 - 介绍",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
-512
],
"parameters": {
"width": 544,
"height": 460,
"content": "## 立即试用!"
},
"typeVersion": 1
},
{
"id": "84f37a3b-9084-42c1-9a7c-10cf3dcbce2f",
"name": "便利贴 - 使用方法",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
-32
],
"parameters": {
"width": 544,
"height": 212,
"content": "## 使用方法"
},
"typeVersion": 1
},
{
"id": "26e56a85-706b-47cf-8c4f-744ff76ba4ec",
"name": "便利贴 - 需要帮助",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1104,
192
],
"parameters": {
"width": 544,
"height": 152,
"content": ""
},
"typeVersion": 1
},
{
"id": "4f57eeca-65ca-4d2d-85f9-c3ac2a121caa",
"name": "便签 - 输入与循环",
"type": "n8n-nodes-base.stickyNote",
"position": [
-432,
-368
],
"parameters": {
"color": 6,
"width": 368,
"height": 216,
"content": "### 📋 1. 设置与循环"
},
"typeVersion": 1
},
{
"id": "ba28c483-2847-4942-919b-2fda4f7ca43e",
"name": "便签 - 抓取与存储",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-368
],
"parameters": {
"color": 5,
"width": 560,
"height": 208,
"content": "### 🤖 2. 抓取与存储数据"
},
"typeVersion": 1
},
{
"id": "4eee11df-f0aa-48e3-8b32-0612749612b4",
"name": "便签 - 比较与警报",
"type": "n8n-nodes-base.stickyNote",
"position": [
816,
-368
],
"parameters": {
"color": 3,
"width": 624,
"height": 208,
"content": "### 🧠 3. 比较与警报"
},
"typeVersion": 1
},
{
"id": "8e99c2b5-ef85-491b-ab56-9888208054f6",
"name": "获取用于比较的行",
"type": "n8n-nodes-base.googleSheets",
"position": [
608,
-256
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1605316777,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=1605316777",
"cachedResultName": "hiutdenim - Men"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
"cachedResultName": "Shopify New Product Monitor"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"executeOnce": true,
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "b520b61b-025e-4c40-9495-f719c5978d87",
"name": "比较数据",
"type": "n8n-nodes-base.code",
"position": [
960,
-128
],
"parameters": {
"jsCode": "// The 'items' variable is an array of objects, where each object\n// corresponds to an input item and has a 'json' property containing its data.\n// In the Function node, items[0] will be the first input (e.g., from Google Sheets Get Row 1)\n// and items[1] will be the second input (e.g., from Google Sheets Get Row 2) if you connect two nodes.\n\nconst list1 = $input.all(); // Assuming your first input is a list of maps/items under a 'data' key\nconst list2 = $('Get row(s) for Compare').all(); // Assuming your second input is a list of maps/items under a 'data' key\n\n// ----------------------------------------------------------------------\n// 1. Create a Set of all 'Name' values from the second list for quick lookup\n// ----------------------------------------------------------------------\nconst namesInList2 = new Set(list2.map(item => item.json.Name).filter(name => name != null));\n\n// ----------------------------------------------------------------------\n// 2. Check if ANY name from list1 is missing in list2\n// The .some() method will stop and return true the moment the condition is met.\n// ----------------------------------------------------------------------\nconst isMissingName = list1.some(item1 => {\n const nameToCheck = item1.json.Name;\n \n // Condition: Is the name NOT null AND is it NOT present in the namesInList2 Set?\n return nameToCheck != null && !namesInList2.has(nameToCheck);\n});\n\n// ----------------------------------------------------------------------\n// 3. Output a SINGLE item with the Alert status\n// ----------------------------------------------------------------------\nif (isMissingName) {\n return [{\n json: {\n \"Alert\": true,\n \"Message\": \"One or more names from the first list are missing in the second list.\"\n }\n }];\n} else {\n return [{\n json: {\n \"Alert\": false,\n \"Message\": \"All names from the first list are present in the second list.\"\n }\n }];\n}"
},
"typeVersion": 2
},
{
"id": "ed459d93-efe4-4b7f-a66c-5a3d8e8cb721",
"name": "解析 JSON",
"type": "n8n-nodes-base.code",
"position": [
336,
-112
],
"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": "530fc448-8f83-4c49-8c29-60b3bac8eb05",
"name": "获取工作流数据",
"type": "n8n-nodes-browseract-workflows.browserAct",
"position": [
224,
-112
],
"parameters": {
"taskId": "={{ $json.id }}",
"operation": "getTask",
"waitForFinish": true
},
"credentials": {
"browserActApi": {
"id": "AzKMhR2eAlOjzDiJ",
"name": "BrowserAct account"
}
},
"typeVersion": 1
},
{
"id": "e3833253-d698-4144-8999-a638c6999977",
"name": "运行工作流",
"type": "n8n-nodes-browseract-workflows.browserAct",
"position": [
112,
-112
],
"parameters": {
"workflowId": "57142458383023994",
"inputParameters": {
"parameters": [
{
"name": "Competitor_Store_Link",
"value": "={{ $('Loop Over Items').item.json.Link }}"
},
{
"name": "Pagination_Type",
"value": "={{ $('Loop Over Items').item.json[\"Pagination Type\"] }}"
},
{
"name": "Total_Product",
"value": "10"
}
]
},
"additionalFields": {}
},
"credentials": {
"browserActApi": {
"id": "AzKMhR2eAlOjzDiJ",
"name": "BrowserAct account"
}
},
"typeVersion": 1
},
{
"id": "127198eb-8387-45e9-b4f1-ce70c01fbb7c",
"name": "存储数据",
"type": "n8n-nodes-base.googleSheets",
"position": [
544,
-112
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Price",
"type": "string",
"display": true,
"required": false,
"displayName": "Price",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1605316777,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=1605316777",
"cachedResultName": "hiutdenim - Men"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
"cachedResultName": "Shopify New Product Monitor"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "b637be2d-8c78-4517-a9bc-68fb12eb2019",
"name": "获取用于比较的数据",
"type": "n8n-nodes-base.googleSheets",
"position": [
672,
-112
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1605316777,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=1605316777",
"cachedResultName": "hiutdenim - Men"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
"cachedResultName": "Shopify New Product Monitor"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"executeOnce": true,
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "db5e7117-f9bf-4cad-8d22-eb2ca4a9e07c",
"name": "检查新产品",
"type": "n8n-nodes-base.if",
"position": [
1088,
-128
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "db0940fb-0954-4792-8065-eb7147e8068e",
"operator": {
"type": "boolean",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.Alert }}",
"rightValue": ""
},
{
"id": "03a29ec0-3f86-4d9b-8834-c08b3ddf8953",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.Alert }}",
"rightValue": "=true"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "a7712d64-c968-4131-b6d6-eea600699e86",
"name": "遍历项目",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-240,
-128
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "d3e295c7-249c-4c09-bb66-828b1335c23e",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-432,
-144
],
"parameters": {
"color": 6,
"width": 368,
"height": 240,
"content": ""
},
"typeVersion": 1
},
{
"id": "d34cb56d-dabe-4f4e-ae84-605893f7fafb",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-144
],
"parameters": {
"color": 5,
"width": 560,
"height": 240,
"content": ""
},
"typeVersion": 1
},
{
"id": "17fdf64a-8c47-4661-9a32-43be26c24938",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
-368
],
"parameters": {
"color": 5,
"width": 272,
"height": 464,
"content": ""
},
"typeVersion": 1
},
{
"id": "9e96b86b-3615-4c14-be2f-555c7ba386de",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
816,
-144
],
"parameters": {
"color": 3,
"width": 624,
"height": 240,
"content": ""
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "8b998d65-770d-4218-a6cb-11815c365e72",
"connections": {
"Merge": {
"main": [
[
{
"node": "Compare Datas",
"type": "main",
"index": 0
}
]
]
},
"Parse Json": {
"main": [
[
{
"node": "Get row(s) for Compare",
"type": "main",
"index": 0
},
{
"node": "Store Data",
"type": "main",
"index": 0
}
]
]
},
"Store Data": {
"main": [
[
{
"node": "Get Data For Compare",
"type": "main",
"index": 0
}
]
]
},
"Create sheet": {
"main": [
[
{
"node": "Run a workflow",
"type": "main",
"index": 0
}
]
]
},
"Compare Datas": {
"main": [
[
{
"node": "Check New Product",
"type": "main",
"index": 0
}
]
]
},
"Run a workflow": {
"main": [
[
{
"node": "Get workflow Data",
"type": "main",
"index": 0
}
]
]
},
"Send a message": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Create sheet",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get row(s) in sheet",
"type": "main",
"index": 0
}
]
]
},
"Check New Product": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
],
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Get workflow Data": {
"main": [
[
{
"node": "Parse Json",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Get Data For Compare": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Get row(s) for Compare": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 市场调研
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
使用BrowserAct和Slack的实时MAP执行和价格违规警报
Google表格、BrowserAct和Slack的实时MAP执行和价格违规警报
If
Code
Merge
+6
20 节点Madame AI Team | Kai
市场调研
使用 BrowserAct 和 Gemini 查找并筛选有资金支持的线索
通过 BrowserAct 和 Gemini 查找并筛选有资金支持的潜在客户
If
Code
Merge
+9
29 节点Madame AI Team | Kai
潜在客户开发
高级WooCommerce产品对账与同步
使用Google Gemini AI和BrowserAct同步WooCommerce库存并创建产品
If
Code
Merge
+9
31 节点Madame AI Team | Kai
客户关系管理
我的工作流 2
结合 AI 竞品监控和收入优化的自动化动态定价
If
Code
Merge
+8
25 节点vinci-king-01
市场调研
从任何网站抓取并导入产品到 Shopify(含变体和图片)(针对鞋类优化 - NIKE 到 Shopify)
使用 BrowserAct 抓取并导入鞋类产品到 Shopify(含变体和图片)
Set
Code
Merge
+9
25 节点Madame AI Team | Kai
杂项
GitHub 用户活动与数据抓取器(数据丰富引擎)
使用 BrowserAct 抓取详细 GitHub 个人资料到 Google Sheets
Set
Code
Merge
+7
30 节点Madame AI Team | Kai
潜在客户开发
工作流信息
难度等级
高级
节点数量24
分类1
节点类型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 查看 →
分享此工作流