Use when fetching, searching, or analyzing transcripts from Lenny's Podcast, Dwarkesh Podcast, Cheeky Pint, 20VC, or A16z Podcast. Tier 2 (RSS+Groq Whisper) is the recommended approach -- fast, free, and most reliable. Also use when asked to "get transcript", "find episode", "summarize podcast", or "search podcast content". Do not use for general web scraping or non-podcast audio transcription.
npx skills add https://github.com/Varnan-Tech/opendirectory --skill podcast-transcript-fetcher
Fetch transcripts from 5 supported podcasts. Tier 2 (RSS+Groq Whisper) is the recommended approach -- fast, free, and the most reliable across all podcasts. Tier 1 free sources are best-effort (limited availability). Tier 3 Taddy API is the premium/commercial option.
# Get latest episode transcript (auto-detects best method)
python scripts/get_transcript.py "Lenny's Podcast" --latest
# Search by episode title or number
python scripts/get_transcript.py 20vc --episode "Marc Andreessen"
python scripts/get_transcript.py dwarkesh --episode 15
# Force specific method
python scripts/get_transcript.py "cheeky pint" --latest --method whisper
python scripts/get_transcript.py a16z --latest --method taddy
# Save to file
python scripts/get_transcript.py lennys --latest --output transcript.md
# List all supported podcasts
python scripts/get_transcript.py --list-podcasts
| Podcast | Tier 1 (best-effort) | Tier 2 RSS+Whisper [RECOMMENDED] | Tier 3 Taddy (premium) |
|---------|---------------------|-----------------------------------|------------------------|
| Lenny's Podcast | GitHub archive (269 transcripts) | ✅ Substack RSS | ✅ Covered |
| Dwarkesh Podcast | Website scrape + Substack PDF | ✅ Substack RSS | ✅ Covered |
| Cheeky Pint | (none) | ✅ Transistor.fm RSS | ✅ Covered |
| 20VC | Substack PDF | ✅ Libsyn RSS | ✅ Covered |
| A16z Podcast | Website scrape | ✅ Simplecast RSS | ✅ Covered |
# Core (always required)
pip install requests
# Cloud transcription (recommended — fast, free tier)
pip install groq
export GROQ_API_KEY="your-key" # Get at https://console.groq.com
# Local transcription (free, needs ~5GB RAM)
pip install faster-whisper
# Audio compression (for Groq's 25 MB limit — Windows: winget/scoop)
# winget install ffmpeg or scoop install ffmpeg
# Taddy API (commercial, optional)
export TADDY_API_KEY="your-key" # Get at https://taddy.org
The script auto-selects the best method. Tier 2 is the default recommendation:
Tier 1 → Tier 2 (RECOMMENDED) → Tier 3
(best-effort) (Whisper) (Taddy API premium)
Tier 1: Free direct sources (best-effort, limited availability)
ChatPRD/lennys-podcast-transcripts and searches by titleTier 2: RSS + Whisper transcription [RECOMMENDED]
Tier 3: Taddy API (commercial/premium)
TADDY_API_KEY ($75/mo+)Once you have a transcript, pipe it to the agent for analysis:
I have this transcript from [podcast]. Can you:
1. Summarize the key arguments
2. Extract 3 actionable insights
3. Identify any controversial claims
4. Compare with [other podcast] on the same topic
| Scenario | Command |
|----------|---------|
| Latest episode | get_transcript.py "Lenny's Podcast" --latest |
| Specific episode by title | get_transcript.py 20vc --episode "Sam Altman" |
| Episode by number | get_transcript.py dwarkesh --episode 42 |
| Force Whisper transcription (Tier 2, recommended) | get_transcript.py a16z --latest --method whisper |
| Force Taddy API (premium) | get_transcript.py lennys --latest --method taddy |
| Save to Markdown | get_transcript.py cheeky-pint --latest --output episode.md |
| JSON output | get_transcript.py dwarkesh --latest --json |
| Scenario | Command |
|----------|---------|
| Search all podcasts by keyword | get_transcript.py --search "Marc Andreessen" |
| Search by guest name | get_transcript.py --guest "Sam Altman" |
| Search within one podcast | get_transcript.py "Lenny's Podcast" --search "vibe coding" |
| Batch-transcribe last N episodes | get_transcript.py "Dwarkesh Podcast" --last 5 |
| Search + transcribe top matches | get_transcript.py --search "AI safety" --transcribe |
| Pipeline with custom count | get_transcript.py --search "scaling laws" --transcribe --transcribe-count 5 |
| Filtered search pipeline | get_transcript.py "A16z Podcast" --search "crypto" --transcribe |
Batch transcription saves to output/ with per-podcast subdirectories:
output/dwarkesh-podcast/Dwarkesh Podcast_2024-01-15_agi-is-still-30-years-away.md
output/20vc/20 Minutes VC (20VC)_2024-03-10_funding-round-analysis.md
Each file includes a YAML frontmatter header:
---
podcast: Dwarkesh Podcast
episode: AGI is still 30 years away
date: 2024-01-15
url: https://...
source: whisper
---
The registry at scripts/podcasts.json maps each podcast to its RSS feeds, transcript sources, and API endpoints. To add new podcasts:
{
"id": "new-podcast",
"name": "New Podcast",
"rss": "https://example.com/feed.xml",
"transcript_sources": {
"primary": {"type": "website_scrape", "url": "https://example.com"}
}
}
| Problem | Solution |
|---------|----------|
| "No transcript found" | Tier 2 (RSS+Whisper) is the recommended approach. If auto mode fails, try --method whisper to force it. |
| RSS fetch fails | RSS feeds may change; check scripts/podcasts.json for current URLs |
| Audio download slow | Large MP3s can take minutes on slow connections |
| Groq rate limited | Wait or switch to local faster-whisper |
| Taddy not returning transcripts | Some episodes lack transcripts; try --method whisper |
| Podcast not in registry | Add it to scripts/podcasts.json |
| Unicode error on Windows | Fixed: script auto-reconfigures stdout to UTF-8; saved files use UTF-8 encoding |
| Audio > 25 MB for Groq | Install ffmpeg: winget install ffmpeg (Windows) or brew install ffmpeg (macOS) |
| Podcast | Old Feed (broken) | Current Feed |
|---------|------------------|--------------|
| Cheeky Pint | feeds.transistor.fm/the-cheeky-pint (404) | feeds.transistor.fm/cheeky-pint-with-john-collison |
| 20VC | feeds.simplecast.com/3GxrMqOd (404) | feeds.libsyn.com/61840/rss |
| A16z | feeds.simplecast.com/0cJfpoz2 (404) | feeds.simplecast.com/JGE3yC0V |
GROQ_API_KEY in your env or .env fileFetches complete Airbnb listing details for a given numeric listing ID via the internal GraphQL API, returning title, room type, description, amenities, photos, coordinates, city, house rules, highlights, ratings, review count, bedroom configuration, and property overview. Use when user mentions Airbnb listing details, Airbnb property info, Airbnb room details, get Airbnb listing data, Airbnb amenities list, Airbnb house rules, Airbnb property description, Airbnb detail page scraper, Airbnb rooms detail, Airbnb property page data, Airbnb listing info, fetch Airbnb room details, pull Airbnb listing.
Searches Douyin (douyin.com) for videos by keyword and returns structured video data including author info, stats, cover, description, hashtags, and download URL. Supports date range filtering and sorting by relevance, likes, or recency. Use when user mentions Douyin search, scrape Douyin videos, collect TikTok China videos, extract douyin video data, grab douyin results, fetch douyin keyword videos, douyin video list, douyin content mining, search douyin by keyword, douyin likes filter, douyin date filter, douyin video download links, douyin creator info, douyin hashtag extraction, douyin video scraper, douyin KOL research, douyin content analysis.
Fetch full product detail from a Taobao or Tmall product page by itemId, returning title, price, shop info, images, SKU variants, and product attributes. Use when user asks to get product details from Taobao, scrape a Taobao item page, extract product info by item ID, fetch Tmall product data, 抓取淘宝商品详情, 获取淘宝商品信息, 淘宝商品页面采集, 天猫商品详情, 按商品ID获取信息. Also applies to building product databases, price tracking by itemId, and product comparison research.
Fetch customer reviews for a Taobao or Tmall product by itemId, returning reviewer name, date, purchased variant, review text, and photo URLs. Use when user asks to get product reviews from Taobao, scrape Taobao customer feedback, extract buyer reviews by item ID, collect Tmall ratings and comments, 采集淘宝商品评价, 抓取淘宝买家评论, 获取淘宝商品评论, 天猫商品评价抓取, 按商品ID获取评价. Also applies to sentiment analysis of product reviews, building review datasets, and monitoring product rating changes.
TikTok hashtag video scraper: input a hashtag name → output paginated video list with full metadata (author profile, engagement stats, music, video meta, hashtag list). Use when user mentions TikTok hashtag scraping, TikTok tag videos, scrape TikTok by hashtag, extract TikTok hashtag data, TikTok challenge videos, get videos from a TikTok tag, bulk collect TikTok hashtag posts, TikTok video collection by tag, TikTok topic videos, collect TikTok tag data, batch fetch TikTok videos by hashtag, tiktok tag scraper, tiktok challenge scraper. Also applies to competitive research on TikTok trending topics, influencer discovery by hashtag, content monitoring for specific TikTok tags, or any task requiring video lists from a specific TikTok hashtag or challenge.
TikTok user profile video scraper: input a TikTok username → output the user's profile info plus paginated video list with full metadata (engagement stats, music, video meta). Use when user mentions TikTok profile scraping, scrape TikTok user videos, get TikTok creator videos, extract TikTok profile data, TikTok user posts, TikTok account video collection, collect TikTok profile page videos, TikTok creator video list, TikTok creator data, TikTok profile scraper, tiktok user scraper, tiktok creator scraper. Also applies to influencer research, competitor analysis, content archiving for a specific TikTok creator, or extracting all posts from a TikTok account.
TikTok keyword search video scraper: input search keyword → output paginated video list with full metadata (author, engagement stats, music, video meta). Use when user mentions TikTok search scraping, search TikTok by keyword, TikTok search results, extract TikTok search data, scrape TikTok videos by keyword, TikTok keyword videos, TikTok keyword search, TikTok search results collection, find TikTok videos by topic, tiktok search scraper, tiktok keyword scraper. Also applies to market research on TikTok content for specific topics, competitor content monitoring, or discovering videos and creators around a keyword.
Search Xiaohongshu (RedNote / xhs) notes by keyword and return a paginated list with title, author, engagement stats (likes, collects, comments), cover image URL, and xsecToken for detail lookup. Use when user mentions find notes on xiaohongshu, search rednote, search xhs, scrape xiaohongshu search, xiaohongshu keyword search, rednote post search, xhs search results, monitor xiaohongshu topics, KOL content discovery via xiaohongshu, xiaohongshu note list, rednote scrape, xhs data collection, collect xiaohongshu posts, xiaohongshu topic search, xiaohongshu content monitoring, rednote post list, xhs keyword scrape.
Take varnan-tech/podcast-transcript-fetcher from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, brew.
Without those the skill loads but fails at the first command.