AutomationFlowsAI & RAG › Monitor Competitor Pages with Gemini, Olostep, Google Sheets and Gmail

Monitor Competitor Pages with Gemini, Olostep, Google Sheets and Gmail

ByYasser Sami @yassersami on n8n.io

Never get blindsided by a competitor's "stealth" update again. The Competitor Feature Monitoring & Strategy Alerting workflow acts as an automated 24/7 surveillance system for your industry. It monitors specific competitor URLs, detects substantive changes in features, pricing,…

Event trigger★★★★☆ complexityAI-powered23 nodesGoogle SheetsN8N Nodes OlostepGoogle GeminiGmail
AI & RAG Trigger: Event Nodes: 23 Complexity: ★★★★☆ AI nodes: yes Added:
Monitor Competitor Pages with Gemini, Olostep, Google Sheets and Gmail — n8n workflow card showing Google Sheets, N8N Nodes Olostep, Google Gemini integration

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

This workflow follows the Gmail → Googlegemini 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": "PNBh9LQSdAXkZrUc",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Competitor Feature Monitoring & Strategy Alerting",
  "tags": [
    {
      "id": "xRJNyiRIpAsEzL8y",
      "name": "Olostep",
      "createdAt": "2026-01-31T11:17:46.807Z",
      "updatedAt": "2026-01-31T11:17:46.807Z"
    }
  ],
  "nodes": [
    {
      "id": "9b634ecc-8199-4f8f-a33e-bd8c85a63425",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "66afa0c3-22d1-466e-8a73-4fb276070dc1",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        192,
        0
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 356363935,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI/edit#gid=356363935",
          "cachedResultName": "content"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI/edit?usp=drivesdk",
          "cachedResultName": "competitor monetoring"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.7
    },
    {
      "id": "3a440a4a-e949-44ef-a77d-f858fb028cde",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        400,
        0
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "empty",
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "87a48e1d-75f9-440b-ad48-60e3d597ed6f",
                    "operator": {
                      "type": "string",
                      "operation": "empty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.newcontent }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "not empty",
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "f24e2794-6232-4da0-8457-1c92d3aa8dac",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.newcontent }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.4
    },
    {
      "id": "eeda122a-2e0b-4ac6-b773-71942462050e",
      "name": "scrape URL",
      "type": "n8n-nodes-olostep.olostepScrape",
      "position": [
        656,
        -112
      ],
      "parameters": {
        "url_to_scrape": "={{ $json.url }}"
      },
      "credentials": {
        "olostepScrapeApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7da29958-98e8-4cfe-9dde-c9a24f89c9cf",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        864,
        -112
      ],
      "parameters": {
        "columns": {
          "value": {
            "url": "={{ $json.url }}",
            "newcontent": "={{ $json.markdown_content.slice(0,50000) }}"
          },
          "schema": [
            {
              "id": "url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "previousContent",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "previousContent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "newcontent",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "newcontent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 356363935,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI/edit#gid=356363935",
          "cachedResultName": "content"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI/edit?usp=drivesdk",
          "cachedResultName": "competitor monetoring"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.7
    },
    {
      "id": "1712efc1-9804-4df2-9c01-089911810190",
      "name": "scrape URL1",
      "type": "n8n-nodes-olostep.olostepScrape",
      "position": [
        656,
        160
      ],
      "parameters": {
        "url_to_scrape": "={{ $json.url }}"
      },
      "credentials": {
        "olostepScrapeApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ff4b6c09-5a55-4752-82c9-ce157a1cffb0",
      "name": "Changes identifier",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        864,
        160
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "model",
              "content": "You are a specialized content auditor."
            },
            {
              "content": "=Your task is to compare two versions of a webpage to identify the exact, significant changes.\n\nAnalyze the two versions and isolate only the new sentences, paragraphs, or section headings that appear in Version B but NOT in Version A.\n\nOutput MUST be ONLY the newly added or substantially changed text, formatted as a clean, single block of Markdown text. Ignore numerical counts adjacent to words like 'stars,' 'followers,' or 'likes.' Focus only on substantive marketing text, features, or pricing. If no significant changes are found (e.g., only timestamp or minor UI changes), output the exact text: 'NO_SIGNIFICANT_CHANGE'."
            },
            {
              "content": "=Version A (Old Baseline):\n{{ $('Switch').item.json.newcontent }}\n\nVersion B (New Scrape):\n{{ $json.markdown_content }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "a8e31bd4-638c-4ac5-a6c6-7fbb6a89b59b",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1168,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bddca57f-1898-4cbd-b734-f8ec5c992eb5",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.content.parts.last().text }}",
              "rightValue": "NO_SIGNIFICANT_CHANGE"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "a31d956e-5f49-4db2-a221-90e1c46fa96e",
      "name": "diff analyst",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        1392,
        64
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "model",
              "content": "You are a competitive intelligence specialist. "
            },
            {
              "content": "=Analyze the provided text, which represents a change made by a key competitor to their product/pricing page.\n\nYour Output MUST be ONLY one of the following category tags, with no extra characters or filler words:\n\n- MAJOR_FEATURE_LAUNCH (Significant, new product capability or service)\n\n- MINOR_UPDATE (Small feature improvement, UI tweak, or bug fix mention)\n\n- PRICE_CHANGE (Any change to a dollar amount, token limit, or pricing structure)\n\n- MARKETING_MESSAGING (New headline, tone shift, or change in Value Proposition language)\n\n- LEADERSHIP_CHANGE (Mention of a new hire, CEO, or key executive)\n\n- MISCELLANEOUS (If the change is irrelevant or unclassifiable)"
            },
            {
              "content": "=Changed Text:\n{{ $json.content.parts.last().text }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "e1f5155c-f25d-4a9a-bba4-59a0c1735361",
      "name": "Memo editor",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        1712,
        64
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "model",
              "content": "You are a Product Marketing Manager (PMM)."
            },
            {
              "content": "=Based on the change detected below, write a short, actionable internal memo to our VP of Product.\n\nYour Memo MUST be in a single paragraph (max 100 words) and follow this structure:\n\nStart by stating the category and the competitor.\n\nExplain the direct impact or the 'threat level' this poses to our product.\n\nConclude with a specific, time-sensitive recommendation for our team to investigate or address.\n\nYour output must contain the url that the change happened in.\n\nDo not use any Markdown headings (H1, H2, etc.).\n\nYour output must be well structured (use break lines between each sentence)."
            },
            {
              "content": "=URL: {{ $('Switch').item.json.url }}\n\nChange Category: {{ $json.content.parts.last().text }}\nChange Details:\n{{ $('Changes identifier').item.json.content.parts.last().text }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "38c05ccc-74bc-4705-a923-6ea304b7819e",
      "name": "Append or update row in sheet1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        656,
        400
      ],
      "parameters": {
        "columns": {
          "value": {
            "url": "={{ $('Switch').item.json.url }}",
            "newcontent": "={{ $json.markdown_content }}",
            "previousContent": "={{ $('Switch').item.json.newcontent }}"
          },
          "schema": [
            {
              "id": "url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "previousContent",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "previousContent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "newcontent",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "newcontent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 356363935,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI/edit#gid=356363935",
          "cachedResultName": "content"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Hs7txCEnNTUmtTJFIVeZ5VpVk7GvzOGFQO7Cvry8fbI/edit?usp=drivesdk",
          "cachedResultName": "competitor monetoring"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "cd523f08-ec1e-4a3f-b81f-f5a4c409052f",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2016,
        64
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=Hey Yasser,\n\n{{ $json.content.parts.last().text }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Competitor Monitoring Alert",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9f11058b-6985-4b5c-9301-e0215a0f0351",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        -384
      ],
      "parameters": {
        "width": 704,
        "height": 992,
        "content": "## Competitor Feature Monitoring & Strategy Alerting\n\nNever get blindsided by a competitor's \"stealth\" update again. The **Competitor Feature Monitoring & Strategy Alerting** workflow acts as an automated 24/7 surveillance system for your industry. It monitors specific competitor URLs, detects substantive changes in features, pricing, or messaging, and instantly alerts you with an actionable strategic memo.\n\nUsing **Gemini 2.5 Flash** and **Olostep**, the workflow filters out \"noise\" (like minor UI tweaks or follower count changes) to focus exclusively on updates that impact your competitive standing.\n\n---\n\n### Who\u2019s it for?\n*   **Product Marketing Managers (PMMs):** Stay informed on shifts in competitor value propositions and messaging.\n*   **Product Managers:** Get immediate alerts on major competitor feature launches or pricing pivots.\n*   **Sales Enablement Teams:** Quickly update \"battle cards\" with the latest intelligence on competitor offerings.\n*   **Executive Leadership:** Receive high-level internal memos detailing the threat level of market changes.\n\n### How it works / What it does\n1.  **Trigger:** Execute the workflow manually or set it on a cron schedule.\n2.  **Data Retrieval:** The workflow pulls target competitor URLs from a **Google Sheet**.\n3.  **Smart Scraping:** **Olostep** scrapes the current live content of each URL.\n4.  **Change Identification:** Gemini compares the \"New Scrape\" against the \"Old Baseline\" stored in your sheet, isolating only substantive text changes.\n5.  **Strategic Classification:** If a change is detected, Gemini categorizes it (e.g., `MAJOR_FEATURE_LAUNCH`, `PRICE_CHANGE`, `MARKETING_MESSAGING`).\n6.  **Internal Alerting:** A \"Memo Editor\" node drafts a professional, 100-word executive summary explaining the impact and a recommended action plan.\n7.  **Delivery:** The memo is sent instantly to your inbox via **Gmail**.\n\n### How to set up\n1.  **Credentials:** Connect your **Google Gemini (PaLM)**, **Olostep**, **Google Sheets**, and **Gmail** accounts.\n2.  **Google Sheet Setup:** Create a sheet named \"competitor monitoring\" with columns for `url`, `previousContent`, and `newcontent`. Add the URLs you want to track.\n3.  **Alert Recipient:** Update the **Gmail** node with your email address to receive the strategy alerts.\n\n### Requirements\n*   **Google Gemini API:** For intelligent \"diffing\" and strategic memo drafting.\n*   **Olostep API:** To bypass anti-scraping measures on competitor landing pages.\n*   **Google Sheets (OAuth2):** To maintain the historical baseline for comparison.\n*   **Gmail (OAuth2):** For automated alert delivery.\n\n### How to customize the workflow\n*   **Threshold Settings:** Adjust the **Changes identifier** prompt to be more or less sensitive to minor wording changes.\n*   **Multi-Channel Alerts:** Connect **Slack** or **Microsoft Teams** nodes to send alerts directly to a `#competitive-intel` channel.\n*   **Frequency:** Set a **Schedule Trigger** to run this every morning or once a week, depending on the volatility of your industry."
      },
      "typeVersion": 1
    },
    {
      "id": "24af4588-7a5c-4124-bf8d-096109103334",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        -96
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 240,
        "content": "## Get URLs \npulls target competitor URLs from a Google Sheet."
      },
      "typeVersion": 1
    },
    {
      "id": "afe739bc-5648-484c-a9cf-e72ab4b6a3b6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        -96
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 240,
        "content": "## Switch case\nChecks if there's no content associated to this URL"
      },
      "typeVersion": 1
    },
    {
      "id": "c2902ca8-63b1-462a-876e-25d3e9cb3359",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        -208
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 496,
        "content": "## Olostep API \nScrapes the content of the URL"
      },
      "typeVersion": 1
    },
    {
      "id": "9db78e60-9cd9-4254-872e-ce8b2c897706",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        -208
      ],
      "parameters": {
        "color": 7,
        "height": 256,
        "content": "## Google sheet \nAppends the scraped content into a google sheet"
      },
      "typeVersion": 1
    },
    {
      "id": "0d730392-c12f-4ce3-99c5-0808273314ef",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 240,
        "content": "## Changes identifier \nCompares the new version of the URL content and the old one, and identify the changes between the two"
      },
      "typeVersion": 1
    },
    {
      "id": "969107c8-3ba1-4e8b-a693-07997e156de7",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 240,
        "content": "## If \nChecks if there's any changes between the two versions or there isn't"
      },
      "typeVersion": 1
    },
    {
      "id": "ea424d9e-99c9-412e-b7d5-227a2f082cd0",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1344,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 336,
        "content": "## Diff analyst \nAnalyzes the changes and tag it to a certain category"
      },
      "typeVersion": 1
    },
    {
      "id": "404e2210-0ca2-46ab-afb0-983a7b62031d",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1664,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 336,
        "content": "## Memo editor \nWrites a short, actionable, internal memo based on the change detected"
      },
      "typeVersion": 1
    },
    {
      "id": "84b6a630-309b-47e6-939c-a98484634da9",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1968,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 336,
        "content": "## Send notification \nSends a notification email with the memo created"
      },
      "typeVersion": 1
    },
    {
      "id": "c182eda0-d1c2-43d9-b036-364e627e5fd5",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        288
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 288,
        "content": "## Append content \nAppends all the content into a google sheet"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "2a7058a9-3bfe-4f9b-b0d9-abdf4d7fde99",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "diff analyst",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "scrape URL",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "scrape URL1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "scrape URL": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Memo editor": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "scrape URL1": {
      "main": [
        [
          {
            "node": "Changes identifier",
            "type": "main",
            "index": 0
          },
          {
            "node": "Append or update row in sheet1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "diff analyst": {
      "main": [
        [
          {
            "node": "Memo editor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Changes identifier": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "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

Never get blindsided by a competitor's "stealth" update again. The Competitor Feature Monitoring & Strategy Alerting workflow acts as an automated 24/7 surveillance system for your industry. It monitors specific competitor URLs, detects substantive changes in features, pricing,…

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Understand your customers before you build for them. This workflow, Market Segmentation: Buyer Persona Pain Point Report, automates the grueling process of primary market research. By scraping real-wo

Form Trigger, Google Gemini, N8N Nodes Olostep +3
AI & RAG

Crush your competition's SEO strategy by visualizing their entire content architecture in seconds. The AI SEO Content Strategy: Competitor Topical Map Generator workflow automates the "topical mapping

Form Trigger, N8N Nodes Olostep, Google Gemini +1
AI & RAG

following up on every lead by hand is slow, inconsistent, and lets good opportunities slip. by the time you read a form submission, write a reply, and figure out what to do next — the lead has moved o

Google Sheets, Google Gemini, Form Trigger +2
AI & RAG

This workflow automatically generates and sends personalized client emails using portfolio data and live market trends. It fetches client details from Google Sheets, retrieves market news via API, fil

HTTP Request, Google Sheets, Google Gemini +1
AI & RAG

09_Storage_GoogleDrives_meeting_note. Uses googleDrive, googleDocs, googleSheets, gmail. Event-driven trigger; 9 nodes.

Google Drive, Google Docs, Google Sheets +3