{
  "name": "Aggregate commercial property listings with ScrapeGraphAI, Baserow and Teams",
  "nodes": [
    {
      "id": "4019642e-afcb-4f3b-8e5d-0b41b291f64c",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -752,
        192
      ],
      "parameters": {
        "width": 528,
        "height": 704,
        "content": "## How it works\n\nThis workflow checks multiple commercial-real-estate portals once a week and delivers a consolidated stream of fresh or updated listings right inside a Microsoft Teams channel. A sche"
      }
    },
    {
      "id": "44af3dd6-f701-4bd4-84d5-0de9521fbe1e",
      "name": "Section – Trigger & URL Prep",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        80
      ],
      "parameters": {
        "width": 530,
        "height": 718,
        "content": "## Trigger & URL Preparation\n\nA weekly **Schedule Trigger** kicks everything off so you never have to remember to run the workflow. Adjust the interval to suit your market’s pace—weekly is a good defa"
      }
    },
    {
      "id": "efd5c267-c144-435b-85d9-0ff60bd27e91",
      "name": "Section – Parallel Scraping",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        128
      ],
      "parameters": {
        "width": 562,
        "height": 670,
        "content": "## Parallel Scraping\n\nThe **Split in Batches** node takes the URL items one at a time but allows asynchronous execution so multiple pages can be scraped in parallel, shortening total runtime. **Scrape"
      }
    },
    {
      "id": "a5c0d10f-53d6-460e-a8aa-e48377d5dcab",
      "name": "Section – Normalisation & Flattening",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        128
      ],
      "parameters": {
        "width": 514,
        "height": 670,
        "content": "## Normalisation & Flattening\n\nDifferent portals phrase fields differently—some use `rent`, some `price`, others hide size in text. The **Normalise Listings** Code node flattens every raw listing into"
      }
    },
    {
      "id": "b0ee79e1-8f06-4500-8703-64e9e1b7ea4b",
      "name": "Section – Deduplication & Storage",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1568,
        128
      ],
      "parameters": {
        "width": 514,
        "height": 670,
        "content": "## Deduplication & Storage\n\nEach listing item first queries Baserow with an exact-match filter on `listing_id`. If nothing comes back, we create a brand-new row. When a row exists, a small Code node c"
      }
    },
    {
      "id": "aac64391-d5aa-44a2-ac1f-4eaa2a542a46",
      "name": "Section – Teams Notifications",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2128,
        176
      ],
      "parameters": {
        "width": 802,
        "height": 734,
        "content": "## Teams Notifications\n\nBusiness users rarely check databases, so actionable alerts land straight in Microsoft Teams. Two short **Set** nodes craft HTML messages—one for new listings, one for updates—"
      }
    },
    {
      "id": "f8d03eae-3358-45e0-bb77-da26a38ea657",
      "name": "Weekly Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -144,
        384
      ]
    },
    {
      "id": "85b31064-b13d-48f6-922f-0ef2442aed95",
      "name": "Prepare URL List",
      "type": "n8n-nodes-base.code",
      "position": [
        64,
        384
      ]
    },
    {
      "id": "6b1d6abb-7963-463a-ac5a-92396cbb32cf",
      "name": "Split URLs",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        272,
        384
      ]
    },
    {
      "id": "d968b929-d7a7-4ca7-af1f-45d2f61bb892",
      "name": "Scrape Listings",
      "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
      "position": [
        496,
        544
      ]
    },
    {
      "id": "8c5b3453-6e22-437c-bd79-76f625015048",
      "name": "Collect Listings",
      "type": "n8n-nodes-base.merge",
      "position": [
        656,
        560
      ]
    },
    {
      "id": "e23f0bc1-9fc0-43da-a075-f68acc306b54",
      "name": "Normalise Listings",
      "type": "n8n-nodes-base.code",
      "position": [
        816,
        544
      ]
    },
    {
      "id": "5c0d5533-d5a4-4fcc-a61c-36eba4aa063f",
      "name": "Loop Listings",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1072,
        496
      ]
    },
    {
      "id": "52da4f99-1c45-4972-938c-0cb03a8adcfa",
      "name": "Check Existing (Baserow List)",
      "type": "n8n-nodes-base.baserow",
      "position": [
        1232,
        480
      ]
    },
    {
      "id": "64e13c3c-2524-46d6-a50a-284b2253de58",
      "name": "Merge Listing & Result",
      "type": "n8n-nodes-base.merge",
      "position": [
        1376,
        480
      ]
    },
    {
      "id": "57bdb17e-496c-4501-becf-8ae991c284d9",
      "name": "Determine Action",
      "type": "n8n-nodes-base.code",
      "position": [
        1616,
        528
      ]
    },
    {
      "id": "797e28cc-e1c1-4595-bf02-8524a3076365",
      "name": "Need Create?",
      "type": "n8n-nodes-base.if",
      "position": [
        1792,
        528
      ]
    },
    {
      "id": "77b6b233-d32d-4250-a207-f16e73352f7b",
      "name": "Create Row",
      "type": "n8n-nodes-base.baserow",
      "position": [
        2320,
        416
      ]
    },
    {
      "id": "d0e7cbe5-805b-4f22-b8c4-d11f525c0dfb",
      "name": "Create Message",
      "type": "n8n-nodes-base.set",
      "position": [
        2496,
        400
      ]
    },
    {
      "id": "75550ae7-12be-4d66-83a4-46915385d4fb",
      "name": "Teams – New Listing",
      "type": "n8n-nodes-base.microsoftTeams",
      "position": [
        2688,
        416
      ]
    },
    {
      "id": "d31b9b56-da03-4848-878f-c903b42fd4f0",
      "name": "Need Update?",
      "type": "n8n-nodes-base.if",
      "position": [
        1952,
        528
      ]
    },
    {
      "id": "caa31adb-d387-4aa3-a54f-8096d6bfd2b5",
      "name": "Update Row",
      "type": "n8n-nodes-base.baserow",
      "position": [
        2208,
        688
      ]
    },
    {
      "id": "9f1de02b-bc08-4634-a669-297e5372ba56",
      "name": "Update Message",
      "type": "n8n-nodes-base.set",
      "position": [
        2416,
        688
      ]
    },
    {
      "id": "83e0771c-2ba2-47df-a330-94bb3eb9d085",
      "name": "Teams – Update",
      "type": "n8n-nodes-base.microsoftTeams",
      "position": [
        2672,
        688
      ]
    }
  ],
  "connections": {
    "Create Row": {
      "main": [
        [
          {
            "node": "Create Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split URLs": {
      "main": [
        [
          {
            "node": "Scrape Listings",
            "type": "main",
            "index": 0
          },
          {
            "node": "Collect Listings",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Update Row": {
      "main": [
        [
          {
            "node": "Update Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Need Create?": {
      "main": [
        [
          {
            "node": "Create Row",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Need Update?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Need Update?": {
      "main": [
        [
          {
            "node": "Update Row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Listings": {
      "main": [
        [
          {
            "node": "Check Existing (Baserow List)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Listing & Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Message": {
      "main": [
        [
          {
            "node": "Teams – New Listing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Message": {
      "main": [
        [
          {
            "node": "Teams – Update",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Weekly Trigger": {
      "main": [
        [
          {
            "node": "Prepare URL List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Listings": {
      "main": [
        [
          {
            "node": "Collect Listings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Collect Listings": {
      "main": [
        [
          {
            "node": "Normalise Listings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Determine Action": {
      "main": [
        [
          {
            "node": "Need Create?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare URL List": {
      "main": [
        [
          {
            "node": "Split URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalise Listings": {
      "main": [
        [
          {
            "node": "Loop Listings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Listing & Result": {
      "main": [
        [
          {
            "node": "Determine Action",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Existing (Baserow List)": {
      "main": [
        [
          {
            "node": "Merge Listing & Result",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}