AutomationFlowsSocial Media › Copy All Youtube Playlists From One Channel to Another

Copy All Youtube Playlists From One Channel to Another

Original n8n title: 🔁 Copy All Youtube Playlists From One Channel to Another

ByLucía Maio Brioso @luciamb on n8n.io

This workflow is for anyone with two YouTube channels who wants to copy playlists from one to the other — no technical skills required.

Event trigger★★★★☆ complexity16 nodesYouTube
Social Media Trigger: Event Nodes: 16 Complexity: ★★★★☆ Added:

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

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": "liuPFewuxM0EKCHB",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "\ud83d\udd01 Copy all YouTube playlists from one channel to another",
  "tags": [],
  "nodes": [
    {
      "id": "8800e21d-1509-4343-bb38-35ade84e4a0d",
      "name": "When clicking \u2018Test workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1060,
        180
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5dd198e6-4558-4236-9ed5-b1d44305e0e3",
      "name": "Remove private items",
      "type": "n8n-nodes-base.filter",
      "position": [
        40,
        180
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "154d991a-b2aa-4764-b5d1-af43a58777db",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.status.privacyStatus }}",
              "rightValue": "private"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d833d617-3d12-4853-968b-9675b2008351",
      "name": "Keep only the playlist id",
      "type": "n8n-nodes-base.set",
      "position": [
        260,
        -20
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "88dd068e-6aa3-4b87-86a9-7509145efd4e",
              "name": "playlist_id",
              "type": "string",
              "value": "={{ $json.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d242e4b9-c40e-4708-8eaa-70a777bcc6ce",
      "name": "Keep only the video id",
      "type": "n8n-nodes-base.set",
      "position": [
        260,
        180
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "04d39c63-eb09-44a3-aca4-e6558bc831a3",
              "name": "video_id",
              "type": "string",
              "value": "={{ $json.contentDetails.videoId }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "90da5397-e9f2-4f92-ab4d-74bd8ac5fece",
      "name": "Join the playlist and video id in the same item",
      "type": "n8n-nodes-base.merge",
      "position": [
        480,
        80
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.1
    },
    {
      "id": "ac018739-a908-43ef-8e4a-4ce4af2f00a2",
      "name": "Get all playlists from origin channel",
      "type": "n8n-nodes-base.youTube",
      "position": [
        -840,
        180
      ],
      "parameters": {
        "filters": {},
        "options": {},
        "resource": "playlist",
        "returnAll": true
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 5000
    },
    {
      "id": "4e0a1f4f-19e3-4733-8915-0fcff3763dab",
      "name": "Get playlist items from original playlist",
      "type": "n8n-nodes-base.youTube",
      "position": [
        -180,
        180
      ],
      "parameters": {
        "part": [
          "contentDetails",
          "status"
        ],
        "options": {},
        "resource": "playlistItem",
        "operation": "getAll",
        "returnAll": true,
        "playlistId": "={{ $json.id }}"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 5000
    },
    {
      "id": "fa3ff44c-ad35-43ce-8653-0304cf086365",
      "name": "Create new playlist in the target channel",
      "type": "n8n-nodes-base.youTube",
      "position": [
        40,
        -20
      ],
      "parameters": {
        "title": "={{ $json.title }}",
        "options": {},
        "resource": "playlist",
        "operation": "create"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": false,
      "typeVersion": 1,
      "waitBetweenTries": 5000
    },
    {
      "id": "5438bdbd-472d-4526-8617-cd3b25e9a469",
      "name": "Add items to target playlist",
      "type": "n8n-nodes-base.youTube",
      "onError": "continueRegularOutput",
      "position": [
        700,
        155
      ],
      "parameters": {
        "options": {},
        "videoId": "={{ $json.video_id }}",
        "resource": "playlistItem",
        "playlistId": "={{ $json.playlist_id }}"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 5000
    },
    {
      "id": "2401dbbc-582a-48f9-bea9-5f6d1b0996b3",
      "name": "Format fields properly",
      "type": "n8n-nodes-base.set",
      "position": [
        -620,
        180
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0d59b712-8fdd-44cd-9759-f0fdd06dbf32",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "f36f4a16-6783-4da4-a9b6-993ca8f4e342",
              "name": "title",
              "type": "string",
              "value": "={{ $json.snippet.title }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f5429621-cde3-4c6d-a432-11c7e0e33508",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1060,
        -260
      ],
      "parameters": {
        "color": 3,
        "width": 880,
        "height": 400,
        "content": "## \ud83d\udd01 COPY ALL YOUTUBE PLAYLISTS FROM ONE CHANNEL TO ANOTHER\n\n### \u2139\ufe0f ABOUT THIS WORKFLOW\nThis workflow will copy all user-created playlists from one YouTube channel to another.\n\n### \ud83d\udee0\ufe0f SETUP\n1. Create two YouTube credentials: one for each channel.\n2. Add the credentials to the appropriate nodes, as indicated in the sticky notes next to them.\n3. Click \"Test workflow\" to run it.\n\n### \u26a0\ufe0f KNOWN LIMITATIONS\n- Because of technical difficulties, this workflow doesn't copy the automatic playlists such as Watch Later or Liked Videos. I intend to update this workflow if these problems are resolved.\n- You should be aware of your YouTube API quota. This workflow can fail if you reach your quota, in which case, you should request an increase in your quota if possible."
      },
      "typeVersion": 1
    },
    {
      "id": "94d26808-fbec-4914-a100-7f78caa6f240",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -860,
        360
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "content": "## \ud83d\udc46\ud83d\udc46\ud83d\udc46\n## ADD YOUR ORIGIN CHANNEL CREDENTIAL HERE"
      },
      "typeVersion": 1
    },
    {
      "id": "58c42f5e-e403-4460-bf30-a8f61c96c8fc",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -200,
        360
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "content": "## \ud83d\udc46\ud83d\udc46\ud83d\udc46\n## ADD YOUR ORIGIN CHANNEL CREDENTIAL HERE"
      },
      "typeVersion": 1
    },
    {
      "id": "25dba347-a6a4-4883-a2ac-c018665a8dfa",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        360
      ],
      "parameters": {
        "color": 2,
        "width": 260,
        "content": "## \ud83d\udc46\ud83d\udc46\ud83d\udc46\n## ADD YOUR TARGET CHANNEL CREDENTIAL HERE"
      },
      "typeVersion": 1
    },
    {
      "id": "b07f3c7d-dfa2-4e81-b195-091495ce0cd5",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        20,
        -200
      ],
      "parameters": {
        "color": 2,
        "width": 260,
        "content": "## ADD YOUR TARGET CHANNEL CREDENTIAL HERE\n## \ud83d\udc47\ud83d\udc47\ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "0604092e-965c-41a2-bc91-10f612a48f79",
      "name": "Loop over playlists",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -400,
        180
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6befe167-c7f6-42e0-8f9a-ff98888a3463",
  "connections": {
    "Loop over playlists": {
      "main": [
        [],
        [
          {
            "node": "Get playlist items from original playlist",
            "type": "main",
            "index": 0
          },
          {
            "node": "Create new playlist in the target channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove private items": {
      "main": [
        [
          {
            "node": "Keep only the video id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format fields properly": {
      "main": [
        [
          {
            "node": "Loop over playlists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Keep only the video id": {
      "main": [
        [
          {
            "node": "Join the playlist and video id in the same item",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Keep only the playlist id": {
      "main": [
        [
          {
            "node": "Join the playlist and video id in the same item",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add items to target playlist": {
      "main": [
        [
          {
            "node": "Loop over playlists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Get all playlists from origin channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all playlists from origin channel": {
      "main": [
        [
          {
            "node": "Format fields properly",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create new playlist in the target channel": {
      "main": [
        [
          {
            "node": "Keep only the playlist id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get playlist items from original playlist": {
      "main": [
        [
          {
            "node": "Remove private items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Join the playlist and video id in the same item": {
      "main": [
        [
          {
            "node": "Add items to target playlist",
            "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

This workflow is for anyone with two YouTube channels who wants to copy playlists from one to the other — no technical skills required.

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

More Social Media workflows → · Browse all categories →

Related workflows

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

Social Media

YouTube creators, content marketers, and anyone who wants to automatically enrich YouTube links added to a Notion database.

Notion Trigger, YouTube, Notion
Social Media

Video explanation

HTTP Request, Execute Workflow Trigger, Postgres +1
Social Media

Automatically sync your YouTube channel videos with Airtable for comprehensive content management, analytics tracking, and bulk video updates.

Airtable, YouTube
Social Media

This workflow automates a batch upload of multiple videos to YouTube, spacing each upload 12 hours apart in Japan Standard Time (UTC+9) and automatically adding them to a playlist. Manual Trigger — St

Execute Command, Read Write File, YouTube
Social Media

This workflow automates the process of updating a Spotify playlist with tracks from a YouTube playlist, ensuring no duplicates are added. Manual Trigger: Starts the workflow when you click ‘Test workf

Spotify, YouTube