Extract Videos from YouTube Channel
Why? Manually tracking YouTube videos is tedious and error-prone. This skill automates extracting video metadata (titles, durations, URLs) into a CSV for systematic transcript downloading and analysis.
Quick Start
# Recurring channel (adds to channels.yaml for future syncs) ytscriber extract https://www.youtube.com/@ChannelName/videos \ --count 50 \ --folder <channel-name> \ --register-channel # One-time extraction (conferences, playlists) ytscriber extract <youtube_url> --count 100 --folder <name>
Workflow
1. Determine Extraction Type
| Scenario | Use --register-channel? | Typical Count |
|---|---|---|
| New channel for ongoing tracking | Yes | 50-200 initial, then 20-50 for syncs |
| Conference talks (one-time) | No | 50-500 |
| Specific playlist/topic | No | As needed |
| Testing/exploration | No | 5-10 |
[!TIP] Use
--register-channelonly for channels you want to sync regularly. It adds the channel tochannels.yamlfor thesync-all-channelsskill.
2. Run Extraction Command
ytscriber extract <channel_url> \ --count <N> \ --folder <channel-name> \ [--register-channel]
Parameters:
| Option | Description | Default | When to Use |
|---|---|---|---|
--count, -n | Number of latest videos | 10 | Always specify explicitly |
--folder | Folder name for this channel | Required | Always use for tracking |
--register-channel | Add to channels.yaml | False | Recurring channels only |
--verbose, -v | Enable verbose output | False | Debugging |
[!CAUTION] The
--countin the command sets the INITIAL extraction count. Thecountinchannels.yaml(set by--register-channel) controls FUTURE sync counts. These are independent values.
3. Verify Extraction
# Check CSV was created with expected columns head -3 ~/Documents/YTScriber/<channel-name>/videos.csv # Count extracted videos wc -l ~/Documents/YTScriber/<channel-name>/videos.csv
Expected CSV columns:
- •
url- Full YouTube video URL - •
title- Video title - •
duration_minutes- Video length - •
view_count- Number of views - •
description- Video description (truncated to 500 chars) - •
published_date- Video publish date - •
transcript_downloaded- Tracking field (initially empty) - •
summary_done- Tracking field (initially empty)
Examples
Adding a New Channel for Regular Syncing
ytscriber extract https://www.youtube.com/@veritasium/videos \ --count 100 \ --folder veritasium \ --register-channel # Result: 100 videos extracted, channel added to channels.yaml with count: 100
One-Time Conference Extraction
# Extract AWS re:Invent talks (won't be synced later) ytscriber extract https://www.youtube.com/@AWSEventsChannel/videos \ --count 200 \ --folder aws-reinvent-2025 # No --register-channel = not added to channels.yaml
Re-running on Existing CSV (Incremental Update)
# Running again only adds NEW videos (duplicates auto-skipped) ytscriber extract https://www.youtube.com/@veritasium/videos \ --count 20 \ --folder veritasium # Safe to run multiple times - existing videos preserved
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| "No videos found" | Wrong URL format | Use https://www.youtube.com/@ChannelName/videos (include /videos) |
| CSV not created | Folder doesn't exist | The CLI creates the folder automatically |
| Duplicate videos appearing | Running with different URL variants | Always use canonical @handle/videos format |
Channel not in channels.yaml | Forgot --register-channel | Re-run with flag, or manually add to YAML |
Wrong video count in channels.yaml | Flag uses command's --count value | Edit channels.yaml manually to adjust future sync count |
Common Mistakes
- •
Forgetting
/videosin URL- •Wrong:
https://www.youtube.com/@veritasium - •Right:
https://www.youtube.com/@veritasium/videos
- •Wrong:
- •
Using
--register-channelfor one-time extractions- •This pollutes
channels.yamlwith channels you won't sync - •Only use for channels you want in the regular sync rotation
- •This pollutes
- •
Expecting transcripts to download
- •This skill ONLY extracts video metadata to CSV
- •Use
download-transcriptsskill to actually fetch transcripts
- •
Confusing command
--countwithchannels.yamlcount- •Command
--count: How many videos to extract NOW - •
channels.yamlcount: How many videos for FUTURE syncs - •Initial extraction might be 200, but sync count might be 30
- •Command
Quality Checklist
Before considering extraction complete:
- • CSV exists with expected video count
- • CSV has all required columns (url, title, duration_minutes, etc.)
- • If recurring channel: entry exists in
channels.yaml - • If recurring channel:
channels.yamlcount is set appropriately for future syncs
Next Steps
After extracting videos:
- •Download transcripts: Use the
download-transcriptsskill - •Sync channels later: Use
sync-all-channelsfor registered channels - •Add summaries: Use
summarize-transcriptsafter downloading