{
  "name": "Sync Azure DevOps work items to GitHub issues with Google Sheets tracking",
  "nodes": [
    {
      "id": "bc44de1f-5aae-4610-9656-7b0f1abacc17",
      "name": "Webhook1",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -400,
        400
      ]
    },
    {
      "id": "57abbafb-499f-4d15-96a9-761ec01c029b",
      "name": "HTTP Request1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        500,
        80
      ]
    },
    {
      "id": "c8e8776c-e157-4695-ab7c-2e9092a8cde3",
      "name": "Code2",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        80
      ]
    },
    {
      "id": "95ddfe84-ad11-47a1-bdca-905dce64e7e9",
      "name": "HTTP Request2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1080,
        80
      ]
    },
    {
      "id": "f5a34fc0-1af4-4ed1-aaa7-2d9647ece841",
      "name": "Webhook2",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -400,
        680
      ]
    },
    {
      "id": "c23ad66e-3e21-46af-9587-10d7c81cf44b",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1360,
        80
      ]
    },
    {
      "id": "910297bd-cf54-42af-b297-3bb397721710",
      "name": "Google Sheets1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        280,
        1000
      ]
    },
    {
      "id": "0b938c91-25a2-4f32-8cf6-5ea6f5fbb862",
      "name": "Create Github Issue",
      "type": "n8n-nodes-base.github",
      "position": [
        180,
        80
      ]
    },
    {
      "id": "42b27eee-cbbb-4d4c-aee1-31a2951855c6",
      "name": "Filter Story Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -140,
        80
      ]
    },
    {
      "id": "ae95f447-f964-4f01-b97e-7616032da091",
      "name": "Filter Task Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -120,
        1000
      ]
    },
    {
      "id": "207fc436-0d69-4d63-a44b-4a3619244d31",
      "name": "GitHub1",
      "type": "n8n-nodes-base.github",
      "position": [
        1000,
        1000
      ]
    },
    {
      "id": "2be4943e-b315-464d-bed7-350daaaba3d4",
      "name": "GitHub2",
      "type": "n8n-nodes-base.github",
      "position": [
        660,
        1000
      ]
    },
    {
      "id": "8e29be67-84eb-4a1f-b5fd-b73e6828026d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1100,
        380
      ],
      "parameters": {
        "width": 480,
        "height": 500,
        "content": "📌 Workflow Purpose\n\nThis workflow automates the connection between Microsoft Azure DevOps, GitHub, \nand Google Sheets to streamline project tracking.\n\n1. When a new Story is created in Azure DevOps, a"
      }
    },
    {
      "id": "7bbaf109-4dae-4c20-94f3-af945a14e5f3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -520,
        220
      ],
      "parameters": {
        "width": null,
        "height": 140,
        "content": "🔔 Trigger for Azure DevOps Story events.\nReceives POST requests whenever a new Story \nwork item is created/updated in Azure DevOps."
      }
    },
    {
      "id": "6f109ecb-6062-4813-9ddd-b10ce7cb0a6d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -220,
        -120
      ],
      "parameters": {
        "width": null,
        "height": null,
        "content": "🧹 Cleans and structures Story data from Azure DevOps.\nExtracts fields like: ID, Title, Description, CreatedBy, State, etc.\nPasses simplified object for GitHub Issue creation."
      }
    },
    {
      "id": "6ec95daa-9ae6-4255-a906-d95a14522ae8",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        100,
        -80
      ],
      "parameters": {
        "width": null,
        "height": 120,
        "content": "📄 Creates a new GitHub Issue in the repository \n(based on Story Title and Description from Azure DevOps)."
      }
    },
    {
      "id": "be859faf-90bb-446d-8279-9cffb1f1302e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        440,
        -60
      ],
      "parameters": {
        "width": 220,
        "height": 100,
        "content": "📡 Calls GitHub API to fetch repository collaborators.\nUsed to determine possible assignees for the new issue."
      }
    },
    {
      "id": "f6c1077a-3fa3-4754-9c2b-d18b5db67850",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -60
      ],
      "parameters": {
        "width": null,
        "height": 100,
        "content": "🎲 Selects a random collaborator from the list \nof repository members and prepares the assignee value."
      }
    },
    {
      "id": "6b031bcb-878d-4441-8d48-fe4411e1bdb2",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1000,
        -60
      ],
      "parameters": {
        "width": null,
        "height": 100,
        "content": "✏️ Updates the GitHub Issue using PATCH request.\nAssigns the randomly selected collaborator.\n"
      }
    },
    {
      "id": "245e637c-f6fb-4021-83a4-b94640d128f3",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1300,
        -80
      ],
      "parameters": {
        "width": null,
        "height": 120,
        "content": "📊 Appends mapping between Azure DevOps Story ID, \nGitHub Issue number, and Issue URL into the Google Sheet.\nActs as a central cross-reference."
      }
    },
    {
      "id": "6d034b36-eec5-4d3e-94c2-23623d120abe",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        840
      ],
      "parameters": {
        "width": null,
        "height": null,
        "content": "🔔 Trigger for Azure DevOps Task events.\nReceives POST requests whenever a new Task \nis created/updated in Azure DevOps."
      }
    },
    {
      "id": "f8246a02-e5e3-4c99-a98e-d0513dc4f24f",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -180,
        1160
      ],
      "parameters": {
        "width": null,
        "height": 120,
        "content": "🧹 Cleans and structures Task data from Azure DevOps.\nExtracts Task ID, Title, Description, Parent Story ID, \nand Task URL for mapping back to GitHub Issue."
      }
    },
    {
      "id": "e6935cec-974e-4a21-8c91-da4b3d7a9916",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        200,
        1160
      ],
      "parameters": {
        "width": null,
        "height": 120,
        "content": "🔍 Looks up the parent Story’s mapping in Google Sheets \n(using AzureID as the key) to find the corresponding \nGitHub Issue ID."
      }
    },
    {
      "id": "5e5ad2f6-cf46-4224-8759-f54cf27c0d3f",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        580,
        1160
      ],
      "parameters": {
        "width": 220,
        "height": 100,
        "content": "📥 Retrieves details of the GitHub Issue associated \nwith the parent Story from the mapping found in Sheets."
      }
    },
    {
      "id": "e4488f49-21d4-4f22-a539-a12f08832398",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        1160
      ],
      "parameters": {
        "width": null,
        "height": null,
        "content": "➕ Updates the GitHub Issue body.\nAppends a clickable Task link (with Azure DevOps Task ID and Title) \nas a bullet point under the parent GitHub Issue."
      }
    }
  ],
  "connections": {
    "Code2": {
      "main": [
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub2": {
      "main": [
        [
          {
            "node": "GitHub1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook1": {
      "main": [
        [
          {
            "node": "Filter Story Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook2": {
      "main": [
        [
          {
            "node": "Filter Task Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request1": {
      "main": [
        [
          {
            "node": "Code2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request2": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets1": {
      "main": [
        [
          {
            "node": "GitHub2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Task Data": {
      "main": [
        [
          {
            "node": "Google Sheets1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Story Data": {
      "main": [
        [
          {
            "node": "Create Github Issue",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Github Issue": {
      "main": [
        [
          {
            "node": "HTTP Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}