An r/Slack user needed YouTube data for a summary bot. The official API has quotas. yt-dlp gets blocked from cloud IPs. Scavio's YouTube endpoints return metadata + transcripts without downloading video bytes.
Prerequisites
- Scavio API key
- Python 3.8+
Walkthrough
Step 1: Search for YouTube videos
Find videos by keyword.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def search_youtube(query):
return requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'youtube', 'query': query}).json()Step 2: Get video metadata
Title, channel, duration, views, tags — no video download.
def get_metadata(video_url):
return requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'youtube', 'query': video_url, 'type': 'metadata'}).json()Step 3: Extract transcript
Get the full transcript text without processing video.
def get_transcript(video_url):
return requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'youtube', 'query': video_url, 'type': 'transcript'}).json()Step 4: Handle missing transcripts
Fall back to metadata when transcripts are unavailable.
def get_best_data(video_url):
transcript = get_transcript(video_url)
if transcript.get('transcript'):
return {'type': 'transcript', 'data': transcript}
metadata = get_metadata(video_url)
return {'type': 'metadata', 'data': metadata}Python Example
# No video bytes downloaded. No quota limits.
# Metadata: title, channel, duration, views, tags, description
# Transcript: full text with timestamps
# Cost: $0.005 per callJavaScript Example
const meta = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'youtube', query: videoUrl, type: 'metadata'})
});Expected Output
YouTube metadata + transcripts via API. No video downloads, no quota limits, no IP blocking. Fallback to metadata when transcripts unavailable.