{
  "name": "Track & alert public transport delays using ScrapeGraphAI, Teams and Todoist",
  "nodes": [
    {
      "id": "efd3927d-c4af-4892-b88b-10f6e51e1c3c",
      "name": "Webhook – Incoming Request",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -864,
        608
      ]
    },
    {
      "id": "69275fd6-f3df-4799-a79c-229926c24b59",
      "name": "Validate & Parse Request",
      "type": "n8n-nodes-base.code",
      "position": [
        -688,
        608
      ]
    },
    {
      "id": "213c1c60-4f87-4ef5-b2fb-687357604b64",
      "name": "Generate Target URLs",
      "type": "n8n-nodes-base.code",
      "position": [
        -528,
        592
      ]
    },
    {
      "id": "983317b5-ca3c-4816-996f-278e1fe7dbce",
      "name": "Split URLs",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -304,
        608
      ]
    },
    {
      "id": "e99eed8c-aad6-4941-8601-39f242f1a63f",
      "name": "Scrape Schedules & Delays",
      "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
      "position": [
        -96,
        592
      ]
    },
    {
      "id": "4bffbb82-e2ab-402d-bfba-56fe28280608",
      "name": "Clean & Enrich Data",
      "type": "n8n-nodes-base.code",
      "position": [
        64,
        592
      ]
    },
    {
      "id": "b0edc489-b2f5-4b25-a0bf-79120fed481b",
      "name": "Delay > 0?",
      "type": "n8n-nodes-base.if",
      "position": [
        336,
        576
      ]
    },
    {
      "id": "03e62d0c-61ce-45af-abbd-3fa19e246058",
      "name": "Prepare Teams Message",
      "type": "n8n-nodes-base.set",
      "position": [
        368,
        1216
      ]
    },
    {
      "id": "a31ab106-851e-4668-b13a-066fbccf53f7",
      "name": "Send Teams Alert",
      "type": "n8n-nodes-base.microsoftTeams",
      "position": [
        608,
        1168
      ]
    },
    {
      "id": "5d8a8e7c-ff09-4e3b-92f4-29bde65d2006",
      "name": "Prepare Todoist Task",
      "type": "n8n-nodes-base.set",
      "position": [
        512,
        448
      ]
    },
    {
      "id": "917f76e1-152c-49d1-bb85-a867b9b7242f",
      "name": "Create Todoist Task",
      "type": "n8n-nodes-base.todoist",
      "position": [
        656,
        416
      ]
    },
    {
      "id": "9be8ca93-6421-4f76-92a5-a8567443fc23",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1504,
        256
      ],
      "parameters": {
        "width": 550,
        "height": 738,
        "content": "## How it works\n\nThis workflow provides real-time public transport monitoring for busy commuters. A mobile app or any HTTP client sends a POST request containing a line number and stop name to the web"
      }
    },
    {
      "id": "32e7a97b-9d4d-4638-8d2d-10816f6381fa",
      "name": "Section – Trigger & Input",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        240
      ],
      "parameters": {
        "width": 514,
        "height": 750,
        "content": "## Trigger & Input Validation\n\nThe first two functional nodes form the entry point for the entire automation. The webhook listens for HTTP POST requests so any external system—mobile app, chatbot, or "
      }
    },
    {
      "id": "50676904-21ff-48b7-bf8b-ed22b39238bf",
      "name": "Section – Scraping & Transformation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        224
      ],
      "parameters": {
        "width": 546,
        "height": 766,
        "content": "## Scraping & Transformation\n\nAfter generating the target URL, the Split In Batches node lets you scale beyond a single stop or line by queuing multiple requests one at a time. This prevents rate-limi"
      }
    },
    {
      "id": "14cfbbfb-0959-40b6-91bb-5158b893de2b",
      "name": "Section – Conditional Logic & Storage",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        64
      ],
      "parameters": {
        "width": 450,
        "height": 670,
        "content": "## Conditional Logic & Todoist Storage\n\nThe **Delay > 0?** IF node adds smart routing without over-complicating the overall linear design. If a departure is delayed, the workflow branches to include a"
      }
    },
    {
      "id": "4a0fa795-10de-4deb-a53c-ffc435451b18",
      "name": "Section – Microsoft Teams Alerts",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        864
      ],
      "parameters": {
        "width": 450,
        "height": 526,
        "content": "## Microsoft Teams Notifications\n\nDelays often require immediate action—perhaps choosing an alternate route or informing colleagues of a late arrival. When the IF node detects any non-zero `delayMinut"
      }
    }
  ],
  "connections": {
    "Delay > 0?": {
      "main": [
        [
          {
            "node": "Prepare Teams Message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Todoist Task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split URLs": {
      "main": [
        [
          {
            "node": "Scrape Schedules & Delays",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Teams Alert": {
      "main": [
        [
          {
            "node": "Prepare Todoist Task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean & Enrich Data": {
      "main": [
        [
          {
            "node": "Delay > 0?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Target URLs": {
      "main": [
        [
          {
            "node": "Split URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Todoist Task": {
      "main": [
        [
          {
            "node": "Create Todoist Task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Teams Message": {
      "main": [
        [
          {
            "node": "Send Teams Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate & Parse Request": {
      "main": [
        [
          {
            "node": "Generate Target URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Schedules & Delays": {
      "main": [
        [
          {
            "node": "Clean & Enrich Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook – Incoming Request": {
      "main": [
        [
          {
            "node": "Validate & Parse Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}