YouTube Video, Playlist & Channel Downloader with Metadata
Download YouTube videos from direct links, playlists, channels, or search phrases at your chosen quality, with a public file link plus title, stats, description and subtitles per video.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to return: metadata only, media files, or caption files without media. |
videoUrls | array | optional | Direct YouTube video, Shorts, live-replay, or youtu.be URLs, or 11-character video IDs. |
playlistUrls | array | optional | YouTube playlist URLs. Videos are expanded up to maxVideos in total. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to return: metadata only, media files, or caption files without media. |
videoUrls | array | optional | Direct YouTube video, Shorts, live-replay, or youtu.be URLs, or 11-character video IDs. |
playlistUrls | array | optional | YouTube playlist URLs. Videos are expanded up to maxVideos in total. |
channelUrls | array | optional | YouTube channel URLs, @handles, or UC channel IDs. The Videos tab is used. |
searchQueries | array | optional | YouTube search phrases. Each query resolves public results up to maxVideos in total. |
videoQuality | string | optional | SDR target quality. 360p-1080p prefer H.264/AAC MP4. 1440p and 2160p require allow4K and are delivered with their real codec and container. |
container | string | optional | Auto uses MP4 H.264/AAC when available and MKV for VP9/AV1. Explicit MP4 never relabels AV1/Opus content as MP4; if no compatible stream exists the video gets a failure row. |
audioOnly | boolean | optional | Download the source audio track without video and without re-encoding. |
audioFormat | string | optional | Source audio passthrough format used when audioOnly is enabled. |
downloadSubtitles | boolean | optional | Fetch available manual or automatic captions for the requested languages. |
subtitleLanguages | array | optional | Caption language codes to request. Only tracks that already exist on the video are used; translations are not promised. |
subtitleFormat | string | optional | File format for downloaded captions. |
includeTranscript | boolean | optional | Add a plain-text transcript from the first requested caption track. |
maxVideos | integer | optional | Total videos processed across all inputs. |
maxMinutes | integer | optional | Reject a video before download when its duration exceeds this cap. 4K opt-in downloads are additionally capped at 10 minutes. |
maxMB | integer | optional | Reject oversized downloads. Values above 500 are only used for 4K opt-in downloads, which are capped at 1000 MB. |
allow4K | boolean | optional | Enable 1440p/2160p SDR downloads. These are capped at 10 minutes and 1000 MB and may use MKV with VP9/AV1 because YouTube rarely serves H.264 above 1080p. |
storage | string | optional | Where downloaded files are written. Named KVS persists while the store exists; ephemeral KVS follows your Apify account retention. |
kvsName | string | optional | Named key-value store name when storage=named_kvs. Defaults to youtube-downloader. |
storageRetentionDays | integer | optional | Signed-link lifetime for S3/R2 storage (1-7 days). KVS retention is controlled by your Apify account. |
s3Bucket | string | optional | Bucket name when storage=s3. |
s3Prefix | string | optional | Object key prefix when storage=s3. |
s3Endpoint | string | optional | Custom endpoint for S3-compatible storage such as Cloudflare R2. |
s3Region | string | optional | Region for S3 or S3-compatible storage. |
s3AccessKeyId | string | optional | Optional access key ID when storage=s3. |
s3SecretAccessKey | string | optional | Optional secret access key when storage=s3. |
s3PublicBaseUrl | string | optional | Optional public bucket URL. When set, files use public URLs instead of expiring presigned URLs. |
cookies | string | optional | Optional cookies.txt content for age-restricted or members-only videos. Public videos work without cookies. |
proxyConfiguration | object | optional | Optional. Metadata and player extraction use this connection; media bytes are downloaded directly. |
Download the published input schema
View complete JSON
{
"description": "Download metadata, video, audio, or captions for YouTube content you own or are authorized to download.",
"properties": {
"allow4K": {
"default": false,
"description": "Enable 1440p/2160p SDR downloads. These are capped at 10 minutes and 1000 MB and may use MKV with VP9/AV1 because YouTube rarely serves H.264 above 1080p.",
"prefill": false,
"title": "Allow 4K",
"type": "boolean"
},
"audioFormat": {
"default": "m4a",
"description": "Source audio passthrough format used when audioOnly is enabled.",
"editor": "select",
"enum": [
"m4a",
"opus"
],
"enumTitles": [
"M4A (AAC passthrough)",
"Opus (passthrough)"
],
"prefill": "m4a",
"title": "Audio Format",
"type": "string"
},
"audioOnly": {
"default": false,
"description": "Download the source audio track without video and without re-encoding.",
"prefill": false,
"title": "Audio Only",
"type": "boolean"
},
"channelUrls": {
"default": [],
"description": "YouTube channel URLs, @handles, or UC channel IDs. The Videos tab is used.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Channel URLs",
"type": "array"
},
"container": {
"default": "auto",
"description": "Auto uses MP4 H.264/AAC when available and MKV for VP9/AV1. Explicit MP4 never relabels AV1/Opus content as MP4; if no compatible stream exists the video gets a failure row.",
"editor": "select",
"enum": [
"auto",
"mp4",
"webm",
"mkv"
],
"enumTitles": [
"Auto (compatible first)",
"MP4 (H.264/AAC)",
"WebM (VP9/AV1 + Opus)",
"MKV (any codec)"
],
"prefill": "auto",
"title": "Container",
"type": "string"
},
"cookies": {
"description": "Optional cookies.txt content for age-restricted or members-only videos. Public videos work without cookies.",
"editor": "textarea",
"isSecret": true,
"title": "Cookies (Netscape format)",
"type": "string"
},
"downloadSubtitles": {
"default": false,
"description": "Fetch available manual or automatic captions for the requested languages.",
"prefill": false,
"title": "Download Subtitles",
"type": "boolean"
},
"includeTranscript": {
"default": false,
"description": "Add a plain-text transcript from the first requested caption track.",
"prefill": false,
"title": "Include Transcript Text",
"type": "boolean"
},
"kvsName": {
"default": "",
"description": "Named key-value store name when storage=named_kvs. Defaults to youtube-downloader.",
"editor": "textfield",
"prefill": "",
"title": "KVS Name",
"type": "string"
},
"maxMB": {
"default": 500,
"description": "Reject oversized downloads. Values above 500 are only used for 4K opt-in downloads, which are capped at 1000 MB.",
"maximum": 1000,
"minimum": 1,
"prefill": 100,
"title": "Max MB Per Video",
"type": "integer"
},
"maxMinutes": {
"default": 30,
"description": "Reject a video before download when its duration exceeds this cap. 4K opt-in downloads are additionally capped at 10 minutes.",
"maximum": 30,
"minimum": 1,
"prefill": 30,
"title": "Max Minutes Per Video",
"type": "integer"
},
"maxVideos": {
"default": 10,
"description": "Total videos processed across all inputs.",
"maximum": 50,
"minimum": 1,
"prefill": 1,
"title": "Max Videos",
"type": "integer"
},
"mode": {
"default": "metadata",
"description": "What to return: metadata only, media files, or caption files without media.",
"editor": "select",
"enum": [
"metadata",
"download",
"subtitles"
],
"enumTitles": [
"Metadata only",
"Download media",
"Subtitles only"
],
"prefill": "metadata",
"title": "Mode",
"type": "string"
},
"playlistUrls": {
"default": [],
"description": "YouTube playlist URLs. Videos are expanded up to maxVideos in total.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Playlist URLs",
"type": "array"
},
"proxyConfiguration": {
"default": {
"useApifyProxy": true
},
"description": "Optional. Metadata and player extraction use this connection; media bytes are downloaded directly.",
"editor": "proxy",
"prefill": {
"useApifyProxy": true
},
"title": "Proxy Configuration",
"type": "object"
},
"s3AccessKeyId": {
"description": "Optional access key ID when storage=s3.",
"editor": "textfield",
"isSecret": true,
"title": "S3 Access Key ID",
"type": "string"
},
"s3Bucket": {
"description": "Bucket name when storage=s3.",
"editor": "textfield",
"title": "S3 Bucket",
"type": "string"
},
"s3Endpoint": {
"description": "Custom endpoint for S3-compatible storage such as Cloudflare R2.",
"editor": "textfield",
"title": "S3 Endpoint",
"type": "string"
},
"s3Prefix": {
"default": "youtube-downloader",
"description": "Object key prefix when storage=s3.",
"editor": "textfield",
"prefill": "youtube-downloader",
"title": "S3 Prefix",
"type": "string"
},
"s3PublicBaseUrl": {
"description": "Optional public bucket URL. When set, files use public URLs instead of expiring presigned URLs.",
"editor": "textfield",
"title": "S3 Public Base URL",
"type": "string"
},
"s3Region": {
"default": "auto",
"description": "Region for S3 or S3-compatible storage.",
"editor": "textfield",
"prefill": "auto",
"title": "S3 Region",
"type": "string"
},
"s3SecretAccessKey": {
"description": "Optional secret access key when storage=s3.",
"editor": "textfield",
"isSecret": true,
"title": "S3 Secret Access Key",
"type": "string"
},
"searchQueries": {
"default": [],
"description": "YouTube search phrases. Each query resolves public results up to maxVideos in total.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Search Queries",
"type": "array"
},
"storage": {
"default": "ephemeral_kvs",
"description": "Where downloaded files are written. Named KVS persists while the store exists; ephemeral KVS follows your Apify account retention.",
"editor": "select",
"enum": [
"ephemeral_kvs",
"named_kvs",
"s3"
],
"enumTitles": [
"Ephemeral Apify KVS",
"Named Apify KVS",
"S3 or S3-compatible (R2)"
],
"prefill": "ephemeral_kvs",
"title": "Storage",
"type": "string"
},
"storageRetentionDays": {
"default": 7,
"description": "Signed-link lifetime for S3/R2 storage (1-7 days). KVS retention is controlled by your Apify account.",
"maximum": 7,
"minimum": 1,
"prefill": 7,
"title": "Storage Retention Days",
"type": "integer"
},
"subtitleFormat": {
"default": "vtt",
"description": "File format for downloaded captions.",
"editor": "select",
"enum": [
"vtt",
"srt"
],
"enumTitles": [
"WebVTT (.vtt)",
"SubRip (.srt)"
],
"prefill": "vtt",
"title": "Subtitle Format",
"type": "string"
},
"subtitleLanguages": {
"default": [
"en"
],
"description": "Caption language codes to request. Only tracks that already exist on the video are used; translations are not promised.",
"editor": "select",
"items": {
"enum": [
"en",
"en-US",
"en-GB",
"es",
"es-419",
"pt",
"pt-BR",
"fr",
"de",
"it",
"nl",
"pl",
"ru",
"uk",
"tr",
"ar",
"fa",
"he",
"hi",
"bn",
"ta",
"te",
"mr",
"ur",
"gu",
"kn",
"ml",
"pa",
"zh-Hans",
"zh-Hant",
"ja",
"ko",
"vi",
"th",
"id",
"ms",
"fil",
"sv",
"no",
"da",
"fi",
"cs",
"sk",
"hu",
"ro",
"bg",
"el",
"hr",
"sr",
"sl",
"lt",
"lv",
"et",
"is",
"sq",
"mk",
"bs",
"ca",
"gl",
"eu",
"af",
"sw",
"am",
"km",
"lo",
"my",
"ne",
"si",
"ka",
"hy",
"az",
"kk",
"ky",
"uz",
"mn",
"mt",
"cy",
"ga"
],
"enumTitles": [
"English",
"English (US)",
"English (UK)",
"Spanish",
"Spanish (Latin America)",
"Portuguese",
"Portuguese (Brazil)",
"French",
"German",
"Italian",
"Dutch",
"Polish",
"Russian",
"Ukrainian",
"Turkish",
"Arabic",
"Persian",
"Hebrew",
"Hindi",
"Bengali",
"Tamil",
"Telugu",
"Marathi",
"Urdu",
"Gujarati",
"Kannada",
"Malayalam",
"Punjabi",
"Chinese (Simplified)",
"Chinese (Traditional)",
"Japanese",
"Korean",
"Vietnamese",
"Thai",
"Indonesian",
"Malay",
"Filipino",
"Swedish",
"Norwegian",
"Danish",
"Finnish",
"Czech",
"Slovak",
"Hungarian",
"Romanian",
"Bulgarian",
"Greek",
"Croatian",
"Serbian",
"Slovenian",
"Lithuanian",
"Latvian",
"Estonian",
"Icelandic",
"Albanian",
"Macedonian",
"Bosnian",
"Catalan",
"Galician",
"Basque",
"Afrikaans",
"Swahili",
"Amharic",
"Khmer",
"Lao",
"Burmese",
"Nepali",
"Sinhala",
"Georgian",
"Armenian",
"Azerbaijani",
"Kazakh",
"Kyrgyz",
"Uzbek",
"Mongolian",
"Maltese",
"Welsh",
"Irish"
],
"type": "string"
},
"prefill": [
"en"
],
"title": "Subtitle Languages",
"type": "array"
},
"videoQuality": {
"default": "720p",
"description": "SDR target quality. 360p-1080p prefer H.264/AAC MP4. 1440p and 2160p require allow4K and are delivered with their real codec and container.",
"editor": "select",
"enum": [
"360p",
"480p",
"720p",
"1080p",
"1440p",
"2160p",
"best"
],
"enumTitles": [
"360p",
"480p",
"720p (default)",
"1080p",
"1440p (requires allow4K)",
"2160p / 4K (requires allow4K)",
"Best available (capped at 1080p unless allow4K)"
],
"prefill": "360p",
"title": "Video Quality",
"type": "string"
},
"videoUrls": {
"default": [],
"description": "Direct YouTube video, Shorts, live-replay, or youtu.be URLs, or 11-character video IDs.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [
"https://www.youtube.com/watch?v=jNQXAC9IVRw"
],
"title": "Video URLs",
"type": "array"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "YouTube Video Downloader Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
videos | string | optional | Dataset containing one row per video, subtitle-only result, or failure. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "YouTube video metadata, media files, captions, transcripts, and honest failure rows.",
"properties": {
"videos": {
"description": "Dataset containing one row per video, subtitle-only result, or failure.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "YouTube Video Downloader dataset",
"type": "string"
}
},
"title": "YouTube Video, Playlist & Channel Downloader with Metadata Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"metadata": {
"display": {
"component": "table",
"properties": {
"comment_count": {
"label": "Comments"
},
"description": {
"label": "Description"
},
"download_status": {
"label": "Status"
},
"downloaded_at": {
"format": "datetime",
"label": "Processed At"
},
"like_count": {
"label": "Likes"
},
"thumbnail": {
"format": "image",
"label": "Thumbnail"
},
"title": {
"label": "Title"
},
"upload_date": {
"label": "Upload Date"
},
"uploader": {
"label": "Channel"
},
"video_id": {
"label": "Video ID"
},
"video_url": {
"format": "link",
"label": "Video URL"
},
"view_count": {
"label": "Views"
}
}
},
"title": "Video Metadata",
"transformation": {
"fields": [
"video_url",
"video_id",
"title",
"description",
"uploader",
"upload_date",
"duration_seconds",
"view_count",
"like_count",
"comment_count",
"thumbnail",
"download_status",
"downloaded_at"
]
}
},
"overview": {
"display": {
"component": "table",
"properties": {
"delivered_quality": {
"label": "Delivered"
},
"download_status": {
"label": "Status"
},
"download_url": {
"format": "link",
"label": "Download Link"
},
"downloaded_at": {
"format": "datetime",
"label": "Processed At"
},
"duration_seconds": {
"label": "Duration (s)"
},
"failure_code": {
"label": "Failure Code"
},
"filesize_bytes": {
"label": "Bytes"
},
"requested_quality": {
"label": "Requested"
},
"resolution": {
"label": "Resolution"
},
"storage_mode": {
"label": "Storage"
},
"title": {
"label": "Title"
},
"uploader": {
"label": "Channel"
},
"video_url": {
"format": "link",
"label": "Video URL"
}
}
},
"title": "YouTube Videos",
"transformation": {
"fields": [
"video_url",
"title",
"uploader",
"duration_seconds",
"download_status",
"failure_code",
"requested_quality",
"delivered_quality",
"resolution",
"filesize_bytes",
"download_url",
"storage_mode",
"downloaded_at"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
YouTube Video, Playlist & Channel Downloader with Metadata
Inspect or download YouTube videos from a direct link, a playlist, a channel, or a search phrase in one run. Every row carries the video's metadata, and download rows add a readable file link, the real container and codec, the requested and delivered quality, captions, and an optional transcript.
Use this actor only for content you own or are authorized to download. YouTube's Terms of Service may prohibit downloading content without permission, and you are responsible for complying with them. This actor is not affiliated with YouTube or Google, and it does not bypass DRM, private-video access, or geographic restrictions.
What this actor does
- Four input paths: direct video URLs, playlists, channels, and keyword search
- Metadata, download, or subtitles: choose what each run returns
- Compatible video: SDR 360p-1080p H.264/AAC MP4 when YouTube provides it
- Opt-in 4K: 1440p/2160p SDR with a 10-minute and 1000 MB cap
- Audio passthrough: M4A (AAC) or Opus, without a fake bitrate uplift
- Captions and transcript: WebVTT, SubRip, or plain text
- Honest failures: rows explain private, live, DRM, geo-blocked, oversized, and unavailable videos
- Empty fields are omitted — records only contain values that are actually populated
Output per video
record_type—video,failure, orinput_errorvideo_url,video_id,title,descriptionuploader,uploader_id,uploader_url,channel_idupload_date,duration_secondsview_count,like_count,comment_countthumbnail,tags[],categories[],is_liveplaylist_index— position inside a playlist, channel listing, or search resultsource_label—direct,playlist:...,channel:..., orsearch:...download_status—success,metadata_only,subtitles_only,failed,skipped_unsupported, orupload_failedfailure_code— e.g.private,removed,live_unsupported,drm_unsupported,geo_blocked,bot_check,too_long,too_large,no_formats,upload_failed,no_captions,captions_unavailableerror,retryablerequested_quality,delivered_quality,quality_matchcontainer,vcodec,acodec,dynamic_range,is_hdrwidth,height,resolution,fps,aspect_ratio,audio_onlyfilesize_bytes,total_bitrate_kbps,checksum_sha256download_url,storage_key,storage_mode,expires_atfour_k_cap_applied— present when the 4K duration/size cap governed the rowsubtitle_files[],subtitle_urls[],subtitle_languages[],caption_kindcaption_status—no_captions,captions_unavailable, orupload_failedwhen no caption file was producedtranscript— when transcript output is requestedvideo_meta— nested technical details for the downloaded filedownloaded_atsearch_query— on an input-error row for an empty search result
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | metadata |
metadata, download, or subtitles |
videoUrls |
array | — | Direct video, Shorts, replay, youtu.be URLs, or 11-character IDs |
playlistUrls |
array | — | Playlist URLs |
channelUrls |
array | — | Channel URLs, @handles, or UC... IDs |
searchQueries |
array | — | Search phrases |
videoQuality |
string | 720p |
360p, 480p, 720p, 1080p, 1440p, 2160p, or best |
container |
string | auto |
auto, mp4, webm, or mkv |
audioOnly |
boolean | false |
Download source audio only |
audioFormat |
string | m4a |
m4a (AAC) or opus |
downloadSubtitles |
boolean | false |
Fetch existing caption tracks |
subtitleLanguages |
array | ["en"] |
Language codes to request |
subtitleFormat |
string | vtt |
vtt or srt |
includeTranscript |
boolean | false |
Add a plain-text transcript |
maxVideos |
integer | 10 |
Total videos per run (1–50) |
maxMinutes |
integer | 30 |
Per-video duration cap (1–30) |
maxMB |
integer | 500 |
Per-video size cap; 4K opt-in allows up to 1000 |
allow4K |
boolean | false |
Enable 1440p/2160p SDR |
storage |
string | ephemeral_kvs |
ephemeral_kvs, named_kvs, or s3 |
kvsName |
string | — | Named KVS name |
storageRetentionDays |
integer | 7 |
Presigned S3/R2 link lifetime (1–7 days) |
s3Bucket, s3Prefix, s3Endpoint, s3Region |
string | — | S3 or R2 destination |
s3AccessKeyId, s3SecretAccessKey |
secret | — | Optional S3/R2 credentials |
s3PublicBaseUrl |
string | — | Use public bucket URLs instead of presigned links |
cookies |
secret | — | Optional Netscape cookies for authorized age-restricted or members-only access |
proxyConfiguration |
object | automatic | Optional connection override |
Examples
Metadata for one video
{
"mode": "metadata",
"videoUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"]
}
Download a 720p MP4
{
"mode": "download",
"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"videoQuality": "720p",
"container": "mp4",
"maxVideos": 1
}
Playlist with captions and transcript
{
"mode": "download",
"playlistUrls": ["https://www.youtube.com/playlist?list=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI"],
"videoQuality": "480p",
"maxVideos": 5,
"downloadSubtitles": true,
"subtitleLanguages": ["en"],
"subtitleFormat": "srt",
"includeTranscript": true
}
Search to audio
{
"mode": "download",
"searchQueries": ["public domain jazz"],
"audioOnly": true,
"audioFormat": "m4a",
"maxVideos": 3
}
Opt-in 4K SDR
{
"mode": "download",
"videoUrls": ["https://www.youtube.com/watch?v=LXb3EKWsInQ"],
"videoQuality": "2160p",
"container": "auto",
"allow4K": true,
"maxMinutes": 10,
"maxMB": 1000
}
Use cases
- Own-channel archiving — export metadata, captions, and small compatible files for channels you manage
- Authorized media research — collect titles, descriptions, dates, and public statistics for analysis
- Caption workflows — pull existing VTT or SRT tracks and transcript text for translation or accessibility
- Audio libraries — save authorized M4A or Opus audio without re-encoding
- Content audits — compare requested and delivered quality, codecs, and file sizes
- Pipeline integrations — one row per video with stable status and failure fields
FAQ
What can I download with this actor?
Content you own or are authorized to download. The actor does not grant rights to third-party media and does not bypass DRM, private access, or geographic restrictions.
Does it support live streams?
No. Live and upcoming broadcasts have no finite file and are returned as live_unsupported failure rows.
Can I download age-restricted or members-only videos?
Sometimes, when you have authorized access and supply your own cookies. Public videos work without cookies.
Does it bypass geo-blocks or DRM?
No. Geo-restricted and DRM-protected videos are reported as failure rows. Changing proxy settings is not a guaranteed workaround.
Where is the MP3 option?
There is no MP3 option because YouTube does not serve 320 kbps MP3. The actor passes through the source M4A (AAC) or Opus audio track and reports the real codec. Claiming a higher bitrate would only mean re-encoding and inflating the file.
Why did I get 480p when I asked for 720p?
Not every video has every resolution. The actor delivers the closest available quality at or below your request and sets quality_match to false when it had to step down.
Why is my 4K file MKV or WebM instead of MP4?
YouTube usually serves 1440p and 2160p as VP9 or AV1 video, often with Opus audio. Those streams are not H.264/AAC MP4. The actor keeps the real codec and container instead of mislabelling a file. Choose container: "auto" or mkv for 4K.
What are the download caps?
Each video is capped at 30 minutes and 500 MB by default, with at most 50 videos per run. Opt-in 4K is capped at 10 minutes and 1000 MB. A video outside the caps gets a too_long or too_large failure row instead of a partial file.
How long do download links last?
Ephemeral KVS links follow your Apify account's key-value store retention. Named KVS persists while the store exists. S3/R2 links are presigned for the configured retention period, or permanent when a public bucket URL is configured. KVS file URLs do not support HTTP Range requests, so use S3/R2 when a downstream system needs resumable or partial downloads.
Do I need to set up a proxy?
No. The actor chooses a working connection automatically for metadata and player access. Media bytes are fetched directly whenever possible.
What happens when a video fails?
The run continues and writes a failure row with failure_code, error, and retryable. A failed row never claims a download link.
Is this affiliated with YouTube?
No. This is an independent third-party tool and is not affiliated with, endorsed by, or sponsored by YouTube or Google.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build tyaMzg62TcJZfZ4Pv. Documentation is regenerated from the default published build; private drafts are not included.