I Built a Multi-Platform Video Downloader API in 2 Days
If you've ever needed to programmatically download videos from social media — for content repurposing, analytics, or automation — you know the pain. Every platform has its own quirks, most existing APIs only support one platform, and the good ones are expensive.
So I built my own. Here's what I learned.
The Problem
I needed to extract video URLs from multiple platforms:
- YouTube Shorts (no login needed)
- TikTok / Douyin
- Instagram Reels
- Bilibili
What I found on the market:
- Single-platform APIs: great for one use case, useless if you need more
- Expensive all-in-one tools: $50-100/month for basic access
- Open-source tools like yt-dlp: powerful but not API-friendly
The Solution
A single API endpoint that handles 10+ platforms. Built with:
- FastAPI — async Python, auto-generated docs
- yt-dlp — battle-tested extraction engine
- Docker + Render — $0 hosting for the first 50k requests
# Core extraction — dead simple
def _extract(url: str) -> dict:
with yt_dlp.YoutubeDL({"quiet": True, "format": "best"}) as ydl:
info = ydl.extract_info(url, download=False)
return {
"title": info["title"],
"url": info["url"],
"thumbnail": info["thumbnail"],
# ...more metadata
}
API Usage
curl -X POST https://video-downloader-api-eyqj.onrender.com/extract \
-H "Content-Type: application/json" \
-d '{"url":"https://www.youtube.com/shorts/dQw4w9WgXcQ"}'
Returns:
{
"success": true,
"data": {
"title": "Rick Astley - Never Gonna Give You Up",
"url": "https://manifest.googlevideo.com/...",
"duration": 213,
"view_count": 1786552159
}
}
What Works (and What Doesn't)
| Platform | Status | Notes |
|---|---|---|
| YouTube | Great | Shorts + regular, no auth |
| Works | Needs cookies for some content | |
| TikTok | Tricky | Server IPs get blocked, exploring proxy rotation |
| Bilibili | Works | Some anti-bot measures |
| Douyin | Works | Requires browser cookies |
Lessons Learned
1. yt-dlp is a beast. It handles 1800+ sites. Wrapping it in FastAPI took 30 lines of code. The real work was error handling — each platform fails differently.
2. Geo-restrictions are the silent killer. TikTok blocked my Render server IP immediately. If you're building a public API, budget for proxy infrastructure from day one.
3. Cookie support is essential. Chinese platforms (Douyin, Xiaohongshu) require fresh browser cookies. I added a X-Cookie header that accepts Netscape-format cookies exported from the browser.
4. Free hosting is possible for MVPs. Render's free tier + Docker auto-deploy means I pay $0 while validating the idea.
What's Next
- Proxy rotation for TikTok support
- Webhook support (notify when video is ready)
- Direct S3 upload (store the extracted video)
Try It
The API is available on RapidAPI with a free tier (50 requests/month):
[https://rapidapi.com/ldspn115/api/multi-platform-video-downloader]
Source code on GitHub: [https://github.com/ldspn115-ctrl/video-downloader-api]
Built this in a weekend. Feedback and feature requests welcome in the comments!
Tags: #api #tutorial #webdev #showdev #python #opensource
Top comments (1)
This tutorial is a good reminder that learning APIs becomes much easier when you build something real instead of only reading documentation. I liked that it connects web development, Python, and API concepts into an actual workflow rather than treating them as separate topics. API projects are a great way to understand requests, responses, authentication, and how applications communicate.
One thing I’d add for beginners is to focus less on frameworks at first and more on understanding the fundamentals: HTTP methods, JSON, status codes, error handling, and data flow. Once those concepts click, moving between tools and frameworks becomes much easier. Community discussions around learning Python and API development also tend to recommend building small end-to-end projects instead of collecting tutorials.