This workflow corresponds to n8n.io template #11847 — we link there as the canonical source.
This workflow follows the Agent → Gmail recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "tBGIIkEnXj8XEfvE",
"name": "Competitor Price Monitoring with AI-Powered Alerts",
"tags": [],
"nodes": [
{
"id": "e179db86-9c63-4942-a4a4-f76b4eb10e00",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-560,
-320
],
"parameters": {
"width": 488,
"height": 592,
"content": "## Competitor Price Monitoring with AI-Powered Alerts\n\n### Overview\nAutomatically monitors competitor pricing on a scheduled basis, detects significant price changes using Compare Datasets, and sends intelligent alerts via Slack or Email based on AI analysis of market implications.\n\n### Key Features\n- **Compare Datasets Detection**: Identifies new, removed, changed, and unchanged prices\n- **AI-Powered Analysis**: Strategic recommendations based on competitive changes\n- **Multi-Channel Routing**: Urgent to Slack, routine to Email\n- **Cron Scheduling**: Flexible monitoring frequency\n\n### Required Credentials\n- OpenAI API\n- Slack\n- Gmail\n- Google Sheets"
},
"typeVersion": 1
},
{
"id": "bbfdd600-b8f0-4828-9ae7-80feab951c5a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-32,
-16
],
"parameters": {
"color": 7,
"width": 300,
"height": 540,
"content": "### Step 1: Scheduled Price Collection\n- Cron trigger runs at configured intervals\n- Fetches competitor price data via HTTP requests\n- Retrieves previous price snapshot from storage"
},
"typeVersion": 1
},
{
"id": "0072e90d-0f72-4dda-815b-40044ec8f1fe",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
-64
],
"parameters": {
"color": 7,
"width": 360,
"height": 716,
"content": "### Step 2: Compare Datasets Analysis\n- Uses Compare Datasets node to detect changes\n- Outputs: In A only (removed), Same, Different, In B only (new)\n- Calculates percentage change for each product"
},
"typeVersion": 1
},
{
"id": "06ab5f42-da9c-461a-bc4c-37a41651f62f",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
-64
],
"parameters": {
"color": 7,
"width": 360,
"height": 716,
"content": "### Step 3: AI Analysis & Severity Assessment\n- AI Agent evaluates competitive implications\n- Generates strategic recommendations\n- Classifies alert urgency (urgent/routine/log-only)"
},
"typeVersion": 1
},
{
"id": "46934c62-e331-438f-be94-aef9c0b324f3",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1648,
-64
],
"parameters": {
"color": 7,
"width": 380,
"height": 736,
"content": "### Step 4: Smart Alert Routing & Storage\n- Routes to Slack for urgent changes (>10%)\n- Sends Email digest for routine changes (5-10%)\n- Updates price history in Google Sheets\n- Logs all monitoring activity"
},
"typeVersion": 1
},
{
"id": "c9e94fa8-0b08-4b30-ad1d-80c3b0412160",
"name": "Price Check Schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
64,
256
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 */6 * * *"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "b427b57d-b57d-42a6-96e4-b26796e57389",
"name": "Initialize Monitoring Session",
"type": "n8n-nodes-base.set",
"position": [
288,
256
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "monitoringId",
"type": "string",
"value": "={{ 'MON-' + $now.format('yyyyMMddHHmmss') }}"
},
{
"id": "2",
"name": "checkTimestamp",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "3",
"name": "competitors",
"type": "object",
"value": "[\"CompetitorA\", \"CompetitorB\", \"CompetitorC\"]"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0c514f71-a7f3-41d5-ac4f-ef63221dc8b0",
"name": "Fetch Current Prices",
"type": "n8n-nodes-base.httpRequest",
"position": [
496,
160
],
"parameters": {
"url": "https://api.competitor-prices.example.com/v1/products",
"options": {
"timeout": 30000
},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "category",
"value": "all"
},
{
"name": "format",
"value": "json"
}
]
},
"nodeCredentialType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "be3a2b1b-9412-48ed-8cbd-3553a2f7e9b7",
"name": "Fetch Previous Prices",
"type": "n8n-nodes-base.googleSheets",
"position": [
496,
368
],
"parameters": {
"operation": "getMany",
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4.5
},
{
"id": "cdf06488-beb7-4e0c-aa44-97552ae65820",
"name": "Normalize Current Prices",
"type": "n8n-nodes-base.code",
"position": [
720,
160
],
"parameters": {
"jsCode": "const currentData = $('Fetch Current Prices').all();\nconst initData = $('Initialize Monitoring Session').first().json;\n\n// Transform current prices to standard format\nconst products = [];\nfor (const item of currentData) {\n const priceData = item.json.products || [item.json];\n for (const product of (Array.isArray(priceData) ? priceData : [priceData])) {\n products.push({\n productId: product.id || product.sku || 'unknown',\n productName: product.name || product.title || 'Unknown Product',\n competitor: product.competitor || 'Unknown',\n currentPrice: parseFloat(product.price) || 0,\n currency: product.currency || 'USD',\n category: product.category || 'General',\n url: product.url || '',\n fetchedAt: initData.checkTimestamp\n });\n }\n}\n\nreturn products.map(p => ({ json: p }));"
},
"typeVersion": 2
},
{
"id": "eb11f5bf-1b6f-48f3-842c-34caa2ddf7fc",
"name": "Normalize Previous Prices",
"type": "n8n-nodes-base.code",
"position": [
720,
368
],
"parameters": {
"jsCode": "const previousData = $('Fetch Previous Prices').all();\n\n// Transform previous prices to standard format\nconst products = previousData.map(item => ({\n productId: item.json.productId || item.json['Product ID'] || 'unknown',\n productName: item.json.productName || item.json['Product Name'] || 'Unknown',\n competitor: item.json.competitor || item.json['Competitor'] || 'Unknown',\n previousPrice: parseFloat(item.json.currentPrice || item.json['Price'] || 0),\n currency: item.json.currency || item.json['Currency'] || 'USD',\n category: item.json.category || item.json['Category'] || 'General',\n lastUpdated: item.json.fetchedAt || item.json['Last Updated'] || ''\n}));\n\nreturn products.map(p => ({ json: p }));"
},
"typeVersion": 2
},
{
"id": "188491cb-5d62-4a6e-a591-6c1c1b456713",
"name": "Compare Price Datasets",
"type": "n8n-nodes-base.compareDatasets",
"position": [
960,
256
],
"parameters": {
"options": {},
"mergeByFields": {
"values": [
{
"field1": "productId",
"field2": "productId"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "0a761044-7851-4757-92ef-ac585b925d57",
"name": "Process Removed Products",
"type": "n8n-nodes-base.code",
"position": [
1200,
64
],
"parameters": {
"jsCode": "// Process removed products (In A only - was in previous, not in current)\nconst items = $input.all();\n\nreturn items.map(item => ({\n json: {\n ...item.json,\n changeType: 'REMOVED',\n changePercent: -100,\n alertLevel: 'routine',\n analysis: 'Product no longer available from competitor'\n }\n}));"
},
"typeVersion": 2
},
{
"id": "f9a9879b-5772-457a-b695-df7d959f4f92",
"name": "Process Unchanged",
"type": "n8n-nodes-base.code",
"position": [
1200,
208
],
"parameters": {
"jsCode": "// Process unchanged products (Same)\nconst items = $input.all();\n\nreturn items.map(item => ({\n json: {\n ...item.json,\n changeType: 'UNCHANGED',\n changePercent: 0,\n alertLevel: 'none',\n analysis: 'Price stable'\n }\n}));"
},
"typeVersion": 2
},
{
"id": "55182390-fa76-454f-ac43-a1b19ece2486",
"name": "Process Changed Prices",
"type": "n8n-nodes-base.code",
"position": [
1200,
336
],
"parameters": {
"jsCode": "// Process changed products (Different) - key analysis\nconst items = $input.all();\n\nreturn items.map(item => {\n const d = item.json;\n const prevPrice = d.input1?.previousPrice || d.previousPrice || 0;\n const currPrice = d.input2?.currentPrice || d.currentPrice || 0;\n const changePercent = prevPrice > 0 ? ((currPrice - prevPrice) / prevPrice * 100) : 0;\n const absChange = Math.abs(changePercent);\n \n let alertLevel = 'none';\n if (absChange >= 10) alertLevel = 'urgent';\n else if (absChange >= 5) alertLevel = 'routine';\n \n return {\n json: {\n productId: d.input1?.productId || d.input2?.productId || d.productId,\n productName: d.input2?.productName || d.input1?.productName || d.productName,\n competitor: d.input2?.competitor || d.input1?.competitor || d.competitor,\n previousPrice: prevPrice,\n currentPrice: currPrice,\n currency: d.input2?.currency || d.input1?.currency || 'USD',\n category: d.input2?.category || d.input1?.category || 'General',\n changeType: changePercent > 0 ? 'PRICE_INCREASE' : 'PRICE_DECREASE',\n changePercent: Math.round(changePercent * 100) / 100,\n alertLevel: alertLevel\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "ed3127cb-9d46-44eb-9aff-a5f82b743426",
"name": "Process New Products",
"type": "n8n-nodes-base.code",
"position": [
1200,
480
],
"parameters": {
"jsCode": "// Process new products (In B only - in current, not in previous)\nconst items = $input.all();\n\nreturn items.map(item => ({\n json: {\n ...item.json,\n changeType: 'NEW_PRODUCT',\n changePercent: null,\n alertLevel: 'routine',\n analysis: 'New product detected in competitor catalog'\n }\n}));"
},
"typeVersion": 2
},
{
"id": "880e24a7-8950-42b7-a06d-667965cf7b47",
"name": "Merge All Changes",
"type": "n8n-nodes-base.merge",
"position": [
1424,
256
],
"parameters": {},
"typeVersion": 3
},
{
"id": "158ae9fa-70ef-4285-936c-b5a679daebaa",
"name": "Filter Significant Changes",
"type": "n8n-nodes-base.filter",
"position": [
1616,
256
],
"parameters": {
"options": {},
"conditions": {
"options": {
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "urgent",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.alertLevel }}",
"rightValue": "urgent"
},
{
"id": "routine",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.alertLevel }}",
"rightValue": "routine"
}
]
}
},
"typeVersion": 2
},
{
"id": "8b62163f-7658-4091-a168-19d996ea18c5",
"name": "AI Price Analyst",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1840,
256
],
"parameters": {
"text": "=Analyze this competitor price change and provide strategic recommendations:\n\nProduct: {{ $json.productName }}\nCompetitor: {{ $json.competitor }}\nCategory: {{ $json.category }}\nPrevious Price: {{ $json.previousPrice }} {{ $json.currency }}\nCurrent Price: {{ $json.currentPrice }} {{ $json.currency }}\nChange: {{ $json.changePercent }}%\nChange Type: {{ $json.changeType }}\n\nProvide:\n1. Impact assessment (1-2 sentences)\n2. Recommended action (match/hold/differentiate)\n3. Urgency level justification\n\nReturn JSON with keys: impactAssessment, recommendedAction, urgencyJustification",
"options": {
"systemMessage": "You are a pricing strategy analyst. Provide concise, actionable competitive intelligence. Always output valid JSON."
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "4e00fa84-a5ec-409a-9592-5d475054a936",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1840,
480
],
"parameters": {
"model": "gpt-4o-mini",
"options": {
"temperature": 0.2
}
},
"typeVersion": 1.2
},
{
"id": "dbaafecc-2bda-475b-ba54-6ab17358f200",
"name": "Parse AI Analysis",
"type": "n8n-nodes-base.code",
"position": [
2064,
256
],
"parameters": {
"jsCode": "const priceData = $input.first().json;\nconst aiOutput = priceData.output || '{}';\n\nlet aiAnalysis = {};\ntry {\n const jsonMatch = aiOutput.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n aiAnalysis = JSON.parse(jsonMatch[0]);\n }\n} catch (e) {\n aiAnalysis = {\n impactAssessment: 'Unable to analyze - manual review recommended',\n recommendedAction: 'hold',\n urgencyJustification: 'AI analysis unavailable'\n };\n}\n\n// Get original price data from the filter output\nconst originalData = $('Filter Significant Changes').first().json;\n\nreturn [{\n json: {\n ...originalData,\n aiAnalysis: aiAnalysis,\n analyzedAt: new Date().toISOString()\n }\n}];"
},
"typeVersion": 2
},
{
"id": "6a755d41-6ab1-442e-bebd-6590bd3d98e7",
"name": "Route by Alert Level",
"type": "n8n-nodes-base.switch",
"position": [
2288,
256
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.alertLevel }}",
"rightValue": "urgent"
}
]
}
},
{
"conditions": {
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.alertLevel }}",
"rightValue": "routine"
}
]
}
}
]
},
"options": {
"fallbackOutput": "extra"
}
},
"typeVersion": 3.2
},
{
"id": "67a5356e-383e-4e6e-b44a-e2eb3d2e5817",
"name": "Slack Urgent Alert",
"type": "n8n-nodes-base.slack",
"position": [
2528,
160
],
"parameters": {
"text": "=:rotating_light: *URGENT PRICE ALERT*\n\n*Product:* {{ $json.productName }}\n*Competitor:* {{ $json.competitor }}\n*Change:* {{ $json.changePercent }}% ({{ $json.changeType }})\n*Previous:* {{ $json.previousPrice }} {{ $json.currency }}\n*Current:* {{ $json.currentPrice }} {{ $json.currency }}\n\n*AI Analysis:*\n{{ $json.aiAnalysis.impactAssessment }}\n\n*Recommended Action:* {{ $json.aiAnalysis.recommendedAction }}\n*Urgency:* {{ $json.aiAnalysis.urgencyJustification }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "name",
"value": "#price-alerts"
},
"otherOptions": {}
},
"typeVersion": 2.2
},
{
"id": "d3b12e45-21a0-4792-b90d-114e074ff982",
"name": "Email Routine Alert",
"type": "n8n-nodes-base.gmail",
"position": [
2528,
320
],
"parameters": {
"sendTo": "=pricing-team@company.com",
"message": "=Competitor Price Change Detected\n\nProduct: {{ $json.productName }}\nCompetitor: {{ $json.competitor }}\nCategory: {{ $json.category }}\n\nPrice Change:\n- Previous: {{ $json.previousPrice }} {{ $json.currency }}\n- Current: {{ $json.currentPrice }} {{ $json.currency }}\n- Change: {{ $json.changePercent }}%\n\nAI Analysis:\n{{ $json.aiAnalysis.impactAssessment }}\n\nRecommended Action: {{ $json.aiAnalysis.recommendedAction }}\n\nThis is a routine notification. No immediate action required.",
"options": {},
"subject": "=Price Change Alert: {{ $json.productName }} ({{ $json.changePercent }}%)"
},
"typeVersion": 2.1
},
{
"id": "ef6cf86c-bf55-47f7-a39a-2d14b62aa290",
"name": "Log Low Priority Changes",
"type": "n8n-nodes-base.googleSheets",
"position": [
2528,
480
],
"parameters": {
"columns": {
"value": {
"Change %": "={{ $json.changePercent }}",
"Timestamp": "={{ $json.analyzedAt }}",
"Competitor": "={{ $json.competitor }}",
"Product ID": "={{ $json.productId }}",
"Alert Level": "={{ $json.alertLevel }}",
"Product Name": "={{ $json.productName }}",
"Current Price": "={{ $json.currentPrice }}",
"Previous Price": "={{ $json.previousPrice }}",
"AI Recommendation": "={{ $json.aiAnalysis.recommendedAction }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "AlertLog"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4.5
},
{
"id": "ccc1f4e7-69c1-4b76-a2ca-eb0f09f9fa37",
"name": "Merge Alert Results",
"type": "n8n-nodes-base.merge",
"position": [
2736,
256
],
"parameters": {
"mode": "chooseBranch"
},
"typeVersion": 3
},
{
"id": "65c2d6d7-5c17-4cf0-9bed-ba5adddf91c4",
"name": "Prepare Storage Update",
"type": "n8n-nodes-base.code",
"position": [
2736,
464
],
"parameters": {
"jsCode": "const allData = $('Normalize Current Prices').all();\n\n// Prepare data for storage update\nreturn allData.map(item => ({\n json: {\n productId: item.json.productId,\n productName: item.json.productName,\n competitor: item.json.competitor,\n currentPrice: item.json.currentPrice,\n currency: item.json.currency,\n category: item.json.category,\n fetchedAt: item.json.fetchedAt\n }\n}));"
},
"typeVersion": 2
},
{
"id": "a4c13601-986e-4876-b2a7-3f7dacb124b9",
"name": "Update Price History",
"type": "n8n-nodes-base.googleSheets",
"position": [
2960,
464
],
"parameters": {
"columns": {
"value": {
"Price": "={{ $json.currentPrice }}",
"Category": "={{ $json.category }}",
"Currency": "={{ $json.currency }}",
"Competitor": "={{ $json.competitor }}",
"Product ID": "={{ $json.productId }}",
"Last Updated": "={{ $json.fetchedAt }}",
"Product Name": "={{ $json.productName }}"
},
"mappingMode": "defineBelow"
},
"options": {
"cellFormat": "USER_ENTERED"
},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "PriceHistory"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4.5
},
{
"id": "ac8b59e3-749f-46d4-b9e5-78f0506b618c",
"name": "Log Monitoring Run",
"type": "n8n-nodes-base.googleSheets",
"position": [
2960,
256
],
"parameters": {
"columns": {
"value": {
"Status": "Completed",
"Timestamp": "={{ $('Initialize Monitoring Session').first().json.checkTimestamp }}",
"Monitoring ID": "={{ $('Initialize Monitoring Session').first().json.monitoringId }}",
"Changes Detected": "={{ $('Filter Significant Changes').all().length }}",
"Products Checked": "={{ $('Normalize Current Prices').all().length }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "MonitoringLog"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4.5
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "9b08aef7-9a67-46a5-9969-974e85dbce37",
"connections": {
"AI Price Analyst": {
"main": [
[
{
"node": "Parse AI Analysis",
"type": "main",
"index": 0
}
]
]
},
"Merge All Changes": {
"main": [
[
{
"node": "Filter Significant Changes",
"type": "main",
"index": 0
},
{
"node": "Prepare Storage Update",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Price Analyst",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Parse AI Analysis": {
"main": [
[
{
"node": "Route by Alert Level",
"type": "main",
"index": 0
}
]
]
},
"Process Unchanged": {
"main": [
[
{
"node": "Merge All Changes",
"type": "main",
"index": 0
}
]
]
},
"Slack Urgent Alert": {
"main": [
[
{
"node": "Merge Alert Results",
"type": "main",
"index": 0
}
]
]
},
"Email Routine Alert": {
"main": [
[
{
"node": "Merge Alert Results",
"type": "main",
"index": 0
}
]
]
},
"Merge Alert Results": {
"main": [
[
{
"node": "Log Monitoring Run",
"type": "main",
"index": 0
}
]
]
},
"Fetch Current Prices": {
"main": [
[
{
"node": "Normalize Current Prices",
"type": "main",
"index": 0
}
]
]
},
"Price Check Schedule": {
"main": [
[
{
"node": "Initialize Monitoring Session",
"type": "main",
"index": 0
}
]
]
},
"Process New Products": {
"main": [
[
{
"node": "Merge All Changes",
"type": "main",
"index": 0
}
]
]
},
"Route by Alert Level": {
"main": [
[
{
"node": "Slack Urgent Alert",
"type": "main",
"index": 0
}
],
[
{
"node": "Email Routine Alert",
"type": "main",
"index": 0
}
],
[
{
"node": "Log Low Priority Changes",
"type": "main",
"index": 0
}
]
]
},
"Fetch Previous Prices": {
"main": [
[
{
"node": "Normalize Previous Prices",
"type": "main",
"index": 0
}
]
]
},
"Compare Price Datasets": {
"main": [
[
{
"node": "Process Removed Products",
"type": "main",
"index": 0
}
],
[
{
"node": "Process Unchanged",
"type": "main",
"index": 0
}
],
[
{
"node": "Process Changed Prices",
"type": "main",
"index": 0
}
],
[
{
"node": "Process New Products",
"type": "main",
"index": 0
}
]
]
},
"Prepare Storage Update": {
"main": [
[
{
"node": "Update Price History",
"type": "main",
"index": 0
}
]
]
},
"Process Changed Prices": {
"main": [
[
{
"node": "Merge All Changes",
"type": "main",
"index": 0
}
]
]
},
"Log Low Priority Changes": {
"main": [
[
{
"node": "Merge Alert Results",
"type": "main",
"index": 1
}
]
]
},
"Normalize Current Prices": {
"main": [
[
{
"node": "Compare Price Datasets",
"type": "main",
"index": 1
}
]
]
},
"Process Removed Products": {
"main": [
[
{
"node": "Merge All Changes",
"type": "main",
"index": 0
}
]
]
},
"Normalize Previous Prices": {
"main": [
[
{
"node": "Compare Price Datasets",
"type": "main",
"index": 0
}
]
]
},
"Filter Significant Changes": {
"main": [
[
{
"node": "AI Price Analyst",
"type": "main",
"index": 0
}
]
]
},
"Initialize Monitoring Session": {
"main": [
[
{
"node": "Fetch Current Prices",
"type": "main",
"index": 0
},
{
"node": "Fetch Previous Prices",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically monitors competitor product prices on a scheduled basis, detects meaningful price changes, and delivers actionable alerts enriched with AI-powered competitive analysis.
Source: https://n8n.io/workflows/11847/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Created by: Peyton Leveillee Last updated: October 2025
This workflow automates end-to-end ESG (Environmental, Social, and Governance) sustainability reporting for enterprise sustainability teams, compliance officers, and green governance leads. It solves
Automates sales data analysis and strategic insight generation for sales managers and strategists needing actionable intelligence. Fetches multi-source data from sales, marketing, and financial system
Automatically discover, analyze, and report the most viral TikTok and Instagram videos in your niche every day. This workflow leverages AI and Apify to help you stay ahead of social media trends. Scra
Workflow Created By: Abdullah Dilshad 📧 iamabdullahdishad@gmail.com