{
  "workflow": {
    "id": 9831,
    "name": "Monitor and report OKR variance from Monday.com and Jira via Slack and Email",
    "views": 194,
    "recentViews": 0,
    "totalViews": 194,
    "createdAt": "2025-10-17T12:23:20.203Z",
    "description": "## Description\nSynchronize OKRs (Objectives and Key Results) between Monday.com and Jira to automatically calculate progress variance, update dashboards, and share variance reports via Slack and Outlook. This workflow ensures teams have accurate, real-time visibility into performance metrics and project alignment — without manual reconciliation. 🎯📈💬\n\n## What This Template Does\n- Step 1: Triggers daily at a scheduled time to fetch the latest OKRs from Monday.com. ⏰\n- Step 2: Extracts Key Results and their linked Jira epic keys from the OKR board. 🔗\n- Step 3: Fetches corresponding Jira epic details such as status, assignee, and last updated date. 🧩\n- Step 4: Merges Monday.com KR data with Jira epic progress through SQL-style joins. 📋\n- Step 5: Calculates real-time progress and variance against target goals. 📊\n- Step 6: Updates Monday.com KR items with actual progress, variance percentage, and status (“On Track”, “At Risk”, or “Ahead”). 🔄\n- Step 7: Aggregates all KR data into a consolidated report for communication. 📦\n- Step 8: Sends formatted variance reports to Slack and Outlook, with summaries of owner, progress, and variance metrics. 📢\n\n## Key Benefits\n✅ Automates end-to-end OKR and Jira synchronization\n ✅ Eliminates manual progress tracking errors\n ✅ Provides daily visibility on team and project health\n ✅ Enables proactive risk detection via variance thresholds\n ✅ Keeps all stakeholders updated via Slack and Outlook\n ✅ Centralizes OKR performance metrics for reporting\n\n## Features\n- Daily scheduled trigger for automatic OKR sync\n- Monday.com → Jira data integration via API\n- Real-time variance computation logic\n- Automatic updates of OKR fields in Monday.com\n- SQL-style data merging and aggregation\n- Slack notification with variance summaries\n- Outlook email digest with formatted HTML tables\n\n## Requirements\n- Monday.com API credentials with board access\n- Jira API credentials with permission to view epics\n- Slack Bot token with chat:write permissions\n- Microsoft Outlook OAuth2 credentials for sending emails\n- Environment variables for board, channel, and recipient configuration\n\n## Target Audience\n- Product and engineering teams managing OKRs across platforms 🎯\n- Project managers tracking cross-tool performance metrics 📋\n- Leadership teams needing automated OKR reporting 💼\n- Operations and strategy teams monitoring execution health 🧭\n\n## Step-by-Step Setup Instructions\n- Connect your Monday.com, Jira, Slack, and Outlook credentials in n8n. 🔑\n- Replace MONDAY_BOARD_ID, GROUP_ID, and column identifiers with your own. 🧩\n- Set environment variables for SLACK_CHANNEL_ID and REPORT_RECIPIENT_EMAIL. 💬\n- Adjust the cron expression to define your sync frequency (e.g., daily at 9 AM). ⏰\n- Test the workflow with a single OKR item to confirm successful synchronization. 🧠\n- Enable the workflow to automate daily OKR variance tracking and reporting. ✅",
    "workflow": {
      "id": "BwSY1V0DCKKvUUeq",
      "meta": {
        "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
        "templateCredsSetupCompleted": true
      },
      "name": "Monitor and Report OKR Variance from Monday.com and Jira via Slack and Email",
      "tags": [],
      "nodes": [
        {
          "id": "c13ed242-024f-40c5-ba72-488ebbd23236",
          "name": "Workflow Overview",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2240,
            -16
          ],
          "parameters": {
            "color": 4,
            "width": 386.39887445887445,
            "height": 464.8876404494382,
            "content": "## 🎯 OKR Sync & Variance Tracking System\n\nThis workflow automates the synchronization of OKRs (Objectives and Key Results) between Monday.com and Jira, calculating progress variance and sending automated reports.\n\n**What it does:**\n- Fetches Key Results from Monday.com boards\n- Links each KR to corresponding Jira Epics\n- Calculates actual progress based on epic statuses\n- Computes variance against target progress\n- Updates Monday.com with real-time metrics\n- Sends reports via Slack and Email\n\n**Use Cases:**\n- Product teams tracking quarterly OKRs\n- Engineering managers monitoring sprint alignment\n- Leadership dashboards for strategic planning\n\n**Prerequisites:**\n- Monday.com board with OKR structure\n- Jira project with linked epics\n- Slack workspace access\n- Microsoft Outlook account"
          },
          "typeVersion": 1
        },
        {
          "id": "c403d5d0-9c79-43f4-affc-bee172972745",
          "name": "Note: Schedule Setup",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1808,
            -128
          ],
          "parameters": {
            "color": 7,
            "width": 313,
            "height": 297,
            "content": "## ⏰ Schedule Configuration\n\n**Setup Steps:**\n1. Click on this node\n2. Set your desired interval (daily/weekly)\n3. Choose optimal run time (e.g., 9 AM daily)\n4. Consider timezone settings\n\n**Best Practice:** Run during off-peak hours to avoid API rate limits"
          },
          "typeVersion": 1
        },
        {
          "id": "bb79b478-58ce-407c-ae29-1f8139aa5129",
          "name": "Daily OKR Sync Trigger",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -1600,
            208
          ],
          "parameters": {
            "rule": {
              "interval": [
                {}
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "3ebd5103-a47b-4b06-8786-9cf757e0b149",
          "name": "Note: Monday Board Config",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1472,
            -224
          ],
          "parameters": {
            "color": 7,
            "width": 330,
            "height": 416,
            "content": "## 📋 Monday.com Board Setup\n\n**Required Columns:**\n- Objective Name (text)\n- Jira Epic Keys (text, comma-separated)\n- Target Progress (number, %)\n- Current Progress (number, %)\n- Threshold (number, %)\n- Owner's Email (email)\n- Status (status)\n- Date (date)\n\n**Configuration:**\n1. Replace boardId with your board ID\n2. Replace groupId with your group ID\n3. Connect your Monday.com credentials"
          },
          "typeVersion": 1
        },
        {
          "id": "966a0ad7-2f85-44bc-9c69-40fdf833473a",
          "name": "Fetch OKRs from Monday.com",
          "type": "n8n-nodes-base.mondayCom",
          "position": [
            -1376,
            208
          ],
          "parameters": {
            "boardId": "={{ $env.MONDAY_BOARD_ID }}",
            "groupId": "={{ $env.MONDAY_GROUP_ID }}",
            "resource": "boardItem",
            "operation": "getAll",
            "returnAll": true
          },
          "credentials": {
            "mondayComApi": {
              "id": "credential-id",
              "name": "mondayComApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "dbde1957-fd81-496f-884c-7e72a54c95b3",
          "name": "Note: Field Mapping Logic",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1264,
            384
          ],
          "parameters": {
            "color": 7,
            "width": 329.4096385542169,
            "height": 294.3975903614458,
            "content": "## 🔄 Field Mapping\n\nThis node extracts and standardizes Monday.com column data into a consistent schema.\n\n**What it does:**\n- Maps column indices to readable field names\n- Prepares data for downstream processing\n- Ensures type consistency\n\n**Note:** If Monday.com column order changes, update the column_values[index] references"
          },
          "typeVersion": 1
        },
        {
          "id": "f37d5fa2-af93-48ea-b087-b8b21ee268f9",
          "name": "Map Monday Fields → Standard KR Schema",
          "type": "n8n-nodes-base.set",
          "position": [
            -1152,
            208
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "5c6f16b4-1a4d-433c-a71f-e0af839639a3",
                  "name": "id",
                  "type": "string",
                  "value": "={{ $json.id }}"
                },
                {
                  "id": "91918ab5-08d3-48a1-86bb-d09ba12e4c97",
                  "name": "name",
                  "type": "string",
                  "value": "={{ $json.name }}"
                },
                {
                  "id": "f9f404d8-4991-41a3-a695-9b8870b94c34",
                  "name": "created_at",
                  "type": "string",
                  "value": "={{ $json.created_at }}"
                },
                {
                  "id": "d68a0661-a879-44c7-b4bd-841529559c82",
                  "name": "Objective Name ",
                  "type": "string",
                  "value": "={{ $json.column_values[0].text }}"
                },
                {
                  "id": "7b03a663-d59c-4cd1-b355-713a24f033f2",
                  "name": "Jira Epic Keys",
                  "type": "string",
                  "value": "={{ $json.column_values[1].text }}"
                },
                {
                  "id": "072ba34c-fedd-434d-97cf-0c9075d5e6f9",
                  "name": "Target Progress",
                  "type": "string",
                  "value": "={{ $json.column_values[2].text }}"
                },
                {
                  "id": "2cc1ca2f-f47f-4851-a12f-465eb6a43851",
                  "name": "Current Progress",
                  "type": "string",
                  "value": "={{ $json.column_values[3].text }}"
                },
                {
                  "id": "fa86ebe8-3e4b-48bd-a2b7-5ad326b4dedb",
                  "name": "Threshold",
                  "type": "string",
                  "value": "={{ $json.column_values[4].text }}"
                },
                {
                  "id": "bb2da321-7351-42f2-b7a0-11ec279b23a9",
                  "name": "Owners Email",
                  "type": "string",
                  "value": "={{ $json.column_values[5].text }}"
                },
                {
                  "id": "107f05c0-69f3-43a9-bd60-f0bf5212a54b",
                  "name": "Status",
                  "type": "string",
                  "value": "={{ $json.column_values[6].text }}"
                },
                {
                  "id": "080e6adf-80d4-46a9-a11f-358e65fd37e1",
                  "name": "Date",
                  "type": "string",
                  "value": "={{ $json.column_values[7].text }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "51ce7b43-0b86-413e-80c7-e5762a33ab46",
          "name": "Note: Epic Splitting",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1024,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 294.3975903614458,
            "content": "## 🔀 Epic Splitting Logic\n\nEach KR can track multiple Jira epics (comma-separated). This node creates one item per epic-KR pair.\n\n**Example:**\n- Input: KR-123 → EPIC-1, EPIC-2\n- Output: 2 items (KR-123→EPIC-1, KR-123→EPIC-2)\n\n**Why?** Allows parallel fetching of epic data and accurate progress calculation"
          },
          "typeVersion": 1
        },
        {
          "id": "263d82ad-50d6-4632-877a-034975d5729b",
          "name": "Split KR → Epics Mapper",
          "type": "n8n-nodes-base.code",
          "position": [
            -928,
            208
          ],
          "parameters": {
            "jsCode": "const out = [];\nfor (const item of items) {\n  const epics = item.json[\"Jira Epic Keys\"]\n    .split(',')\n    .map(e => e.trim())\n    .filter(Boolean);\n  for (const epic of epics) {\n    out.push({\n      json: {\n        kr_id: item.json.id,\n        kr_name: item.json.name,\n        objective_name: item.json[\"Objective Name\"],\n        epic_key: epic,\n        target_progress: Number(item.json[\"Target Progress\"]),\n        current_progress: Number(item.json[\"Current Progress\"]),\n        threshold: Number(item.json[\"Threshold\"]),\n        owner_email: item.json[\"Owners Email\"]\n      }\n    });\n  }\n}\nreturn out;\n"
          },
          "typeVersion": 2
        },
        {
          "id": "c07d2061-b07c-4a1c-868b-edc013cacf90",
          "name": "Note: Jira Epic Fetching",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -896,
            416
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 280,
            "content": "## 🔗 Jira Integration\n\n**Setup:**\n1. Connect your Jira credentials\n2. Ensure the Jira account has read access to all linked epics\n3. Test with a single epic key first\n\n**Rate Limits:** Jira Cloud allows 150 requests/min. This workflow respects those limits via sequential processing"
          },
          "typeVersion": 1
        },
        {
          "id": "0411be4a-6381-4f13-9808-57a2f7b07644",
          "name": "Fetch Jira Epic Details",
          "type": "n8n-nodes-base.jira",
          "position": [
            -704,
            272
          ],
          "parameters": {
            "issueKey": "={{ $json.epic_key }}",
            "operation": "get",
            "additionalFields": {}
          },
          "credentials": {
            "jiraSoftwareCloudApi": {
              "id": "credential-id",
              "name": "jiraSoftwareCloudApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "4992f272-d055-41d4-958c-b9691e3ebb96",
          "name": "Note: Jira Response Cleanup",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -560,
            400
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 280,
            "content": "## 🧹 Response Normalization\n\nJira API returns nested complex objects. This node flattens and extracts only the fields needed for progress calculation:\n\n- Issue key\n- Summary (name)\n- Status (for progress weighting)\n- Assignee\n- Dates"
          },
          "typeVersion": 1
        },
        {
          "id": "9de61cfd-ba27-4023-8528-3ba279502d8f",
          "name": "Normalize Jira Response",
          "type": "n8n-nodes-base.code",
          "position": [
            -480,
            272
          ],
          "parameters": {
            "jsCode": "const items = $input.all();\n\nconst formatted = items.flatMap(item => {\n  const data = item.json;\n  const issues = Array.isArray(data) ? data : [data];\n\n  return issues.map(issue => {\n    const f = issue.fields;\n    return {\n      json: {\n        key: issue.key,\n        name: f.summary,\n        status: f.status.name,\n        assignee: f.assignee ? f.assignee.displayName : 'Unassigned',\n        dueDate: f.duedate || 'N/A',\n        created: f.created,\n        updated: f.updated,\n        description: f.description || 'No description'\n      }\n    };\n  });\n});\n\nreturn formatted;\n"
          },
          "typeVersion": 2
        },
        {
          "id": "d0de1271-2a54-4a4c-9650-b84e1c3193ac",
          "name": "Note: Data Merging",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -384,
            -80
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 280,
            "content": "## 🔗 SQL Merge Strategy\n\nThis node performs a LEFT JOIN to combine:\n- Input 1: KR metadata (from Monday)\n- Input 2: Epic details (from Jira)\n\n**Result:** Each KR-Epic pair with complete context for variance calculation"
          },
          "typeVersion": 1
        },
        {
          "id": "ba395420-aa63-4277-8d7d-fb02c9d978b2",
          "name": "Join KR + Epic Data (SQL Merge)",
          "type": "n8n-nodes-base.merge",
          "position": [
            -256,
            208
          ],
          "parameters": {
            "mode": "combineBySql",
            "query": "SELECT \n  a.kr_id,\n  a.kr_name,\n  a.epic_key,\n  a.target_progress,\n  a.current_progress,\n  a.threshold,\n  a.owner_email,\n  b.name AS epic_name,\n  b.status AS epic_status,\n  b.assignee AS epic_assignee,\n  b.updated AS epic_updated\nFROM input1 a\nLEFT JOIN input2 b\nON a.epic_key = b.key\n",
            "options": {}
          },
          "typeVersion": 3.2
        },
        {
          "id": "5316f900-d4b5-4543-b407-449434ea15d3",
          "name": "Note: Variance Calculation",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -48,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 320,
            "content": "## 📊 Progress Calculation Logic\n\n**Status Weights:**\n- To Do = 0%\n- In Progress = 50%\n- Done = 100%\n\n**Formula:**\n- Actual Progress = Average of all epic weights\n- Variance = Actual - Target\n- Status = At Risk if variance > threshold\n\n**Output:** One aggregated item per KR with computed metrics"
          },
          "typeVersion": 1
        },
        {
          "id": "1a5c998f-e607-412f-baa0-361c223260a5",
          "name": "Compute KR Progress & Variance",
          "type": "n8n-nodes-base.code",
          "position": [
            -32,
            208
          ],
          "parameters": {
            "jsCode": "const items = $input.all();\nconst grouped = {};\n\nfor (const i of items) {\n  const krId = i.json.kr_id;\n  if (!grouped[krId]) grouped[krId] = { meta: i.json, epics: [] };\n  grouped[krId].epics.push(i.json);\n}\n\nconst out = [];\n\nfor (const [krId, data] of Object.entries(grouped)) {\n  const { target_progress, threshold, owner_email, kr_name } = data.meta;\n  const epics = data.epics;\n\n  const statusWeight = { \"To Do\": 0, \"In Progress\": 50, \"Done\": 100 };\n  const progressValues = epics.map(e => statusWeight[e.epic_status] ?? 0);\n\n  const actual_progress = progressValues.length\n    ? progressValues.reduce((a, b) => a + b, 0) / progressValues.length\n    : 0;\n\n  const variance = Number((actual_progress - target_progress).toFixed(2));\n  const variance_abs = Math.abs(variance);\n\n  const status =\n    variance_abs > threshold\n      ? variance < 0\n        ? \"At Risk\"\n        : \"Ahead\"\n      : \"On Track\";\n\n  out.push({\n    json: {\n      kr_id: krId,\n      kr_name,\n      owner_email,\n      target_progress,\n      actual_progress: Number(actual_progress.toFixed(2)),\n      variance,\n      variance_abs,\n      status,\n      epic_count: epics.length,\n      last_updated: new Date().toISOString()\n    }\n  });\n}\n\nreturn out;\n"
          },
          "typeVersion": 2
        },
        {
          "id": "e2e5308f-5ba4-4eab-a565-fb2e23dc5c6e",
          "name": "Note: Monday Board Update",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            288,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 300,
            "content": "## ✍️ Monday.com Update\n\n**Configuration Needed:**\n1. Replace column IDs with your actual Monday board column IDs:\n   - MONDAY_COL_ACTUAL_PROGRESS → Actual Progress column\n   - MONDAY_COL_VARIANCE → Variance column\n   - MONDAY_COL_STATUS → Status column\n\n2. Find column IDs via Monday.com API or inspect board settings"
          },
          "typeVersion": 1
        },
        {
          "id": "6c262e7a-b86e-48f0-80bb-419a55d98e73",
          "name": "Update KR Status on Monday",
          "type": "n8n-nodes-base.mondayCom",
          "position": [
            208,
            96
          ],
          "parameters": {
            "itemId": "={{ $json.kr_id }}",
            "boardId": "={{ $env.MONDAY_BOARD_ID }}",
            "resource": "boardItem",
            "operation": "changeMultipleColumnValues",
            "columnValues": "={\n  \"{{ $env.MONDAY_COL_ACTUAL_PROGRESS }}\": {{$json.actual_progress}},\n  \"{{ $env.MONDAY_COL_VARIANCE }}\": {{$json.variance}},\n  \"{{ $env.MONDAY_COL_STATUS }}\": { \"label\": \"{{$json.status}}\" }\n}\n"
          },
          "credentials": {
            "mondayComApi": {
              "id": "credential-id",
              "name": "mondayComApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "f961b9b2-5ea4-4566-ad39-db01faa85c1a",
          "name": "Note: Data Aggregation",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            0,
            464
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 260,
            "content": "## 📦 Aggregation for Reporting\n\nCombines all KR variance data into a single payload for reporting nodes.\n\n**Output:** Array of all KRs with their computed metrics, ready for Slack/Email formatting"
          },
          "typeVersion": 1
        },
        {
          "id": "f312abe7-993b-42ee-8a4b-7c30073209b0",
          "name": "Aggregate Final Results for Reporting",
          "type": "n8n-nodes-base.aggregate",
          "position": [
            208,
            304
          ],
          "parameters": {
            "options": {},
            "aggregate": "aggregateAllItemData"
          },
          "typeVersion": 1
        },
        {
          "id": "fafc7791-2e28-4a61-a692-37f29b01efd1",
          "name": "Note: Slack Configuration",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            592,
            224
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 280,
            "content": "## 💬 Slack Notification\n\n**Setup:**\n1. Replace channelId with your Slack channel ID\n2. Or use environment variable: SLACK_CHANNEL_ID\n3. Customize message formatting as needed\n\n**Tip:** Use Slack's Block Kit Builder for richer formatting"
          },
          "typeVersion": 1
        },
        {
          "id": "48a17cb4-e54e-4120-8df9-f196598d4dca",
          "name": "Post Slack Variance Report",
          "type": "n8n-nodes-base.slack",
          "position": [
            432,
            208
          ],
          "webhookId": "2e46b987-9ef4-4aaf-a78a-29046574c742",
          "parameters": {
            "text": "=*⚠️ OKR Variance Report — {{$now}}*\n\n{{ $json.data.map((item, i) =>   \n`*${i+1}. ${item.kr_name}*\n👤 *Owner:* ${item.owner_email}\n🎯 *Target:* ${item.target_progress}%\n📊 *Actual:* ${item.actual_progress}%\n📈 *Variance:* ${item.variance}%\n🧮 *Epics Linked:* ${item.epic_count}\n🕒 *Last Updated:* ${item.last_updated}\n*Status:* ${item.status}`\n).join('\\n\\n') }}",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ $env.SLACK_CHANNEL_ID }}"
            },
            "otherOptions": {
              "mrkdwn": true
            }
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.3
        },
        {
          "id": "0e5a6aae-6537-49d7-80de-cf62d6913eed",
          "name": "Note: Email Configuration",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            352,
            592
          ],
          "parameters": {
            "color": 7,
            "width": 324.2168674698795,
            "height": 280,
            "content": "## 📧 Email Notification\n\n**Setup:**\n1. Replace hardcoded email with: REPORT_RECIPIENT_EMAIL env variable\n2. Or use dynamic owner emails from data\n3. Customize HTML template as needed\n\n**Note:** Ensure Outlook credentials have send permissions"
          },
          "typeVersion": 1
        },
        {
          "id": "550a77ca-7e03-454e-8fa0-76902b6215fe",
          "name": "Email Variance Digest (Outlook)",
          "type": "n8n-nodes-base.microsoftOutlook",
          "position": [
            432,
            400
          ],
          "webhookId": "90432cba-1978-43c7-b79b-8fc8c733db6f",
          "parameters": {
            "subject": "=OKR Variance Report — {{$now}}",
            "bodyContent": "=<h2 style=\"color:#1263FF; font-family:Arial, sans-serif;\">⚙️ OKR Variance Report — {{$now}}</h2>\n\n{{ $json.data.map((item, i) => `\n  <table width=\"100%\" style=\"border-collapse:collapse; margin-bottom:15px; border:1px solid #dcdcdc; border-radius:8px; font-family:Arial, sans-serif;\">\n    <tr>\n      <td style=\"padding:10px;\">\n        <h3 style=\"margin:0; color:#333333; font-size:16px;\">${i+1}. ${item.kr_name}</h3>\n        <p style=\"margin:4px 0;\"><strong>Owner:</strong> ${item.owner_email}</p>\n        <p style=\"margin:4px 0;\"><strong>Target:</strong> ${item.target_progress}%</p>\n        <p style=\"margin:4px 0;\"><strong>Actual:</strong> ${item.actual_progress}%</p>\n        <p style=\"margin:4px 0;\"><strong>Variance:</strong> \n          <span style=\"color:${item.variance < 0 ? '#e63946' : '#2a9d8f'}; font-weight:bold;\">\n            ${item.variance}%\n          </span>\n        </p>\n        <p style=\"margin:4px 0;\"><strong>Epics Linked:</strong> ${item.epic_count}</p>\n        <p style=\"margin:4px 0;\"><strong>Status:</strong> ${item.status}</p>\n        <p style=\"margin:4px 0;\"><strong>Last Updated:</strong> ${item.last_updated}</p>\n      </td>\n    </tr>\n  </table>\n`).join('') }}\n",
            "toRecipients": "={{ $env.REPORT_RECIPIENT_EMAIL }}",
            "additionalFields": {
              "bodyContentType": "html"
            }
          },
          "credentials": {
            "microsoftOutlookOAuth2Api": {
              "id": "credential-id",
              "name": "microsoftOutlookOAuth2Api Credential"
            }
          },
          "typeVersion": 2
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "24728ac7-8785-428e-b5d2-c70dd6d5c25b",
      "connections": {
        "Daily OKR Sync Trigger": {
          "main": [
            [
              {
                "node": "Fetch OKRs from Monday.com",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Fetch Jira Epic Details": {
          "main": [
            [
              {
                "node": "Normalize Jira Response",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Normalize Jira Response": {
          "main": [
            [
              {
                "node": "Join KR + Epic Data (SQL Merge)",
                "type": "main",
                "index": 1
              }
            ]
          ]
        },
        "Split KR → Epics Mapper": {
          "main": [
            [
              {
                "node": "Join KR + Epic Data (SQL Merge)",
                "type": "main",
                "index": 0
              },
              {
                "node": "Fetch Jira Epic Details",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Fetch OKRs from Monday.com": {
          "main": [
            [
              {
                "node": "Map Monday Fields → Standard KR Schema",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Compute KR Progress & Variance": {
          "main": [
            [
              {
                "node": "Update KR Status on Monday",
                "type": "main",
                "index": 0
              },
              {
                "node": "Aggregate Final Results for Reporting",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Join KR + Epic Data (SQL Merge)": {
          "main": [
            [
              {
                "node": "Compute KR Progress & Variance",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Aggregate Final Results for Reporting": {
          "main": [
            [
              {
                "node": "Post Slack Variance Report",
                "type": "main",
                "index": 0
              },
              {
                "node": "Email Variance Digest (Outlook)",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Map Monday Fields → Standard KR Schema": {
          "main": [
            [
              {
                "node": "Split KR → Epics Mapper",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 25,
      "nodeTypes": {
        "n8n-nodes-base.set": {
          "count": 1
        },
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.jira": {
          "count": 1
        },
        "n8n-nodes-base.merge": {
          "count": 1
        },
        "n8n-nodes-base.slack": {
          "count": 1
        },
        "n8n-nodes-base.aggregate": {
          "count": 1
        },
        "n8n-nodes-base.mondayCom": {
          "count": 2
        },
        "n8n-nodes-base.stickyNote": {
          "count": 13
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        },
        "n8n-nodes-base.microsoftOutlook": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Rahul Joshi",
      "username": "rahul08",
      "bio": "Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.\n\n",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/callrahul/"
      ],
      "avatar": "https://gravatar.com/avatar/b6cf57822463143589b36ada06fbf6cb1509223a740fae3160b28f1ce41ccc12?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 24,
        "icon": "file:merge.svg",
        "name": "n8n-nodes-base.merge",
        "codex": {
          "data": {
            "alias": [
              "Join",
              "Concatenate",
              "Wait"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/how-to-sync-data-between-two-systems/",
                  "icon": "🏬",
                  "label": "How to synchronize data between two systems (one-way vs. two-way sync"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/",
                  "icon": "📈",
                  "label": "Migrating Community Metrics to Orbit using n8n"
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Merge"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Merge",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 38,
        "icon": "fa:pen",
        "name": "n8n-nodes-base.set",
        "codex": {
          "data": {
            "alias": [
              "Set",
              "JS",
              "JSON",
              "Filter",
              "Transform",
              "Map"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/",
                  "icon": "📈",
                  "label": "Automatically pulling and visualizing data with n8n"
                },
                {
                  "url": "https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/",
                  "icon": "📡",
                  "label": "Database Monitoring and Alerting with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/",
                  "icon": "📱",
                  "label": "Building an expense tracking app in 10 minutes"
                },
                {
                  "url": "https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/",
                  "icon": "📹",
                  "label": "The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/",
                  "icon": "🧰",
                  "label": "Learn to Build Powerful API Endpoints Using Webhooks"
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/",
                  "icon": "📈",
                  "label": "A low-code bitcoin ticker built with QuestDB and n8n.io"
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Edit Fields"
        },
        "iconData": {
          "icon": "pen",
          "type": "icon"
        },
        "displayName": "Edit Fields (Set)",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 40,
        "icon": "file:slack.svg",
        "name": "n8n-nodes-base.slack",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/slack/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Slack"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Slack",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 77,
        "icon": "file:jira.svg",
        "name": "n8n-nodes-base.jira",
        "codex": {
          "data": {
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/",
                  "label": "How to automate every step of an incident response workflow"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.jira/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/jira/"
                }
              ]
            },
            "categories": [
              "Development",
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Jira Software"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjguMjUgNzEuMjUiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9IjMuMTI1IiB5PSIzLjEyNSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjkxLjklIiB4Mj0iMjguNDklIiB5MT0iNDAuMjIlIiB5Mj0iODEuNjMlIj48c3RvcCBvZmZzZXQ9IjE4JSIgc3RvcC1jb2xvcj0iIzAwNTJjYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI2ODRmZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iOC43JSIgeDI9IjcyLjI2JSIgeTE9IjU5LjE3JSIgeTI9IjE3Ljk5JSI+PHN0b3Agb2Zmc2V0PSIxOCUiIHN0b3AtY29sb3I9IiMwMDUyY2MiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMyNjg0ZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48c3ltYm9sIGlkPSJhIiBvdmVyZmxvdz0idmlzaWJsZSI+PGcgZmlsbC1ydWxlPSJub256ZXJvIiBzdHJva2U9Im5vbmUiPjxwYXRoIGZpbGw9IiMyNjg0ZmYiIGQ9Ik02MS4xNjEgMzAuMjExIDMwLjk1IDAgLjc0IDMwLjIxMWEyLjU0IDIuNTQgMCAwIDAgMCAzLjU4MWwzMC4yMTEgMzAuMjEgMzAuMjExLTMwLjIxYTIuNTQgMi41NCAwIDAgMCAwLTMuNTgxek0zMC45NSA0MS40NmwtOS40NjItOS40NjIgOS40NjItOS40NjIgOS40NjIgOS40NjJ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTMwLjk1IDIyLjU5OUMyNC43NTUgMTYuNDA1IDI0LjcyNCA2LjM3IDMwLjg4MS4xMzhMMTAuMTE0IDIwLjc3NGwxMS4yNjggMTEuMjY4eiIvPjxwYXRoIGZpbGw9InVybCgjYykiIGQ9Ik00MC40MzcgMzEuOTczIDMwLjk1IDQxLjQ2YTE1LjkzIDE1LjkzIDAgMCAxIDAgMjIuNTM2bDIwLjc0OS0yMC43NDl6Ii8+PC9nPjwvc3ltYm9sPjwvc3ZnPg=="
        },
        "displayName": "Jira Software",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 4,
            "name": "Productivity"
          },
          {
            "id": 5,
            "name": "Development"
          }
        ]
      },
      {
        "id": 309,
        "icon": "file:mondayCom.svg",
        "name": "n8n-nodes-base.mondayCom",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.mondaycom/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/mondaycom/"
                }
              ]
            },
            "categories": [
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Monday.com"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiNGRjNENTciIGQ9Ik04LjE4NCA0Ny4zOTNBNy4yIDcuMiAwIDAgMSAxLjkgNDMuNjc0YTcuMjIgNy4yMiAwIDAgMSAuMTk2LTcuMzA3bDEyLjk0NS0yMC43M2E3LjE4IDcuMTggMCAwIDEgNi4zNTYtMy4zNzYgNy4yIDcuMiAwIDAgMSA2LjA5NyAzLjgyNCA3LjIxIDcuMjEgMCAwIDEtLjI1OCA3LjJsLTEyLjk1IDIwLjcyN2E3LjE5IDcuMTkgMCAwIDEtNi4xMDMgMy4zNzl6Ii8+PHBhdGggZmlsbD0iI0ZGQ0IwMCIgZD0iTTMwLjQ5NCA0Ny4zOTNhNy4yIDcuMiAwIDAgMS02LjI5NS0zLjcxMyA3LjIxIDcuMjEgMCAwIDEgLjE5NC03LjMxM2wxMi45NTQtMjAuNzNhNy4xNyA3LjE3IDAgMCAxIDYuNDExLTMuNjM0QTcuMTkgNy4xOSAwIDAgMSA1MCAxNS45MjNhNy4yMSA3LjIxIDAgMCAxLS40NzYgNy4zNmwtMTIuOTMgMjAuNzNhNy4xOSA3LjE5IDAgMCAxLTYuMTAyIDMuMzc4bC4wMDMuMDAyeiIvPjxwYXRoIGZpbGw9IiMwMEQ2NDciIGQ9Ik00NS41OTEgNDAuMzU3YzAtMy44OTUgMy4yMTQtNy4wMzQgNy4yMDUtNy4wMzRTNjAgMzYuNDYgNjAgNDAuMzU3cy0zLjIxNCA3LjAzNC03LjIwNCA3LjAzNGMtMy45OTEgMC03LjIwNS0zLjEzNy03LjIwNS03LjAzNCIvPjwvZz48L3N2Zz4="
        },
        "displayName": "Monday.com",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 4,
            "name": "Productivity"
          }
        ]
      },
      {
        "id": 433,
        "icon": "file:outlook.svg",
        "name": "n8n-nodes-base.microsoftOutlook",
        "codex": {
          "data": {
            "alias": [
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.microsoftoutlook/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/microsoft/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Microsoft Outlook"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgODEiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBmaWxsPSIjMjM3MmJhIiBzdHJva2U9Im5vbmUiIGQ9Ik03Ny45IDE5LjJINDYuODZWMEwwIDguMjMyVjcxLjk4TDQ2Ljg2IDgwVjYxLjg0N0g3Ny45YzEuMjY2IDAgMi4xLTEuMDU1IDIuMS0yLjFWMjEuMzJjMC0xLjI2Ni0uODQ0LTIuMS0yLjEtMi4xek0yMS45NTIgNTQuNDZjLTE1LjQtMS4wNTUtMTQuNzc2LTI5LjEzLjQyMi0yOS45NzQgMTYuNjc1LS44NDQgMTYuMjUzIDMxLjAzLS40MjIgMjkuOTc0bTU1LjUxNSA0LjY0NEg0Ni44NlYzNS4wNGw5LjUgOS4wNzdjLjQyMi40MjIuODQ0LjYzMyAxLjQ3Ny42MzNzMS4wNTUtLjIgMS40NzgtLjYzM0w3Ny40NjcgMjcuMjN6bTAtMzUuNDYyLTE5LjYzIDE4LjE1M0w0Ni44NiAzMS40NXYtOS43aDMwLjM5NnYxLjloLjJ6bS01NS4wOTIgNi41NDNjLTguMjMyLjQyMi04LjQ0MyAxOC4zNjQtLjIgMTguNTc1IDguNjU0LjQyMiA4LjY1NC0xOC45OTcuMi0xOC41NzUiLz48L3N5bWJvbD48L3N2Zz4="
        },
        "displayName": "Microsoft Outlook",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1236,
        "icon": "file:aggregate.svg",
        "name": "n8n-nodes-base.aggregate",
        "codex": {
          "data": {
            "alias": [
              "Aggregate",
              "Combine",
              "Flatten",
              "Transform",
              "Array",
              "List",
              "Item"
            ],
            "details": "",
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Aggregate"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="
        },
        "displayName": "Aggregate",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 46,
        "name": "Project Management"
      }
    ],
    "image": []
  }
}