YouTube Downloader Pro - Video, Audio & Subtitles
Pricing
from $2.10 / 1,000 megabyte downloadeds
YouTube Downloader Pro - Video, Audio & Subtitles
Download a YouTube video as MP4, its audio on its own, or its captions as SRT. The file lands in the run's storage with a direct link and a checksum. Only ask for videos you have the right to download. $0.005 per MB on the Free plan, less on paid plans.
Pricing
from $2.10 / 1,000 megabyte downloadeds
Rating
5.0
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
2
Bookmarked
585
Total users
51
Monthly active users
17 hours ago
Last modified
Categories
Share
Download YouTube videos as MP4, with captions as SRT, from a link: paste one watch or Shorts link, a hundred, or a playlist or channel, and each file lands in the run's key-value store with a direct link in the dataset row.
The thing to know before you wire it into anything: a run where every link failed still finishes
green. Each link that gave no file gets its own row with ok: false and the reason, at no charge,
so filter on ok.
| Input | YouTube video links of any kind, video ids, playlists or channels |
| Output | A file per video in the run's key-value store, plus one row per file with its link, size, checksum, resolution and the video's title, channel and views, and one free row per failed link |
| Ceiling | maxMegabytes per video, 1000 by default, and 20,000 MB at most; maxVideos per playlist or channel, 10 by default, 100 at most |
| Account needed | None |
| Price | $0.005 per megabyte delivered on the Free plan, lower on paid plans. The free plan's $5 a month covers about 1,000 MB |
๐ What YouTube Downloader Pro does
It reads the video, picks the closest match to the quality you asked for, and merges the streams
into one MP4. quality is the short side of the picture, so 720 means 1280x720 on a landscape
video and 720x1280 on a vertical Short. If the source has nothing at that tier you get the next best
one down.
resolution in the row is measured off the delivered file rather than copied off the page, so it
tells you what you actually received. sourceResolution is what the video is at its best. When the
run itself had to settle below what you asked for, the row carries a qualityNotice saying so in
plain words.
Before any bytes move it estimates the file size and compares it against maxMegabytes. Anything
over is skipped with no per-megabyte charge. A file too large for the run it started in continues in
a second run sized to fit, and that run's row is copied back into your results, so leave it running.
Set audioOnly (or quality: "audio") and you get the audio track instead: MP3 by default, or the
M4A or Opus track YouTube already has, saved without conversion. Set subtitles and the captions
arrive as .srt files alongside the media, one per language in subLangs.
A playlist or channel link gives its first maxVideos videos, each downloaded and billed exactly
like a link you pasted.
๐ What data you get from each YouTube download
| What you get | Field |
|---|---|
| Whether this row is a file or a failed link | ok |
| The link you gave, and the playlist or channel the video came from | url, listUrl |
| The video's id and a link to its YouTube thumbnail | videoId, thumbnailUrl |
| Title, channel, length, views and upload date | title, channel, durationSeconds, viewCount, uploadDate |
| The quality you asked for, what you got, and the best the source had | requestedQuality, resolution, sourceResolution |
| A plain note when the run delivered below what you asked | qualityNotice |
| A plain note when the audio format or language you picked was not on the video | audioNotice |
| File type, size on disk and checksum | format, fileSizeBytes, sha256 |
| The megabytes this row counted for on your bill (0 on a failed link) | megabytesBilled, billedMegabytes |
| When the file was stored | downloadedAt |
| Where the file is: its key and a direct link | mediaKey, mediaUrl |
Caption files, one per language, with subtitles on | subtitles |
Why a link gave no file, on its ok: false row and in the ERRORS record | error |
โถ๏ธ How to download YouTube videos
- Open YouTube Downloader Pro and click Try for free.
- Paste links into YouTube URLs.
- Pick Max quality. Leave it at 720 for a first run, then raise it once you see the file sizes.
- Click Start.
- Open the Key-value store tab for the files, or follow
mediaUrlfrom the dataset row.
๐ฐ How much does it cost to download YouTube videos?
$0.005 per megabyte delivered on the Free plan, rounded up to the next whole megabyte. On the free plan, the $5 Apify gives you each month covers about 1,000 MB. It falls on the paid plans:
| Apify plan | Per MB now | From 8 October 2026 |
|---|---|---|
| Free | $0.0050 | $0.0050 |
| Bronze | $0.0042 | $0.0042 |
| Silver | $0.0033 | $0.0033 |
| Gold | $0.0021 | $0.0021 |
| Platinum | $0.0012 | $0.0021 |
| Diamond | $0.00068 | $0.0021 |
So a 3 MB Short is about $0.015 on Free and about $0.006 on Gold.
Quality drives the bill more than anything else, because a 4K file is many times the size of the
same video at 720p. A download that fails, one that is private or removed, and one your
maxMegabytes skipped all cost nothing per megabyte.
๐ฅ What you give it
{"urls": ["https://www.youtube.com/watch?v=aqz-KE-bpKQ"],"quality": "1080","subtitles": true,"subLangs": "en,es","maxMegabytes": 1000}
| Field | Default | What it is |
|---|---|---|
urls | none | Video links in any form YouTube gives out (watch, Shorts, youtu.be, live, embed, mobile, Music), bare video ids, playlist links, or channel links (@handle, /channel/, /c/, /user/). |
videoUrl | none | A single link, when an array is awkward for your caller. |
maxVideos | 10 | How many videos each playlist or channel link gives, from the top of the list (a channel's newest first). 1 to 100. A channel link without a tab is read on its Videos tab; a /shorts or /streams link on that tab. |
quality | 720 | audio, 144, 240, 360, 480, 720, 1080, 1440, 2160, 4320. The number is the short side of the picture. |
audioOnly | false | The audio track instead of video. Same as asking for quality: "audio". |
audioFormat | mp3 | For audio: mp3, or m4a or opus, the tracks YouTube already serves, saved as they are. A video with no track in that format gives MP3, and audioNotice says so. |
audioLanguage | none | A language code such as es, de or pt-BR, for videos with more than one audio track. Missing on the video: you get the default track, and audioNotice says so. |
subtitles | false | Also fetch captions, auto-generated ones included, as .srt. |
subLangs | en | Comma separated codes, such as en,es. Used when subtitles is on. |
includeMetadata | true | Adds title, channel, view count and upload date to the row. |
fileNameFromTitle | false | Names each file from the video's title plus its id, such as Me-at-the-zoo_jNQXAC9IVRw.mp4: Latin letters and digits only, 80 characters of title at most. A title with none gives the id alone. Off: named by the id. |
maxMegabytes | 1000 | Per video size cap. A video estimated above it is skipped before anything downloads and adds nothing to the bill. Raise it for the highest qualities. 0 removes your cap rather than blocking everything. |
proxyConfiguration | Apify default | Leave it alone unless you have your own servers you want the run to go out through. |
๐ค What you get back
A real row from a real run, with the download link cut short:
{"ok": true,"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw","videoId": "jNQXAC9IVRw","title": "Me at the zoo","channel": "jawed","durationSeconds": 19,"viewCount": 444374877,"uploadDate": "20050424","requestedQuality": "720","resolution": "320x240","sourceResolution": "320x240","format": "mp4","fileSizeBytes": 473976,"sha256": "44534ec271816888239ea5a3a3ede4050380c1b96e8ee44162b0c06f71965c5e","billedMegabytes": 1,"megabytesBilled": 1,"mediaKey": "jNQXAC9IVRw.mp4","mediaUrl": "https://api.apify.com/v2/key-value-stores/.../records/jNQXAC9IVRw.mp4","thumbnailUrl": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg","downloadedAt": "2026-10-16T05:27:07.059Z"}
And a failed link's row:
{"ok": false,"url": "https://www.youtube.com/watch?v=zzzzzzzzzzz","videoId": "zzzzzzzzzzz","error": "This video is unavailable.","megabytesBilled": 0}
| Field | How to read it |
|---|---|
sha256 | Checksum of the delivered file, so you can tell a truncated download from a good one. |
fileSizeBytes, billedMegabytes | Bytes on disk, and that figure rounded up to whole megabytes. |
resolution, sourceResolution | What you got, measured off the file, and what the source had. |
subtitles | With subtitles: true, an array of { key, url } pairs, one per language. |
uploadDate | A plain YYYYMMDD string, as YouTube gives it. Metadata fields go away entirely if you turn includeMetadata off. |
๐งพ Reading the output
Files live in the run's key-value store, not in the dataset. The dataset is the index: one row per file, with the link and the checksum.
| Where | What is in it | Billed |
|---|---|---|
The dataset, ok: true | One row per delivered file | yes, by the megabyte |
The dataset, ok: false | One row per link that did not produce a file, with error | no |
ERRORS in the key-value store | The same failures as a list of { url, error } | no |
A failed link's row is written the moment it fails; ERRORS only at the end of the run. A dead or
removed video reads This video is unavailable.. Filter on ok: true to get just the files.
๐ก What people use it for
- Getting the audio of a talk you are allowed to use, to run through a transcriber.
- Archiving a channel's own uploads at a fixed quality, with
sha256proving the file arrived whole. - Grabbing the
.srtfor a video to re-cut or translate the captions. - Feeding clips into an editing pipeline from links a team drops into a channel.
From a playlist to files with searchable text beside them, in two runs:
- Paste the playlist link into YouTube URLs here, with
maxVideosset to how many you want. - Paste the
videoIdcolumn into the Video URLs or IDs box of YouTube Transcript Scraper for the text of each one.
๐ง What it does not do
- Public videos only. Private, members-only, purchase-required and age-gated videos need a signed-in account, and they fail.
- A playlist or channel run stops at
maxVideosand at your spending limit. Once the limit cannot cover a video, the rest of that list is skipped with a free row each. Clip links are refused. A video link copied from a playlist gives you that one video. - It will not warn you before delivering a lower tier than you asked for. When the source simply
lacks the tier there is no notice at all, so compare
resolutionwith what you asked for rather than assuming the request was met. - A run where everything failed still reports success. Read the
ok: falserows. - An aborted or timed-out run has no
ERRORSrecord, because it is written at the end. The failed-link rows written before the stop are there. - A link listed twice is downloaded twice, and billed twice. Remove repeats from your list.
- File size follows bitrate, not just resolution. A still talking head at 1080p is a fraction of
a fast-moving clip, so set
maxMegabytesby video type rather than by tier. - The MP4 often holds AV1 video with Opus sound. It plays in Chrome and VLC; if your editor or phone is fussy, test one file before building on it.
- You need the right to download what you ask for. Your own uploads, or videos whose owner allows it.
- It is not an official YouTube tool. Dami's Studio is independent and is not affiliated with or endorsed by YouTube or Google, or by any other company named on this page.
๐งญ Which YouTube actor do you need?
| If you want | Use |
|---|---|
| The video, its audio or its subtitles as a file | This one |
| Just the caption text, no media file | YouTube Transcript Scraper |
| Transcripts for a whole channel or playlist in one run | YouTube Transcript Bulk Scraper |
| Videos in a playlist, as rows | YouTube Playlist Scraper |
| A channel's uploads, as rows | YouTube Channel Scraper |
| Shorts from a channel or a keyword, with exact view and like counts | YouTube Shorts Scraper |
โ Questions people ask
Do I need an account, cookies or an API key to download YouTube videos?
No. A link is the whole input.
Am I charged for a download that failed?
Not per megabyte. The charge counts bytes that arrived.
Is there a length limit?
No fixed duration. One file can be at most 20,000 MB, roughly three to four hours of 4K, and it has
to fit your maxMegabytes and finish inside the run timeout (two hours by default). A large one
continues in a second run.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/youtube-video-downloader. Either way
the run happens on your Apify account at the same price.
Is downloading YouTube videos legal?
It downloads public videos, and you must have the right to download what you ask for: your own uploads, or videos whose owner allows it. YouTube's terms still apply. Apify's write-up on the legality of web scraping is a reasonable starting point, and we are not lawyers.
๐ If something breaks
Open the Issues tab on the actor page. Include the link you used, the run ID and what the
ERRORS record said, and the log is enough for us to see what happened.