YouTube Downloader Pro - Video, Audio & Subtitles avatar

YouTube Downloader Pro - Video, Audio & Subtitles

Pricing

from $2.10 / 1,000 megabyte downloadeds

Go to Apify Store
YouTube Downloader Pro - Video, Audio & Subtitles

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

Dami's Studio

Maintained by Community

Actor stats

2

Bookmarked

585

Total users

51

Monthly active users

17 hours ago

Last modified

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.

InputYouTube video links of any kind, video ids, playlists or channels
OutputA 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
CeilingmaxMegabytes per video, 1000 by default, and 20,000 MB at most; maxVideos per playlist or channel, 10 by default, 100 at most
Account neededNone
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 getField
Whether this row is a file or a failed linkok
The link you gave, and the playlist or channel the video came fromurl, listUrl
The video's id and a link to its YouTube thumbnailvideoId, thumbnailUrl
Title, channel, length, views and upload datetitle, channel, durationSeconds, viewCount, uploadDate
The quality you asked for, what you got, and the best the source hadrequestedQuality, resolution, sourceResolution
A plain note when the run delivered below what you askedqualityNotice
A plain note when the audio format or language you picked was not on the videoaudioNotice
File type, size on disk and checksumformat, fileSizeBytes, sha256
The megabytes this row counted for on your bill (0 on a failed link)megabytesBilled, billedMegabytes
When the file was storeddownloadedAt
Where the file is: its key and a direct linkmediaKey, mediaUrl
Caption files, one per language, with subtitles onsubtitles
Why a link gave no file, on its ok: false row and in the ERRORS recorderror

โ–ถ๏ธ How to download YouTube videos

  1. Open YouTube Downloader Pro and click Try for free.
  2. Paste links into YouTube URLs.
  3. Pick Max quality. Leave it at 720 for a first run, then raise it once you see the file sizes.
  4. Click Start.
  5. Open the Key-value store tab for the files, or follow mediaUrl from 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 planPer MB nowFrom 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
}
FieldDefaultWhat it is
urlsnoneVideo 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/).
videoUrlnoneA single link, when an array is awkward for your caller.
maxVideos10How 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.
quality720audio, 144, 240, 360, 480, 720, 1080, 1440, 2160, 4320. The number is the short side of the picture.
audioOnlyfalseThe audio track instead of video. Same as asking for quality: "audio".
audioFormatmp3For 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.
audioLanguagenoneA 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.
subtitlesfalseAlso fetch captions, auto-generated ones included, as .srt.
subLangsenComma separated codes, such as en,es. Used when subtitles is on.
includeMetadatatrueAdds title, channel, view count and upload date to the row.
fileNameFromTitlefalseNames 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.
maxMegabytes1000Per 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.
proxyConfigurationApify defaultLeave 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
}
FieldHow to read it
sha256Checksum of the delivered file, so you can tell a truncated download from a good one.
fileSizeBytes, billedMegabytesBytes on disk, and that figure rounded up to whole megabytes.
resolution, sourceResolutionWhat you got, measured off the file, and what the source had.
subtitlesWith subtitles: true, an array of { key, url } pairs, one per language.
uploadDateA 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.

WhereWhat is in itBilled
The dataset, ok: trueOne row per delivered fileyes, by the megabyte
The dataset, ok: falseOne row per link that did not produce a file, with errorno
ERRORS in the key-value storeThe 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 sha256 proving the file arrived whole.
  • Grabbing the .srt for 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:

  1. Paste the playlist link into YouTube URLs here, with maxVideos set to how many you want.
  2. Paste the videoId column 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 maxVideos and 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 resolution with what you asked for rather than assuming the request was met.
  • A run where everything failed still reports success. Read the ok: false rows.
  • An aborted or timed-out run has no ERRORS record, 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 maxMegabytes by 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 wantUse
The video, its audio or its subtitles as a fileThis one
Just the caption text, no media fileYouTube Transcript Scraper
Transcripts for a whole channel or playlist in one runYouTube Transcript Bulk Scraper
Videos in a playlist, as rowsYouTube Playlist Scraper
A channel's uploads, as rowsYouTube Channel Scraper
Shorts from a channel or a keyword, with exact view and like countsYouTube 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.

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.