YouTube Downloader Pro - 8K/4K/1080p Video, Audio & Subtitles avatar

YouTube Downloader Pro - 8K/4K/1080p Video, Audio & Subtitles

Pricing

from $2.10 / 1,000 megabyte downloadeds

Go to Apify Store
YouTube Downloader Pro - 8K/4K/1080p Video, Audio & Subtitles

YouTube Downloader Pro - 8K/4K/1080p Video, Audio & Subtitles

Past 1080p, YouTube serves the picture and the sound as separate streams, and an MP4 only exists once they are merged. That merge is the work here. Up to 8K, or audio as MP3, or captions as .srt, in the run's key-value store. 4K needs more run memory. $0.005/MB on Free. Failures and skips are free.

Pricing

from $2.10 / 1,000 megabyte downloadeds

Rating

5.0

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

258

Total users

127

Monthly active users

4 days ago

Last modified

Share

YouTube Downloader — video, MP3 audio and subtitles

Past 1080p, YouTube stops keeping a video and its soundtrack in the same file. They come down as separate streams and an MP4 only exists once something merges them, which is most of the work here. MP4 from 360p up to 4320p (8K), or the audio on its own as MP3, or the captions as .srt. Each file lands in the run's key-value store and the dataset row carries a direct link to it.

You pay for the megabytes you actually receive. A download that fails, is private, or gets skipped by your size limit adds nothing to that.

What you get

One dataset row per successful download. The shape, with placeholder values:

{
"ok": true,
"url": "https://www.youtube.com/watch?v=VIDEO_ID",
"title": "<video title>",
"channel": "<channel name>",
"durationSeconds": 635,
"viewCount": 27412903,
"uploadDate": "20141110",
"requestedQuality": "1080",
"resolution": "1920x1080",
"sourceResolution": "3840x2160",
"format": "mp4",
"fileSizeBytes": 155340000,
"billedMegabytes": 156,
"mediaKey": "VIDEO_ID.mp4",
"mediaUrl": "https://api.apify.com/v2/key-value-stores/.../records/VIDEO_ID.mp4"
}

resolution is measured off the delivered file with ffprobe rather than copied from the page, so it tells you what you actually got. sourceResolution is what the video is at its best. When those differ because a lower quality was requested, that's expected; when the actor was forced below what you asked for, the row carries a qualityNotice saying so in plain English.

With subtitles: true the row also gets a subtitles array of { key, url } pairs, one per language, each an SRT file in the same store.

Input

{
"urls": ["https://www.youtube.com/watch?v=aqz-KE-bpKQ"],
"quality": "1080",
"audioOnly": false,
"subtitles": false,
"subLangs": "en",
"includeMetadata": true,
"maxMegabytes": 1000
}
FieldDefaultNotes
urlsWatch or Shorts links. Pass as many as you like in one run.
videoUrlA single URL, if an array is awkward for your caller.
quality720audio, 360, 480, 720, 1080, 1440, 2160, 4320. The number is the short side of the picture, so 720 means 1280x720 landscape and 720x1280 for a vertical Short. If the source doesn't have the quality you asked for, you get the next best.
audioOnlyfalseMP3 instead of video. Same thing as quality: "audio".
subtitlesfalseAlso fetch captions, including auto-generated ones, as .srt.
subLangsenComma-separated codes, e.g. en,es.
includeMetadatatrueAdds title, channel, view count and upload date to the row.
maxMegabytes1000Per-video spend cap. Anything estimated above it is skipped before a byte is downloaded, and skipped videos are free.

The size limit you should know about

There are two ceilings, and the second one catches people out.

maxMegabytes is yours. The other one is memory: a run gets roughly 0.7× its allocated RAM in usable working space, so on the default 1024 MB the practical limit is about 716 MB per video. Anything estimated above that is skipped with a message telling you exactly what to change.

For 4K and 8K, raise Memory in the run options — 4096 MB is a sensible setting for 4K — and raise maxMegabytes to match. Both, not just one.

Billing

A $0.0005 start fee per gigabyte of run memory, charged once per run and not once per URL. At the default 1 GB that's $0.0005; raise memory to 4 GB for a 4K job and it's $0.002. On top of that, a per-megabyte charge on what's delivered, rounded up to the next whole megabyte.

Apify planPer MB
Free$0.0050
Bronze$0.0042
Silver$0.0033
Gold$0.0021
Platinum$0.0012
Diamond$0.00068

So on the Free plan a 3 MB Short is about $0.015 and a 100 MB 1080p video is about $0.50. On Diamond the same two are about $0.002 and $0.068.

Nothing else is billed. Failed, blocked, private and over-limit URLs never charge the per-megabyte fee. They're written to the ERRORS record in the key-value store so you can look at what went wrong without paying for it. Traffic goes out over the actor's own static exit addresses or rotating Apify datacenter proxies, neither of which is metered by the gigabyte. If you ask for a metered group like RESIDENTIAL, it's swapped for datacenter and the row tells you it happened.

Limits

  • Public videos only. Private, members-only, purchase-required and age-gated videos need a signed-in account and aren't supported.
  • File size scales with bitrate, not just resolution. A static talking-head clip at 1080p is a fraction of a fast-motion clip at the same resolution, so plan maxMegabytes per video type rather than per resolution.
  • Big files take time. Default run timeout is 30 minutes.
  • Copyright is your problem, not ours. Download what you own or are permitted to use, and stay within YouTube's Terms of Service.

FAQ

Do I need an account, cookies or an API key? No. A URL is the whole input.

Am I charged for a failed download? Not for the bytes, no. The per-megabyte fee counts only what arrives. The run's start fee still applies, because the run still started.

Can I download several videos in one run? Yes, put them all in urls. One start fee covers the whole batch.

Is there a length limit? No fixed duration cap. Size is what limits you — see the section above.

Where do the files go? The run's key-value store. mediaUrl in each row is a direct link, and mediaKey is the store key if you'd rather fetch it through the API.