YouTube Transcript to Markdown — Obsidian, Notion & Blog Ready
Getting a YouTube transcript into Obsidian or Notion sounds simple until you try it. The Obsidian Web Clipper's transcript selector broke twice in early 2026 when YouTube updated its UI — the community published fixes, and then it broke again. The YTranscript plugin is more stable but outputs raw text with no frontmatter and rejects short youtu.be links. Most other solutions are browser extensions that stop working the moment YouTube redesigns a panel.
INDXR.AI exports YouTube transcripts as Markdown files from a server-side pipeline that doesn't depend on your browser, YouTube's UI, or any extension. Here's exactly what the export contains, what it looks like in your vault, and when it's the right choice.
What You Actually Get
Every Markdown export contains two things: a YAML frontmatter block at the top, and the transcript body below it.
Here's a real export from a YouTube video with auto-captions:
---
title: "Controlling Your Dopamine For Motivation, Focus & Satisfaction"
url: "https://www.youtube.com/watch?v=QmOF0crdyRU"
channel: "Huberman Lab"
published: "2021-07-05"
duration: 8191
language: "en"
transcript_source: "Auto-captions (YouTube)"
created: "2026-04-24"
type: youtube
tags: [youtube, transcript]
---
# Controlling Your Dopamine For Motivation, Focus & Satisfaction
Welcome to the Huberman Lab Podcast, where we discuss science
and science-based tools for everyday life...And here's a real export using AI Transcription instead of auto-captions:
---
title: "Controlling Your Dopamine For Motivation, Focus & Satisfaction"
url: "https://www.youtube.com/watch?v=QmOF0crdyRU"
duration: 8191
transcript_source: "AI Transcription (AssemblyAI)"
created: "2026-04-24"
type: youtube
tags: [youtube, transcript]
---Notice the difference: channel, published, and language are only available when extracting via YouTube captions — those fields come from YouTube's video metadata. When using AI Transcription on a video file or audio upload, that metadata isn't available, so those fields are omitted rather than set to null. What you see is what you get.
The transcript_source field tells you how the transcript was produced. duration is stored as a number in seconds — directly usable in Dataview calculations. created is the date you ran the extraction, not the video's publish date.
Two Export Variants
Markdown — Plain outputs the transcript as continuous paragraphs, grouped by natural pauses in speech (gaps longer than 5 seconds trigger a new paragraph). No timestamps, no headers — clean prose for pasting into blog editors, feeding to AI tools, or creating summaries.
Markdown — With Timestamps adds a clickable ## [HH:MM:SS] header at the start of each paragraph. Here's what that looks like:
## [00:00:00](https://youtu.be/QmOF0crdyRU?t=0)
Welcome to the Huberman Lab Podcast, where we discuss science
and science-based tools for everyday life...
## [00:04:23](https://youtu.be/QmOF0crdyRU?t=263)
Most people have heard of dopamine, and we hear all the time
now about dopamine hits, but actually there's no such thing...Each timestamp is a real link. In Obsidian, clicking [00:04:23](https://youtu.be/...) opens that exact moment in the video in your browser. This is not a feature any Obsidian plugin currently offers — it requires knowing the timestamp and constructing the ?t= URL at export time, which INDXR.AI does automatically.
The Obsidian Workflow
Step 1 — Extract. Paste the YouTube URL into INDXR.AI. For videos with auto-captions, extraction is free and takes a few seconds. For videos without captions, enable AI Transcription (1 credit per minute) before extracting.
Step 2 — Export. Click Export → Markdown. Choose "With Timestamps" for notes you'll review and navigate, or "Plain" for content you'll summarize or repurpose. The .md file downloads immediately.
Step 3 — Drop into your vault. Drag the file into a Clippings/Videos/ folder in your vault. Obsidian indexes the frontmatter automatically — no setup required.
Step 4 — Query with Dataview. All frontmatter fields are immediately available. Some useful queries:
List all video notes, most recent first:
TABLE title, channel, round(duration / 60) AS "Minutes", transcript_source
FROM "Clippings/Videos"
WHERE type = "youtube"
SORT created DESCFind all videos from a specific channel:
TABLE title, url, round(duration / 60) AS "Minutes"
FROM "Clippings/Videos"
WHERE channel = "Huberman Lab"
SORT created DESCVideos over 45 minutes 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 DESCDataview reads all YAML frontmatter automatically — no configuration needed. Source: blacksmithgu.github.io/obsidian-dataview.
The Notion Workflow
Notion doesn't automatically map YAML frontmatter to database properties. There are three ways to work with the export.
Import as a page. Settings → Import → Text & Markdown → upload the .md file. Notion creates a page with the transcript body formatted correctly. The YAML block appears as a code block at the top, which you can delete and manually fill in the database properties.
Copy-paste. For one-off videos, open the file in any text editor, select all, paste directly into a Notion page. Formatting renders cleanly.
Notion API. For automated pipelines, use Notion's API with the markdown parameter. A POST /v1/pages request can include both Markdown content and page properties in one call.
For a video database in Notion, the properties that map directly to INDXR.AI's export fields are: Title, URL, Channel, Published Date, Duration, and Tags.
For Blog Posts and Newsletters
The plain Markdown export is the cleanest starting point for content repurposing. Paragraphs are grouped by natural speech pauses, HTML entities are decoded, and there's no timestamp clutter.
A straightforward workflow: extract transcript → export as plain Markdown → paste into Claude or ChatGPT with a prompt like "Rewrite this transcript as a blog post, keeping the main arguments and removing filler." You get a rough draft in seconds.
Ghost, Substack, and WordPress all accept Markdown input natively. Ghost uses Markdown as its primary editor format. Substack renders pasted Markdown with formatting intact.
One honest note: auto-caption transcripts don't have punctuation or capitalization. The paragraphs are readable but the text isn't polished. If you're repurposing content for publication, AI Transcription produces text with proper sentence structure that's significantly easier to edit. For a 30-minute podcast, the cost is 30 credits — about €0.42 at Basic pricing.
When Markdown Is and Isn't the Right Format
| Use case | Recommended format |
|---|---|
| Obsidian vault with Dataview | Markdown with timestamps |
| Notion video database | Markdown (plain or timestamps) |
| Blog/newsletter repurposing | Markdown plain |
| AI summarization / ChatGPT input | Markdown plain or TXT |
| Video editing / subtitle sync | SRT or VTT |
| Data analysis / research | CSV |
| RAG pipeline / vector database | RAG JSON |
| Developer integration | JSON |
For the Obsidian-specific workflow with step-by-step instructions, see YouTube Transcript to Obsidian. For the RAG JSON export format, see YouTube Transcripts for RAG Pipelines. For credit packages, see the pricing page. For videos that don't have captions, see YouTube Transcript Not Available. Export a YouTube transcript as Markdown — free for captioned videos, no extension required.
Frequently Asked Questions
- Does this work for videos without auto-captions?
- Yes. Enable AI Transcription before extracting. INDXR.AI uses AssemblyAI Universal-3 Pro, which produces properly punctuated, capitalized text — significantly more readable than auto-captions. The trade-off is cost: 1 credit per minute. For a 60-minute video, that's 60 credits, roughly €0.84 at Basic pricing.
- What's the difference between plain and timestamps variants?
- Plain Markdown is continuous paragraphs — no time references, no headers between sections. Best for reading, summarizing, and AI input. The timestamps variant adds a ## [HH:MM:SS](youtube-link) header at the start of each paragraph. Best for Obsidian notes where you want to navigate the transcript and click back to the video.
- Why don't channel and language appear in AI Transcription exports?
- Those fields come from YouTube's video metadata, which is retrieved alongside captions during YouTube extraction. When transcribing an audio file or using AI Transcription without caption extraction, there's no YouTube metadata to pull from — so those fields are omitted rather than filled with placeholder values.
- Is the frontmatter compatible with Obsidian Properties?
- Yes. Obsidian's Properties panel reads standard YAML frontmatter. duration appears as a number property; created as a date; tags as a multi-select. All fields appear automatically when you open the note.
- Can I customize which frontmatter fields are exported?
- Not currently via the UI — INDXR.AI exports a standardized template. You can add fields manually after importing, or use Obsidian's Templater plugin to post-process notes.
- Why do Obsidian plugins keep breaking for YouTube transcripts?
- Plugins that work by reading YouTube's page HTML break whenever YouTube changes its frontend. The Obsidian Web Clipper's transcript selector broke twice in early 2026 (Obsidian Forum thread 111550). INDXR.AI retrieves transcripts server-side via YouTube's internal API endpoints, which are not affected by frontend changes.



