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 →
{
"name": "YouTube To TG",
"nodes": [
{
"parameters": {},
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [
240,
300
]
},
{
"parameters": {
"resource": "playlistItem",
"operation": "getAll",
"playlistId": "=LL",
"limit": 10,
"options": {}
},
"name": "YouTube",
"type": "n8n-nodes-base.youTube",
"typeVersion": 1,
"position": [
440,
440
],
"credentials": {
"youTubeOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"functionCode": "const staticData = getWorkflowStaticData('global');\nconst lastItemId = staticData.lastItemId;\n\nconsole.log('lastItemId', lastItemId);\nconst firstItem = items[0];\nlet newItems = [];\n\nfunction getId(item) {\n return item.json.contentDetails.videoId;\n}\n\nif (lastItemId) {\n for (const item of items) {\n if (getId(item) === lastItemId) {\n break;\n }\n newItems.push(item)\n }\n} else {\n newItems = [firstItem]\n}\n\nstaticData.lastItemId = getId(firstItem)\nreturn newItems.reverse();"
},
"name": "Function",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
660,
440
]
},
{
"parameters": {
"chatId": "@pseudoyulife",
"text": "=\u25b6\ufe0f {{$json[\"snippet\"][\"title\"]}} #youtube\n\nhttps://www.youtube.com/watch?v={{$json[\"contentDetails\"][\"videoId\"]}}",
"additionalFields": {
"parse_mode": "HTML"
}
},
"name": "Telegram",
"type": "n8n-nodes-base.telegram",
"typeVersion": 1,
"position": [
860,
440
],
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"interval": 30,
"unit": "minutes"
},
"name": "Interval",
"type": "n8n-nodes-base.interval",
"typeVersion": 1,
"position": [
200,
640
]
}
],
"connections": {
"YouTube": {
"main": [
[
{
"node": "Function",
"type": "main",
"index": 0
}
]
]
},
"Function": {
"main": [
[
{
"node": "Telegram",
"type": "main",
"index": 0
}
]
]
},
"Interval": {
"main": [
[
{
"node": "YouTube",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"saveExecutionProgress": "DEFAULT",
"errorWorkflow": "9"
},
"id": 7,
"tags": []
}
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.
telegramApiyouTubeOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
YouTube To TG. Uses start, youTube, telegram. Manual trigger; 5 nodes.
Source: https://github.com/pseudoyu/yu-workflows/blob/5e3119b213707cf58298e4a2ff94052512a46253/n8n/YouTube_To_TG.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Youtube:Channel:get getAll update:Playlist:create update getAll get delete:PlaylistItem:add getAll get delete:videoCategory:getAll:Video:rate get upload update delete. Uses start, youTube, httpRequest
Track Playlist. Uses start, readBinaryFile, spreadsheetFile, youTube. Manual trigger; 6 nodes.
Send New Youtube Channel Videos To Telegram. Uses interval, youTube, telegram. Manual trigger; 5 nodes.
A simple node to send new YouTube videos from a channel to a Telegram chat (private, group or channel). CheckTime: set how often videos should be fetched from YouTube. Default is 30 minutes. GetVideos
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