YouTube Transcript (Android client)
unlistedby ybl0901
Import YouTube captions into your vault as Markdown notes, with YAML metadata and optional timestamps.
YouTube Transcript (Android client)
Import YouTube captions into your Obsidian vault as Markdown notes.
Why this plugin exists
YouTube's InnerTube API validates client fingerprints. Only one combination is accepted for caption retrieval: the Android client together with a matching Android User-Agent. Every other combination — Android with a desktop Chrome User-Agent, iOS with any User-Agent — is answered with:
LOGIN_REQUIRED: Sign in to confirm you're not a bot
Browser extensions cannot set User-Agent, because it is a forbidden header
controlled by the browser. They have to patch requests through
declarativeNetRequest, which behaves differently across Chrome versions and
request origins.
Obsidian runs on Electron. requestUrl can send any User-Agent, so this plugin
talks to InnerTube the same way the Android app does — no workarounds, no
per-version hacks.
Usage
Copy a YouTube URL, then run one of the commands from the command palette
(Cmd/Ctrl + P):
| Command | Description |
|---|---|
| Fetch transcript from clipboard URL | Reads the URL from your clipboard |
| Fetch transcript from URL prompt | Opens a dialog to paste a URL |
Supported URL forms:
https://www.youtube.com/watch?v=VIDEO_IDhttps://youtu.be/VIDEO_IDhttps://www.youtube.com/shorts/VIDEO_ID- A bare 11-character video ID
The note is written to the folder configured in settings. Existing notes are only overwritten when they were created by this plugin — see Overwrite protection.
Settings
| Setting | Description |
|---|---|
| Note folder | Folder inside the vault, for example YouTube |
| Language priority | Comma-separated language codes, for example zh-Hant,zh-Hans,en. Manual captions are preferred over auto-generated ones |
| Filename template | Supports {{title}}, {{channel}}, {{id}}, {{lang}} |
| Tags | Comma-separated tags written to the frontmatter |
| Include frontmatter | Toggle YAML metadata |
| Include timestamps | Prefix each paragraph with [mm:ss] |
| Overwrite auto-generated notes | See below |
Output example
---
title: "But what is a neural network? | Deep learning chapter 1"
source: "YouTube"
url: "https://www.youtube.com/watch?v=aircAruvnKk"
video_id: "aircAruvnKk"
channel: "3Blue1Brown"
duration: "18:40"
language: "zh"
caption_track: "Chinese"
caption_type: "manual"
captured: "2026-10-19 18:10:36"
tags:
- youtube
- captions
---
# But what is a neural network? | Deep learning chapter 1
> Channel: 3Blue1Brown · [Original video](https://www.youtube.com/watch?v=aircAruvnKk)
## Transcript
...
Overwrite protection
Notes created by this plugin carry source: "YouTube" in the frontmatter.
When a note with the same name already exists:
- If it has that marker, it is overwritten (so re-fetching a video updates the note).
- Otherwise it is treated as handwritten, and the new transcript is saved as
<name>-<timestamp>.mdinstead. Your own notes are never overwritten.
Limitations
- The video must have a caption track. Videos without captions cannot be processed.
- YouTube applies rate limiting. Fetching several videos in quick succession may fail temporarily — wait a minute and retry.
- This plugin depends on YouTube's current InnerTube client validation. If YouTube changes it, the plugin may need an update.
- Captions are fetched over the network from YouTube; nothing is sent anywhere else.
License
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.