AutomationFlowsSlack & Telegram › Monitor Software Compliance with Jamf Patch Summaries in Slack

Monitor Software Compliance with Jamf Patch Summaries in Slack

ByJean-Marie Rizkallah @mrrobot on n8n.io

🧩 Jamf Patch Summary to Slack Stay on top of software patch compliance by automatically posting Jamf patch summaries to Slack. This helps IT and security teams quickly identify outdated installs and take action—without logging into Jamf.

Event trigger★★★★☆ complexity15 nodesHTTP RequestSlack
Slack & Telegram Trigger: Event Nodes: 15 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #5529 — we link there as the canonical source.

This workflow follows the HTTP Request → Slack recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "226fd53a-e08f-42f3-912f-4721aec86472",
      "name": "Get Software Title/ID",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        320,
        140
      ],
      "parameters": {
        "url": "=https://{{ $json.server }}.jamfcloud.com/api/v2/patch-software-title-configurations",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api"
      },
      "typeVersion": 4.2
    },
    {
      "id": "a4dea0cd-c994-46b0-87e3-3e4b1e5612c5",
      "name": "ID List",
      "type": "n8n-nodes-base.filter",
      "position": [
        520,
        140
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "73ade79a-103b-412a-b2d4-0fd65fdabe76",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": "<software_id>"
            },
            {
              "id": "8c8cab85-59b3-4140-b446-2b9f9d5cd18f",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": "<software_id>"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "51e129c7-8d8e-4735-b400-7819b55dd97b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "height": 320,
        "content": "## Set  \nSet your jamf BaseURL \nfrom your jamf URL\nhttps://yourServer.jamfcloud.com"
      },
      "typeVersion": 1
    },
    {
      "id": "5ec83d8c-dedd-4368-856f-b98acb1ac256",
      "name": "Jamf Server",
      "type": "n8n-nodes-base.set",
      "position": [
        60,
        140
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d5945b47-962f-4cea-8bb8-a8f61ee468ec",
              "name": "server",
              "type": "string",
              "value": "yourServer"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e3dce605-bd5f-4864-a827-3018a35834e0",
      "name": "Get Patch Summary:ID",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        740,
        140
      ],
      "parameters": {
        "url": "=https://{{ $('Jamf Server').item.json.server }}.jamfcloud.com/api/v2/patch-software-title-configurations/{{ $json.id }}/patch-summary",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api"
      },
      "typeVersion": 4.2
    },
    {
      "id": "d8741756-75e6-45fe-aac7-f1f463d56717",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        260,
        0
      ],
      "parameters": {
        "color": 3,
        "width": 220,
        "height": 320,
        "content": "## Get  \nGet all list of software from your jamf patch management"
      },
      "typeVersion": 1
    },
    {
      "id": "7abad52f-3f32-4e80-8c37-31d8817090dc",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        500,
        0
      ],
      "parameters": {
        "color": 6,
        "width": 150,
        "height": 320,
        "content": "## Filter\n Filter to select the software you're tracking - add "
      },
      "typeVersion": 1
    },
    {
      "id": "729f6733-0202-4f91-ad2a-285ca0f10b02",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        0
      ],
      "parameters": {
        "color": 6,
        "width": 200,
        "height": 320,
        "content": "## Retrieve\nRetrieve the patch summary for the selected softwares"
      },
      "typeVersion": 1
    },
    {
      "id": "2629706b-a122-42c7-adfa-3e8bb3baa5b6",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1100,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 180,
        "height": 320,
        "content": "## Format\nFormat the summary into Slack Block Kit"
      },
      "typeVersion": 1
    },
    {
      "id": "66445f95-eaa1-4bec-b381-9a39ce72f13e",
      "name": "Block Formatting",
      "type": "n8n-nodes-base.code",
      "position": [
        1140,
        140
      ],
      "parameters": {
        "jsCode": "// Get all input items\nconst inputItems = $input.all();\n\n// Initialize the Slack blocks array\nconst blocks = [\n  {\n    type: \"header\",\n    text: {\n      type: \"plain_text\",\n      text: \"\ud83d\udccb Patch Management Status\"\n    }\n  }\n];\n\n// Loop through each browser and create a section block\ninputItems.forEach(item => {\n  const browser = item.json;\n\n  blocks.push({\n    type: \"section\",\n    text: {\n      type: \"mrkdwn\",\n      text: `*${browser.Title}*\\n\u2022 Latest version: \\`${browser[\"Latest version\"]}\\`\\n\u2022 \u2705 Up to date: *${browser[\"up To Date\"]}*\\n\u2022 \u26a0\ufe0f Out of date: *${browser[\"out Of Date\"]}*\\n\u2022 \ud83d\udd17 URL: ${browser[\"Jamf application url\"]}`\n    }\n  });\n\n  blocks.push({ type: \"divider\" });\n});\n\n// Remove last divider\nblocks.pop();\n\n// Return the blocks in a format usable by the next node \nreturn [\n  {\n    json: {\n      blocks\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "1000a5a8-b47b-4b70-8f3a-407fed69b638",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1300,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 200,
        "height": 320,
        "content": "## Post\nPost the formatted summary into a Slack channel"
      },
      "typeVersion": 1
    },
    {
      "id": "5c88acec-e5bc-46d2-932b-45f4ffa4a68d",
      "name": "Click",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -140,
        140
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "768eaad7-d0b9-4ff3-801e-d4e78142ab7a",
      "name": "Manual Field Mapping",
      "type": "n8n-nodes-base.set",
      "position": [
        940,
        140
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "74db45cd-d40d-4b89-a820-24d3c2bb55a2",
              "name": "Title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "fe43cbfd-691e-465c-9403-473f99bdbb3c",
              "name": "Latest version",
              "type": "string",
              "value": "={{ $json.latestVersion }}"
            },
            {
              "id": "1153e83c-dad4-4f5a-9389-0b26f71bbace",
              "name": "up To Date",
              "type": "number",
              "value": "={{ $json.upToDate }}"
            },
            {
              "id": "7158cdf5-76d5-4cf9-b73c-ae7fcd061ee3",
              "name": "out Of Date",
              "type": "number",
              "value": "={{ $json.outOfDate }}"
            },
            {
              "id": "ee52008d-e0d0-403d-8ce2-cdfc3646a130",
              "name": "Jamf application url",
              "type": "string",
              "value": "=https://{{ $('Jamf Server').item.json.server }}.jamfcloud.com/view/computers/patch/{{ $json.softwareTitleId }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4c164dd2-ad19-4dc6-a4f2-e8c2e9fed712",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        900,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 180,
        "height": 320,
        "content": "## Select\nSelect only the needed data"
      },
      "typeVersion": 1
    },
    {
      "id": "d59af125-d1f8-4570-a28b-1fa55c1e263f",
      "name": "Slack Channel",
      "type": "n8n-nodes-base.slack",
      "position": [
        1360,
        140
      ],
      "parameters": {
        "text": "=",
        "select": "channel",
        "blocksUi": "={{ '{ \"blocks\": [' + JSON.stringify($json.blocks).slice(1, -1) + '] }' }}",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "messageType": "block",
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    }
  ],
  "connections": {
    "Click": {
      "main": [
        [
          {
            "node": "Jamf Server",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ID List": {
      "main": [
        [
          {
            "node": "Get Patch Summary:ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Jamf Server": {
      "main": [
        [
          {
            "node": "Get Software Title/ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Block Formatting": {
      "main": [
        [
          {
            "node": "Slack Channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Patch Summary:ID": {
      "main": [
        [
          {
            "node": "Manual Field Mapping",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Field Mapping": {
      "main": [
        [
          {
            "node": "Block Formatting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Software Title/ID": {
      "main": [
        [
          {
            "node": "ID List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

🧩 Jamf Patch Summary to Slack Stay on top of software patch compliance by automatically posting Jamf patch summaries to Slack. This helps IT and security teams quickly identify outdated installs and take action—without logging into Jamf.

Source: https://n8n.io/workflows/5529/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

Webhook Slack. Uses theHiveProjectTrigger, stickyNote, httpRequest, theHiveProject. Event-driven trigger; 63 nodes.

The Hive Project Trigger, HTTP Request, The Hive Project +1
Slack & Telegram

Key Features: Direct Case Management: Modify case details such as assignee, severity, status, and more through intuitive form inputs embedded within Slack messages. Seamless Integration: Assumes match

The Hive Project Trigger, HTTP Request, The Hive Project +1
Slack & Telegram

Transform your lead list into an AI-powered calling machine. This workflow automates your entire cold calling process using Vapi's conversational AI to initiate calls, qualify leads, capture detailed

Google Sheets, HTTP Request, Slack
Slack & Telegram

Type in Slack. Walk away. Get a professional PDF report and a structured Excel fix sheet delivered to Google Drive and posted back in your Slack thread — fully automated, zero manual work.

Compression, HTTP Request, Google Drive +3
Slack & Telegram

This workflow automates the full company enrichment pipeline: Simply import CSV company lists to Slack and save time on enrichment and CRM maintenance. It processes uploaded files, extracts company do

Slack Trigger, Slack, HTTP Request +3