| name | rapidapi-downloader |
| description | Download YouTube videos using RapidAPI services. Reliable cloud-based solution with multiple provider options. |
RapidAPI YouTube Downloader
This skill uses RapidAPI marketplace services to download YouTube videos. Multiple providers available with different pricing and features.
When to Use This Skill
- For production business systems
- When you need guaranteed uptime and SLA
- When self-hosting is not an option
- For high-volume downloads with predictable costs
Recommended RapidAPI Services
1. YouTube Video Download Info (Free Tier Available)
- API:
youtube-video-download-info.p.rapidapi.com
- Pricing: Free 100 req/month, then $0.002/request
- Features: Video info, multiple quality options
2. YT-API (Reliable)
- API:
yt-api.p.rapidapi.com
- Pricing: $0.001/request
- Features: Fast, good rate limits
3. YouTube Media Downloader
- API:
youtube-media-downloader.p.rapidapi.com
- Pricing: Freemium
- Features: Direct download links
Configuration
Set your RapidAPI key:
export RAPIDAPI_KEY="your-api-key-here"
Or place in config file:
echo "your-api-key" > ./config/rapidapi_key.txt
Instructions
Step 1: Setup
if [ -f "./config/rapidapi_key.txt" ]; then
RAPIDAPI_KEY=$(cat ./config/rapidapi_key.txt)
elif [ -z "$RAPIDAPI_KEY" ]; then
echo "❌ RAPIDAPI_KEY not set. Please configure your API key."
exit 1
fi
mkdir -p ./output/downloads ./temp
Step 2: Get Video Info (yt-api)
VIDEO_ID="[VIDEO_ID]"
curl -s -X GET \
"https://yt-api.p.rapidapi.com/dl?id=$VIDEO_ID" \
-H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: yt-api.p.rapidapi.com" \
> ./temp/video_info.json
python3 << 'EOF'
import json
with open('./temp/video_info.json') as f:
data = json.load(f)
print(f"Title: {data.get('title', 'N/A')}")
print(f"Duration: {data.get('lengthSeconds', 0)}s")
formats = data.get('formats', [])
for fmt in formats:
if fmt.get('qualityLabel') == '1080p':
print(f"Download URL: {fmt.get('url', 'N/A')[:100]}...")
break
EOF
Step 3: Download Video
DOWNLOAD_URL=$(python3 -c "
import json
with open('./temp/video_info.json') as f:
data = json.load(f)
formats = data.get('formats', [])
# Get highest quality with audio
for fmt in sorted(formats, key=lambda x: int(x.get('height', 0) or 0), reverse=True):
if fmt.get('hasAudio'):
print(fmt.get('url', ''))
break
")
if [ -n "$DOWNLOAD_URL" ]; then
curl -L -o "./output/downloads/${VIDEO_ID}.mp4" "$DOWNLOAD_URL"
echo "✅ Downloaded successfully"
else
echo "❌ No download URL found"
fi
Step 4: Audio Only
AUDIO_URL=$(python3 -c "
import json
with open('./temp/video_info.json') as f:
data = json.load(f)
formats = data.get('adaptiveFormats', [])
for fmt in formats:
if 'audio' in fmt.get('mimeType', ''):
print(fmt.get('url', ''))
break
")
curl -L -o "./output/downloads/${VIDEO_ID}.m4a" "$AUDIO_URL"
ffmpeg -i "./output/downloads/${VIDEO_ID}.m4a" \
-acodec libmp3lame -q:a 2 \
"./output/downloads/${VIDEO_ID}.mp3"
Alternative: YouTube Media Downloader API
VIDEO_URL="https://www.youtube.com/watch?v=$VIDEO_ID"
curl -s -X GET \
"https://youtube-media-downloader.p.rapidapi.com/v2/video/details?videoId=$VIDEO_ID" \
-H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: youtube-media-downloader.p.rapidapi.com" \
> ./temp/video_details.json
Cost Estimation
| Monthly Volume | yt-api Cost | Notes |
|---|
| 1,000 videos | ~$1 | Small projects |
| 10,000 videos | ~$10 | Medium business |
| 100,000 videos | ~$100 | Large scale |
Error Handling
STATUS=$(python3 -c "
import json
with open('./temp/video_info.json') as f:
data = json.load(f)
print(data.get('status', 'ok'))
")
case "$STATUS" in
"ok"|"OK")
echo "✅ Request successful"
;;
"fail"|"error")
echo "❌ API error - check video ID or API quota"
;;
*)
echo "⚠️ Unknown status: $STATUS"
;;
esac
Best Practices
- Cache responses - Don't re-fetch for same video
- Handle rate limits - Implement exponential backoff
- Monitor usage - Set up RapidAPI usage alerts
- Fallback strategy - Use multiple providers
- Validate URLs - Check video availability first
Security
- Store API key securely (env var or encrypted config)
- Don't log API keys
- Use HTTPS only
- Monitor for unauthorized usage