{"id":14006693,"url":"https://github.com/biplobsd/yst","last_synced_at":"2025-07-24T00:31:53.336Z","repository":{"id":163395732,"uuid":"613753292","full_name":"biplobsd/yst","owner":"biplobsd","description":"Transfer/Move YouTube subscriptions from one account to another","archived":false,"fork":false,"pushed_at":"2025-06-27T11:29:13.000Z","size":907,"stargazers_count":97,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-27T12:34:42.574Z","etag":null,"topics":["channel","channel-mover","channel-transfer","chrome-extension","hacktoberfest","migrate-youtube-subscriptions","subscription","subscriptions-transfer","svelte","youtube","youtube-subscriptions"],"latest_commit_sha":null,"homepage":"https://biplobsd.github.io/apps/view/yst.md","language":"Svelte","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/biplobsd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-03-14T07:50:01.000Z","updated_at":"2025-06-27T11:29:17.000Z","dependencies_parsed_at":"2024-04-30T16:41:29.050Z","dependency_job_id":"ab902b9c-93ac-485c-89f9-7b5541ac6827","html_url":"https://github.com/biplobsd/yst","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/biplobsd/yst","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biplobsd%2Fyst","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biplobsd%2Fyst/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biplobsd%2Fyst/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biplobsd%2Fyst/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/biplobsd","download_url":"https://codeload.github.com/biplobsd/yst/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biplobsd%2Fyst/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266774734,"owners_count":23982246,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["channel","channel-mover","channel-transfer","chrome-extension","hacktoberfest","migrate-youtube-subscriptions","subscription","subscriptions-transfer","svelte","youtube","youtube-subscriptions"],"created_at":"2024-08-10T10:01:35.357Z","updated_at":"2025-07-24T00:31:53.325Z","avatar_url":"https://github.com/biplobsd.png","language":"Svelte","funding_links":["https://www.buymeacoffee.com/biplobsd"],"categories":["Svelte"],"sub_categories":[],"readme":"\u003e [!CAUTION]\n\u003e Due to rapid or unexpected changes in the YouTube website, the YST extension may stop working after these changes. To ensure continued functionality, please use the API mode as a reliable method. [Read API mode docs](https://github.com/biplobsd/yst?tab=readme-ov-file#using-api-mode) or follow [Screen Recording Instructions](https://github.com/biplobsd/yst?tab=readme-ov-file#screen-recording-instructions)\n\n# Youtube Subscriptions Transfer\n\n| Chrome Web Store                                                                                                                                                                                                                     | Edge Add-ons                                                                                                                                                                                                  | Opera Add-ons                                                                                                                                                                                                                                                                      | Firefox Add-ons                                                                                                                                                                                                                                                  |\n|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| \u003ca href=\"https://chrome.google.com/webstore/detail/fanknehiohibiphenfaigbmefncbheaa\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/6e72a907-3c74-4983-af22-3dacbf0ff9b7\" alt=\"Get YST on Chrome Web Store\" width=\"224px\"\u003e\u003c/a\u003e | \u003ca href=\"https://microsoftedge.microsoft.com/addons/detail/ojnekffpabpincdklmmmlnoanffkfahj\"\u003e\u003cimg src=\"https://get.microsoft.com/images/en-us%20light.svg\" alt=\"Get YST on Microsoft Edge\" width=\"224px\"\u003e\u003c/a\u003e | \u003ca href=\"https://addons.opera.com/en/extensions/details/youtube-subscriptions-transfer/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/kazcfz/Browser-Promotional-Badges/refs/heads/main/Opera/Add-ons/addons_206x58_en%402x.png\" alt=\"Get it from Opera add-ons\" width=\"224px\"\u003e\u003c/a\u003e | \u003ca href=\"https://addons.mozilla.org/addon/youtube-subscriptions-transfer/\"\u003e\u003cimg src=\"https://github.com/kazcfz/Browser-Promotional-Badges/raw/refs/heads/main/Mozilla/Firefox/Get%20The%20Add-On.svg\" height=\"60px\" alt=\"Get it from Firefox add-ons\"\u003e\u003c/img\u003e\u003c/a\u003e |\n\nYouTube Subscriptions Transfer is a browser extension that allows you to transfer or move subscriptions from one account to another using XPath or API. The extension collects a list of channels and enables you to subscribe or unsubscribe to each channel. It interacts with the DOM using xpath and YouTube Data API v3.\n\n**_`Note: When using XPath mode, YST only works when the YouTube webpage language is set to English (US).`_**\n\n**_`Issue: On Mac, popup close when changing webpage. Quick solution: Opening with inspect window when popup open and stay open inspect window.`_** \u003cbr\u003e\nRead more: [#4](https://github.com/biplobsd/yst/issues/4)\n\n## Quick tutorial 60 second with the XPath mode\n\n[![Use case](https://img.youtube.com/vi/EsouSNQOALQ/0.jpg)](https://youtu.be/EsouSNQOALQ)\n\n## Long Tutorial (In French Language)\n\n[![Comment transférer ses abonnements YouTube sur un autre compte](https://img.youtube.com/vi/lLRLc2C7M8s/0.jpg)](https://youtu.be/lLRLc2C7M8s)\n\u003cbr\u003e Check out the article on [paradoxetemporel.fr](https://paradoxetemporel.fr/47853-comment-transferer-ses-abonnements-youtube-sur-un-autre-compte.html)\n\u003cbr\u003e Thanks for the tutorial, [Zast](https://github.com/zast57) \n\n## Usage scenario\n### Case 1 - Sharing with your friend\nSuppose you regularly watch YouTube videos, and you are subscribed to many of your favorite YouTube channels. Those channels are really good. Now your friend also wants to follow your subscriptions. Your friend requests you to share all of your YouTube subscriptions with their account. In this case, you can show your entire subscription list to your friend, and they can then subscribe to those channels one by one. In this case, the 'YouTube Subscription Transfer Extension' can help you transfer all of your subscriptions to their account automatically.\n\n### Case 2  - Work account to new account\nSuppose you are using your personal YouTube account, and you also use an ad blocker in your browser to skip YouTube video ads. Currently, you are posting your videos to your channel. However, in this case, YouTube might block you, possibly in a few days. Now that you are aware of this, you decide to create a new YouTube account to keep your personal and work accounts separate. You want to transfer your work account subscriptions to your new account. You have the option to do this manually, one by one, or you can use the \"YouTube Subscription Transfer Extension\" to automatically transfer or move them to your new account.\n\n## Installation\n\n[Chrome Web Store](https://chrome.google.com/webstore/detail/fanknehiohibiphenfaigbmefncbheaa) | [Microsoft Edge Add-ons](https://microsoftedge.microsoft.com/addons/detail/ojnekffpabpincdklmmmlnoanffkfahj) | [Opera Add-ons](https://addons.opera.com/en/extensions/details/youtube-subscriptions-transfer/) | [Firefox Add-ons](https://addons.mozilla.org/addon/youtube-subscriptions-transfer/)\n\nOr get the built zip from the [release](https://github.com/biplobsd/yst/releases/latest) tab. Then follow the instructions in the [Load unpacked extensions](#load-unpacked-extensions) section. The **_/dist_** folder should be considered as the unpacked zip files.\n\n\n## YST has two modes\n\nBelow is a comparison:a\n\n| XPath      | API |\n| ----------- | ----------- |\n| No need to connect an account | Need to connect an account |\n| Only works on youtube.com   | No need to go to any page |\n| Slow on webpage loading   | API requests, so this is fast |\n\n### Important: API Quota Limitation\nWhen using the API mode, please note that YouTube Data API v3 imposes a daily quota limit. New projects receive a default allocation of 10,000 quota units per day. For example, each subscription insertion or deletion costs 50 units, meaning you can transfer approximately 200 subscriptions per day. You can check the quota details in the official [Quota and Compliance Audits](https://developers.google.com/youtube/v3/guides/quota_and_compliance_audits) and [Quota Calculator](https://developers.google.com/youtube/v3/determine_quota_cost) documentation.\n\n## Usages\n### Using XPath mode (Default)\nTo use the extension, open the Y (yst) icon from the extension panel. If you are not on the https://www.youtube.com page, click the Open YouTube button.\n\n![Options](https://github.com/biplobsd/yst/assets/43641536/3e4cef39-71d1-4bc0-8fff-2021761ba2e1)\n\n\nWait for the page to load completely and wait for the Ready for accept request signal from the content script. Once connected, the options will look like the screenshot below.\n\n![First time view](https://github.com/biplobsd/yst/assets/43641536/1aca238e-f2a9-46d7-be00-158474d30041)\n\n### Data section\n\nIn the Data section, you can see how many subscriptions the extension has collected. If you expand the subscriptions, you will see all the channel IDs. You can also add, remove, or update this list and take action from this list.\n\n![Data section](https://github.com/biplobsd/yst/assets/43641536/86200bbd-1313-49a9-81e6-be4aab7f3240)\n\n#### Google Takeout\n\nYST now supports importing a Google Takeout ZIP file to import a `subscription.csv` file in XPath mode. The `subscription.csv` file contains channel IDs. During the import of the ZIP file, all `channel IDs` are converted to `custom URLs` for similarity checks with the YouTube page's subscription list. The conversion process utilizes the YouTube Data API.\n\n##### Compatibility Table\n\n| OS                        | Chrome/Edge | Firefox | Notes                                           |\n|---------------------------|-------------|---------|--------------------------------------------------|\n| **Windows 10**            | ✅ Yes      | ❌ No    | Fully working with Takeout import               |\n| **Windows 11 (24H2)**     | ✅ Yes      | ❌ No    | Verified at 5K resolution                       |\n| **macOS 15.4.1 (Sequoia)**| ✅ Yes      | ❌ No    | Verified at 5K resolution                       |\n| **Linux (Pop!_OS 22.04)** | ❌ No       | ❌ No    | Basic features work, Takeout import fails       |\n\nThese issues are tracked and will be addressed in a future update. Special thanks to [@mastazi](https://github.com/mastazi) for the detailed report in issue [#18](https://github.com/biplobsd/yst/issues/18)\n\n##### Here are the steps to import a Takeout ZIP file:\n\n1. Go to the [Google takeout manager](https://takeout.google.com/takeout/custom/youtube)\n2. Click on `All YouTube data included`, then on `Deselect all`, then select only `subscriptions` and click `OK`.\n\n   ![Checked subscriptions](https://github.com/biplobsd/yst/assets/43641536/28a1ffb1-6ab8-4439-8541-c8805d409fb9)\n   \n3. Click on `Next step` and then on `Create export`.\n4. Wait for the email. You will receive a Google Takeout email containing a link to the ZIP file. Download that ZIP file.\n5. Return to `YST`, click on `Data`, and below that, you will find the `Takeout import` section. Click the `Click to choose a ZIP file` button here. Then select and choose your takeout.zip file.\n\n   ![Takeout import](https://github.com/biplobsd/yst/assets/43641536/8fb3a7b5-17f3-442e-83db-ae0ca59369da)\n\nNow, YST will automatically import all channels from the `subscription.csv`. Afterward, you can proceed with any actions.\n\n### Actions\n\n- Collect channel\n  \u003e This button will collect all subscriptions from your current active tab on YouTube and save them to the Data section.\n- Subscribe\n  \u003e This button first collects all of your current subscriptions and compares them with the past data from the Data section. If any of the IDs are present in your current subscriptions, the ID is removed from the subscriptions list.\n- Unsubscribe\n  \u003e This button first collects your subscriptions and compares them with the past data. If any of the IDs are present in your current subscription list, the ID remains on the list.\n- Stop\n  \u003e This button will appear when any action is running. You can click it to stop the current task.\n\nThe Subscribe and Unsubscribe buttons will only appear when the Subscriptions list is not empty\n\n![Actions active](https://github.com/biplobsd/yst/assets/43641536/4ea00f4c-601a-40d8-a06b-52412d9ec44d)\n\n## Using API mode\nTo use the API mode, you first need to switch to API mode. To do that, go to the `Settings` tab and you will see an option called `Select Mode.` By default, XPath will be active. Click on `API.`\n\n![API Mode active](https://github.com/biplobsd/yst/assets/43641536/3c0764fa-de39-4559-b986-1755d101ecc7)\n\n### Connect your account\nNow go to the `Home` tab and expand the `Account` section. You will see two connect buttons.\n\n![Account empty](https://github.com/biplobsd/yst/assets/43641536/acea9bc2-9483-473f-b7b1-9a0a290cf5bc)\n\nConnect your account for the two accounts you want to subscribe or unsubscribe from. On the left side, you will see a radio button. After connecting your channels, choose your primary channel by clicking on the radio button.\n\nNow you will see the `Collect Channel` button enabled. Click to collect the channel.\n\n![Collect channel](https://github.com/biplobsd/yst/assets/43641536/76fbbbb5-fbde-4726-9fe2-65613a330232)\n\nAfter collecting the channel, choose your new account. Then click the `subscribe` button to transfer the subscription. Now wait and observe the success and failure count.\n\nBy default, there is a 500ms delay for every API request. You can adjust this value in the `Settings` tab.\n\n## Configuration\n\n### Disable auto XPath remote update\n\nAdd `REMOTE_DISABLE: true` to the Setting/XPath text box and save to disable auto-updating of XPath at the extension popup when opened.\n\n### Update XPath value\n\nIf the YouTube website updates its site and any XPath value is broken, you can easily update that value by going to the \"Settings\" tab and selecting the \"XPath\" option. Now update the XPath values as json format. You need to add `REMOTE_DISABLE: true` for disabling auto update from project xpath value. Now click save.\n\n### Select Mode\n- XPath (Default)\n  \u003e Manually visit the channel page and perform actions.\n- API\n  \u003e API mode will use the `YouTube Data API v3`.\n\n### API Delay per request\nBy default, there is a 500 millisecond delay for every API request. This will not affect the XPath mode. You can change this value in the settings tab.\n\n## Development\n\n```bash\n# install dependencies\nnpm i\n\n# build files to `/dist` directory\n# HMR for extension pages and content scripts\nnpm run dev\n```\n\n## Build\n\n```bash\n# build files to `/dist` directory\n$ npm run build\n```\n\n## Load unpacked extensions\n\n[Getting Started Tutorial](https://developer.chrome.com/docs/extensions/mv3/getstarted/)\n\n1. Open the Extension Management page by navigating to `chrome://extensions`.\n2. Enable Developer Mode by clicking the toggle switch next to `Developer mode`.\n3. Click the `LOAD UNPACKED` button and select the `/dist` directory.\n\n![Example](https://github.com/biplobsd/yst/assets/43641536/e539bb9c-3a1e-45fd-a82f-e7492d499ae4)\n\n## Setting Up Your Own YouTube Data API\n\n### Screen Recording Instructions\n\nIn this screen recording, I demonstrate how to set up the YouTube Data API in the Google Cloud Console. I followed the instructions written below to configure the YouTube API with the YST extension.\n\n[Setting Up Your Own YouTube Data API Screenrecod.webm](https://github.com/user-attachments/assets/db48bef5-bd0c-48c6-9db6-6dc72827d938)\n\n### Requirements\n- Extension ID \u003cbr\u003e![Extension ID on about page](https://github.com/biplobsd/yst/assets/43641536/7a5dfe56-0b2f-48a3-ad38-2ad1d7353dda) \u003cbr\u003e You can find on `About page\u003eID:` or after building and importing it to the browser extensions tab.\n\nFirst, you need to obtain a client ID and API key from the Google Console. Create a project in the Google Cloud Console by visiting https://console.cloud.google.com/projectcreate. Name the project as `YST extension` and then click `Create.` Next, enable the YouTube Data API v3 by going to https://console.cloud.google.com/apis/library/youtube.googleapis.com?project=yst-extension and click the `Enable` button.\n\nNow, configure the consent screen by switching to the `OAuth consent screen` tab.\n\n### OAuth consent screen\n\n![OAuth consent screen](https://github.com/biplobsd/yst/assets/43641536/1eecac4b-82f8-4ad6-bbfd-c83c9fe415d7)\n\n#### 1 - OAuth Consent Screen\n\nSelect \"User Type\" as \"External.\"\n\nSave and continue.\n\nNow, input the following details:\n- App name as \"YST\"\n- User support email as your email.\n- Authorized domains as \"chromiumapp.org\"\n- Developer contact information as your email\n\nSave and continue.\n\n#### 2 - Scopes\n\nAdd the following scopes:\n- `.../auth/userinfo.email`\n- `.../auth/userinfo.profile`\n- `.../auth/youtube.readonly`\n- `.../auth/youtube.force-ssl`\n\n![Scopes](https://github.com/biplobsd/yst/assets/43641536/2f38f4de-c721-4c08-b20b-a15970f62477)\n\nSave and continue.\n\n#### 3 - Test Users\n\nAdd the email addresses of your two YouTube accounts as test users. Save and continue.\n\nYour OAuth consent screen is now set up.\n\n### Credentials Tab\n\nGo to the Credentials tab and create credentials.\n\n![Create credentials](https://github.com/biplobsd/yst/assets/43641536/29962aa2-2a45-4a3a-bbc0-c6654cc699b3)\n\nFirst, select API key. A popup will display with your API key; note it down.\n\nNow, click on the \"CREATE CREDENTIALS\" button again and select OAuth client ID. \n\n\u003e ![Extension ID on about page](https://github.com/biplobsd/yst/assets/43641536/7a5dfe56-0b2f-48a3-ad38-2ad1d7353dda) \u003cbr\u003e\n\u003e **_NOTE:_** `\u003cEXTENSION_ID\u003e` is your Extension ID, which you can find on `About page\u003eID:` or after building and importing it from the browser extensions tab.\n\n\nConfigure the following:\n- Application type as `Web application`\n- Name as `YST OAuth`\n- Authorized JavaScript origins as `https://\u003cEXTENSION_ID\u003e.chromiumapp.org`\n- Authorized redirect URIs as `https://\u003cEXTENSION_ID\u003e.chromiumapp.org/provider_cb`\n\nClick `Create,` and a popup will appear with your OAuth client credentials. Note the `Client ID.`\n\n### Setting Google API Credentials\n\nNow we have the `API KEY` and `Client_ID`. Here we have two ways to set up these keys. Recommended and easy way is on the setting page.\n\n#### On Setting page\n\n![Google API Console Keys](https://github.com/biplobsd/yst/assets/43641536/f4acdf32-7ff9-4258-85af-ebf389d1e89e)\n\nClick on the settings tab and below you will find the `Google API Console Keys` section. Fill out your two keys carefully.\n\n#### On build step\n\n![.env.local file](https://github.com/biplobsd/yst/assets/43641536/34a95d7a-123e-47a0-b330-6d3f9fef91f4)\n\nNow, create a `.env.local` file in the root directory and set your client ID and API key.\n\n```env\n## Google API Credentials\nVITE_CLIENT_ID=\nVITE_API_KEY=\n```\n\nAgain, run `npm run build` and reload the extension from the browser extensions tab.\n\n## Related information\n\n- This project starts with using the [NekitCorp/chrome-extension-svelte-typescript-boilerplate](https://github.com/NekitCorp/chrome-extension-svelte-typescript-boilerplate) boilerplate project. So don't forget to check out their project.\n\n## Donation\n\n\u003ca href=\"https://www.buymeacoffee.com/biplobsd\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" \u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiplobsd%2Fyst","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbiplobsd%2Fyst","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiplobsd%2Fyst/lists"}