Apple Podcast Downloader
A comprehensive skill for searching, browsing, and downloading podcast episodes from Apple Podcasts using the iTunes Search API.
Core Capabilities
- •Search Podcasts - Find podcasts by keyword, author, or topic
- •Browse Episodes - List episodes from a specific podcast
- •Download Audio - Download podcast episodes as MP3 files
- •Get Metadata - Retrieve detailed information about podcasts and episodes
Quick Start
Search for Podcasts
When user asks to search for podcasts:
- •Use the helper script to search:
python3 .claude/skills/podcast-downloader/scripts/itunes_api.py search "keyword" [limit]
- •Display results in a clear table format showing:
- •Podcast name
- •Author/Publisher
- •Total episodes
- •Genres
- •Collection ID (for downloading episodes)
List Episodes
When user wants to see episodes from a podcast:
- •Get the collection ID from search results
- •Fetch episodes:
python3 .claude/skills/podcast-downloader/scripts/itunes_api.py episodes <collection_id> [limit]
- •Show episode list with:
- •Episode title
- •Release date
- •Duration
- •Short description
- •Episode index number (for downloading)
Download Episodes
When user wants to download podcast audio:
- •Ensure download directory exists:
mkdir -p downloads/podcasts
- •Download using the helper script:
python3 .claude/skills/podcast-downloader/scripts/itunes_api.py download <collection_id> <episode_index> [output_path]
- •Confirm download completion with file size and location
Workflow Examples
Example 1: Search and Download Latest Episode
User Request: "Download the latest episode of The Daily podcast"
Steps:
- •Search for "The Daily"
- •Get the collection ID from results
- •Fetch episodes (limit 1)
- •Download the first episode
- •Confirm completion
Example 2: Browse and Select
User Request: "Show me the latest 10 episodes of Python Bytes and let me choose which to download"
Steps:
- •Search for "Python Bytes"
- •Get collection ID
- •Fetch 10 latest episodes
- •Display numbered list
- •Wait for user selection
- •Download selected episode(s)
Example 3: Batch Download
User Request: "Download the 5 latest episodes from All-In Podcast"
Steps:
- •Search for "All-In Podcast"
- •Get collection ID
- •Fetch 5 latest episodes
- •Download each episode sequentially
- •Report progress and completion
Best Practices
User Experience
- •Always confirm before downloading - Show episode details and ask for confirmation
- •Display progress - Show download progress and estimated time
- •Handle errors gracefully - Provide clear error messages and suggestions
- •Organize downloads - Create organized directory structure (e.g.,
downloads/podcasts/podcast-name/)
Error Handling
Common errors and solutions:
- •No results found: Suggest alternative search terms
- •Invalid collection ID: Verify the ID or re-search
- •Download failed: Check network connection, retry with error details
- •File exists: Ask user whether to overwrite or skip
Performance
- •Limit search results: Default to 10 results, max 50
- •Batch downloads: Use sequential downloads to avoid overwhelming the API
- •Cache metadata: Reuse search results within the same conversation
Command Reference
Search Command
python3 scripts/itunes_api.py search <keyword> [limit]
Parameters:
- •
keyword: Search term (required) - •
limit: Number of results (optional, default: 10)
Output: JSON array of podcast objects
Episodes Command
python3 scripts/itunes_api.py episodes <collection_id> [limit]
Parameters:
- •
collection_id: Podcast ID from search results (required) - •
limit: Number of episodes (optional, default: 10)
Output: JSON array of episode objects
Download Command
python3 scripts/itunes_api.py download <collection_id> <episode_index> [output_path]
Parameters:
- •
collection_id: Podcast ID (required) - •
episode_index: Episode number from list (0-based) (required) - •
output_path: Save location (optional, default: downloads/podcasts/)
Output: Downloaded MP3 file path
Data Structures
Podcast Object
{
"collectionId": 1200361736,
"collectionName": "The Daily",
"artistName": "The New York Times",
"trackCount": 2464,
"feedUrl": "https://feeds.simplecast.com/...",
"genres": ["Daily News", "Podcasts", "News"]
}
Episode Object
{
"trackId": 1000742770142,
"trackName": "Episode Title",
"releaseDate": "2025-12-26T10:45:00Z",
"trackTimeMillis": 1247000,
"episodeUrl": "https://...",
"description": "Full description...",
"shortDescription": "Brief description..."
}
Advanced Features
RSS Feed Access
Podcasts include RSS feed URLs that can be used for:
- •Getting ALL episodes (not limited by API)
- •Subscribing in podcast apps
- •Accessing additional metadata
Access via feedUrl field in search results.
Metadata Extraction
Extract rich metadata including:
- •Artwork (multiple resolutions: 30px, 60px, 100px, 600px)
- •Genres and categories
- •Explicit content ratings
- •Publisher information
- •Episode descriptions
Filtering and Sorting
When displaying results, consider:
- •Sorting by release date (newest first)
- •Filtering by duration
- •Grouping by genre
- •Showing only recent episodes (e.g., last 30 days)
Troubleshooting
Common Issues
Issue: "curl: command not found" Solution: Install curl or use Python's requests library
Issue: "Invalid JSON response" Solution: Check network connection and API availability
Issue: "Permission denied" when saving files Solution: Check directory permissions or use different output path
Issue: "File too large" Solution: Check available disk space, typical episodes are 20-100MB
Additional Resources
- •For detailed API documentation, see reference.md
- •For more usage examples, see examples.md
- •Helper script source:
scripts/itunes_api.py
Notes
- •This skill uses the free Apple iTunes Search API (no authentication required)
- •Audio files are downloaded directly from podcast CDNs
- •Supports all podcasts available on Apple Podcasts
- •Download speeds depend on network connection and CDN performance