AutomationFlowsGeneral › Automate monday.com Subitems & Uploads

Automate monday.com Subitems & Uploads

Original n8n title: Monday Com Useful Utilities

Monday Com Useful Utilities. Uses manualTrigger, splitOut, mondayCom, httpRequest. Event-driven trigger; 14 nodes.

Event trigger★★★★☆ complexity14 nodesMonday.comHTTP Request
General Trigger: Event Nodes: 14 Complexity: ★★★★☆ Added:

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
{
  "nodes": [
    {
      "id": "de488298-e4f3-4b06-aef3-5d5d795382e9",
      "name": "When clicking \"Test workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        120,
        560
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "7e8c25dc-7ccd-44b5-a4b1-33def99fc811",
      "name": "PULL SUBITEMS",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        460
      ],
      "parameters": {
        "jsCode": "//Search for \"Subitems\" column\nconst columnName = \"Subitems\"\nfunction getColumnValue(item, columnId) {\n    const column = item.column_values.find(column => column.column.title === columnId);\n    if (column) {\n          return column\n    } else {\n        return null;\n    }\n}\nconst columnValue = getColumnValue($input.last().json, columnName);\nreturn JSON.parse(columnValue.value);\n\n//ALT OPTION - direct access by column_values[0]\n//var ids = $input.last().json['column_values'][0]['value'];\n//return JSON.parse(ids)"
      },
      "typeVersion": 2
    },
    {
      "id": "82464748-cf9a-4792-8790-f07c06c1525d",
      "name": "SPLIT SUBITEMS",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        840,
        460
      ],
      "parameters": {
        "include": "selectedOtherFields",
        "options": {},
        "fieldToSplitOut": "linkedPulseIds",
        "fieldsToInclude": "linkedPulseIds[0].linkedPulseId"
      },
      "typeVersion": 1
    },
    {
      "id": "96a780da-be73-41c8-bf53-b2a05061a340",
      "name": "GET EACH SUBITEM",
      "type": "n8n-nodes-base.mondayCom",
      "position": [
        1020,
        460
      ],
      "parameters": {
        "itemId": "=\n{{ $json.linkedPulseIds.linkedPulseId }}",
        "resource": "boardItem",
        "operation": "get"
      },
      "credentials": {
        "mondayComApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "5993e15a-1a1b-436e-b994-bf3acee16da0",
      "name": "MONDAY UPLOAD",
      "type": "n8n-nodes-base.httpRequest",
      "disabled": true,
      "position": [
        1020,
        600
      ],
      "parameters": {
        "url": "https://api.monday.com/v2/file",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "query",
              "value": "=mutation add_file($file: File!) {add_file_to_column (item_id:{{ $input.last().json[\"id\"] }} , column_id:\"file\" file: $file) {id}}"
            },
            {
              "name": "map",
              "value": "{\"image\":\"variables.file\"}"
            },
            {
              "name": "image",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            }
          ]
        },
        "nodeCredentialType": "mondayComOAuth2Api"
      },
      "credentials": {
        "mondayComOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.1
    },
    {
      "id": "06099adf-7f2f-4c32-84b8-e2458e39f95c",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        640,
        660
      ],
      "parameters": {
        "options": {},
        "operation": "toJson"
      },
      "typeVersion": 1
    },
    {
      "id": "397c5d7b-76e4-4a0e-bd39-31c10571d68a",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        840,
        600
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combinationMode": "mergeByPosition"
      },
      "typeVersion": 2.1
    },
    {
      "id": "a7bcc413-8d7e-4941-a81a-7a99fe14b01d",
      "name": "PULL LINKEDPULSE",
      "type": "n8n-nodes-base.mondayCom",
      "position": [
        1200,
        320
      ],
      "parameters": {
        "itemId": "=\n{{ $json.linkedPulse.linkedPulseId }}",
        "resource": "boardItem",
        "operation": "get"
      },
      "credentials": {
        "mondayComApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "a4d2e3a7-05a9-434a-a4e5-d6ed3d538091",
      "name": "GET ITEM",
      "type": "n8n-nodes-base.mondayCom",
      "position": [
        340,
        560
      ],
      "parameters": {
        "itemId": "5775061188",
        "resource": "boardItem",
        "operation": "get"
      },
      "credentials": {
        "mondayComApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "5ce40a46-1513-498a-9e92-8dd96e508f34",
      "name": "GET LINKEDPULSES",
      "type": "n8n-nodes-base.code",
      "position": [
        840,
        320
      ],
      "parameters": {
        "jsCode": "data = $input.last().json.value\nconst linkedPulseID = JSON.parse(data).linkedPulseIds\nreturn { \"linkedPulse\": linkedPulseID}\n"
      },
      "typeVersion": 2
    },
    {
      "id": "22e3ec96-4e83-42fa-aa25-ce0d7445df15",
      "name": "GET BOARD RELATION",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        320
      ],
      "parameters": {
        "jsCode": "const columnName = \"Additional Contacts\"\n\nfunction getColumnValue(item, columnId) {\n    const column = item.column_values.find(column => column.column.title === columnId);\n    if (column) {\n          return column\n    } else {\n        return null;\n    }\n}\n\nconst columnValue = getColumnValue($input.last().json, columnName);\nreturn (columnValue)"
      },
      "typeVersion": 2
    },
    {
      "id": "e55be301-0a6a-43a6-8a07-becc39e0a254",
      "name": "COLUMN BY NAME",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        40
      ],
      "parameters": {
        "jsCode": "const columnName = \"Zoom Date\"\n\nfunction getColumnValue(item, columnId) {\n    const column = item.column_values.find(column => column.column.title === columnId);\n    if (column) {\n          return column\n    } else {\n        return null;\n    }\n}\n\nconst columnValue = getColumnValue($input.last().json, columnName);\nreturn (columnValue)"
      },
      "typeVersion": 2
    },
    {
      "id": "463966c2-27e2-429c-8f8b-b3c279592f0d",
      "name": "COLUMN BY ID",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        180
      ],
      "parameters": {
        "jsCode": "const columnId = \"person\"\n\nfunction getColumnValue(item, columnId) {\n    const column = item.column_values.find(column => column.id === columnId);\n    if (column) {\n          return column\n    } else {\n        return null;\n    }\n}\n\nconst columnValue = getColumnValue($input.last().json, columnId);\nreturn (columnValue)"
      },
      "typeVersion": 2
    },
    {
      "id": "33b0aeff-18aa-4ee9-97b3-7c3a44cf96fc",
      "name": "SPLIT LINKED PULSES",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1020,
        320
      ],
      "parameters": {
        "include": "=",
        "options": {},
        "fieldToSplitOut": "linkedPulse"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "MONDAY UPLOAD",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET ITEM": {
      "main": [
        [
          {
            "node": "GET BOARD RELATION",
            "type": "main",
            "index": 0
          },
          {
            "node": "PULL SUBITEMS",
            "type": "main",
            "index": 0
          },
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          },
          {
            "node": "COLUMN BY NAME",
            "type": "main",
            "index": 0
          },
          {
            "node": "COLUMN BY ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PULL SUBITEMS": {
      "main": [
        [
          {
            "node": "SPLIT SUBITEMS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SPLIT SUBITEMS": {
      "main": [
        [
          {
            "node": "GET EACH SUBITEM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "GET LINKEDPULSES": {
      "main": [
        [
          {
            "node": "SPLIT LINKED PULSES",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET BOARD RELATION": {
      "main": [
        [
          {
            "node": "GET LINKEDPULSES",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SPLIT LINKED PULSES": {
      "main": [
        [
          {
            "node": "PULL LINKEDPULSE",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \"Test workflow\"": {
      "main": [
        [
          {
            "node": "GET ITEM",
            "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

How this works

This workflow streamlines the management of complex Monday.com boards by automatically extracting subitems and linked pulses, then uploading relevant files to enhance collaboration. It saves time for project managers and team leads handling intricate tasks, such as updating reports or sharing attachments across items, without manual data shuffling. The key step involves splitting subitems for individual processing via Monday.com's API, followed by HTTP requests to handle file uploads seamlessly.

Use this workflow when dealing with boards that have nested subitems requiring bulk updates or file integrations, like in content pipelines or client project tracking. Avoid it for simple boards without substructures, as it adds unnecessary complexity; opt for direct Monday.com actions instead. Common variations include adding email notifications after uploads or filtering specific item types before processing.

About this workflow

Monday Com Useful Utilities. Uses manualTrigger, splitOut, mondayCom, httpRequest. Event-driven trigger; 14 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

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

General

Kv Cloudflare Key Value Database Full Api Integration Workflow. Uses stickyNote, httpRequest, manualTrigger. Event-driven trigger; 47 nodes.

HTTP Request
General

Reputation Engine — Site Refresh. Uses httpRequest, executeWorkflowTrigger. Event-driven trigger; 35 nodes.

HTTP Request, Execute Workflow Trigger
General

Reputation Engine — Content Generator. Uses httpRequest. Event-driven trigger; 30 nodes.

HTTP Request
General

Retrieve A Monday Com Row And All Data In A Single Node. Uses mondayCom, splitOut, executeWorkflowTrigger, stickyNote. Event-driven trigger; 26 nodes.

Monday.com, Execute Workflow Trigger
General

This workflow is a building block designed to be called from other workflows via an Execute workflow node. When called from another workflow, and given the JSON input of a "pulse" field with the ID to

Monday.com, Execute Workflow Trigger