YouTube Video Downloader - MP4 & MP3
Pricing
from $20.00 / 1,000 minute at 720ps
YouTube Video Downloader - MP4 & MP3
Rising starDownload YouTube videos and Shorts directly to your device in MP4 or MP3 format. Supports batch downloads, quality selection from 360p to 1080p, and audio-only extraction. Powered by yt-dlp for reliable downloads. Pay per minute — only charged on successful downloads.
Pricing
from $20.00 / 1,000 minute at 720ps
Rating
4.2
(7)
Developer
Marielise
Maintained by CommunityActor stats
4
Bookmarked
494
Total users
87
Monthly active users
6.2 hours
Issues response
7 days ago
Last modified
Categories
Share
YouTube Video Downloader
Download YouTube videos and Shorts directly to your device in seconds. No browser extensions, no sketchy websites, no limits on quantity. Just paste a URL and get a direct download link that works on any phone, laptop, or tablet. Choose MP4 video or MP3 audio, pick your quality from 360p to 1080p, and batch download as many videos as you need in a single run.
Perfect for: Content creators, video researchers, educators, social media managers, podcast producers, journalists archiving source material, and anyone who needs reliable offline access to YouTube content.
Features
| Feature | Description |
|---|---|
| MP4 Video Download | Download full videos with audio in MP4 format, ready to play anywhere |
| MP3 Audio Extraction | Extract audio-only tracks as high-quality MP3 files |
| Quality Selection | Choose from 360p, 480p, 720p HD, or 1080p Full HD |
| YouTube Shorts | Full support for downloading Shorts alongside regular videos |
| Batch Downloads | Download multiple videos in a single run |
| Direct Download Links | Each file gets a public URL you can open on any device to save the file |
| Video Metadata | Get title, duration, uploader, view count, and file size for every video |
| Multiple URL Formats | Supports youtube.com/watch, youtube.com/shorts, and youtu.be short links |
| Reliable Engine | Powered by yt-dlp with ffmpeg for consistent, high-quality downloads |
How to Use
Step 1: Add YouTube URLs
Paste one or more YouTube video or Shorts URLs. You can use any format:
https://www.youtube.com/watch?v=dQw4w9WgXcQhttps://youtube.com/shorts/8wst-04IuWIhttps://youtu.be/dQw4w9WgXcQ
Step 2: Choose Quality and Format
Select your preferred video quality (360p to 1080p) and output format (MP4 video or MP3 audio).
For YouTube Shorts, 720p is the most reliable choice on the standard path. 1080p Shorts sometimes need the paid residential proxy fallback to succeed. See Pricing for details on the fallback surcharge.
Step 3: Run and Download
The Actor downloads each video and provides:
- Direct download links in the dataset and key-value store
- Video metadata including title, duration, uploader, and file size
- OUTPUT summary with success/fail counts and all download links
Large files can be stored in Cloudflare R2 instead of Apify key-value store when configured, while still appearing as a direct downloadUrl in the dataset.
Click any download URL to save the file directly to your device.
Pricing
This Actor uses Pay Per Event pricing. You are charged per minute of video downloaded, with the rate depending on quality. You only pay for successful downloads. Failed downloads are free.
Price Per Minute
| Quality | Event Name | Price Per Minute |
|---|---|---|
| 360p | minute-360p | $0.010 |
| 480p | minute-480p | $0.015 |
| 720p | minute-720p | $0.020 |
| 1080p | minute-1080p | $0.030 |
| MP3 (audio only) | minute-mp3 | $0.005 |
Residential Proxy Surcharge (only if residentialProxyMode: "fallback" is enabled and the fallback is actually triggered) | residential-proxy-minute | $1.50 |
Residential proxy surcharge. $1.50/min is added on top of the base quality rate, only when the fallback is actually used on a successful download. It is off by default. If you enable it, set "Max total charge (USD)" on the run to cap your spend.
Cost Examples
| Scenario | Minutes | Cost |
|---|---|---|
| 1 Short (1 min) at 1080p | 1 | $0.03 |
| 1 music video (4 min) at 720p | 4 | $0.08 |
| 1 lecture (30 min) at 480p | 30 | $0.45 |
| 5 videos (3 min each) at 1080p | 15 | $0.45 |
| 1 podcast (60 min) as MP3 | 60 | $0.30 |
| 1 Short (1 min) at 1080p with residential fallback triggered | 1 | $1.53 ($0.03 + $1.50) |
| 1 music video (4 min) at 720p with residential fallback triggered | 4 | $6.08 ($0.08 + $6.00) |
Tip: Lower quality and MP3 format are significantly cheaper. A 30-minute video costs $0.90 at 1080p, $0.30 at 360p, or $0.15 as MP3. Minimum charge is 1 minute per video (a 15-second Short bills as 1 full minute).
Capping your spend. Apify's run dialog has a "Max total charge (USD)" field that hard-caps the total charge for a single run. If you enable residential proxy fallback, set this cap. The Actor stops charging you once the limit is reached.
Input Examples
Download a Single Video
Download a video in 1080p (default settings):
{"urls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }]}
Download Multiple Videos
Batch download several videos at once:
{"urls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },{ "url": "https://www.youtube.com/watch?v=9bZkp7q19f0" },{ "url": "https://www.youtube.com/watch?v=kJQP7kiw5Fk" }],"quality": "720"}
Download YouTube Shorts
Works with Shorts URLs directly:
{"urls": [{ "url": "https://youtube.com/shorts/8wst-04IuWI" },{ "url": "https://youtube.com/shorts/abc123XYZ" }],"quality": "1080"}
If a Short fails at 1080p, retry at 720p first. Enable the paid residential fallback only if you specifically need 1080p.
Extract Audio Only (MP3)
Get just the audio track as an MP3 file:
{"urls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }],"format": "mp3"}
Lower Quality for Long Videos
Use 360p or 480p for long videos to stay under the file size limit:
{"urls": [{ "url": "https://www.youtube.com/watch?v=LONG_VIDEO_ID" }],"quality": "360","format": "default"}
Enable Residential Proxy Fallback (paid)
Enable the paid residential proxy fallback only when you want the extra bypass attempt:
{"urls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }],"residentialProxyMode": "fallback","proxyCountry": "US"}
This is especially useful for 1080p Shorts, where YouTube bot-detection blocks the standard path more often than at 720p.
Cost note. The residential fallback adds $1.50/min when actually triggered. It is off by default. If you enable it, set "Max total charge (USD)" on the run to cap your spend. No surcharge if the fallback is never used.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
urls | array | Yes | - | List of YouTube URLs to download. Supports regular videos, Shorts, and youtu.be links. |
quality | string | No | 1080 | Maximum video resolution: "360", "480", "720", or "1080". The best available quality up to this limit is selected. |
format | string | No | default | Output format: "default" for MP4 video, "mp3" for audio-only extraction. |
residentialProxyMode | string | No | disabled | Off by default. "disabled" keeps cost predictable (blocked videos fail). "fallback" enables a paid last-resort proxy: +$1.50/min only when actually used. Set "Max total charge (USD)" on the run to cap spend. |
proxyCountry | string | No | auto | Preferred country for the residential proxy fallback. Ignored unless residentialProxyMode is set to fallback. |
Tip: Higher quality means larger file sizes. For videos longer than 20 minutes, consider using 720p or lower to stay within the 230 MB file size limit. For very long videos (1+ hour), use 360p or extract audio with MP3 format.
Tip: For Shorts,720pis the most reliable choice on the free standard path. EnableresidentialProxyMode: "fallback"only if you specifically need1080pShorts.
Output
Dataset Output
Each downloaded video produces one record in the dataset with full metadata and a direct download link.
Success Record:
{"videoId": "dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Music Video)","originalUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","duration": "3:33","uploader": "Rick Astley","viewCount": 1500000000,"quality": "1080p","format": "MP4","fileSize": "45.2 MB","fileSizeBytes": 47395225,"downloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/dQw4w9WgXcQ.mp4","kvStoreKey": "dQw4w9WgXcQ.mp4","contentType": "video/mp4","status": "success","downloadedAt": "2025-01-15T10:30:00.000Z"}
Failed Record:
{"videoId": "PRIVATE_ID","title": "Unknown","originalUrl": "https://www.youtube.com/watch?v=PRIVATE_ID","duration": "0:00","uploader": "Unknown","viewCount": 0,"quality": "1080p","format": "MP4","fileSize": "0 B","fileSizeBytes": 0,"downloadUrl": "","kvStoreKey": "","contentType": "","status": "failed","error": "This is a private video and cannot be downloaded.","downloadedAt": "2025-01-15T10:30:05.000Z"}
Key-Value Store Outputs
| File | Format | Description |
|---|---|---|
{videoId}.mp4 | MP4 | Downloaded video file (one per successful video download) |
{videoId}.mp3 | MP3 | Extracted audio file (when using MP3 format) |
OUTPUT | JSON | Run summary with success/fail counts and all download links |
OUTPUT summary example:
{"totalUrls": 3,"successCount": 2,"failedCount": 1,"totalFileSize": "78.5 MB","totalFileSizeBytes": 82313011,"quality": "1080","format": "default","processingTimeMs": 45200,"downloads": [{"title": "Rick Astley - Never Gonna Give You Up","videoId": "dQw4w9WgXcQ","status": "success","downloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/dQw4w9WgXcQ.mp4","fileSize": "45.2 MB"},{"title": "PSY - GANGNAM STYLE","videoId": "9bZkp7q19f0","status": "success","downloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/9bZkp7q19f0.mp4","fileSize": "33.3 MB"},{"title": "Unknown","videoId": "PRIVATE_ID","status": "failed","error": "This is a private video and cannot be downloaded."}]}
Dataset Table View
The Actor provides a clean table view in the Apify Console with these columns:
| Column | Description |
|---|---|
| Title | Video title |
| Video ID | YouTube video identifier |
| Duration | Video length (MM:SS or HH:MM:SS) |
| File Size | Downloaded file size (e.g., "45.2 MB") |
| Quality | Resolution used (e.g., "1080p") |
| Format | MP4 or MP3 |
| Download URL | Clickable link to download the file |
| YouTube URL | Link back to the original video |
| Status | success or failed |
Use Cases
Content Archiving
YouTube videos disappear. Channels get deleted, videos get taken down, and links go dead without warning. Download and preserve the content you depend on before it vanishes, in full 1080p quality, saved directly to your storage.
Offline Learning
Save educational lectures, tutorials, and course content to watch without an internet connection. Whether you're on a plane, in a remote location, or simply want to avoid buffering, your learning library travels with you.
Audio Extraction for Podcasters
Strip the audio from any YouTube video and get a clean MP3 file. Repurpose interviews, conference talks, or recorded conversations into podcast episodes, transcripts, or background research without editing software.
Research and Journalism
Collecting video evidence, archiving interviews, or documenting public statements? Download directly to your device and retain a local copy of exactly what was published, in the quality you need, when you need it.
Social Media Content Management
Managing multiple accounts or clients means staying ahead of content trends. Batch download reference videos, competitor content, or campaign material in one run rather than repeating the process one URL at a time.
API Integration
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('your-username/youtube-video-downloader').call({urls: [{ url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' },{ url: 'https://youtube.com/shorts/8wst-04IuWI' }],quality: '720',format: 'default'});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {if (item.status === 'success') {console.log(`${item.title}: ${item.downloadUrl} (${item.fileSize})`);} else {console.log(`Failed: ${item.originalUrl} - ${item.error}`);}}
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('your-username/youtube-video-downloader').call(run_input={'urls': [{'url': 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'},{'url': 'https://youtube.com/shorts/8wst-04IuWI'}],'quality': '720','format': 'default'})items = client.dataset(run['defaultDatasetId']).list_items().itemsfor item in items:if item['status'] == 'success':print(f"{item['title']}: {item['downloadUrl']} ({item['fileSize']})")else:print(f"Failed: {item['originalUrl']} - {item['error']}")
cURL
# Start a runcurl -X POST "https://api.apify.com/v2/acts/your-username~youtube-video-downloader/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }],"quality": "720","format": "default"}'
Performance
| Scenario | Typical Run Time |
|---|---|
| 1 short video (under 5 min), 720p | 20-40 seconds |
| 1 short video (under 5 min), 1080p | 30-60 seconds |
| 1 long video (20+ min), 720p | 1-3 minutes |
| 5 videos (mixed lengths), 720p | 2-5 minutes |
| 1 video, MP3 audio only | 15-30 seconds |
Videos are processed sequentially to avoid YouTube rate limits. Run time scales linearly with the number of videos.
Limitations
- 230 MB file size limit per video (Apify key-value store constraint). Long videos at 1080p may exceed this - use a lower quality setting for videos over 20 minutes.
- No playlist support - each URL must point to a single video, not a playlist.
- Private videos cannot be downloaded (no authentication support).
- Age-restricted videos cannot be downloaded without login, which is not supported.
- Live streams cannot be downloaded while in progress.
- Copyright-blocked videos in certain regions may fail.
- Videos are processed one at a time to respect YouTube rate limits.
Troubleshooting
Download failed with "file size exceeds maximum"
The downloaded file is larger than 230 MB. Solutions:
- Lower the quality - Switch from 1080p to 720p or 480p
- Use MP3 format - If you only need audio, MP3 files are much smaller
- Try 360p - For very long videos (1+ hour), 360p keeps files small
"Video unavailable" or "removed" error
The video no longer exists on YouTube or has been taken down by the uploader. Verify the URL works in your browser first.
"Age-restricted video" error
This Actor cannot download age-restricted content because it does not support YouTube authentication. There is no workaround for this limitation.
"Private video" error
Private videos require the owner's permission and a logged-in session. This Actor only downloads publicly available videos.
Download is slow
Video download speed depends on:
- Video length and quality - A 30-minute 1080p video is a large file
- YouTube's servers - Occasional slowdowns are normal
- Actor memory - The Actor uses at least 2 GB memory; increasing to 4 GB may help with large files
"Not a valid YouTube URL" error
The Actor only accepts YouTube URLs. Make sure your URL contains youtube.com or youtu.be. Supported formats:
https://www.youtube.com/watch?v=VIDEO_IDhttps://youtube.com/shorts/VIDEO_IDhttps://youtu.be/VIDEO_ID
FAQ
How do I download the file to my device?
After the run completes, click the download URL in the dataset results. The file will download directly in your browser, just like any other file download. This works on phones, tablets, laptops, and desktops.
What quality will I actually get?
The quality setting is a maximum. If a video is only available in 720p, selecting 1080p will give you 720p. The Actor always selects the best available quality up to your chosen limit.
Can I download entire playlists?
No, this Actor downloads individual videos only. To download multiple videos from a playlist, copy each video URL separately and add them all to the urls input.
Why is the file size limit 230 MB?
Apify's key-value store has a 256 MB per-record limit. The 230 MB limit includes a safety margin. For long videos, reduce the quality or use MP3 format to stay under the limit.
How long can videos be?
There is no duration limit, but longer videos produce larger files and cost more (pricing is per minute). A 1-hour video at 1080p will likely exceed the 230 MB file size limit. For long content, use 480p or 360p, or extract audio only with MP3 format.
Am I charged for failed downloads?
No. You are only charged for successful downloads. If a video is private, removed, or fails for any reason, no charge is applied.
If you enable residentialProxyMode: "fallback" and that fallback is actually used on a successful download, the residential proxy surcharge ($1.50/min) is added on top of the base quality rate, as documented in the pricing section.
Why is residential proxy fallback off by default?
It is expensive (+$1.50/min when triggered). Defaulting to off keeps your run cost predictable and tied only to the per-minute quality tier. Turn it on when you specifically need a higher success rate on videos YouTube blocks at the IP level (common for 1080p Shorts), and cap spend via "Max total charge (USD)" on the run.
How do I cap my spend when the fallback is enabled?
Use Apify's "Max total charge (USD)" field in the run dialog (or the maxTotalChargeUsd field on the API run call). Set it to whatever you are willing to pay at worst for the run. The platform stops charging once the cap is hit. This Actor does not ship with a built-in per-run cost cap. The platform-level cap is the correct control.
Does this work with YouTube Shorts?
Yes. Paste the Shorts URL directly (e.g., https://youtube.com/shorts/VIDEO_ID). Shorts are short vertical videos, so they produce small files even at 1080p.
For reliability, 720p is the safer default for Shorts on the standard path. If you specifically need 1080p Shorts, enable residential proxy fallback.
What happens if a download fails?
Failed downloads are recorded in the dataset with a status: "failed" field and a human-readable error message explaining what went wrong. Successfully downloaded videos are unaffected by failures in the batch.
Can I use this with the Apify API?
Yes. See the API Integration section above for Node.js, Python, and cURL examples. The Actor works with all Apify integrations including webhooks, schedules, and the MCP server.
Is the download link permanent?
Download links point to the Apify key-value store, which retains unnamed store data for 7 days. After that, the files are deleted. Download your files promptly or use a named key-value store for longer retention.
Support
Questions or issues? We are here to help:
- Comments: Leave a comment on the Actor page
- Issues: Open an issue on GitHub
We respond to all feedback within 24 hours.