Export Your YouTube Subscriptions to OPML (and Use Any RSS Reader)
YouTube doesn't make it easy to take your subscriptions elsewhere. But every channel still has a public RSS feed.
This guide lets you:
- Export all your subscriptions
- Generate a valid OPML file
- Import them into any RSS reader
- Beat the algorithm
No extensions. No API keys. No Google Takeout.
Step 1 - Open the Subscriptions Page
Go to:
https://www.youtube.com/feed/channels
Step 2 - Create a Bookmarklet
Create a new bookmark in your browser.
Set the URL of the bookmark to the following:
javascript:(async function(){function sleep(ms){return new Promise(function(r){setTimeout(r,ms);});} if(location.pathname==="/feed/subscriptions"){alert("Open https://www.youtube.com/feed/channels and run again.");return;} function esc(s){return String(s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");} function pickText(t){if(!t)return"";if(typeof t==="string")return t;if(t.simpleText)return t.simpleText;if(t.runs&&t.runs.length){var out="";for(var i=0;i<t.runs.length;i++)out+=t.runs[i].text||"";return out.trim();}return"";} function walk(node,fn){if(!node||typeof node!=="object")return;fn(node);if(Array.isArray(node)){for(var i=0;i<node.length;i++)walk(node[i],fn);}else{for(var k in node)if(Object.prototype.hasOwnProperty.call(node,k))walk(node[k],fn);}} function fromInitialData(){var m={};try{walk(window.ytInitialData||{},function(o){if(!o||typeof o!=="object")return;var id=o.channelId;if(typeof id==="string"&&/^UC[0-9A-Za-z_-]{20,}$/.test(id)){var title=pickText(o.title)||pickText(o.channelTitle)||pickText(o.name);if(title){m[id]=title;}else if(!(id in m)){m[id]="";}}});}catch(e){}return m;} function fromDOM(){var m={};var links=document.querySelectorAll('a[href*="/channel/"]');for(var i=0;i<links.length;i++){var a=links[i];var h=a.getAttribute("href")||"";var mm=h.match(/\/channel\/(UC[0-9A-Za-z_-]{20,})/);if(!mm)continue;var id=mm[1];var title=(a.getAttribute("title")||"").trim();if(!(id in m))m[id]=title;}return m;} function merge(a,b){for(var id in b)if(Object.prototype.hasOwnProperty.call(b,id)){if(!(id in a)||(!a[id]&&b[id]))a[id]=b[id];}return a;} var chans=merge(fromInitialData(),fromDOM()); var stable=0; for(var iter=0;iter<60;iter++){ window.scrollTo(0,document.documentElement.scrollHeight); await sleep(650); var before=Object.keys(chans).length; chans=merge(chans,merge(fromInitialData(),fromDOM())); var after=Object.keys(chans).length; if(after===before)stable++;else stable=0; if(stable>=6)break; } var ids=Object.keys(chans); ids.sort(function(a,b){ var ta=(chans[a]||a).toLowerCase(), tb=(chans[b]||b).toLowerCase(); if(ta<tb)return -1; if(ta>tb)return 1; return 0; }); var outlines=[]; for(var j=0;j<ids.length;j++){ var id=ids[j]; var title=(chans[id]||"").trim()||id; var feed="https://www.youtube.com/feeds/videos.xml?channel_id="+id; var html="https://www.youtube.com/channel/"+id; outlines.push(' <outline type="rss" text="'+esc(title)+'" title="'+esc(title)+'" xmlUrl="'+feed+'" htmlUrl="'+html+'" />'); } var opml='<?xml version="1.0" encoding="UTF-8"?>\n<opml version="2.0">\n <head>\n <title>YouTube Subscriptions</title>\n </head>\n <body>\n <outline text="YouTube Subscriptions" title="YouTube Subscriptions">\n'+outlines.join("\n")+'\n </outline>\n </body>\n</opml>\n'; var blob=new Blob([opml],{type:"text/xml;charset=utf-8;"}); var url=URL.createObjectURL(blob); var a=document.createElement("a"); a.href=url; a.download="youtube-subscriptions.opml"; document.body.appendChild(a); a.click(); setTimeout(function(){document.body.removeChild(a);URL.revokeObjectURL(url);},1000); alert("Downloaded youtube-subscriptions.opml ("+ids.length+" channels)."); })();
Save the bookmark.
Step 3 - Run It
- Go to https://www.youtube.com/feed/channels
- Click your new bookmark\
- Wait a few seconds (it scrolls automatically)
- A file named
youtube-subscriptions.opmlwill download
Step 4 - Import Into Any RSS Reader
Most RSS readers support OPML import. Look for:
Settings → Import → OPML
Examples:
- Feedly\
- Inoreader\
- FreshRSS\
- Reeder\
- NetNewsWire\
- Tiny Tiny RSS\
- Miniflux
What This Does
Each YouTube channel exposes an RSS feed at:
https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID
The script:
- Extracts all your subscribed channel IDs
- Builds proper RSS feed URLs
- Generates a valid OPML file
- Downloads it locally
No data is sent anywhere. Everything runs inside your browser.