{
  "name": "Gmail Attachment Sender Folder - Final Working",
  "nodes": [
    {
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "simple": false,
        "filters": {},
        "options": {
          "downloadAttachments": true
        }
      },
      "type": "n8n-nodes-base.gmailTrigger",
      "typeVersion": 1.3,
      "position": [
        -96,
        -112
      ],
      "id": "b6ee9ec3-a7cb-467f-8146-1dd13ba4b45d",
      "name": "Gmail Trigger",
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "a7bd38aa-9145-4bd2-82c5-d4da191d7d1d",
              "leftValue": "={{ $('Gmail Trigger').item.binary }}",
              "rightValue": "",
              "operator": {
                "type": "object",
                "operation": "exists",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        112,
        -112
      ],
      "id": "fbc77f51-1ffa-4a1b-a412-f69bcf5ee062",
      "name": "Filter"
    },
    {
      "parameters": {
        "operation": "get",
        "messageId": "={{ $json.id }}",
        "simple": false,
        "options": {
          "downloadAttachments": true
        }
      },
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        320,
        -112
      ],
      "id": "27f0f0b5-7b03-4fcb-936c-988b572a8e52",
      "name": "Get a message",
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "msg_id_assignment",
              "name": "message_id",
              "value": "={{ $json.id }}",
              "type": "string"
            },
            {
              "id": "parent_folder_assignment",
              "name": "parent_folder_id",
              "value": "1U1V3Dp4V_d07nltPhZ9PNd_DvJ8Zuu3E",
              "type": "string"
            },
            {
              "id": "sender_raw_assignment",
              "name": "sender_raw",
              "value": "={{ $json.payload.headers.find(h => h.name === 'From')?.value || '' }}",
              "type": "string"
            },
            {
              "id": "sender_email_assignment",
              "name": "sender_email",
              "value": "={{ $json.sender_raw.match(/<(.+?)>/)?.[1] || $json.sender_raw }}",
              "type": "string"
            },
            {
              "id": "sender_folder_assignment",
              "name": "sender_folder",
              "value": "={{ ($json.sender_email || 'unknown').toLowerCase().replace(/[/\\\\#%&{}<>*? $!'\":@+`|=]/g, '_') }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        500,
        -112
      ],
      "id": "prepare_sender",
      "name": "Prepare sender"
    },
    {
      "parameters": {
        "url": "=https://www.googleapis.com/drive/v3/files",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleDriveOAuth2Api",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "=name='{{ $json.sender_folder }}' and mimeType='application/vnd.google-apps.folder' and '{{ $json.parent_folder_id }}' in parents and trashed=false"
            },
            {
              "name": "fields",
              "value": "files(id, name)"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        700,
        -112
      ],
      "id": "search_sender_folder",
      "name": "Search sender folder",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "folder_check_condition",
              "leftValue": "={{ $json.files && $json.files.length > 0 }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        900,
        -112
      ],
      "id": "if_folder_exists",
      "name": "Folder exists?"
    },
    {
      "parameters": {
        "resource": "folder",
        "operation": "create",
        "name": "={{ $('Prepare sender').item.json.sender_folder }}",
        "options": {
          "folderId": {
            "__rl": true,
            "value": "={{ $('Prepare sender').item.json.parent_folder_id }}",
            "mode": "id"
          }
        }
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        1100,
        0
      ],
      "id": "create_sender_folder",
      "name": "Create sender folder",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "folder_id_found",
              "name": "folder_id",
              "value": "={{ $json.files[0].id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1100,
        -220
      ],
      "id": "use_found_folder",
      "name": "Use found folder"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "folder_id_created",
              "name": "folder_id",
              "value": "={{ $json.id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1300,
        0
      ],
      "id": "use_created_folder",
      "name": "Use created folder"
    },
    {
      "parameters": {
        "mode": "combine",
        "combinationMode": "mergeByPosition",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 2.1,
      "position": [
        1500,
        -112
      ],
      "id": "merge_folders",
      "name": "Merge folders"
    },
    {
      "parameters": {
        "jsCode": "// Get folder ID from current item\nconst folderId = $input.item.json.folder_id;\n\n// Get binary data from Get a message node\nconst binaryData = $('Get a message').item.binary;\n\n// Create output array with one item per attachment\nconst outputItems = [];\n\nfor (const key in binaryData) {\n  outputItems.push({\n    json: {\n      folder_id: folderId,\n      attachment_name: key\n    },\n    binary: {\n      data: binaryData[key]\n    }\n  });\n}\n\nreturn outputItems;"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1700,
        -112
      ],
      "id": "split_with_binary",
      "name": "Split with binary"
    },
    {
      "parameters": {
        "operation": "upload",
        "folderId": {
          "__rl": true,
          "value": "={{ $json.folder_id }}",
          "mode": "id"
        },
        "name": "={{ $json.attachment_name }}",
        "binaryData": true,
        "binaryPropertyName": "data",
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        1900,
        -112
      ],
      "id": "upload_file",
      "name": "Upload file",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Gmail Trigger": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter": {
      "main": [
        [
          {
            "node": "Get a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get a message": {
      "main": [
        [
          {
            "node": "Prepare sender",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare sender": {
      "main": [
        [
          {
            "node": "Search sender folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search sender folder": {
      "main": [
        [
          {
            "node": "Folder exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Folder exists?": {
      "main": [
        [
          {
            "node": "Use found folder",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create sender folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create sender folder": {
      "main": [
        [
          {
            "node": "Use created folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Use found folder": {
      "main": [
        [
          {
            "node": "Merge folders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Use created folder": {
      "main": [
        [
          {
            "node": "Merge folders",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge folders": {
      "main": [
        [
          {
            "node": "Split with binary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split with binary": {
      "main": [
        [
          {
            "node": "Upload file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "4d4eff92-ce8b-4fed-8c00-36844be2edde",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "DIFUbxCTf4T0kflc",
  "tags": []
}