{
  "name": "E-commerce product price tracker with ScrapeGraphAI, Baserow and Slack alerts",
  "nodes": [
    {
      "id": "00179d1d-75c0-41f8-bcbb-a753082c1d2a",
      "name": "Weekly Schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1088,
        192
      ]
    },
    {
      "id": "6d1a639a-c5a9-41dd-ad97-beb9c733ba15",
      "name": "Define Product Sources",
      "type": "n8n-nodes-base.code",
      "position": [
        -880,
        192
      ]
    },
    {
      "id": "9acc21b1-b2b7-4606-89da-d45b2f55f7d8",
      "name": "Iterate Products",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -688,
        192
      ]
    },
    {
      "id": "de6ef7e6-4d83-4c31-99ed-c5a50293c153",
      "name": "Scrape Product Page",
      "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
      "position": [
        -480,
        192
      ]
    },
    {
      "id": "b63b922b-ee78-4146-8bbd-181e80edb92f",
      "name": "Clean & Enrich Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -288,
        192
      ]
    },
    {
      "id": "c1a311df-1dcf-4ecb-b23c-8fece9b10623",
      "name": "Has Price Data?",
      "type": "n8n-nodes-base.if",
      "position": [
        -80,
        192
      ]
    },
    {
      "id": "39f368d0-bc40-4211-b3ad-6c0990310304",
      "name": "Store Price Record",
      "type": "n8n-nodes-base.baserow",
      "position": [
        224,
        624
      ]
    },
    {
      "id": "834efe28-05bf-4039-a536-42b455aba1a0",
      "name": "Is Price Below Threshold?",
      "type": "n8n-nodes-base.if",
      "position": [
        416,
        576
      ]
    },
    {
      "id": "77826ac3-1205-426e-80e1-9081aa4a65ea",
      "name": "Prepare Mailchimp Content",
      "type": "n8n-nodes-base.set",
      "position": [
        752,
        176
      ]
    },
    {
      "id": "fc9f07cc-34aa-4439-8813-65596391ae0e",
      "name": "Log Missing Price",
      "type": "n8n-nodes-base.code",
      "position": [
        832,
        368
      ]
    },
    {
      "id": "a9707a76-7567-41c2-9ecd-58e7928eae4f",
      "name": "Error Handler",
      "type": "n8n-nodes-base.code",
      "position": [
        304,
        -208
      ]
    },
    {
      "id": "4aa7e23e-604c-4ed0-b250-4ec5324a5cbc",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        -208
      ],
      "parameters": {
        "width": 550,
        "height": 898,
        "content": "## How it works\n\nEvery week the Schedule Trigger wakes the workflow and hands a list of product URLs to ScrapeGraphAI. The AI scraper visits each ecommerce page, understands the layout and extracts th"
      }
    },
    {
      "id": "cafed690-ea6d-4135-a39c-1c5f8bee15eb",
      "name": "Section – Data Collection",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1088,
        -208
      ],
      "parameters": {
        "width": 754,
        "height": 862,
        "content": "## Data Collection\n\nData collection starts with the **Weekly Schedule** node, which triggers automatically every seven days so you never miss a pricing shift. The **Define Product Sources** Code node "
      }
    },
    {
      "id": "a92431dd-3a11-4d87-8c44-94a1184fac74",
      "name": "Section – Data Processing",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -208
      ],
      "parameters": {
        "width": 450,
        "height": 846,
        "content": "## Data Processing\n\nAfter scraping, each item passes through **Clean & Enrich Data** where raw text is turned into analytics-ready values. Prices often include currency symbols or thousand separators,"
      }
    },
    {
      "id": "b25f321f-f0b9-4e03-8aba-c7a0b79630ad",
      "name": "Section – Data Storage",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        224
      ],
      "parameters": {
        "width": 450,
        "height": 622,
        "content": "## Data Storage\n\nThe **Store Price Record** node writes every clean observation into Baserow so you build a historical dataset automatically. Because Baserow offers instant spreadsheets backed by a re"
      }
    },
    {
      "id": "82981fc7-5858-47f8-a60c-485e024de5c3",
      "name": "Section – Alerting",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -144
      ],
      "parameters": {
        "width": 450,
        "height": 686,
        "content": "## Alerting\n\nPrice intelligence is only useful when people hear about it quickly. The **Is Price Below Threshold?** node compares the freshly scraped price against a configurable constant (set via env"
      }
    },
    {
      "id": "0de8a479-546b-4347-ac1b-d65e20395e37",
      "name": "Section – Error Handling",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -480
      ],
      "parameters": {
        "width": 450,
        "height": 430,
        "content": "## Error Handling\n\nScraping can fail for many reasons—CAPTCHAs, site redesigns, or a brief connection hiccup. Rather than stopping the entire run, errors from **Scrape Product Page** route to **Error "
      }
    },
    {
      "id": "9de47146-f482-461b-a18c-05983288744f",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        928,
        160
      ]
    }
  ],
  "connections": {
    "Has Price Data?": {
      "main": [
        [
          {
            "node": "Store Price Record",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Missing Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Weekly Schedule": {
      "main": [
        [
          {
            "node": "Define Product Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Iterate Products": {
      "main": [
        [
          {
            "node": "Scrape Product Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store Price Record": {
      "main": [
        [
          {
            "node": "Is Price Below Threshold?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean & Enrich Data": {
      "main": [
        [
          {
            "node": "Has Price Data?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Product Page": {
      "main": [
        [
          {
            "node": "Clean & Enrich Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Error Handler",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Define Product Sources": {
      "main": [
        [
          {
            "node": "Iterate Products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Price Below Threshold?": {
      "main": [
        [
          {
            "node": "Prepare Mailchimp Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Mailchimp Content": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}