2025-08-05 09:40:47 +05:30
{
"meta" : {
2025-09-29 09:31:37 +04:00
"instanceId" : "workflow-5c8043ab" ,
2025-09-29 06:12:20 +04:00
"versionId" : "1.0.0" ,
2025-09-29 09:31:37 +04:00
"createdAt" : "2025-09-29T07:07:42.964932" ,
"updatedAt" : "2025-09-29T07:07:42.964988" ,
"owner" : "n8n-user" ,
"license" : "MIT" ,
"category" : "automation" ,
"status" : "active" ,
"priority" : "high" ,
"environment" : "production"
2025-08-05 09:40:47 +05:30
} ,
"nodes" : [
{
"id" : "4c9256c8-8dd7-4e81-8aef-0789e6808808" ,
"name" : "When clicking ‘ Test workflow’ " ,
"type" : "n8n-nodes-base.manualTrigger" ,
"position" : [
-260 ,
80
] ,
"parameters" : { } ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 1 ,
"notes" : "This manualTrigger node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "1935ad6a-ade4-4073-9205-0c3dd1091c0f" ,
"name" : "Set parameters for next run" ,
"type" : "n8n-nodes-base.code" ,
"position" : [
1520 ,
460
] ,
"parameters" : {
"mode" : "runOnceForEachItem" ,
"jsCode" : "const desired_path = $('Create desired path').item.json.desired_path;\ndesired_path.shift();\n\nreturn {\n desired_path: desired_path,\n google_drive_folder_id: $json.id,\n}"
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 2 ,
"notes" : "This code node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "5d99a9c4-57c6-4052-b093-fb0c32d9ff56" ,
"name" : "Execute Workflow Trigger" ,
"type" : "n8n-nodes-base.executeWorkflowTrigger" ,
"position" : [
-40 ,
460
] ,
"parameters" : { } ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 1 ,
"notes" : "This executeWorkflowTrigger node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "879b92ae-edab-4d73-96d0-4df36d12fbb2" ,
"name" : "Dummy input data" ,
"type" : "n8n-nodes-base.set" ,
"position" : [
-40 ,
80
] ,
"parameters" : {
"options" : { } ,
"assignments" : {
"assignments" : [
{
"id" : "041e1077-f4dc-476f-b75a-6d60d9c8d0b9" ,
"name" : "google_drive_folder_id" ,
"type" : "string" ,
"value" : "root"
} ,
{
"id" : "843e3a7f-c59e-48c1-80f8-c9995515e340" ,
"name" : "desired_path" ,
"type" : "string" ,
"value" : "testXavier/2024/Q4/03 Documenten"
}
]
}
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 3.4 ,
"notes" : "This set node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "822d45f1-149d-430c-8daf-183998c01166" ,
"name" : "Split the desired path" ,
"type" : "n8n-nodes-base.code" ,
"position" : [
340 ,
260
] ,
"parameters" : {
"mode" : "runOnceForEachItem" ,
"jsCode" : "// Add a new field called 'myNewField' to the JSON of the item\n$input.item.json.desired_path = $input.item.json.desired_path.split('/');\n\nreturn $input.item;"
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 2 ,
"notes" : "This code node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "e2aba13a-fec6-4d1e-aa1c-af95d3f957ad" ,
"name" : "Create desired path" ,
"type" : "n8n-nodes-base.code" ,
"position" : [
580 ,
260
] ,
"parameters" : {
"mode" : "runOnceForEachItem" ,
"jsCode" : "return {\n google_drive_folder_id: $json.google_drive_folder_id,\n desired_path: $json.desired_path,\n};"
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 2 ,
"notes" : "This code node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "aa3f9b95-3197-4b89-bcb2-9e723b8496a0" ,
"name" : "Check if top folder exists" ,
"type" : "n8n-nodes-base.googleDrive" ,
"position" : [
800 ,
260
] ,
"parameters" : {
"filter" : {
"folderId" : {
"__rl" : true ,
"mode" : "id" ,
"value" : "={{ $json.google_drive_folder_id }}"
} ,
"whatToSearch" : "folders"
} ,
"options" : { } ,
"resource" : "fileFolder" ,
"queryString" : "={{ $json.desired_path[0] }}"
} ,
"credentials" : {
"googleDriveOAuth2Api" : {
"id" : "Xk1mfDiQRaqwWUaU" ,
"name" : "Google Drive account 2"
}
} ,
"typeVersion" : 3 ,
2025-09-29 09:31:37 +04:00
"alwaysOutputData" : true ,
"notes" : "This googleDrive node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "969b7823-2720-45c5-b98c-1cc659fe62df" ,
"name" : "If top folder doesn't exist" ,
"type" : "n8n-nodes-base.if" ,
"position" : [
1040 ,
260
] ,
"parameters" : {
"options" : { } ,
"conditions" : {
"options" : {
"version" : 2 ,
"leftValue" : "" ,
"caseSensitive" : true ,
"typeValidation" : "strict"
} ,
"combinator" : "and" ,
"conditions" : [
{
"id" : "59e55ba1-5db4-455e-95a1-bb8e4c1d0d31" ,
"operator" : {
"type" : "object" ,
"operation" : "empty" ,
"singleValue" : true
} ,
"leftValue" : "={{ $json }}" ,
"rightValue" : ""
}
]
}
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 2.2 ,
"notes" : "This if node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "2cd3932d-b066-438a-b968-4078dfc9dbe7" ,
"name" : "Create new subfolder" ,
"type" : "n8n-nodes-base.googleDrive" ,
"position" : [
1340 ,
240
] ,
"parameters" : {
"name" : "={{ $('Create desired path').item.json.desired_path[0] }}" ,
"driveId" : {
"__rl" : true ,
"mode" : "list" ,
"value" : "My Drive"
} ,
"options" : { } ,
"folderId" : {
"__rl" : true ,
"mode" : "id" ,
"value" : "={{ $('Create desired path').item.json.google_drive_folder_id }}"
} ,
"resource" : "folder"
} ,
"credentials" : {
"googleDriveOAuth2Api" : {
"id" : "Xk1mfDiQRaqwWUaU" ,
"name" : "Google Drive account 2"
}
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 3 ,
"notes" : "This googleDrive node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "f9322682-b77f-4bad-8bbc-13868c126063" ,
"name" : "If path has been completely created" ,
"type" : "n8n-nodes-base.if" ,
"position" : [
1740 ,
460
] ,
"parameters" : {
"options" : { } ,
"conditions" : {
"options" : {
"version" : 2 ,
"leftValue" : "" ,
"caseSensitive" : true ,
"typeValidation" : "strict"
} ,
"combinator" : "and" ,
"conditions" : [
{
"id" : "d95b4b2e-68c5-4d82-84af-a46fbb84035c" ,
"operator" : {
"type" : "array" ,
"operation" : "empty" ,
"singleValue" : true
} ,
"leftValue" : "={{ $json.desired_path }}" ,
"rightValue" : ""
}
]
}
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 2.2 ,
"notes" : "This if node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "94c4694b-0a32-4681-b977-c01e3232d9e8" ,
"name" : "Return the ID of the last folder" ,
"type" : "n8n-nodes-base.set" ,
"position" : [
2040 ,
440
] ,
"parameters" : {
"options" : { } ,
"assignments" : {
"assignments" : [
{
"id" : "692a23db-71c8-4154-af87-a0177045b63d" ,
"name" : "google_drive_folder_id" ,
"type" : "string" ,
"value" : "={{ $('Set parameters for next run').item.json.google_drive_folder_id }}"
}
]
}
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 3.4 ,
"notes" : "This set node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "5e9f327d-61bb-46af-b16b-21499f5c22e0" ,
"name" : "Sticky Note" ,
"type" : "n8n-nodes-base.stickyNote" ,
"position" : [
-820 ,
-80
] ,
"parameters" : {
"width" : 480 ,
"height" : 880 ,
"content" : "# Create Google Drive Folders by Path\nThis workflow created nested Google Drive folder from a path string and returns the ID of the final folder for immediate use.\n\nUse this workflow in your other flows by calling it directly with the following data:\n- `google_drive_folder_id` -> The ID of the folder where you want to create additional folders in. You can use \"root\" if you want to begin at root level of your Drive.\n- `desired_path` -> The folder structure you'd like to create in Google Drive. Each folder is separated by a slash, eg: `Projects/Clients/Reports`"
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 1 ,
"notes" : "This stickyNote node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "35b3741f-465a-4846-9f62-4dedc40ca884" ,
"name" : "Sticky Note1" ,
"type" : "n8n-nodes-base.stickyNote" ,
"position" : [
-280 ,
-20
] ,
"parameters" : {
"color" : 5 ,
"width" : 500 ,
"height" : 80 ,
"content" : "## Test data for the workflow\nUse this in case you want to test the workflow."
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 1 ,
"notes" : "This stickyNote node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "3b7fe210-d966-4988-aaf4-5e07567b3054" ,
"name" : "Sticky Note2" ,
"type" : "n8n-nodes-base.stickyNote" ,
"position" : [
-280 ,
320
] ,
"parameters" : {
"color" : 5 ,
"width" : 500 ,
"height" : 120 ,
"content" : "## Triggered from another workflow\nThis workflow is intended to be triggered by other workflows. Don't copy/paste this workflow as it will be more difficult to maintain and keep up-to-date."
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 1 ,
"notes" : "This stickyNote node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "16477e77-656e-4bff-914f-633d61477d38" ,
"name" : "Sticky Note3" ,
"type" : "n8n-nodes-base.stickyNote" ,
"position" : [
560 ,
80
] ,
"parameters" : {
"color" : 5 ,
"width" : 1320 ,
"height" : 120 ,
"content" : "## Main loop\nTake the desired_path and split it into parts. Eg: `Projects/Clients/Reports` will turn into 3 parts: Projects, Clients, Reports.\nWe then check if the top folder exists and create it if not. We repeat this process until all subfolders have been created and correctly nested."
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 1 ,
"notes" : "This stickyNote node performs automated tasks as part of the workflow."
2025-08-05 09:40:47 +05:30
} ,
{
"id" : "57404f59-28b8-4969-b483-fb8a3320a592" ,
"name" : "Sticky Note4" ,
"type" : "n8n-nodes-base.stickyNote" ,
"position" : [
1980 ,
80
] ,
"parameters" : {
"color" : 5 ,
"width" : 280 ,
"height" : 120 ,
"content" : "## Rerturn data\nHere we return the ID of the last folder in the path, so you can start uploading new files to it."
} ,
2025-09-29 09:31:37 +04:00
"typeVersion" : 1 ,
"notes" : "This stickyNote node performs automated tasks as part of the workflow."
2025-09-29 06:12:20 +04:00
} ,
2025-09-29 09:31:37 +04:00
{
"id" : "error-d608fe6a" ,
"name" : "Error Handler" ,
"type" : "n8n-nodes-base.stopAndError" ,
"typeVersion" : 1 ,
"position" : [
1000 ,
400
] ,
"parameters" : {
"message" : "Workflow execution error" ,
"options" : { }
}
}
] ,
"pinData" : { } ,
"connections" : {
2025-09-29 06:12:20 +04:00
"aa3f9b95-3197-4b89-bcb2-9e723b8496a0" : {
"main" : [
[
{
"node" : "error-handler-aa3f9b95-3197-4b89-bcb2-9e723b8496a0-804609f9" ,
"type" : "main" ,
"index" : 0
}
]
]
} ,
"2cd3932d-b066-438a-b968-4078dfc9dbe7" : {
"main" : [
[
{
"node" : "error-handler-2cd3932d-b066-438a-b968-4078dfc9dbe7-af7bba8b" ,
"type" : "main" ,
"index" : 0
}
]
]
2025-08-05 09:40:47 +05:30
}
2025-09-29 06:12:20 +04:00
} ,
"name" : "Manualtrigger Workflow" ,
"settings" : {
"executionOrder" : "v1" ,
"saveManualExecutions" : true ,
"callerPolicy" : "workflowsFromSameOwner" ,
"errorWorkflow" : null ,
2025-09-29 09:31:37 +04:00
"timezone" : "UTC" ,
"executionTimeout" : 3600 ,
"maxExecutions" : 1000 ,
"retryOnFail" : true ,
"retryCount" : 3 ,
"retryDelay" : 1000
2025-09-29 06:12:20 +04:00
} ,
2025-09-29 09:31:37 +04:00
"description" : "Automated workflow: Manualtrigger Workflow. This workflow integrates 8 different services: stickyNote, code, googleDrive, set, stopAndError. It contains 18 nodes and follows best practices for error handling and security." ,
"tags" : [
"automation" ,
"n8n" ,
"production-ready" ,
"excellent" ,
"optimized"
] ,
"notes" : "Excellent quality workflow: Manualtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."
2025-05-14 11:58:29 +03:00
}