YouTube Transcript to Obsidian — Works When Plugins Break
Every Obsidian user who has built a YouTube transcript workflow has hit the same wall at some point: the plugin stopped working. The Obsidian Web Clipper's transcript selector broke twice in early 2026 when YouTube updated its interface. The YTranscript plugin is more stable but rejects short youtu.be links and URLs with tracking parameters, outputs raw text with no frontmatter, and can't handle videos without captions at all.
The underlying problem is structural: every plugin-based approach depends on reading YouTube's page in your browser, and YouTube changes that page without warning. INDXR.AI extracts transcripts server-side and exports them as .md files with YAML frontmatter ready for your vault. The workflow has one extra step compared to a browser extension — paste the URL, download the file, drop it in your vault — but it doesn't break.
What the Note Looks Like
Here's a real export from Harvard University's Justice lecture series — a video with auto-captions:
---
title: "Justice: What's the Right Thing to Do? — Episode 1"
url: "https://www.youtube.com/watch?v=kBdfcR-8hEY"
channel: "Harvard University"
published: "2009-09-04"
duration: 3421
language: "en"
transcript_source: "Auto-captions (YouTube)"
created: "2026-04-24"
type: youtube
tags: [youtube, transcript]
---
# Justice: What's the Right Thing to Do? — Episode 1
## [00:00:00](https://youtu.be/kBdfcR-8hEY?t=0)
Suppose the brakes on your trolley fail and the trolley is
hurtling down the track toward five workers...
## [00:02:14](https://youtu.be/kBdfcR-8hEY?t=134)
This is the question we'll be examining throughout this course.
What's the right thing to do?Each ## [HH:MM:SS] header is a real clickable link. In Obsidian, clicking it opens that exact moment in the video in your browser. The YAML frontmatter appears in Obsidian's Properties panel automatically — no configuration needed.
One important thing to know: channel, published, and language are only included when extracting via YouTube captions, because those fields come from YouTube's video metadata. If you use AI Transcription on a video without captions, or transcribe an audio file, those fields won't appear. The transcript_source field tells you which method was used.
Dataview Queries That Work Immediately
All frontmatter fields are automatically indexed by Dataview — drop the file in your vault and every field is queryable without any setup.
List all video notes, most recent first:
TABLE title, channel, round(duration / 60) AS "Minutes"
FROM "Clippings/Videos"
WHERE type = "youtube"
SORT created DESCAll lectures from a specific channel, in order:
TABLE title, url, round(duration / 60) AS "Minutes"
FROM "Clippings/Videos"
WHERE channel = "Harvard University"
SORT created ASCLong videos not yet processed:
TABLE title, channel, round(duration / 60) AS "Minutes"
FROM "Clippings/Videos"
WHERE type = "youtube" AND duration > 2700 AND !contains(tags, "processed")
SORT created DESCThe duration field is stored in seconds as a number, so round(duration / 60) gives you minutes. The url field is the full YouTube URL — link it in Obsidian and it opens in your browser.
The Workflow
Step 1 — Extract. Paste the YouTube URL into INDXR.AI. For videos with auto-captions, extraction is free. For videos without captions, enable AI Transcription (1 credit per minute) — the resulting transcript has proper punctuation, which makes notes significantly more readable.
Step 2 — Export. Click Export → Markdown → With Timestamps. The .md file downloads immediately.
Step 3 — Move to your vault. Drag the file into Clippings/Videos/ or wherever you keep reference material. Obsidian indexes the frontmatter immediately.
Step 4 — Navigate. Open the note. Click any ## [HH:MM:SS] timestamp to jump to that moment in the video. Use Dataview to query across all your video notes.
Optional: before exporting, use INDXR.AI's AI Summary (3 credits) to generate a summary and key points. Export the summary and the full transcript as separate files, or paste the summary at the top of the note as your own writing.
Why Plugins Keep Breaking
The failure pattern is the same across all browser-based tools.
DOM-based tools fail when YouTube redesigns its UI. The Obsidian Web Clipper uses CSS selectors to target the transcript panel — selectors like .segment-text inside specific container elements. YouTube updated how its transcript panel renders in February 2026, breaking every existing template. The Obsidian community published fixes, then YouTube changed the structure again a few weeks later (Obsidian Forum thread 111550). This is not a one-time event. YouTube has no obligation to maintain a stable frontend for third-party scrapers.
API-based tools get blocked in cloud environments. The youtube-transcript-api Python library — the backend for several extraction tools — is actively blocked when called from cloud server IP ranges (AWS, GCP, Railway, Vercel). YouTube rate-limits these requests and returns authentication errors. The library's PyPI README includes a dedicated section on working around IP bans.
INDXR.AI uses yt-dlp through residential proxy infrastructure. yt-dlp communicates with YouTube's internal API endpoints rather than scraping visible HTML, and residential proxies avoid IP-range blocking. This is why it continues to work when other tools don't.
For Courses and Playlists
INDXR.AI processes entire playlists as a single job. A full course — 19 lectures, 13 hours — downloads as a ZIP of individual .md files, each with its own frontmatter. Drop the ZIP into your vault and every lecture is a structured, queryable note.
For a course like Harvard's Justice series, the Dataview query to list all lectures in order writes itself:
TABLE title, url, round(duration / 60) AS "Minutes"
FROM "Clippings/Videos"
WHERE channel = "Harvard University"
SORT created ASCFor more detail on the Markdown export format and YAML frontmatter schema, see YouTube Transcript to Markdown. For credit costs and package options, see the pricing page. Export a YouTube transcript for Obsidian — free for captioned videos, Markdown with YAML frontmatter and clickable timestamps included.
Frequently Asked Questions
- Does the YAML frontmatter work with Obsidian Properties?
- Yes. Obsidian's Properties panel reads standard YAML frontmatter. duration appears as a number; created as a date; tags as a multi-select; url as a text field you can click. All fields appear automatically when you open the note.
- Why don't channel and language appear in some exports?
- Those fields come from YouTube's video metadata, available during caption extraction. AI Transcription and audio uploads don't have that metadata, so the fields are omitted. The transcript_source field tells you which method was used.
- Can I customize the frontmatter?
- Not via the export UI — the template is standardized. You can add fields manually after importing, or use Obsidian's Templater plugin to post-process notes with custom properties.
- Does this work for videos without captions?
- Yes. Enable AI Transcription before extracting. AssemblyAI Universal-3 Pro produces properly punctuated, capitalized text — significantly more readable than auto-captions in your notes. Cost: 1 credit per minute.
- What folder structure works best?
- Clippings/Videos/ for all video transcripts is a simple starting point that scales. Add subfolders by channel or topic as you accumulate more: Clippings/Videos/Huberman/, Clippings/Videos/Research/. Dataview queries across all subfolders with FROM "Clippings/Videos".
- Is this faster than the Web Clipper when it works?
- The Web Clipper is one click when it works. INDXR.AI requires pasting a URL, waiting a few seconds for extraction, clicking Export, and dragging a file into your vault — four steps instead of one. The trade-off is reliability. If you've spent time debugging broken templates already, the extra step becomes acceptable quickly.



