{
  "name": "Transcribe Youtube videos for free with youtube-transcript.io & save to Supabase",
  "nodes": [
    {
      "id": "dd646cab-5e67-44b8-bc0f-4732d17fa239",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        6208,
        304
      ]
    },
    {
      "id": "e6ad7969-fc50-48e5-869a-8969f23fabe5",
      "name": "Channel Info",
      "type": "n8n-nodes-base.set",
      "position": [
        1072,
        192
      ]
    },
    {
      "id": "30d46acf-b6ea-4d7d-80ae-0d7b1bc2af93",
      "name": "Channel Info + Channel ID",
      "type": "n8n-nodes-base.set",
      "position": [
        1568,
        192
      ]
    },
    {
      "id": "e2b70f78-b995-4eb4-8b91-822d01bc416a",
      "name": "Transcript Worked?",
      "type": "n8n-nodes-base.if",
      "position": [
        5104,
        112
      ]
    },
    {
      "id": "9169295f-4ad4-43a4-9c81-f94f3dc6db5c",
      "name": "New Video Information",
      "type": "n8n-nodes-base.set",
      "position": [
        4336,
        128
      ]
    },
    {
      "id": "3e2bec8f-26a2-4fe2-a044-20a146ac2cd3",
      "name": "Verify Channel ID + Create RSS Link",
      "type": "n8n-nodes-base.code",
      "position": [
        1296,
        192
      ]
    },
    {
      "id": "e6b9852b-72a0-4926-a94d-2ae76268c294",
      "name": "try to get video_id again",
      "type": "n8n-nodes-base.code",
      "position": [
        4304,
        -32
      ]
    },
    {
      "id": "1331abca-fcc2-46de-9144-2f89be68213d",
      "name": "Loop Over Each Channel",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1840,
        192
      ]
    },
    {
      "id": "c04ca824-9f49-44e1-a9b4-db579ef796b9",
      "name": "Loop Over New Videos",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2512,
        -96
      ]
    },
    {
      "id": "17a7a2fe-e3ac-44b2-8d06-5b9df4b32dc7",
      "name": "Was Video ID Found?",
      "type": "n8n-nodes-base.if",
      "position": [
        3920,
        -96
      ]
    },
    {
      "id": "4d7a1a8d-bbd5-4563-bbe8-48e0b8f6e57a",
      "name": "Add Transcript to Video Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        5568,
        -80
      ]
    },
    {
      "id": "112ff980-abe2-48c5-baff-132f8112fb84",
      "name": "Transcript Failed",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        5360,
        288
      ]
    },
    {
      "id": "a6ed463f-8109-48d8-8732-315ac82cb7ab",
      "name": "Merge Video ID With Video Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        4544,
        -96
      ]
    },
    {
      "id": "45bc327e-e5b3-49bc-b844-b7f45d971de7",
      "name": "Rename URL",
      "type": "n8n-nodes-base.set",
      "position": [
        4112,
        -32
      ]
    },
    {
      "id": "c06e03b7-61c2-44af-a700-791a742e0fb5",
      "name": "Rename Original URL",
      "type": "n8n-nodes-base.set",
      "position": [
        3024,
        -96
      ]
    },
    {
      "id": "363eb243-6ccb-4fbb-80f5-b12ea716fd73",
      "name": "Find Video ID",
      "type": "n8n-nodes-base.set",
      "position": [
        3248,
        -96
      ]
    },
    {
      "id": "502e8cf5-4f21-4f5c-aa23-d9ca3ca6c3db",
      "name": "Is Video ID valid?",
      "type": "n8n-nodes-base.set",
      "position": [
        3472,
        -96
      ]
    },
    {
      "id": "85381b7a-8d37-4a7c-913c-12b358be8050",
      "name": "Clean Up URL",
      "type": "n8n-nodes-base.set",
      "position": [
        3696,
        -96
      ]
    },
    {
      "id": "7db930ef-f892-45fa-836b-012657b70df0",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -240
      ],
      "parameters": {
        "width": 2016,
        "height": 768,
        "content": "## **Part 1: Get Recent Videos**\n\nThis section fetches the list of specified YouTube channels. It then loops through each channel, constructs an RSS feed URL, and pulls the list of videos."
      }
    },
    {
      "id": "4c5f0b41-f6df-49cd-b0e7-98d59006ecbc",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2416,
        -240
      ],
      "parameters": {
        "width": 3984,
        "height": 768,
        "content": "## **Part 2: Video Transcription**\n\nThis section extracts a clean YouTube Video ID from the link, then sends it to the `youtube-transcript.io` API. If the API call is successful, the JSON response is "
      }
    },
    {
      "id": "c2a1b787-4f13-4723-9836-36dba96e6173",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5744,
        -192
      ],
      "parameters": {
        "width": 304,
        "height": 560,
        "content": "## **Part 3: Save Your Transcripts Somewhere!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### Place a node here of the location that you want to save your transcripts.\n\n**Popular nodes to save data**: \n1. Google Sheets\n2. Airta"
      }
    },
    {
      "id": "90ae1bb6-9422-41ab-85d7-e82e18f088c1",
      "name": "Find Channel's Videos",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        2080,
        288
      ]
    },
    {
      "id": "60253e86-9d4f-4963-8b57-8d699da9b085",
      "name": "Channels To Track",
      "type": "n8n-nodes-base.set",
      "position": [
        544,
        192
      ]
    },
    {
      "id": "6a613354-f29e-4bc4-9684-207ef19d5b7d",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        816,
        192
      ]
    },
    {
      "id": "59f43f15-dbbc-4dac-8162-4dc367996503",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -80
      ],
      "parameters": {
        "width": 256,
        "height": 448,
        "content": "## Splits all of the websites into their own items so that they go into the loop one at a time\n"
      }
    },
    {
      "id": "019d5e36-c365-48b2-bdb3-665dc5051708",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -80
      ],
      "parameters": {
        "width": 256,
        "height": 448,
        "content": "## Stores the Channel IDs of the youtube channels you are tracking\n\nFind channel IDs for free by using a website such as https://www.tunepocket.com/youtube-channel-id-finder"
      }
    },
    {
      "id": "3ea72eea-053f-4d93-8bbe-05734648f4af",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        -240
      ],
      "parameters": {
        "width": 256,
        "height": 448,
        "content": "## How often do you want this to run?\n\n**PRO TIP**: Replace this with a schedule node!"
      }
    },
    {
      "id": "6719410f-abdf-4c94-a471-a31fb9d1fab5",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        80
      ],
      "parameters": {
        "width": 256,
        "height": 288,
        "content": "## Convert to a valid RSS feed link"
      }
    },
    {
      "id": "f37d6a83-467e-4b9a-9890-3c2e7241444d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2544,
        80
      ],
      "parameters": {
        "width": 688,
        "height": 384,
        "content": "## Filter Out Youtube Shorts?\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Default = Will NOT extract transcript from Youtube Shorts.\n\nIf you want the transcripts from Youtube Shorts as well. Delete the second filter on this"
      }
    },
    {
      "id": "04af7999-8494-47a2-87f8-4a745c33f7ae",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4720,
        0
      ],
      "parameters": {
        "width": 336,
        "height": 464,
        "content": "## Free Youtube Transcripts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### This website allows for 25 free Youtube transcripts per month.\n\nGet your api key here:\nhttps://www.youtube-transcript.io/\n\n### Only works on videos wi"
      }
    },
    {
      "id": "f56930b5-6a43-4240-bbfb-65b78b4d4623",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6144,
        128
      ],
      "parameters": {
        "width": 224,
        "height": 336,
        "content": "## Wait for a sec"
      }
    },
    {
      "id": "690af084-1fc8-466a-afe4-105c431490ce",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -992,
        -240
      ],
      "parameters": {
        "width": 1088,
        "height": 448,
        "content": "## **YouTube Video Transcriptor**\n\nHey there! This workflow automatically finds new videos from your favorite YouTube channels, transcribes them, and saves the text for you.\n\n### **🚀 Quick Setup Guide"
      }
    },
    {
      "id": "e173f5ab-0734-42f4-b99c-cea881b6fed6",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        192,
        -64
      ]
    },
    {
      "id": "d7803fcd-79ce-43eb-98ad-6b09f92315de",
      "name": "Get Transcript From API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4832,
        112
      ]
    },
    {
      "id": "22c1026c-1ff5-4409-ab3a-8c20e7a3ec7d",
      "name": "Parse Transcript from API Response",
      "type": "n8n-nodes-base.code",
      "position": [
        5360,
        96
      ]
    },
    {
      "id": "26bc1e33-ec0f-441b-919a-38ec2a168557",
      "name": "Save Data to Supabase",
      "type": "n8n-nodes-base.supabase",
      "position": [
        5840,
        -80
      ]
    },
    {
      "id": "2d24ec43-3d00-40a8-bba3-1f67042092f6",
      "name": "Filter Out YouTube Shorts",
      "type": "n8n-nodes-base.if",
      "position": [
        2800,
        144
      ]
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over New Videos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Channel Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rename URL": {
      "main": [
        [
          {
            "node": "try to get video_id again",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Channel Info": {
      "main": [
        [
          {
            "node": "Verify Channel ID + Create RSS Link",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean Up URL": {
      "main": [
        [
          {
            "node": "Was Video ID Found?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find Video ID": {
      "main": [
        [
          {
            "node": "Is Video ID valid?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Channels To Track": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Video ID valid?": {
      "main": [
        [
          {
            "node": "Clean Up URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcript Worked?": {
      "main": [
        [
          {
            "node": "Parse Transcript from API Response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Transcript Failed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rename Original URL": {
      "main": [
        [
          {
            "node": "Find Video ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Was Video ID Found?": {
      "main": [
        [
          {
            "node": "Merge Video ID With Video Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Rename URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over New Videos": {
      "main": [
        [],
        [
          {
            "node": "Filter Out YouTube Shorts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find Channel's Videos": {
      "main": [
        [
          {
            "node": "Loop Over Each Channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New Video Information": {
      "main": [
        [
          {
            "node": "Merge Video ID With Video Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Save Data to Supabase": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Each Channel": {
      "main": [
        [
          {
            "node": "Loop Over New Videos",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Find Channel's Videos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Transcript From API": {
      "main": [
        [
          {
            "node": "Transcript Worked?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Channel Info + Channel ID": {
      "main": [
        [
          {
            "node": "Loop Over Each Channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Out YouTube Shorts": {
      "main": [
        [
          {
            "node": "Rename Original URL",
            "type": "main",
            "index": 0
          },
          {
            "node": "New Video Information",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over New Videos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "try to get video_id again": {
      "main": [
        [
          {
            "node": "Merge Video ID With Video Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Transcript to Video Data": {
      "main": [
        [
          {
            "node": "Save Data to Supabase",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Video ID With Video Data": {
      "main": [
        [
          {
            "node": "Get Transcript From API",
            "type": "main",
            "index": 0
          },
          {
            "node": "Add Transcript to Video Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Transcript from API Response": {
      "main": [
        [
          {
            "node": "Add Transcript to Video Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Verify Channel ID + Create RSS Link": {
      "main": [
        [
          {
            "node": "Channel Info + Channel ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Channels To Track",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}