This workflow corresponds to n8n.io template #5959 — 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": "D2S34DY7VfnEPpyB",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "16 Monitor Competitor Pricing",
"tags": [],
"nodes": [
{
"id": "605a1234-c0e6-4536-b77f-6847f00373ce",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
420,
260
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "555eb402-b520-43e2-95cd-bd17346d03db",
"name": "MCP Client",
"type": "n8n-nodes-mcp.mcpClientTool",
"position": [
600,
260
],
"parameters": {
"toolName": "scrape_as_markdown",
"operation": "executeTool",
"toolParameters": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Tool_Parameters', ``, 'json') }}"
},
"credentials": {
"mcpClientApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2a0c20ec-11ed-47ab-9d72-386aae3abcfb",
"name": "\ud83d\udcc5 Run weekly Check",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-60,
0
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.2
},
{
"id": "c3b79dd1-be34-4f56-82a2-7f5bfad4277b",
"name": "\ud83d\uded2 Product Page URL",
"type": "n8n-nodes-base.set",
"position": [
120,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "29b0aaf6-ddbb-4f33-a937-6528a9c1ef13",
"name": "url",
"type": "string",
"value": "https://www.nike.com/w/training-gym-clothing-58jtoz6ymx6"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "807fbabc-d4b7-4ab8-82fe-733df05d9a7f",
"name": "\ud83e\udd16 Scrape Competitor Prices (MCP Agent)",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
440,
0
],
"parameters": {
"text": "=scrape all the details about every product from the following url:\n{{ $json.url }}",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "52f014cb-7795-4461-b6f0-ba361ac0fc47",
"name": "\ud83d\udce7 Notify: Prices Logged in Sheet",
"type": "n8n-nodes-base.gmail",
"position": [
900,
-200
],
"parameters": {
"sendTo": "user@example.com",
"message": "The Competitor pricing has just logged into google sheets.\n\nPlease take a look and adjust the prices",
"options": {},
"subject": "Competitor product pricing has just logged into google sheets",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "118a498c-ee93-4a4c-88a5-9455985e515d",
"name": "\ud83e\uddf9 Format Products for Google Sheets",
"type": "n8n-nodes-base.code",
"position": [
1200,
180
],
"parameters": {
"jsCode": "// Input: 1 item with `output` containing an array of product objects\nconst products = items[0].json.output;\n\n// Return each product as its own item for Google Sheets\nreturn products.map(product => {\n return {\n json: {\n name: product.name,\n description: product.description,\n price: product.price,\n url: product.url\n }\n };\n});\n"
},
"typeVersion": 2
},
{
"id": "24a199a7-2cc5-46bd-9b92-0d9878088136",
"name": "\ud83d\udcc4 Save to Google Sheets (Competitor Pricing Log)",
"type": "n8n-nodes-base.googleSheets",
"position": [
1420,
180
],
"parameters": {
"columns": {
"value": {
"URL": "={{ $json.url }}",
"Name": "={{ $json.name }}",
"Price": "={{ $json.price }}",
"Description": "={{ $json.description }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Description",
"type": "string",
"display": true,
"required": false,
"displayName": "Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Price",
"type": "string",
"display": true,
"required": false,
"displayName": "Price",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "URL",
"type": "string",
"display": true,
"required": false,
"displayName": "URL",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/11NLHG0clJ78pV6YWc_Nt3Q8pjzrojiuwDOuvASViOI4/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "11NLHG0clJ78pV6YWc_Nt3Q8pjzrojiuwDOuvASViOI4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/11NLHG0clJ78pV6YWc_Nt3Q8pjzrojiuwDOuvASViOI4/edit?usp=drivesdk",
"cachedResultName": "Competitor product pricing"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "c8056167-a856-4bf6-9552-eb37194309b0",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-100,
-660
],
"parameters": {
"color": 5,
"width": 360,
"height": 840,
"content": "### \ud83d\udd39 **Section 1: Schedule & Input Configuration**\n\n#### \ud83e\udde9 Nodes:\n\n* `\ud83d\udcc5 Run Daily Check` *(Schedule Trigger)*\n* `\ud83d\uded2 Product Page URL` *(Edit Fields)*\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nThis section **starts the workflow** at a scheduled time \u2014 daily, weekly, or hourly depending on your setup.\nThen, the `Edit Fields` node optionally allows you to **manually enter or override** the product URL(s) to track. This makes your workflow flexible.\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* Use `Edit Fields` when you want to quickly test a new product without changing the backend.\n* Use the schedule to **automate price checks daily**, saving manual effort.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "7c59258a-4dc0-4b13-8852-22c2b2576d8a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
420,
-820
],
"parameters": {
"color": 3,
"width": 300,
"height": 1000,
"content": "### \ud83e\udd16 **Section 2: Competitor Price Scraping via Agent**\n\n#### \ud83e\udde9 Nodes:\n\n* `\ud83e\udd16 Scrape Competitor Prices (MCP Agent)`\n* \ud83c\udf10 `MCP Client`\n* \ud83d\udcac `OpenAI Chat Model`\n* \ud83e\udde9 `Structured Output Parser`\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nThis is the **core engine** of the workflow. It uses an AI-powered agent connected to **Bright Data\u2019s MCP (Mobile Carrier Proxy)** to:\n\n1. Access dynamic websites like Nike.\n2. Scrape product data even if the content loads via JavaScript.\n3. Use OpenAI to intelligently plan scraping steps (optional).\n4. Parse the messy data into **structured JSON** (via the parser).\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* **Bright Data MCP** handles anti-bot tech on complex sites.\n* No coding needed \u2014 the agent knows how to fetch prices, descriptions, and links.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "38bfe2a4-a4a9-4969-b44f-50ba7db6b915",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
840,
-1000
],
"parameters": {
"color": 6,
"width": 220,
"height": 980,
"content": "### \ud83d\udce7 **Section 3: Email Notification**\n\n#### \ud83e\udde9 Node:\n\n* `\ud83d\udce7 Notify: Prices Logged in Sheet` *(Gmail)*\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nOnce the data is successfully scraped, this node **sends an email notification** to let you (or your team) know that competitor prices are now stored in Google Sheets.\n\nThe email could say something like:\n\n> \u2705 \u201cNew competitor pricing data has been added to the sheet. Click here to review.\u201d\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* You\u2019ll always stay **in the loop** \u2014 no need to check the sheet manually.\n* You can customize this email (add buttons, links, summaries, etc.).\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "93966003-b316-4c00-a830-afe8649e16df",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1160,
-580
],
"parameters": {
"color": 2,
"width": 420,
"height": 960,
"content": "### \ud83d\udcc4 **Section 4: Data Transformation & Storage**\n\n#### \ud83e\udde9 Nodes:\n\n* `\ud83e\uddf9 Format Products for Google Sheets` *(Code)*\n* `\ud83d\udcc4 Save to Google Sheets (Competitor Pricing Log)` *(Google Sheets)*\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nThis final section processes the raw data and **converts it into individual product rows** so that Google Sheets can store each one neatly.\n\nThe Code node:\n\n* Breaks the product list into single entries\n* Extracts: name, price, description, URL\n\nThen the Google Sheets node:\n\n* Appends each product to a **new row** in your sheet (like a live price tracker)\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* View trends over time in the sheet \ud83d\udcca\n* Filter or sort based on price changes\n* Use Google Sheets charts for visuals!\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "07140bb3-58b6-458e-8e9d-f52c81997164",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
-580
],
"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
},
{
"id": "55412999-3cad-4a90-9753-a13e14d40bd1",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1920,
-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": "26435f82-80f8-4f71-bb8d-64959689c338",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1920,
-300
],
"parameters": {
"color": 4,
"width": 1289,
"height": 2538,
"content": "## \ud83d\udcbc Workflow Title: **Competitor Price Tracker & Logger**\n\n> \ud83d\udccc This n8n automation regularly scrapes product prices from competitor websites (like Nike), stores the results in Google Sheets, and alerts you via email when new data is logged.\n\n---\n\n### \ud83d\udd39 **Section 1: Schedule & Input Configuration**\n\n#### \ud83e\udde9 Nodes:\n\n* `\ud83d\udcc5 Run Daily Check` *(Schedule Trigger)*\n* `\ud83d\uded2 Product Page URL` *(Edit Fields)*\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nThis section **starts the workflow** at a scheduled time \u2014 daily, weekly, or hourly depending on your setup.\nThen, the `Edit Fields` node optionally allows you to **manually enter or override** the product URL(s) to track. This makes your workflow flexible.\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* Use `Edit Fields` when you want to quickly test a new product without changing the backend.\n* Use the schedule to **automate price checks daily**, saving manual effort.\n\n---\n\n### \ud83e\udd16 **Section 2: Competitor Price Scraping via Agent**\n\n#### \ud83e\udde9 Nodes:\n\n* `\ud83e\udd16 Scrape Competitor Prices (MCP Agent)`\n* \ud83c\udf10 `MCP Client`\n* \ud83d\udcac `OpenAI Chat Model`\n* \ud83e\udde9 `Structured Output Parser`\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nThis is the **core engine** of the workflow. It uses an AI-powered agent connected to **Bright Data\u2019s MCP (Mobile Carrier Proxy)** to:\n\n1. Access dynamic websites like Nike.\n2. Scrape product data even if the content loads via JavaScript.\n3. Use OpenAI to intelligently plan scraping steps (optional).\n4. Parse the messy data into **structured JSON** (via the parser).\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* **Bright Data MCP** handles anti-bot tech on complex sites.\n* No coding needed \u2014 the agent knows how to fetch prices, descriptions, and links.\n\n---\n\n### \ud83d\udce7 **Section 3: Email Notification**\n\n#### \ud83e\udde9 Node:\n\n* `\ud83d\udce7 Notify: Prices Logged in Sheet` *(Gmail)*\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nOnce the data is successfully scraped, this node **sends an email notification** to let you (or your team) know that competitor prices are now stored in Google Sheets.\n\nThe email could say something like:\n\n> \u2705 \u201cNew competitor pricing data has been added to the sheet. Click here to review.\u201d\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* You\u2019ll always stay **in the loop** \u2014 no need to check the sheet manually.\n* You can customize this email (add buttons, links, summaries, etc.).\n\n---\n\n### \ud83d\udcc4 **Section 4: Data Transformation & Storage**\n\n#### \ud83e\udde9 Nodes:\n\n* `\ud83e\uddf9 Format Products for Google Sheets` *(Code)*\n* `\ud83d\udcc4 Save to Google Sheets (Competitor Pricing Log)` *(Google Sheets)*\n\n#### \ud83d\udd0d **What\u2019s Happening?**\n\nThis final section processes the raw data and **converts it into individual product rows** so that Google Sheets can store each one neatly.\n\nThe Code node:\n\n* Breaks the product list into single entries\n* Extracts: name, price, description, URL\n\nThen the Google Sheets node:\n\n* Appends each product to a **new row** in your sheet (like a live price tracker)\n\n#### \ud83d\udca1 **Beginner Tips:**\n\n* View trends over time in the sheet \ud83d\udcca\n* Filter or sort based on price changes\n* Use Google Sheets charts for visuals!\n\n---\n\n## \ud83e\udde0 Summary for Beginners\n\n| Step | Purpose | Benefit |\n| ---- | ------------------------------------ | -------------------------------------------------------- |\n| 1\ufe0f\u20e3 | Trigger & Input | Controls when to run and what products to track |\n| 2\ufe0f\u20e3 | Scraping Agent | Collects competitor prices from hard-to-scrape websites |\n| 3\ufe0f\u20e3 | Email Notification | Keeps you informed every time new data is captured |\n| 4\ufe0f\u20e3 | Processing & Storing to Google Sheet | Stores clean data for review, tracking, or price updates |\n\n---"
},
"typeVersion": 1
},
{
"id": "abf0acf3-d7eb-4ba1-8b50-386ecfb68eed",
"name": "Auto-fixing Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
740,
260
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "81ee9366-a769-4468-a29d-5f17ce24d237",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
720,
480
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "8e60d01a-4743-4d26-b7c5-05e0c42aa5c5",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
880,
480
],
"parameters": {
"jsonSchemaExample": "[\n {\n \"name\": \"Nike Universa\",\n \"description\": \"Women's Medium-Support High-Waisted 7/8 Leggings with Pockets\",\n \"price\": 93.97,\n \"url\": \"https://www.nike.com/t/universa-womens-medium-support-high-waisted-7-8-leggings-with-pockets-tTQDxt/HQ6813-478\"\n },\n {\n \"name\": \"Nike One\",\n \"description\": \"Women's Dri-FIT Tank Top\",\n \"price\": 50,\n \"url\": \"https://www.nike.com/t/one-womens-dri-fit-tank-top-QHHXIcvJ/IH8605-652\"\n },\n {\n \"name\": \"Nike Primary Fleece\",\n \"description\": \"Men's Dri-FIT UV Pullover Performance Hoodie\",\n \"price\": 80,\n \"url\": \"https://www.nike.com/t/primary-fleece-mens-dri-fit-uv-pullover-performance-hoodie-B10qz3/FZ0969-237\"\n },\n {\n \"name\": \"Nike Swoosh Medium Support\",\n \"description\": \"Women's Padded Sports Bra\",\n \"price\": 40,\n \"url\": \"https://www.nike.com/t/swoosh-medium-support-womens-padded-sports-bra-1mKhIH9g/DX6821-712\"\n },\n {\n \"name\": \"Nike Dri-FIT Legend\",\n \"description\": \"Men's Fitness T-Shirt\",\n \"price\": 30,\n \"url\": \"https://www.nike.com/t/dri-fit-legend-mens-fitness-t-shirt-JmKL0d/DX0989-411\"\n }\n]\n"
},
"typeVersion": 1.2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "f5a47b0c-868f-4398-9391-86184f4319a3",
"connections": {
"MCP Client": {
"ai_tool": [
[
{
"node": "\ud83e\udd16 Scrape Competitor Prices (MCP Agent)",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "\ud83e\udd16 Scrape Competitor Prices (MCP Agent)",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\ud83d\udcc5 Run weekly Check": {
"main": [
[
{
"node": "\ud83d\uded2 Product Page URL",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\uded2 Product Page URL": {
"main": [
[
{
"node": "\ud83e\udd16 Scrape Competitor Prices (MCP Agent)",
"type": "main",
"index": 0
}
]
]
},
"Auto-fixing Output Parser": {
"ai_outputParser": [
[
{
"node": "\ud83e\udd16 Scrape Competitor Prices (MCP Agent)",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\ud83e\uddf9 Format Products for Google Sheets": {
"main": [
[
{
"node": "\ud83d\udcc4 Save to Google Sheets (Competitor Pricing Log)",
"type": "main",
"index": 0
}
]
]
},
"\ud83e\udd16 Scrape Competitor Prices (MCP Agent)": {
"main": [
[
{
"node": "\ud83e\uddf9 Format Products for Google Sheets",
"type": "main",
"index": 0
},
{
"node": "\ud83d\udce7 Notify: Prices Logged 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.
gmailOAuth2googleSheetsOAuth2ApimcpClientApiopenAiApi
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 pricing across multiple products and services to track market positioning and pricing strategies. It saves you time by eliminating the need to manually check competitor prices and provides real-time insights into pricing changes…
Source: https://n8n.io/workflows/5959/ — 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.
Note: This template is for self-hosted n8n instances only
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow automatically monitors social media advertising performance across platforms to track campaign effectiveness and ROI. It saves you time by eliminating the need to manually check multiple