Surveillance des prix des concurrents via Bright Data
Ceci est unAIworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme If, Code, Html, Gmail, HttpRequest, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. Surveillance automatisée des prix des concurrents, en utilisant Bright Data et n8n
- •Compte Google et informations d'identification Gmail API
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
Nœuds utilisés (15)
Catégorie
{
"id": "6RP5sxs8BvIIinq2",
"meta": {
"instanceId": "60046904b104f0f72b2629a9d88fe9f676be4035769f1f08dad1dd38a76b9480"
},
"name": "Competitor_Price_Monitoring_via_Bright_Data",
"tags": [],
"nodes": [
{
"id": "0fa21dc1-fae9-45ca-b2a9-8c4dc212c964",
"name": "Vérifier les Prix Quotidiennement",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1400,
1000
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.2
},
{
"id": "58e4effc-32b1-4767-bc79-1f5147a00c4e",
"name": "Récupérer la Page via Bright Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1180,
1000
],
"parameters": {
"url": "https://api.brightdata.com/request",
"method": "POST",
"options": {},
"jsonBody": "{\n \"zone\": \"n8n_unblocker\",\n \"url\": \"https://www.shopify.com/uk/pricing\",\n \"country\": \"us\",\n \"format\": \"raw\",\n \"headers\": {\n \"User-Agent\": \"Mozilla/5.0\",\n \"Accept\": \"text/html\"\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer API_KEY"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "d1bfc4d4-5951-459f-8dd9-65cbeee325ea",
"name": "Extraire le Contenu HTML",
"type": "n8n-nodes-base.html",
"position": [
-960,
1000
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "Plan name",
"cssSelector": "h3",
"returnArray": true
},
{
"key": "Pricing",
"cssSelector": "span",
"returnArray": true
}
]
}
},
"typeVersion": 1.2
},
{
"id": "4983085d-a355-4f1a-8141-cbb622e94776",
"name": "Formater et Isoler le Bloc de Prix",
"type": "n8n-nodes-base.code",
"position": [
-760,
1000
],
"parameters": {
"jsCode": "// Step 1: Get data from the previous node\nconst inputData = items[0].json;\n\n// Extract plan names and pricing blocks\nconst planNames = inputData[\"Plan name\"];\nconst pricingList = inputData[\"Pricing\"];\n\n// Regex to match entries like \"$2,300USD/month\"\nconst priceRegex = /\\$[\\d,]+USD\\/month/;\n\n// Step 2: Extract only valid price strings\nconst prices = pricingList.filter(item => typeof item === 'string' && priceRegex.test(item));\n\n// Clean prices: \"$2,300USD/month\" -> 2300 (number)\nconst cleanedPrices = prices.map(p => {\n const match = p.match(/\\$[\\d,]+/);\n if (match) {\n return parseFloat(match[0].replace(/[$,]/g, ''));\n }\n return null;\n}).filter(p => p !== null);\n\n// Step 3: Build result object\nconst planPriceMap = {};\n\nfor (let i = 0; i < planNames.length; i++) {\n const plan = planNames[i];\n\n if (['Basic', 'Grow', 'Advanced', 'Plus'].includes(plan) && !(plan in planPriceMap)) {\n planPriceMap[plan] = cleanedPrices.shift() ?? null;\n }\n}\n\n// Step 4: Return final structured item\nreturn [\n {\n json: planPriceMap\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "178945da-4167-43d1-af20-f3acb8003f17",
"name": "Lire le Dernier Prix Enregistré",
"type": "n8n-nodes-base.googleSheets",
"position": [
-520,
1000
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1LTGVeEXaU1PSMcNWI6beT_IuETKH147vfi8vAtWJ0MQ/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1LTGVeEXaU1PSMcNWI6beT_IuETKH147vfi8vAtWJ0MQ",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1LTGVeEXaU1PSMcNWI6beT_IuETKH147vfi8vAtWJ0MQ/edit?usp=drivesdk",
"cachedResultName": "Competitor price analyzer"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "r2mDaisH6e9VkwHl",
"name": "Google Sheets account"
}
},
"typeVersion": 4.6
},
{
"id": "67534ae0-f365-4e11-b244-73cc999ed47a",
"name": "Le Prix a-t-il Changé ?",
"type": "n8n-nodes-base.if",
"position": [
-300,
1000
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2ca35690-3534-40c4-8d79-02833e331e17",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $('Format & Isolate Price Block').item.json.Basic }}",
"rightValue": "={{ $json.Basic }}"
},
{
"id": "fe7e3cac-d614-4962-82a4-d3e06464ae14",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $('Format & Isolate Price Block').item.json.Grow }}",
"rightValue": "={{ $json.Grow }}"
},
{
"id": "bf877945-b2f4-48f9-be88-c3e97600c984",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $('Format & Isolate Price Block').item.json.Advanced }}",
"rightValue": "={{ $json.Advanced }}"
},
{
"id": "5045eaa9-4798-4ca8-83e3-6c8c51a297d2",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $('Format & Isolate Price Block').item.json.Plus }}",
"rightValue": "={{ $json.Plus }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "023f6e01-6625-4310-a61f-4dac9748c19d",
"name": "Aucun Changement Détecté – Arrêt",
"type": "n8n-nodes-base.noOp",
"position": [
60,
800
],
"parameters": {},
"typeVersion": 1
},
{
"id": "eaf629e8-eb2d-49b2-a568-a87c52dbe131",
"name": "Mettre à Jour le Prix Stocké",
"type": "n8n-nodes-base.googleSheets",
"position": [
60,
1180
],
"parameters": {
"columns": {
"value": {
"Grow": "={{ $json.Grow }}",
"Plus": "={{ $json.Plus }}",
"Basic": "={{ $json.Basic }}",
"Advanced": "={{ $json.Advanced }}",
"row_number": "={{ $json.row_number }}"
},
"schema": [
{
"id": "Basic",
"type": "string",
"display": true,
"required": false,
"displayName": "Basic",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Grow",
"type": "string",
"display": true,
"required": false,
"displayName": "Grow",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Advanced",
"type": "string",
"display": true,
"required": false,
"displayName": "Advanced",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Plus",
"type": "string",
"display": true,
"required": false,
"displayName": "Plus",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1LTGVeEXaU1PSMcNWI6beT_IuETKH147vfi8vAtWJ0MQ/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1LTGVeEXaU1PSMcNWI6beT_IuETKH147vfi8vAtWJ0MQ",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1LTGVeEXaU1PSMcNWI6beT_IuETKH147vfi8vAtWJ0MQ/edit?usp=drivesdk",
"cachedResultName": "Competitor price analyzer"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "r2mDaisH6e9VkwHl",
"name": "Google Sheets account"
}
},
"typeVersion": 4.6
},
{
"id": "7505ca0e-f968-437e-a4ca-0cdbd4fee93b",
"name": "Envoyer une Alerte Email de Changement de Prix",
"type": "n8n-nodes-base.gmail",
"position": [
280,
1180
],
"webhookId": "b2bf0aba-123e-489e-9669-4034d16a060c",
"parameters": {
"sendTo": "shahkar.genai@gmail.com",
"message": "=<p>Hi Team,</p> <p>This is an automated alert to inform you that the pricing page of a competitor has changed.</p> <ul> <li><strong>Competitor:</strong> Wix</li> <li><strong>Page URL:</strong> <a href=\"https://www.wix.com/upgrade/website\">https://www.wix.com/upgrade/website</a></li> <li><strong>Checked On:</strong> {{ $now }}</li> </ul> <p>Please review the new pricing to assess if any strategic adjustments are needed.\nPlease check in Google sheets for the latest pricing as soon as possible\n</p> <p>Best regards,<br>Muhammad Shahkar </p>",
"options": {
"appendAttribution": false
},
"subject": "Competitor Pricing Page Has Changed"
},
"credentials": {
"gmailOAuth2": {
"id": "AQDSl75AdzK3vmqJ",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "494ab1e4-de04-4a98-acca-a0e8e242575c",
"name": "Note Adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1460,
640
],
"parameters": {
"color": 6,
"width": 840,
"height": 540,
"content": "\n## 🟢 **SECTION 1: Fetch the Latest Pricing Info**\n\n### 📡 Scheduled Scraping Using Bright Data\n\n| 🧩 Nodes Involved | 💬 Description |\n| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| 🕒 **Check Pricing Every Hour** | This **Schedule Trigger** runs your workflow automatically (e.g., every hour). You don’t have to manually check the website. |\n| 🌐 **Fetch Page via Bright Data** | Uses **Bright Data Web Unlocker API** to bypass bot protections and fetch the HTML of the pricing page from a competitor site (e.g., Wix, Squarespace, etc). |\n| 🧾 **Extract HTML Content** | This node pulls out the actual **HTML code** of the page from the API response, ready to be analyzed. |\n| 🔧 **Format & Isolate Price Block** | This custom code node filters or extracts just the **pricing section** (e.g., plan names, \\$ amounts) from the HTML to compare later. |\n\n> ✅ **Advantage for Beginners**: You don’t need to manually visit or inspect the site. Everything is automated and updated behind the scenes.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "a9beb646-c639-408c-a3c4-678e19e7bee2",
"name": "Note Adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-580,
520
],
"parameters": {
"color": 3,
"width": 440,
"height": 660,
"content": "## 🟡 **SECTION 2: Check If the Price Has Changed**\n\n### 🔍 Compare New Data with the Last Saved One\n\n| 🧩 Nodes Involved | 💬 Description |\n| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 📄 **Read Last Saved Price** | This reads from a **Google Sheet** that stores the **last known pricing data**. This becomes your reference point for comparison. |\n| 🔁 **Has Price Changed?** | A simple **IF condition** compares the current scraped pricing to the previously saved one. If the content is **exactly the same**, nothing happens. If it's **different**, it moves to the alert flow. |\n\n> ✅ **Advantage for Beginners**: No need for complex logic. n8n handles the comparison using a basic condition node.\n\n---"
},
"typeVersion": 1
},
{
"id": "cdb1ef33-fcbb-449d-b81e-b7f8cbaf7a18",
"name": "Note Adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"parameters": {
"color": 5,
"width": 440,
"height": 1360,
"content": "## 🔴 **SECTION 3: Alert & Save New Price**\n\n### 🚨 Notify + Update Sheet\n\n| 🧩 Nodes Involved | 💬 Description |\n| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| ➖ **No Change Detected – Stop** | If no changes were found, this does nothing and exits. Keeps your flow efficient. |\n| 📄 **Update Stored Price** | If the price **has changed**, it writes the new value to the **Google Sheet** so future comparisons are accurate. |\n| 📧 **Send Price Change Alert Email** | This node sends a **professional email** (via Gmail) to alert you or your team about the pricing update. The email includes the date and the page link. |\n\n> ✅ **Advantage for Beginners**: No need to monitor email manually or check sheets. You’re notified only when something meaningful happens!\n\n---\n\n## 🖼️ 📊 VISUAL WORKFLOW SUMMARY\n\n```mermaid\ngraph TD;\n A[🕒 Schedule Trigger] --> B[🌐 Fetch via Bright Data];\n B --> C[🧾 Extract HTML];\n C --> D[🔧 Extract Pricing];\n D --> E[📄 Read Last Price from Sheet];\n E --> F{🔁 Has Price Changed?};\n F -- Yes --> G[📄 Update Sheet];\n G --> H[📧 Send Alert Email];\n F -- No --> I[➖ Do Nothing];\n```\n\n---\n"
},
"typeVersion": 1
},
{
"id": "afc23ae0-ef5e-490a-980b-a56e9436fa31",
"name": "Note Adhésive9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3160,
640
],
"parameters": {
"color": 4,
"width": 1300,
"height": 320,
"content": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
},
"typeVersion": 1
},
{
"id": "4a1af414-b88b-4618-970e-0b2e67beda67",
"name": "Note Adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3160,
980
],
"parameters": {
"color": 4,
"width": 1289,
"height": 1798,
"content": "## 🧠💼 Title:\n\n**Competitor Pricing Page Monitor — Automated Alerts Using n8n + Bright Data**\n\nThis workflow automatically **monitors a competitor’s pricing page**, **detects changes**, and sends an **alert email** while keeping a record in **Google Sheets**. Perfect for businesses tracking market moves or SaaS competitors!\n\n---\n\n## 🟢 **SECTION 1: Fetch the Latest Pricing Info**\n\n### 📡 Scheduled Scraping Using Bright Data\n\n| 🧩 Nodes Involved | 💬 Description |\n| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| 🕒 **Check Pricing Every Hour** | This **Schedule Trigger** runs your workflow automatically (e.g., every hour). You don’t have to manually check the website. |\n| 🌐 **Fetch Page via Bright Data** | Uses **Bright Data Web Unlocker API** to bypass bot protections and fetch the HTML of the pricing page from a competitor site (e.g., Wix, Squarespace, etc). |\n| 🧾 **Extract HTML Content** | This node pulls out the actual **HTML code** of the page from the API response, ready to be analyzed. |\n| 🔧 **Format & Isolate Price Block** | This custom code node filters or extracts just the **pricing section** (e.g., plan names, \\$ amounts) from the HTML to compare later. |\n\n> ✅ **Advantage for Beginners**: You don’t need to manually visit or inspect the site. Everything is automated and updated behind the scenes.\n\n---\n\n## 🟡 **SECTION 2: Check If the Price Has Changed**\n\n### 🔍 Compare New Data with the Last Saved One\n\n| 🧩 Nodes Involved | 💬 Description |\n| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 📄 **Read Last Saved Price** | This reads from a **Google Sheet** that stores the **last known pricing data**. This becomes your reference point for comparison. |\n| 🔁 **Has Price Changed?** | A simple **IF condition** compares the current scraped pricing to the previously saved one. If the content is **exactly the same**, nothing happens. If it's **different**, it moves to the alert flow. |\n\n> ✅ **Advantage for Beginners**: No need for complex logic. n8n handles the comparison using a basic condition node.\n\n---\n\n## 🔴 **SECTION 3: Alert & Save New Price**\n\n### 🚨 Notify + Update Sheet\n\n| 🧩 Nodes Involved | 💬 Description |\n| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| ➖ **No Change Detected – Stop** | If no changes were found, this does nothing and exits. Keeps your flow efficient. |\n| 📄 **Update Stored Price** | If the price **has changed**, it writes the new value to the **Google Sheet** so future comparisons are accurate. |\n| 📧 **Send Price Change Alert Email** | This node sends a **professional email** (via Gmail) to alert you or your team about the pricing update. The email includes the date and the page link. |\n\n> ✅ **Advantage for Beginners**: No need to monitor email manually or check sheets. You’re notified only when something meaningful happens!\n\n---\n\n## 🖼️ 📊 VISUAL WORKFLOW SUMMARY\n\n```mermaid\ngraph TD;\n A[🕒 Schedule Trigger] --> B[🌐 Fetch via Bright Data];\n B --> C[🧾 Extract HTML];\n C --> D[🔧 Extract Pricing];\n D --> E[📄 Read Last Price from Sheet];\n E --> F{🔁 Has Price Changed?};\n F -- Yes --> G[📄 Update Sheet];\n G --> H[📧 Send Alert Email];\n F -- No --> I[➖ Do Nothing];\n```\n\n---\n\n## 🌟 WHY THIS WORKFLOW IS POWERFUL (EVEN FOR BEGINNERS):\n\n| Feature | Benefit |\n| ------------------------ | --------------------------------------------------------- |\n| ✅ No Code | Drag-and-drop automation — no dev experience needed |\n| 🔐 Unlocks Sites | Bright Data handles websites that block scrapers |\n| 📈 Business Intelligence | Stay competitive by tracking market pricing in real-time |\n| 💬 Real-time Alerts | Act fast with Gmail notifications when pricing changes |\n| 📝 Data Logging | Google Sheets keeps a historical log of every price point |\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "eb40dc03-c451-4442-9742-90ca7aa11f16",
"name": "Note Adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
520,
0
],
"parameters": {
"color": 7,
"width": 380,
"height": 240,
"content": "## I’ll receive a tiny commission if you join Bright Data through this link—thanks for fueling more free content!\n\n### https://get.brightdata.com/1tndi4600b25"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "10b3a37b-12c0-4a26-a058-b9950a6e26ff",
"connections": {
"67534ae0-f365-4e11-b244-73cc999ed47a": {
"main": [
[
{
"node": "023f6e01-6625-4310-a61f-4dac9748c19d",
"type": "main",
"index": 0
}
],
[
{
"node": "eaf629e8-eb2d-49b2-a568-a87c52dbe131",
"type": "main",
"index": 0
}
]
]
},
"eaf629e8-eb2d-49b2-a568-a87c52dbe131": {
"main": [
[
{
"node": "7505ca0e-f968-437e-a4ca-0cdbd4fee93b",
"type": "main",
"index": 0
}
]
]
},
"d1bfc4d4-5951-459f-8dd9-65cbeee325ea": {
"main": [
[
{
"node": "4983085d-a355-4f1a-8141-cbb622e94776",
"type": "main",
"index": 0
}
]
]
},
"178945da-4167-43d1-af20-f3acb8003f17": {
"main": [
[
{
"node": "67534ae0-f365-4e11-b244-73cc999ed47a",
"type": "main",
"index": 0
}
]
]
},
"0fa21dc1-fae9-45ca-b2a9-8c4dc212c964": {
"main": [
[
{
"node": "58e4effc-32b1-4767-bc79-1f5147a00c4e",
"type": "main",
"index": 0
}
]
]
},
"58e4effc-32b1-4767-bc79-1f5147a00c4e": {
"main": [
[
{
"node": "d1bfc4d4-5951-459f-8dd9-65cbeee325ea",
"type": "main",
"index": 0
}
]
]
},
"4983085d-a355-4f1a-8141-cbb622e94776": {
"main": [
[
{
"node": "178945da-4167-43d1-af20-f3acb8003f17",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Intelligence Artificielle
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Yaron Been
@yaron-nofluffBuilding AI Agents and Automations | Growth Marketer | Entrepreneur | Book Author & Podcast Host If you need any help with Automations, feel free to reach out via linkedin: https://www.linkedin.com/in/yaronbeen/ And check out my Youtube channel: https://www.youtube.com/@YaronBeen/videos
Partager ce workflow