YouTube Video Downloader — MP4, MP3, Shorts, Playlists
Pricing
Pay per usage
YouTube Video Downloader — MP4, MP3, Shorts, Playlists
Download YouTube videos, Shorts, playlists and channels as MP4, MKV, WebM, AVI, MOV or audio (MP3, M4A, WAV, FLAC) in 360p to 4K. Get subtitles, transcript and metadata, plus direct download links in Apify, S3 or Azure storage. Repeat downloads are skipped.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
ActorFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
YouTube Video Downloader — MP4, MP3, Shorts, Playlists & Channels
Download YouTube videos (youtube.com) as MP4, MKV, WebM, AVI or MOV in 360p to 4K, or extract audio as MP3, M4A, Opus, WAV or FLAC. Works with single videos, Shorts, playlists and channels, and adds subtitles, a transcript and full metadata. Files are saved to Apify storage, S3-compatible storage or Azure with a direct download link, and results export as JSON, CSV or Excel or through the API. Paste a link, press Start; give a cache project name and a video you already downloaded is returned instantly without a new download or charge.
Target website: youtube.com
✨ Features of this YouTube video downloader
- Video downloads in 360p to 4K — choose the highest height (360, 480, 720, 1080, 1440 or 2160); you get the best quality up to it
- Many formats — MP4, MKV and WebM are made by combining the streams (fast); AVI and MOV are converted
- Audio extraction — MP3, M4A, Opus, WAV or FLAC; audio-only runs download only the audio stream
- Audio language — pick a track by 2-letter language code when a video has several
- Shorts, playlists and channels — links to Shorts, embeds,
youtu.be, playlists and@channelpages; set how many of the newest videos to take from each list - Subtitles and transcript — download subtitles as
.srtfiles in the languages you choose, optionally with automatic captions, plus the transcript as plain text - Full metadata — title, description, duration, uploader, channel, upload date, views, likes, tags, categories, thumbnail, resolution, frame rate and codecs, and optionally the complete list of available streams
- Choose where files go — Apify storage (no setup), S3-compatible storage (AWS S3, DigitalOcean Spaces, Google Cloud Storage, Cloudflare R2) or Azure Blob Storage
- Custom file names — build names from title, uploader, upload date and quality; the video ID is always added
- Cache project — name a cache project and the same video with the same options is returned from storage without a new download or charge; set retention days to delete old files automatically
- Size and length limits — videos over your limits are skipped without charge
- Parallel downloads — several videos at once, with automatic retries on a new connection when YouTube blocks one
- Proxy and cookies support — residential Apify proxy by default, your own proxy, or your own YouTube cookies
- Clear progress log — each download, its progress, every skipped video and every retry is logged
🚀 How to download YouTube videos in 5 steps
-
Sign up for a free Apify account — includes $5 monthly credit.
-
Open the actor page and click Try for free.
-
Paste YouTube links in the Input tab and choose a format and quality.
-
Click Start and wait for the run to complete.
-
Open the Output tab and use the Download link of each video, or export the list as JSON, CSV or Excel.
-
YouTube URLs — paste video, Shorts, playlist or channel links, for example
https://www.youtube.com/watch?v=jNQXAC9IVRw. Use Add for one at a time, Bulk edit for many, or Text file to load a list. -
Format and Video quality — for example MP4 at 720p, or MP3 for audio only.
-
Max videos per playlist or channel — how many of the newest videos to take from each list.
-
Storage — Apify storage needs no setup. Pick S3 or Azure and fill in its settings to save files to your own bucket.
-
Cache project name — optional. Enter any name (for example
my-downloads) and repeat requests for the same video and options are served from storage at no charge.
You can also run this actor via the Apify API or integrate it directly into your workflows using Zapier, Make, or n8n.
💰 Pricing
This actor uses pay-per-event billing: a fixed price for each video downloaded plus a price for each started minute of video. You are not charged for cache hits, skipped videos (too long or too large) or failed downloads.
- New Apify accounts include $5 of free monthly credit.
- Apify proxy traffic is billed separately by Apify per GB. YouTube blocks most server addresses, so the default is residential proxy, and the whole video passes through it. Audio-only downloads and lower qualities use much less traffic.
- Files in Apify storage use storage space. A normal run's files follow your plan's retention; a cache project keeps its files until you delete them or the retention days pass.
🔧 Input configuration
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
YouTube URLs (startUrls) | array | — | A sample video | Videos, Shorts, playlists or channels. |
Video IDs (videoIds) | array | — | — | 11-character video IDs, added to the URLs. |
Max videos per playlist or channel (maxItems) | integer | — | 3 | Newest videos taken from each playlist or channel. |
Format (format) | string | — | mp4 | mp4, mkv, webm, avi, mov, mp3, m4a, opus, wav, flac. |
Video quality (quality) | string | — | 720 | Highest height: 360, 480, 720, 1080, 1440, 2160. |
Audio language (audioLanguage) | string | — | — | 2-letter code of the audio track to prefer. |
Subtitle languages (subtitleLanguages) | array | — | — | Language codes to download as .srt. |
Include automatic captions (includeAutoCaptions) | boolean | — | false | Also use YouTube's auto-generated captions. |
Include transcript text (includeTranscript) | boolean | — | false | Adds the first subtitle language as plain text. |
Include all available formats (includeAllFormats) | boolean | — | false | Adds the list of all streams to the output. |
File name parts (filenameParts) | array | — | title | Any of title, uploader, uploadDate, quality. |
Storage (storageType) | string | — | apify | apify, s3 or azure. |
S3 settings (s3Bucket, s3AccessKeyId, s3SecretAccessKey, s3Region, s3Endpoint, s3PathPrefix, s3PublicBaseUrl) | string | — | — | For S3-compatible storage. Bucket and keys are required. |
Azure settings (azureConnectionString, azureContainer) | string | — | — | For Azure Blob Storage. Both are required. |
Cache project name (cacheProjectName) | string | — | — | Returns repeat downloads from storage at no charge. |
Cache retention (retentionDays) | integer | — | 0 | Deletes cache files older than this many days. 0 keeps them. |
Max file size (maxFileSizeMb) | integer | — | 500 | Larger files are skipped. |
Max video length (maxDurationMinutes) | integer | — | 120 | Longer videos and live streams are skipped. |
Parallel downloads (maxConcurrency) | integer | — | 3 | Videos downloaded at the same time. |
Proxy configuration (proxyConfiguration) | object | — | Residential | Apify proxy settings. |
Custom proxy URL (customProxyUrl) | string | — | — | Your own proxy instead of Apify proxy. |
YouTube cookies (youtubeCookies) | string | — | — | Netscape cookies.txt for videos that need a signed-in account. |
Supported URL types:
- Video:
https://www.youtube.com/watch?v=jNQXAC9IVRw,https://youtu.be/jNQXAC9IVRw,https://www.youtube.com/shorts/jNQXAC9IVRw,https://www.youtube.com/embed/jNQXAC9IVRw - Playlist:
https://www.youtube.com/playlist?list=PL... - Channel:
https://www.youtube.com/@TED(the Videos tab; add/shortsfor Shorts)
📦 YouTube video downloader output data
The output is a dataset with one record per video, all with the same fields (null or an empty list when a value is not available). Each record contains: videoId, url, source, status (success, skipped or failed), error, fromCache, title, description, durationSeconds, uploader, channelId, channelUrl, uploadDate, viewCount, likeCount, commentCount, tags, categories, thumbnailUrl, format, quality, height, width, fps, videoCodec, audioCodec, fileName, fileSizeBytes, fileSizeMb, contentType, storageType, storageLocation, storageKey, downloadUrl, expiresAt, subtitles (language, fileName, url), transcript, formats and downloadedAt. The dataset has a Downloads view: a table of thumbnail, title, status, format, quality, duration, size, cache flag, download link and error.
Output at a glance:
| Video | Status | Format | Quality | Size (MB) | From cache |
|---|---|---|---|---|---|
| Me at the zoo | success | mp4 | 360p | 0.51 | No |
Sample output (raw JSON):
{"videoId": "jNQXAC9IVRw","url": "https://www.youtube.com/watch?v=jNQXAC9IVRw","source": "https://www.youtube.com/watch?v=jNQXAC9IVRw","status": "success","error": null,"fromCache": false,"title": "Me at the zoo","description": "Microplastics are accumulating in human brains at an alarmin...","durationSeconds": 19,"uploader": "jawed","channelId": "UC4QobU6STFB0P71PMvOGN5A","channelUrl": "https://www.youtube.com/channel/UC4QobU6STFB0P71PMvOGN5A","uploadDate": "2005-04-24","viewCount": 440395810,"likeCount": 20002381,"commentCount": 10000000,"tags": ["me at the zoo","jawed karim","first youtube video"],"categories": ["Film & Animation"],"thumbnailUrl": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg","format": "mp4","quality": "360","height": 240,"width": 320,"fps": 15,"videoCodec": "av01.0.00M.08.0.110.05.01.06.0","audioCodec": "mp4a.40.2","fileName": "Me_at_the_zoo_jNQXAC9IVRw.mp4","fileSizeBytes": 533932,"fileSizeMb": 0.51,"contentType": "video/mp4","storageType": "apify","storageLocation": "<STORE_ID>","storageKey": "Me_at_the_zoo_jNQXAC9IVRw.mp4","downloadUrl": "https://api.apify.com/v2/key-value-stores/<STORE_ID>/records/Me_at_the_zoo_jNQXAC9IVRw.mp4?signature=...","expiresAt": null,"subtitles": [{"language": "en","fileName": "Me_at_the_zoo_jNQXAC9IVRw.en.srt","url": "https://api.apify.com/v2/key-value-stores/<STORE_ID>/records/Me_at_the_zoo_jNQXAC9IVRw.en.srt?signature=..."}],"transcript": null,"formats": null,"downloadedAt": "2026-10-06T00:00:00.000Z"}```## 🐍 How to download YouTube videos with Python, JavaScript or the APIRun the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).**Python** (`pip install apify-client`):```pythonfrom apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("confidential_gnat/youtube-video-downloader").call(run_input={"startUrls": [{"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"}],"format": "mp4","quality": "720",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["downloadUrl"])
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('confidential_gnat/youtube-video-downloader').call({startUrls: [{ url: 'https://www.youtube.com/watch?v=jNQXAC9IVRw' }],format: 'mp4',quality: "720",});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL — start a run and wait for the dataset:
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~youtube-video-downloader/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"}], "format": "mp4", "quality": "720"}'
💡 What you can use YouTube video downloads for
- Building offline archives of your own channel's videos
- Extracting audio from your own podcasts, talks and recordings
- Collecting subtitles and transcripts for research and accessibility
- Feeding video files to editing, transcription and AI pipelines
- Backing up playlists and channels you manage to your own cloud storage
Content teams, researchers, educators and developers typically use this. Only download videos you own or have permission to use.
⚠️ Limitations & known issues
- Proxy needed — YouTube blocks most server addresses, so a residential proxy is the default. Without one most downloads fail.
- Proxy cost — the video passes through the proxy, so large videos use a lot of proxy traffic.
- Not downloadable — private videos, members-only videos, live streams and videos that have not started yet. Age-restricted videos need your own cookies.
- Size and length — videos over the file size or length limits are skipped. Very long or very high quality videos fail more often.
- Transcripts — the transcript comes from YouTube's captions, not speech-to-text, so a video without captions has none.
- Direct links — a link to a stream straight from YouTube is tied to the connection that made it, so the actor always saves the file to your storage and gives you that link.
- Conversions — AVI and MOV are converted, which takes longer than MP4, MKV or WebM.
- Link lifetime — S3 and Azure links are private signed links valid for 7 days unless you set a public base URL.
❓ Frequently asked questions
Can I download YouTube videos legally?
The actor only accesses videos that are publicly available on YouTube — no private video is opened. Downloading videos can still conflict with YouTube's Terms of Service and with the copyright of the video's owner, so only download content you own or have permission to use, and make sure you comply with applicable laws.
What data does the YouTube video downloader return?
The video or audio file with a download link, plus title, description, duration, uploader, channel, upload date, views, likes, tags, categories, thumbnail, resolution, codecs, file size and subtitle links. Optional: transcript text and the list of all available streams.
How many videos can I download from one playlist or channel?
maxItems limits how many of the newest videos are taken from each playlist or channel link. Single video links are always downloaded.
Do I need a proxy to download from youtube.com?
Yes. The input defaults to residential Apify proxy because YouTube blocks most server addresses. You can use your own proxy, and your own cookies for videos that need a signed-in account.
How do I download YouTube videos with Python?
Use the Python example above: call the actor with the Apify client, then iterate over the dataset items and use each downloadUrl.
Can I run this YouTube video downloader on a schedule?
Yes, use Apify Schedules. Set the same Cache project name on every run and a video you already downloaded with the same format and quality is returned from storage without a new download or charge. Set Cache retention to delete old files automatically.
What output formats are supported?
Videos: MP4, MKV, WebM, AVI, MOV. Audio: MP3, M4A, Opus, WAV, FLAC. The run's results can be exported as JSON, CSV, Excel, XML and RSS from the Output tab or through the Apify API.
Why was my video skipped or did it fail?
The status and error fields say why: a skipped video was longer or larger than your limits or was a live stream; a failed video was private, unavailable, age-restricted, or blocked after several retries. Skipped and failed videos are not charged.
🔗 Other actors you may find useful
| Actor | Description |
|---|---|
| ▶️ YouTube Video List Scraper | Lists the videos of YouTube channels and playlists. |
| 📊 YouTube Channel Info and Stats | Channel details and statistics from YouTube. |
💬 Support & contact
If you encounter any issues or have questions, please open an issue or reach out via the Apify Community Forum.
You can also find more of our actors on the Actor Flow page.