Download YouTube Videos Straight to S3, GCS or R2
Option 1: yt-dlp, then upload
The DIY route is two steps — download locally, then push to your bucket:
bash — Amazon S3yt-dlp -f "bv*+ba/b" -o "%(id)s.%(ext)s" -a urls.txt
aws s3 cp . s3://your-bucket/youtube/ --recursive --exclude "*" --include "*.mp4"
bash — Google Cloud Storage
yt-dlp -f "bv*+ba/b" -o "%(id)s.%(ext)s" -a urls.txt
gcloud storage cp *.mp4 gs://your-bucket/youtube/
This is fine for small jobs. At scale the problems stack up: every file lands on your server first (disk + egress), uploads fail and need their own retries, and you're back to managing proxies and rate limits on the download side. See the yt-dlp at scale breakdown.
Option 2: deliver straight to the bucket
A managed download API skips the local hop entirely — you name a destination and the finished files appear there. No download-through-your-server, no separate upload step:
cURLcurl -X POST "https://api.videodl.app/api/start-download" \
-H "x-api-key: vdl_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"destination": "s3://your-bucket/youtube/"
}'
Swap the destination for gs:// (GCS) or an R2 bucket and the flow is identical. Full Python and Node examples are in the download API guide.
Which cloud should you pick?
| Destination | Best when | Egress |
|---|---|---|
| Amazon S3 | You're already on AWS | Charged |
| Google Cloud Storage | You're on GCP / using Vertex | Charged |
| Cloudflare R2 | You read the data back often | None |
If you'll repeatedly pull the videos back out (training runs, re-processing), R2's zero egress can save more than the storage costs. If your pipeline already lives in one cloud, keep the data next to your compute.
Keep files aligned
Whichever route you use, name files by video ID (%(id)s) so the video, its transcript, and metadata stay tied to the same key. This matters most for AI datasets, where drift between modalities quietly corrupts training pairs.
FAQ
Can I download YouTube videos directly to S3?
Yes — either yt-dlp then aws s3 cp, or a managed API that writes straight to your S3 bucket with no local hop.
Why deliver straight to the cloud?
It avoids moving terabytes through your own server, keeps files organized by ID, and removes disk-space and upload-failure problems at scale.
Which clouds are supported?
S3, GCS, and R2 are the common targets, plus OneDrive and Google Drive. R2 is popular for its zero egress fees.
Straight to your bucket
POST your URLs with an S3, GCS or R2 destination and the files land there. First 100 free.
Explore the download API →