AutomationFlowsAI & RAG › Monitor E-commerce Price Changes with Decodo Scraper, Openai & Google Sheets

Monitor E-commerce Price Changes with Decodo Scraper, Openai & Google Sheets

ByYaron Been @yaron-nofluff on n8n.io

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Cron / scheduled trigger★★★★☆ complexityAI-powered27 nodes@Decodo/N8N Nodes DecodoAgentOutput Parser StructuredOpenAI ChatGmailOutput Parser AutofixingGoogle Sheets
AI & RAG Trigger: Cron / scheduled Nodes: 27 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #10414 — 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 →

Download .json
{
  "id": "TleaEwYZxcClYN1K",
  "name": "Automated Price Intelligence System using decodo",
  "tags": [
    {
      "id": "uMBvoK3U8QYbRWJ5",
      "name": "done",
      "createdAt": "2025-11-18T13:27:52.572Z",
      "updatedAt": "2025-11-18T13:27:52.572Z"
    }
  ],
  "nodes": [
    {
      "id": "93671f9f-fae5-4c02-887b-97a7dd4cd731",
      "name": "1. Multi-schedule Price Monitor",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        64,
        480
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            },
            {
              "triggerAtHour": 15
            },
            {
              "triggerAtHour": 21
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b58c42c4-6125-4cd7-9f56-53e87b315fa2",
      "name": "2. Global Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        272,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "product-targets",
              "name": "productTargets",
              "type": "string",
              "value": "[|  { \"url\": \"https://www.jogger.co.in/products/jogger-hyper-cushion-for-men-11344\", \"internal_id\": \"US-M-5302\", \"threshold_type\": \"premium\" },  { \"url\": \"https://www.urbansole.com.pk/products/mens-moccasins-us-te-5358-black?pr_prod_strat=jac&pr_rec_id=a3a2ce637&pr_rec_pid=9244230516968&pr_ref_pid=9231467643112&pr_seq=uniform\", \"internal_id\": \"US-W-RUN1\", \"threshold_type\": \"default\" },  { \"url\": \"https://www.urbansole.com.pk/products/men-s-moccasins-us-br-5101camello?pr_prod_strat=jac&pr_rec_id=193f6648f&pr_rec_pid=9231466103016&pr_ref_pid=9244230516968&pr_seq=uniform\", \"internal_id\": \"US-K-CAS2\", \"threshold_type\": \"budget\" }]"
            },
            {
              "id": "price-thresholds",
              "name": "priceThresholds",
              "type": "string",
              "value": "{\n  \"default\": 8000,\n  \"premium\": 12000,\n  \"budget\": 5000\n}"
            },
            {
              "id": "alert-recipients",
              "name": "alertRecipients",
              "type": "string",
              "value": "{\n  \"critical\": \"user@example.com\",\n  \"standard\": \"user@example.com\"\n}"
            },
            {
              "id": "historical-db-table",
              "name": "historicalDBTable",
              "type": "string",
              "value": "price_intelligence_logs"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "85237bf6-2dc9-4aa3-9cb5-cb6b7c351960",
      "name": "3. Initial Aggregate (Pass-Through)",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        80,
        912
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "c4bdce67-f1a5-484b-84df-e9e67b439ef7",
      "name": "4. Parse Product Targets (Function)",
      "type": "n8n-nodes-base.function",
      "position": [
        288,
        912
      ],
      "parameters": {
        "functionCode": "// Corrected Code for the Function Node (Node 4: Parse Product Targets)\nconst inputItemJson = $input.item.json.data[0]; // Access the actual data object inside the 'data' array\n\n// 1. Get the productTargets string\nlet config = inputItemJson.productTargets;\n\n// 2. Clean the string to ensure valid JSON array format\n//    - Remove leading \"[|\" (if present)\n//    - Replace all stray pipes '|' (if present) with a space\n//    - Replace non-standard spaces/newlines with proper JSON spacing\nconfig = config\n    .trim()\n    .replace(/^\\[\\|/, '[') // Fix the starting \"[|\" to just \"[\"\n    .replace(/\\|/g, '');   // Remove any remaining pipes '|'\n\n// 3. Parse the cleaned string\nconst products = JSON.parse(config);\n\nconst globalConfig = inputItemJson; // Use the corrected object for global config\n\nconst results = [];\nfor (const product of products) {\n  results.push({\n    json: {\n      url: product.url,\n      internalId: product.internal_id,\n      thresholdType: product.threshold_type,\n      // Pass the *unparsed* JSON strings for subsequent nodes to parse if needed\n      priceThresholds: globalConfig.priceThresholds,\n      alertRecipients: globalConfig.alertRecipients,\n      historicalDBTable: globalConfig.historicalDBTable\n    }\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 1
    },
    {
      "id": "be633766-2ab1-426b-a15d-5faea9f6aa65",
      "name": "5. Clone Items (Split In Batches)",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        96,
        1280
      ],
      "parameters": {
        "options": {},
        "batchSize": 1
      },
      "typeVersion": 1
    },
    {
      "id": "6a5f48ee-6a16-42e0-a6c8-0d454f4e61a2",
      "name": "6. Map Threshold (Function)",
      "type": "n8n-nodes-base.function",
      "position": [
        304,
        1280
      ],
      "parameters": {
        "functionCode": "const thresholds = JSON.parse($json.priceThresholds);\nconst type = $json.thresholdType;\n\n// Add the relevant threshold to the current item\n$json.priceThreshold = thresholds[type] || thresholds.default;\n\nreturn $input.item;"
      },
      "typeVersion": 1
    },
    {
      "id": "8b6aca0d-a3cd-4537-824f-16a35bbec0f1",
      "name": "7. Decodo Web Scraper",
      "type": "@decodo/n8n-nodes-decodo.decodoTool",
      "position": [
        688,
        1616
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}"
      },
      "credentials": {
        "decodoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b48cb7fd-eb81-4036-8410-7cd9bd82c5f7",
      "name": "8. Intelligent Price Scraping Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        576,
        1280
      ],
      "parameters": {
        "text": "=Analyze the following e-commerce product page content provided by the Decodo Tool and extract structured data:\n\nProduct URL: {{ $json.url }}\n\nRequired fields:\n- product_name (string)\n- current_price (number)\n- original_price (number, if available, default to 0 if not)\n- discount_percentage (number, if available, calculate if not explicitly visible)\n- availability_status (string)\n- product_category (string)\n- brand (string)\n\nReturn ONLY valid JSON format.",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "43aae2ff-a64e-4f93-9dcc-02bd428b9c27",
      "name": "9. Structured Price Data Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        896,
        1616
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"product_name\": \"Men's Sports Shoes\",\n  \"current_price\": 7199,\n  \"original_price\": 8999,\n  \"discount_percentage\": 20,\n  \"availability_status\": \"In Stock\",\n  \"product_category\": \"Footwear\",\n  \"brand\": \"UrbanSole\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "5ff28412-4ae3-4d96-80b1-2a5eef49f4e5",
      "name": "10. OpenAI Price Analyzer (LLM)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        528,
        1616
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "gpt-4.1"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "404fafca-8497-41eb-9164-f4010a809e90",
      "name": "12. Price Analysis & Strategy Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1264,
        1296
      ],
      "parameters": {
        "text": "=Analyze the current price ({{ $json.current_price }}) for product {{ $json.product_name }} against the defined threshold ({{ $('6. Map Threshold (Function)').item.json.priceThreshold }}). If the price is below the threshold, classify the alert level as 'CRITICAL' (for drops > 20% or below budget threshold) or 'STANDARD'. Also, suggest a strategic response (e.g., 'Immediate Ad Campaign', 'Hold Position', 'Margin Review'). Return ONLY JSON with fields: `alert_level` (string: 'CRITICAL', 'STANDARD', or 'NONE'), `strategic_recommendation` (string).",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "2e5f270c-1a1e-43fd-8ad7-f08c35dbb8a4",
      "name": "13. OpenAI Strategy Model (LLM)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1280,
        1648
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "50baf2b3-862d-4c49-918b-7b383d0251cd",
      "name": "14. Advanced Price Condition Check (IF)",
      "type": "n8n-nodes-base.if",
      "position": [
        1840,
        1296
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "price-threshold-check",
              "operator": {
                "type": "number",
                "operation": "lt"
              },
              "leftValue": "={{ $('8. Intelligent Price Scraping Agent').item.json.output.current_price }}",
              "rightValue": "={{ $('6. Map Threshold (Function)').item.json.priceThreshold }}"
            },
            {
              "id": "ai-critical-check",
              "operator": {
                "type": "string",
                "operation": "equal"
              },
              "leftValue": "={{ $json.alert_level }}",
              "rightValue": "CRITICAL"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "cbc77dbf-1997-42c7-b675-17dbe03f8008",
      "name": "15. Critical vs. Standard Check (IF)",
      "type": "n8n-nodes-base.if",
      "position": [
        2032,
        1152
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "ai-critical-check",
              "operator": {
                "type": "string",
                "operation": "equal"
              },
              "leftValue": "={{ $json.alert_level }}",
              "rightValue": "CRITICAL"
            },
            {
              "id": "9e463058-354d-4ab6-b47f-75ae8fbbc4e8",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $('8. Intelligent Price Scraping Agent').item.json.output.discount_percentage }}",
              "rightValue": 5
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "0e139c62-8091-41f7-bbe8-7dfd23fb0999",
      "name": "16. Send CRITICAL Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2224,
        1008
      ],
      "parameters": {
        "sendTo": "=example@gmail.com",
        "message": "=<h3>CRITICAL PRICE DROP DETECTED!</h3>\n<p><strong>Product:</strong> {{ $('8. Intelligent Price Scraping Agent').item.json.output.product_name }}</p>\n<p><strong>Current Price:</strong> {{ $('8. Intelligent Price Scraping Agent').item.json.output.current_price }} (Below Threshold: {{ $('6. Map Threshold (Function)').item.json.priceThreshold }})</p>\n<p><strong>Discount:</strong> {{ $('8. Intelligent Price Scraping Agent').item.json.output.discount_percentage }}%</p>\n<hr>\n<h4>Strategy Recommendation (AI Analysis):</h4>\n<p><strong>Level:</strong> {{ $json.output.alert_level }}</p>\n<p><strong>Action:</strong> {{ $json.output.strategic_recommendation }}</p>\n<br>\n<p><em>Alert triggered at {{ $now.format('HH:mm:ss') }}</em></p>",
        "options": {
          "appendAttribution": false
        },
        "subject": "=\ud83d\udea8 CRITICAL PRICE DROP: {{ $('8. Intelligent Price Scraping Agent').item.json.output.product_name }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "672dc7bd-2b56-4369-a1f1-49d1950a129a",
      "name": "17. Send STANDARD Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2224,
        1312
      ],
      "parameters": {
        "sendTo": "=example@gmail.com",
        "message": "=<h3>Standard Price Drop Detected.</h3>\n<p><strong>Product:</strong> {{ $('8. Intelligent Price Scraping Agent').item.json.output.product_name }}</p>\n<p><strong>Current Price:</strong> {{ $('8. Intelligent Price Scraping Agent').item.json.output.current_price }}</p>\n<p><strong>Discount:</strong> {{ $('8. Intelligent Price Scraping Agent').item.json.output.discount_percentage }}%</p>\n<p><strong>Strategy:</strong> {{ $json.output.strategic_recommendation }}</p>\n<br>\n<p><em>Alert triggered at {{ $now.format('HH:mm:ss') }}</em></p>",
        "options": {
          "appendAttribution": false
        },
        "subject": "\u26a0\ufe0f Standard Price Alert: {{ $json.output.product_name }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "bc9b9090-c918-4f40-b994-8bd3d501dda0",
      "name": "18. End of Batch (NoOp)",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2096,
        1568
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "67cf4a07-3db3-43c2-aadb-395a636dda9f",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1552,
        1856
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"alert_level\": \"CRITICAL\",\n  \"strategic_recommendation\": \"The current price (843) is drastically below the defined threshold (12000). This indicates a potential data scraping error, currency conversion issue, or an extreme, unauthorized price drop. IMMEDIATELY verify the scraped price source for 'Jogger HYPERCUSHION PU for Men - Style 11344'. If the price is confirmed, issue a 'Margin Review' and a temporary 'Hold Position' on all sales until the pricing error is corrected.\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "6c8c297c-d8e7-4991-aea1-5621bcbb2b47",
      "name": "Auto-fixing Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
      "position": [
        1440,
        1632
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "3c5a2cdc-3f14-4d90-9228-1d057bdc42eb",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1344,
        1872
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b0e52d7c-ce9f-49aa-930b-8be50ddb3bd2",
      "name": "Log Price Data to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        928,
        1280
      ],
      "parameters": {
        "columns": {
          "value": {
            "brand": "={{ $json.output.brand }}",
            "product_name": "={{ $json.output.product_name }}",
            "current_price": "={{ $json.output.current_price }}",
            "original_price": "={{ $json.output.original_price }}",
            "product_category": "={{ $json.output.product_category }}",
            "availability_status": "={{ $json.output.availability_status }}",
            "discount_percentage": "={{ $json.output.discount_percentage }}"
          },
          "schema": [
            {
              "id": "product_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "product_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current_price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "current_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "original_price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "original_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "discount_percentage",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "discount_percentage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "availability_status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "availability_status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "product_category",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "product_category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "brand",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "brand",
              "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/1kze_pvsadPPIGCIyEgTleCoWHzwVQo2fi1DqV_fCeaU/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1kze_pvsadPPIGCIyEgTleCoWHzwVQo2fi1DqV_fCeaU",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1kze_pvsadPPIGCIyEgTleCoWHzwVQo2fi1DqV_fCeaU/edit?usp=drivesdk",
          "cachedResultName": "Product price tracking"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e196f0dd-bb9c-4c20-9256-2d437715cd70",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -656,
        288
      ],
      "parameters": {
        "width": 368,
        "height": 688,
        "content": "## How it works\nThis workflow checks product prices on websites. It goes to the product page, reads the current price, and saves it in a Google Sheet. Then it checks if the price is below your set limit. If it is low, it uses AI to decide if it is a big problem (CRITICAL) or a small problem (STANDARD). Then it sends different email alerts.\n\n## Setup steps\n\nPut your product links and their price types in the \"Global Configuration\" node.\n\nSet your price limits for premium, default, and budget products.\n\nConnect your accounts for Decodo, OpenAI, Gmail, and Google Sheets.\n\nPut the correct email addresses for alerts.\n\nTurn the workflow on.\n\n## Use Coupon Code \"YARON\" and get free decodo credits\n\n### https://decodo.com/"
      },
      "typeVersion": 1
    },
    {
      "id": "35c001e3-8d30-40ce-bc29-1aa5fe4f0a5b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 336,
        "content": "## Schedule & Setup\nThis part sets when the workflow runs (9 AM, 3 PM, 9 PM) and defines the products to watch, price limits, and alert emails."
      },
      "typeVersion": 1
    },
    {
      "id": "cde33a0f-ff24-4ed6-8ddd-4ac9c6724682",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        48,
        768
      ],
      "parameters": {
        "color": 7,
        "width": 384,
        "height": 672,
        "content": "## Prepare Products\nThis part takes your product list and gets each product ready for checking. It gives each product its own price limit."
      },
      "typeVersion": 1
    },
    {
      "id": "6b737945-ecaa-4f14-8022-1feaba9122b5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        1104
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 688,
        "content": "## Get Prices & Save Data\nHere, the tool visits product websites to find current prices using a scraper and AI. It then saves all the data to Google Sheets for records."
      },
      "typeVersion": 1
    },
    {
      "id": "b190b4b0-85bb-45e1-8581-c74d32246af2",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        1104
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 896,
        "content": "## Analyze Prices\nThe AI checks if the current price is below your limit. It decides if it is a CRITICAL or STANDARD alert and suggests what to do next."
      },
      "typeVersion": 1
    },
    {
      "id": "2659d689-0fa5-48a5-bb04-625e7b875d66",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1808,
        864
      ],
      "parameters": {
        "color": 7,
        "width": 592,
        "height": 864,
        "content": "## Send Alerts\nThis part looks at the alert level and sends emails. CRITICAL alerts get urgent emails, and STANDARD alerts get normal emails."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "694d23f5-a0c8-418e-89da-bb30157b6d70",
  "connections": {
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Auto-fixing Output Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "7. Decodo Web Scraper": {
      "ai_tool": [
        [
          {
            "node": "8. Intelligent Price Scraping Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "2. Global Configuration": {
      "main": [
        [
          {
            "node": "3. Initial Aggregate (Pass-Through)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Auto-fixing Output Parser",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Auto-fixing Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "12. Price Analysis & Strategy Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "6. Map Threshold (Function)": {
      "main": [
        [
          {
            "node": "8. Intelligent Price Scraping Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1. Multi-schedule Price Monitor": {
      "main": [
        [
          {
            "node": "2. Global Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "10. OpenAI Price Analyzer (LLM)": {
      "ai_languageModel": [
        [
          {
            "node": "8. Intelligent Price Scraping Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "13. OpenAI Strategy Model (LLM)": {
      "ai_languageModel": [
        [
          {
            "node": "12. Price Analysis & Strategy Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "9. Structured Price Data Parser": {
      "ai_outputParser": [
        [
          {
            "node": "8. Intelligent Price Scraping Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Log Price Data to Google Sheets": {
      "main": [
        [
          {
            "node": "12. Price Analysis & Strategy Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5. Clone Items (Split In Batches)": {
      "main": [
        [
          {
            "node": "6. Map Threshold (Function)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "12. Price Analysis & Strategy Agent": {
      "main": [
        [
          {
            "node": "14. Advanced Price Condition Check (IF)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3. Initial Aggregate (Pass-Through)": {
      "main": [
        [
          {
            "node": "4. Parse Product Targets (Function)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4. Parse Product Targets (Function)": {
      "main": [
        [
          {
            "node": "5. Clone Items (Split In Batches)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8. Intelligent Price Scraping Agent": {
      "main": [
        [
          {
            "node": "Log Price Data to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "15. Critical vs. Standard Check (IF)": {
      "main": [
        [
          {
            "node": "16. Send CRITICAL Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "17. Send STANDARD Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "14. Advanced Price Condition Check (IF)": {
      "main": [
        [
          {
            "node": "15. Critical vs. Standard Check (IF)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "18. End of Batch (NoOp)",
            "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 contains community nodes that are only compatible with the self-hosted version of n8n.

Source: https://n8n.io/workflows/10414/ — 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

Note: This template is for self-hosted n8n instances only

Output Parser Structured, Google Sheets, Agent +6
AI & RAG

Stay ahead in your job search with this Automated Job Intelligence System! This workflow scans company career pages daily for new job listings, uses AI to analyze job relevance and seniority levels, a

Output Parser Structured, OpenAI Chat, Agent +4
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Agent, Output Parser Structured, @Decodo/N8N Nodes Decodo +4
AI & RAG

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

OpenAI Chat, N8N Nodes Mcp, Agent +4
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

OpenAI Chat, N8N Nodes Mcp, Agent +4