AutomationFlowsSocial Media › Create Daily Youtube Playlist, Using Google Sheets, and Get Notified in Telegram

Create Daily Youtube Playlist, Using Google Sheets, and Get Notified in Telegram

ByDustin @qrnan on n8n.io

Are you a cord-cutter? Do you find yourself looking through the many titles of videos uploaded to Youtube, just to find the ones you want to watch? Even when you subscribe to the channels you like, do you find that you want to watch the news now and my tech/n8n videos later?…

Cron / scheduled trigger★★★★☆ complexity23 nodesGoogle SheetsHTTP RequestYouTubeTelegram
Social Media Trigger: Cron / scheduled Nodes: 23 Complexity: ★★★★☆ Added:

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

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

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": "2LFEJVoSkeZMndiM",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "YT AI News Playlist Creator/AI News Form Updater",
  "tags": [],
  "nodes": [
    {
      "id": "a871e87e-dc02-4364-83b3-fe378ca60687",
      "name": "Read Channel Names",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        860,
        100
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 944489068,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit#gid=944489068",
          "cachedResultName": "AI News Channels"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit?usp=drivesdk",
          "cachedResultName": "Media Links"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "bcc83a11-e7e1-4bcb-a054-a2f0cc26c5f0",
      "name": "Get Videos",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1020,
        100
      ],
      "parameters": {
        "url": "https://www.googleapis.com/youtube/v3/search",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "part",
              "value": "snippet"
            },
            {
              "name": "publishedAfter",
              "value": "={{ $now.minus(1, 'day') }}"
            },
            {
              "name": "maxResults",
              "value": "5"
            },
            {
              "name": "channel_id",
              "value": "={{ $('Read Channel Names').item.json['Channel Id'] }}"
            },
            {
              "name": "order",
              "value": "date"
            },
            {
              "name": "key",
              "value": "AddYourAPIKeyHere"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6da4a908-1705-4d3a-8f1a-aa73e36866c7",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1160,
        100
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "items"
      },
      "typeVersion": 1
    },
    {
      "id": "1f7ab323-fb52-4a41-bf71-9594e4d1c78d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        140,
        0
      ],
      "parameters": {
        "width": 220,
        "height": 260,
        "content": "## Initiation\nThis section starts the workflow sets the time."
      },
      "typeVersion": 1
    },
    {
      "id": "e17f2b65-3320-46aa-b360-2366691053cd",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 660,
        "height": 260,
        "content": "## Getting the Videos\nThis section grabs the videos."
      },
      "typeVersion": 1
    },
    {
      "id": "d950c171-0993-4e51-8942-18dca557c70a",
      "name": "Create Playlist",
      "type": "n8n-nodes-base.youTube",
      "position": [
        440,
        100
      ],
      "parameters": {
        "title": "={{ $today.format('yyLLdd') }} AI News",
        "options": {},
        "resource": "playlist",
        "operation": "create"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1d292e23-4efc-4377-aacf-8c5b9c54e524",
      "name": "Delete Old Playlist",
      "type": "n8n-nodes-base.youTube",
      "position": [
        580,
        -220
      ],
      "parameters": {
        "options": {},
        "resource": "playlist",
        "operation": "delete",
        "playlistId": "={{ $json['New Playlist ID'] }}"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "26ddb0d4-4ae8-485c-8909-00c70230ce76",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -340
      ],
      "parameters": {
        "color": 3,
        "width": 380,
        "height": 280,
        "content": "## Delete Yesterday's Playlist\nThis section deletes the playlist created yesterday. (do not include this on your first run; or, your workflow will stop)"
      },
      "typeVersion": 1
    },
    {
      "id": "c4756eb6-c080-48dd-9941-511fbf405fbe",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        0
      ],
      "parameters": {
        "color": 4,
        "width": 360,
        "height": 260,
        "content": "## Create New AI News Playlist\nThis section creates today's playlist."
      },
      "typeVersion": 1
    },
    {
      "id": "33308ef0-fb86-4bce-a81f-0c5ddc4215a1",
      "name": "YouTube",
      "type": "n8n-nodes-base.youTube",
      "position": [
        1580,
        100
      ],
      "parameters": {
        "options": {},
        "videoId": "={{ $('Split Out').item.json.id.videoId }}",
        "resource": "playlistItem",
        "playlistId": "={{ $('Create Playlist').item.json.id }}"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2db4a5e2-f177-4c45-a890-8bf140971882",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1500,
        0
      ],
      "parameters": {
        "color": 6,
        "width": 280,
        "height": 260,
        "content": "## Add Videos to Playlist\nThis section adds videos to the playlist created today."
      },
      "typeVersion": 1
    },
    {
      "id": "7c2945de-9912-4db0-bd4f-6c222b8ebeaf",
      "name": "Filter Out Upcoming",
      "type": "n8n-nodes-base.filter",
      "position": [
        1300,
        100
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "8884d2e9-b06d-4347-9635-846d7dea168f",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.snippet.liveBroadcastContent }}",
              "rightValue": "upcoming"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d822a00b-acfc-4838-ae50-37103e581cbf",
      "name": "Save Playlist ID",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        600,
        100
      ],
      "parameters": {
        "columns": {
          "value": {
            "Playlist Group": "AI News",
            "New Playlist ID": "={{ $json.id }}"
          },
          "schema": [
            {
              "id": "Playlist Group",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Playlist Group",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "New Playlist ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "New Playlist ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Playlist Group"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1541621778,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit#gid=1541621778",
          "cachedResultName": "PlaylistId"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit?usp=drivesdk",
          "cachedResultName": "Media Links"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "bbbcbe5b-5594-44cb-bb1d-897498b61810",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        440,
        -220
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "AI News",
              "lookupColumn": "Playlist Group"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1541621778,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit#gid=1541621778",
          "cachedResultName": "PlaylistId"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit?usp=drivesdk",
          "cachedResultName": "Media Links"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "20d814e1-4f1e-4313-949b-961556cd40bf",
      "name": "Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1880,
        100
      ],
      "parameters": {
        "text": "Your AI News YT Playlist has been updated.",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b0cfab69-ad82-4d65-8106-0bd4b23dfdb3",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1820,
        0
      ],
      "parameters": {
        "color": 6,
        "width": 280,
        "height": 260,
        "content": "## Notification of Completion (optional)"
      },
      "typeVersion": 1
    },
    {
      "id": "57ef08c8-b7ca-4af6-963a-67a3d2b80176",
      "name": "0715 Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        180,
        100
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 7,
              "triggerAtMinute": 15
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d3003e8a-aa46-437e-b246-b9030578ea49",
      "name": "Get Channels",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        800,
        -640
      ],
      "parameters": {
        "url": "https://www.googleapis.com/youtube/v3/search",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "={{ $json['Channel User Name'] }}"
            },
            {
              "name": "type",
              "value": "channel"
            },
            {
              "name": "maxResults",
              "value": "1"
            },
            {
              "name": "part",
              "value": "snippet"
            },
            {
              "name": "key",
              "value": "AIzaYOUR_GOOGLE_API_KEY_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "fde3bac7-77be-4322-9b74-2cb7b9ddd17c",
      "name": "Update Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1000,
        -640
      ],
      "parameters": {
        "columns": {
          "value": {
            "Link": "=https://www.youtube.com/{{ $('Read Channel Names1').item.json['Channel User Name'] }}",
            "Channel Id": "={{ $json.items[0].id.channelId }}",
            "row_number": "={{ $('Read Channel Names1').item.json.row_number }}",
            "Channel Name": "={{ $json.items[0].snippet.channelTitle }}"
          },
          "schema": [
            {
              "id": "Channel Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Channel Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Channel Id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Channel Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Channel User Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Channel User Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 944489068,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit#gid=944489068",
          "cachedResultName": "AI News Channels"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit?usp=drivesdk",
          "cachedResultName": "Media Links"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "2b1e067b-436a-4536-ad9f-c55862d496c9",
      "name": "When clicking \u2018Test workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        440,
        -640
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1dd572c5-6762-40a0-88aa-d6a9fa2ca0a3",
      "name": "Read Channel Names1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        620,
        -640
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 944489068,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit#gid=944489068",
          "cachedResultName": "AI News Channels"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1RNah4ZZsLxflQXvMq8AEn3BFpscOC2ygMZ1dPTlk-Kk/edit?usp=drivesdk",
          "cachedResultName": "Media Links"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "43466e82-dc55-4d4e-a6ff-ff2ed977fb3c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        -740
      ],
      "parameters": {
        "width": 820,
        "height": 260,
        "content": "## Create your Channel List\nThis section needs to be put into it's own workflow: this workflow gathers information needed to gather videos for the playlist.  This workflow only needs to be run when a new channel name is added to the Google Sheet."
      },
      "typeVersion": 1
    },
    {
      "id": "149373af-ad35-49bc-b751-6ac919d218b0",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1260,
        -740
      ],
      "parameters": {
        "width": 820,
        "height": 700,
        "content": "## Instructions\n1. To set this up, you need to create a Google Sheet with the following headings in line 1:\n\n   Channel User Name\n   Channel Name\n   Channel Link\n   Channel ID\n\n2. Copy the 'Create your Channel List' into it's own workflow and link the Sheets links to your new sheet.\n\n3. To get the 'Create your Channel List' to work, you need to visit each channel's page that you want included in your playlist; you need to get the \"@\" name of the channel and add it to the 'Channel User Name' column of your Google Sheet.\n\n   For example: if you wanted to include this channel: Recruit Training Videos - Corporal Stock \n   You would look for this name, to add to the next available row of the 'Channel User Name' column: @CorporalStock\n\n4. Once you add all Channel User Names, run the 'Create your Channel list workflow, and it will fill in the remaining details.\n\n5. Now the 'YT Playlist Creator' can be run; but for the first time, disconnect the 'Delete Yesterday's Playlist' leg, or the workflow will error and stop (because there is no 'Yesterday's Playlist'.\n\nNote: this was made to create a playlist every day, delete yesterday's playlist, and only get the last 8 videos posted within the last 24 hours.  I choose to put the date (YYMMDD format) in front of the playlist, to ensure that it doesn't conflict with another playlist.\n\n   Also, I have it notifying me in Telegram, so I know that the new playlist is posted."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "timezone": "Asia/Manila",
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1"
  },
  "versionId": "c154607b-f3b1-4f41-bf77-faec36ce3716",
  "connections": {
    "YouTube": {
      "main": [
        [
          {
            "node": "Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Filter Out Upcoming",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Videos": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0715 Trigger": {
      "main": [
        [
          {
            "node": "Create Playlist",
            "type": "main",
            "index": 0
          },
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Channels": {
      "main": [
        [
          {
            "node": "Update Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Delete Old Playlist",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Playlist": {
      "main": [
        [
          {
            "node": "Save Playlist ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Playlist ID": {
      "main": [
        [
          {
            "node": "Read Channel Names",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Channel Names": {
      "main": [
        [
          {
            "node": "Get Videos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Out Upcoming": {
      "main": [
        [
          {
            "node": "YouTube",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Channel Names1": {
      "main": [
        [
          {
            "node": "Get Channels",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Read Channel Names1",
            "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

Are you a cord-cutter? Do you find yourself looking through the many titles of videos uploaded to Youtube, just to find the ones you want to watch? Even when you subscribe to the channels you like, do you find that you want to watch the news now and my tech/n8n videos later?…

Source: https://n8n.io/workflows/3077/ — 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

This n8n workflow monitors Reddit for freelance job posts related to n8n and sends alerts via Telegram while logging relevant data in Google Sheets. It filters out duplicates and only stores unique, p

HTTP Request, Google Sheets, Telegram
Social Media

AI YouTube transcript. Uses youTube, googleSheets, lmChatOpenRouter, chainLlm. Scheduled trigger; 26 nodes.

YouTube, Google Sheets, OpenRouter Chat +3
Social Media

YouTube AI Analys (modified) + community node transcript. Uses youTube, googleSheets, lmChatOpenRouter, chainLlm. Scheduled trigger; 26 nodes.

YouTube, Google Sheets, OpenRouter Chat +3
Social Media

Automate your cross-platform publishing workflow by automatically uploading Instagram videos to YouTube with AI-optimized titles and tags. 🚀🎬 This workflow runs every six hours, fetches newly posted I

HTTP Request, Facebook Graph Api, Agent +5
Social Media

Youtube Video Creator. Uses googleSheets, chainLlm, lmChatOpenAi, outputParserStructured. Scheduled trigger; 21 nodes.

Google Sheets, Chain Llm, OpenAI Chat +3