AutomationFlowsData & Sheets › Automate monday.com Subitem Uploads

Automate monday.com Subitem Uploads

Original n8n title: Templates

TEMPLATES. Uses manualTrigger, splitOut, mondayCom, httpRequest. Event-driven trigger; 14 nodes.

Event trigger★★★★☆ complexity14 nodesMonday.comHTTP Request
Data & Sheets 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
{
  "id": "MmfWpcIegNgBjBpL",
  "name": "TEMPLATES",
  "tags": [
    {
      "id": "uKg1PU2D27Vsr8ud",
      "name": "MONDAY",
      "createdAt": "2023-12-05T07:54:13.266Z",
      "updatedAt": "2023-12-05T07:54:13.266Z"
    }
  ],
  "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
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "91cd2823-4b1c-4e94-9205-9a765846b789",
  "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 creation and management of reusable templates in monday.com by automating the extraction of subitems from boards and uploading them as files for easy access. It saves teams hours of manual setup by pulling linked pulses and merging data into structured formats, ideal for project managers and operations leads who frequently duplicate structures across projects. The key step involves splitting out subitems and using monday.com's API alongside HTTP requests to fetch and process each one efficiently, ensuring templates remain up-to-date without repetitive effort.

Use this workflow when standardising recurring project setups in monday.com, such as onboarding templates or task hierarchies, to maintain consistency across your organisation. Avoid it for one-off tasks or boards without subitems, as the splitting logic won't apply effectively. Common variations include adapting the HTTP upload to Google Drive for cloud storage or adding email notifications to alert teams when new templates are ready.

About this workflow

TEMPLATES. 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 Data & Sheets workflows → · Browse all categories →

Related workflows

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

Data & Sheets

Workflow Importer. Uses extractFromFile, executeCommand, readWriteFile, httpRequest. Event-driven trigger; 58 nodes.

Execute Command, Read Write File, HTTP Request +3
Data & Sheets

Retrieves workflows directly from an n8n instance using the n8n API Dynamically generates a form to select which workflows to import Supports both fixed instance configuration and dynamic source/targe

Form Trigger, Form, Notion +2
Data & Sheets

[2/3] Set up medoids (2 types) for anomaly detection (crops dataset). Uses manualTrigger, httpRequest, splitOut, stickyNote. Event-driven trigger; 48 nodes.

HTTP Request
Data & Sheets

Splitout Limit. Uses httpRequest, splitOut, removeDuplicates, splitInBatches. Event-driven trigger; 40 nodes.

HTTP Request, n8n, Form Trigger +1
Data & Sheets

Wait Splitout. Uses executeWorkflowTrigger, notion, stickyNote, splitOut. Event-driven trigger; 37 nodes.

Execute Workflow Trigger, Notion, HTTP Request