AutomationFlowsEmail & Gmail › Automated Competitor Price Monitoring with Bright Data & N8n

Automated Competitor Price Monitoring with Bright Data & N8n

ByYaron Been @yaron-nofluff on n8n.io

This workflow automatically monitors your competitors' product prices and notifies you of any changes. It helps you stay competitive in the market by providing real-time insights into pricing strategies without manual checking.

Cron / scheduled trigger★★★★☆ complexity15 nodesHTTP RequestGoogle SheetsGmail
Email & Gmail Trigger: Cron / scheduled Nodes: 15 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #5219 — we link there as the canonical source.

This workflow follows the Gmail → Google Sheets 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 →

Download .json
{
  "id": "6RP5sxs8BvIIinq2",
  "name": "Competitor_Price_Monitoring_via_Bright_Data",
  "tags": [],
  "nodes": [
    {
      "id": "0fa21dc1-fae9-45ca-b2a9-8c4dc212c964",
      "name": "Check Pricing Every Day",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1400,
        1000
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "58e4effc-32b1-4767-bc79-1f5147a00c4e",
      "name": "Fetch 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 YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d1bfc4d4-5951-459f-8dd9-65cbeee325ea",
      "name": "Extract HTML Content",
      "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": "Format & Isolate Price Block",
      "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": "Read Last Saved Price",
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "67534ae0-f365-4e11-b244-73cc999ed47a",
      "name": "Has Price Changed?",
      "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": "No Change Detected \u2013 Stop",
      "type": "n8n-nodes-base.noOp",
      "position": [
        60,
        800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "eaf629e8-eb2d-49b2-a568-a87c52dbe131",
      "name": "Update Stored Price",
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "7505ca0e-f968-437e-a4ca-0cdbd4fee93b",
      "name": "Send Price Change Alert Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        280,
        1180
      ],
      "parameters": {
        "sendTo": "user@example.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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "494ab1e4-de04-4a98-acca-a0e8e242575c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1460,
        640
      ],
      "parameters": {
        "color": 6,
        "width": 840,
        "height": 540,
        "content": "\n## \ud83d\udfe2 **SECTION 1: Fetch the Latest Pricing Info**\n\n### \ud83d\udce1 Scheduled Scraping Using Bright Data\n\n| \ud83e\udde9 Nodes Involved                   | \ud83d\udcac Description                                                                                                                                               |\n| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| \ud83d\udd52 **Check Pricing Every Hour**     | This **Schedule Trigger** runs your workflow automatically (e.g., every hour). You don\u2019t have to manually check the website.                                 |\n| \ud83c\udf10 **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| \ud83e\uddfe **Extract HTML Content**         | This node pulls out the actual **HTML code** of the page from the API response, ready to be analyzed.                                                        |\n| \ud83d\udd27 **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> \u2705 **Advantage for Beginners**: You don\u2019t 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": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -580,
        520
      ],
      "parameters": {
        "color": 3,
        "width": 440,
        "height": 660,
        "content": "## \ud83d\udfe1 **SECTION 2: Check If the Price Has Changed**\n\n### \ud83d\udd0d Compare New Data with the Last Saved One\n\n| \ud83e\udde9 Nodes Involved            | \ud83d\udcac Description                                                                                                                                                                                          |\n| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| \ud83d\udcc4 **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| \ud83d\udd01 **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> \u2705 **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": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 440,
        "height": 1360,
        "content": "## \ud83d\udd34 **SECTION 3: Alert & Save New Price**\n\n### \ud83d\udea8 Notify + Update Sheet\n\n| \ud83e\udde9 Nodes Involved                    | \ud83d\udcac Description                                                                                                                                          |\n| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| \u2796 **No Change Detected \u2013 Stop**      | If no changes were found, this does nothing and exits. Keeps your flow efficient.                                                                       |\n| \ud83d\udcc4 **Update Stored Price**           | If the price **has changed**, it writes the new value to the **Google Sheet** so future comparisons are accurate.                                       |\n| \ud83d\udce7 **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> \u2705 **Advantage for Beginners**: No need to monitor email manually or check sheets. You\u2019re notified only when something meaningful happens!\n\n---\n\n## \ud83d\uddbc\ufe0f \ud83d\udcca VISUAL WORKFLOW SUMMARY\n\n```mermaid\ngraph TD;\n  A[\ud83d\udd52 Schedule Trigger] --> B[\ud83c\udf10 Fetch via Bright Data];\n  B --> C[\ud83e\uddfe Extract HTML];\n  C --> D[\ud83d\udd27 Extract Pricing];\n  D --> E[\ud83d\udcc4 Read Last Price from Sheet];\n  E --> F{\ud83d\udd01 Has Price Changed?};\n  F -- Yes --> G[\ud83d\udcc4 Update Sheet];\n  G --> H[\ud83d\udce7 Send Alert Email];\n  F -- No --> I[\u2796 Do Nothing];\n```\n\n---\n"
      },
      "typeVersion": 1
    },
    {
      "id": "afc23ae0-ef5e-490a-980b-a56e9436fa31",
      "name": "Sticky Note9",
      "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": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3160,
        980
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 1798,
        "content": "## \ud83e\udde0\ud83d\udcbc Title:\n\n**Competitor Pricing Page Monitor \u2014 Automated Alerts Using n8n + Bright Data**\n\nThis workflow automatically **monitors a competitor\u2019s 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## \ud83d\udfe2 **SECTION 1: Fetch the Latest Pricing Info**\n\n### \ud83d\udce1 Scheduled Scraping Using Bright Data\n\n| \ud83e\udde9 Nodes Involved                   | \ud83d\udcac Description                                                                                                                                               |\n| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| \ud83d\udd52 **Check Pricing Every Hour**     | This **Schedule Trigger** runs your workflow automatically (e.g., every hour). You don\u2019t have to manually check the website.                                 |\n| \ud83c\udf10 **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| \ud83e\uddfe **Extract HTML Content**         | This node pulls out the actual **HTML code** of the page from the API response, ready to be analyzed.                                                        |\n| \ud83d\udd27 **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> \u2705 **Advantage for Beginners**: You don\u2019t need to manually visit or inspect the site. Everything is automated and updated behind the scenes.\n\n---\n\n## \ud83d\udfe1 **SECTION 2: Check If the Price Has Changed**\n\n### \ud83d\udd0d Compare New Data with the Last Saved One\n\n| \ud83e\udde9 Nodes Involved            | \ud83d\udcac Description                                                                                                                                                                                          |\n| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| \ud83d\udcc4 **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| \ud83d\udd01 **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> \u2705 **Advantage for Beginners**: No need for complex logic. n8n handles the comparison using a basic condition node.\n\n---\n\n## \ud83d\udd34 **SECTION 3: Alert & Save New Price**\n\n### \ud83d\udea8 Notify + Update Sheet\n\n| \ud83e\udde9 Nodes Involved                    | \ud83d\udcac Description                                                                                                                                          |\n| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| \u2796 **No Change Detected \u2013 Stop**      | If no changes were found, this does nothing and exits. Keeps your flow efficient.                                                                       |\n| \ud83d\udcc4 **Update Stored Price**           | If the price **has changed**, it writes the new value to the **Google Sheet** so future comparisons are accurate.                                       |\n| \ud83d\udce7 **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> \u2705 **Advantage for Beginners**: No need to monitor email manually or check sheets. You\u2019re notified only when something meaningful happens!\n\n---\n\n## \ud83d\uddbc\ufe0f \ud83d\udcca VISUAL WORKFLOW SUMMARY\n\n```mermaid\ngraph TD;\n  A[\ud83d\udd52 Schedule Trigger] --> B[\ud83c\udf10 Fetch via Bright Data];\n  B --> C[\ud83e\uddfe Extract HTML];\n  C --> D[\ud83d\udd27 Extract Pricing];\n  D --> E[\ud83d\udcc4 Read Last Price from Sheet];\n  E --> F{\ud83d\udd01 Has Price Changed?};\n  F -- Yes --> G[\ud83d\udcc4 Update Sheet];\n  G --> H[\ud83d\udce7 Send Alert Email];\n  F -- No --> I[\u2796 Do Nothing];\n```\n\n---\n\n## \ud83c\udf1f WHY THIS WORKFLOW IS POWERFUL (EVEN FOR BEGINNERS):\n\n| Feature                  | Benefit                                                   |\n| ------------------------ | --------------------------------------------------------- |\n| \u2705 No Code                | Drag-and-drop automation \u2014 no dev experience needed       |\n| \ud83d\udd10 Unlocks Sites         | Bright Data handles websites that block scrapers          |\n| \ud83d\udcc8 Business Intelligence | Stay competitive by tracking market pricing in real-time  |\n| \ud83d\udcac Real-time Alerts      | Act fast with Gmail notifications when pricing changes    |\n| \ud83d\udcdd 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": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        520,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 240,
        "content": "## I\u2019ll receive a tiny commission if you join Bright Data through this link\u2014thanks for fueling more free content!\n\n### https://get.brightdata.com/1tndi4600b25"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "10b3a37b-12c0-4a26-a058-b9950a6e26ff",
  "connections": {
    "Has Price Changed?": {
      "main": [
        [
          {
            "node": "No Change Detected \u2013 Stop",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update Stored Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Stored Price": {
      "main": [
        [
          {
            "node": "Send Price Change Alert Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract HTML Content": {
      "main": [
        [
          {
            "node": "Format & Isolate Price Block",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Last Saved Price": {
      "main": [
        [
          {
            "node": "Has Price Changed?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Pricing Every Day": {
      "main": [
        [
          {
            "node": "Fetch Page via Bright Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Page via Bright Data": {
      "main": [
        [
          {
            "node": "Extract HTML Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format & Isolate Price Block": {
      "main": [
        [
          {
            "node": "Read Last Saved Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automatically monitors your competitors' product prices and notifies you of any changes. It helps you stay competitive in the market by providing real-time insights into pricing strategies without manual checking.

Source: https://n8n.io/workflows/5219/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.

Gmail, Google Drive, Google Sheets +1
Email & Gmail

Looking for a way to track GitHub bounty issues automatically and get notified in real time? This GitHub Bounty Tracker workflow monitors repositories for issues labeled 💎 Bounty, logs them in Google

Google Sheets, HTTP Request, WhatsApp +1
Email & Gmail

This workflow automatically sends a beautifully designed HTML newsletter every Sunday at 8 AM, featuring products currently on sale from your Algolia-powered e-commerce store.

Google Sheets, HTTP Request, Gmail
Email & Gmail

This n8n template demonstrates how to build a Auto Lead Gen & Outreach System for Local Businesses specifically designed to help businesses that don’t have a website yet.

Google Sheets, HTTP Request, Google Drive +1
Email & Gmail

I created this workflow with care for marketing professionals and agencies who manage multiple Meta Ads (Facebook) accounts and want to track ad account balances automatically — no more logging in eve

HTTP Request, Google Sheets, Gmail