YouTube Shorts Media Downloader
Pricing
from $2.99 / 1,000 shorts downloads
YouTube Shorts Media Downloader
Download verified YouTube Shorts as playable media files into the default key-value store and emit checksummed storage references with rich metadata.
Pricing
from $2.99 / 1,000 shorts downloads
Rating
0.0
(0)
Developer
w3crawler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What this Actor does
YouTube Shorts Media Downloader accepts public YouTube Short references, verifies that each target is a real Short, downloads the public media with yt-dlp's default public extractor, validates the container with ffprobe, stores the verified bytes in the run's default key-value store, and writes one checksummed metadata row per successful download.
Supported targets are public pages on YouTube, including /shorts/, /watch, youtu.be, and /embed URLs, plus bare 11-character video IDs. A submitted reference is not treated as a successful Short merely because its path contains /shorts/: public metadata must report a positive duration of no more than three minutes. The Actor does not download playlists, private content, age-gated/login-gated content, or media through private player clients.
Scope, sources, and boundaries
- Metadata source: yt-dlp's ordinary public YouTube extractor.
- Media source: the public video selected by yt-dlp's standard format selection.
- Verification: the public duration must be at most 180 seconds, the file must be non-empty, and ffprobe must find a positive-duration video stream whose reported size matches the stored bytes.
- Storage: media bytes are written under keys such as
media_jNQXAC9IVRw.mp4; metadata rows contain the key and API retrieval URL. - The Actor does not use private or alternate player clients, fingerprint spoofing, stealth patches, CAPTCHA/login bypass, cookies, authorization headers, or hidden request identity fields.
Input
videoUrls is required and accepts 1–100 strings. References are normalized and duplicate video IDs are processed once; invalid references are reported in run logs and never produce dataset rows. If maxItems is omitted, the runtime processes up to the smaller of 20 and the number of submitted references.
| Field | Type and default | Description |
|---|---|---|
videoUrls | string array; required; 1–100 | Public /shorts/, /watch, youtu.be, or /embed URLs, or bare 11-character video IDs. Each target must be confirmed as a Short by public duration metadata. |
maxItems | integer; effective default min(20, videoUrls.length); 1–100 | Maximum normalized references processed from the submitted list. |
quality | enum; best | Preference: best, hd, sd, or lowest. The selector tries the preference first and may fall back to another public playable format when needed. |
proxyConfiguration | object; none | Optional account-authorized Apify Proxy configuration or credential-free HTTP/SOCKS proxy URLs. Supported keys are useApifyProxy, apifyProxyGroups/groups, apifyProxyCountry, and proxyUrls. |
enableProxyFallback | boolean; false | After a failed direct attempt, allow one ordinary request through the configured Apify Proxy. This does not bypass authentication, CAPTCHA, or access controls. |
requestDelayMs | integer; 250; 0–5000 | Delay between valid download attempts. |
requestTimeoutSecs | integer; 60; 15–180 | Bounded timeout used for metadata/media download attempts. |
Proxy URLs must use http, https, socks4, or socks5 and must not contain a username or password. The runtime rejects unknown input or proxy fields, invalid types, invalid ranges, unsupported protocols, and proxy credentials.
Minimal public Short input
{"videoUrls": ["https://www.youtube.com/shorts/jNQXAC9IVRw"]}
Multiple references and a quality preference
{"videoUrls": ["https://www.youtube.com/shorts/jNQXAC9IVRw","jNQXAC9IVRw","https://www.youtube.com/watch?v=jNQXAC9IVRw"],"maxItems": 1,"quality": "lowest","requestDelayMs": 0,"requestTimeoutSecs": 60}
Explicit authorized proxy input
{"videoUrls": ["https://www.youtube.com/shorts/jNQXAC9IVRw"],"maxItems": 1,"quality": "hd","enableProxyFallback": false,"requestDelayMs": 250,"requestTimeoutSecs": 90,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["BUYPROXIES94952"],"apifyProxyCountry": "US"}}
Run it in Apify Console
- Open the Actor and click Start.
- In Input, paste one of the JSON examples above or enter the fields in the form.
- Confirm the target references, media quality, timeout, and any account-authorized proxy settings.
- Click Start and wait for the run to finish.
- Open the Dataset for verified metadata rows, the
media_*key in the run’s key-value store for the bytes, andOUTPUTfor counts and diagnostic summaries.
Output records
Rich successful download record
The following is a representative verified record. Values such as counts, codecs, file size, and checksum are observed at download time.
{"recordType": "youtube_short_download","inputUrl": "https://www.youtube.com/shorts/jNQXAC9IVRw","inputRank": 1,"videoId": "jNQXAC9IVRw","title": "Example public Short","shortsUrl": "https://www.youtube.com/shorts/jNQXAC9IVRw","watchUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw","canonicalUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw","inputKind": "shorts-url","isVerifiedShort": true,"shortsValidation": "input-shorts-url","durationSeconds": 19,"durationFormatted": "0:19","channelName": "Example Channel","channelId": "UCxxxxxxxxxxxxxxxxxxxxxx","channelUrl": "https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx","channelProfileUrl": "https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx","uploader": "Example Channel","uploaderId": "example-channel","uploaderUrl": "https://www.youtube.com/@example-channel","uploadDate": "2026-09-08","timestamp": 1788868800,"viewCount": 123456,"likeCount": 12000,"commentCount": 300,"channelFollowerCount": 1000000,"description": "A public Short description","descriptionLength": 27,"categories": ["Entertainment"],"tags": ["short", "video"],"tagCount": 2,"hashtags": ["short", "music"],"hashtagCount": 2,"language": "en","availability": "public","ageLimit": 0,"liveStatus": "not_live","isLive": false,"wasLive": false,"isUnlisted": false,"thumbnailUrl": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg","thumbnails": ["https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg"],"thumbnailCount": 1,"fileName": "jNQXAC9IVRw.mp4","fileSizeBytes": 1234567,"fileSizeMiB": 1.177,"fileSha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef","mimeType": "video/mp4","fileExtension": "mp4","mediaProbe": {"containerFormat": "mov,mp4,m4a,3gp,3g2,mj2","mediaDurationSeconds": 19.04,"hasVideo": true,"hasAudio": true,"videoCodec": "h264","audioCodec": "aac","width": 320,"height": 240},"keyValueStoreId": "abcdef1234567890","keyValueStoreKey": "media_jNQXAC9IVRw.mp4","keyValueStoreUrl": "https://api.apify.com/v2/key-value-stores/abcdef1234567890/records/media_jNQXAC9IVRw.mp4","downloadQualityPreference": "lowest","availableFormats": [{"formatId": "18","extension": "mp4","resolution": "320x240","width": 320,"height": 240,"fps": 30,"videoCodec": "avc1.42001E","audioCodec": "mp4a.40.2","totalBitrateKbps": 600,"fileSizeBytes": 1234567,"protocol": "https","hasVideo": true,"hasAudio": true}],"availableFormatCount": 1,"metadataEnriched": true,"metadataSource": "yt-dlp-public","extractionMethod": "yt-dlp-default-public-extractor","sourceType": "youtube-short","source": "youtube-public-watch-page","status": "DOWNLOADED","downloadedAt": "2026-09-08T12:00:00.000Z"}
Quality fallback record
The requested quality is a preference. If no exact bounded format is available, yt-dlp may select another public playable format; the row still reports the requested preference and the actual mediaProbe facts.
{"recordType": "youtube_short_download","videoId": "jNQXAC9IVRw","isVerifiedShort": true,"shortsValidation": "duration-within-three-minute-shorts-limit","durationSeconds": 19,"downloadQualityPreference": "hd","fileExtension": "mp4","mimeType": "video/mp4","mediaProbe": {"mediaDurationSeconds": 19.04,"hasVideo": true,"hasAudio": true,"width": 320,"height": 240},"availableFormatCount": 3,"status": "DOWNLOADED"}
OUTPUT run summary
The Actor writes this JSON object under the OUTPUT key in the default key-value store. status reports the Apify run outcome; dataStatus distinguishes complete, partial, empty, and failed results. diagnosticCount counts bounded diagnostic log entries, not dataset rows.
{"runType": "youtube-public-shorts-download-run","status": "SUCCEEDED","dataStatus": "COMPLETE","dataAvailable": true,"requestedVideoCount": 1,"processedVideoCount": 1,"itemCount": 1,"diagnosticCount": 0,"failedCount": 0,"blockedCount": 0,"proxyRequested": false,"proxyConfigured": false,"maxItems": 1,"quality": "lowest","enableProxyFallback": false,"requestDelayMs": 250,"requestTimeoutSecs": 60,"durationMs": 12000,"finishedAt": "2026-09-08T12:00:12.000Z"}
Field reference and semantics
| Group | Fields | Semantics |
|---|---|---|
| Identity and verification | recordType, inputUrl, inputRank, videoId, title, shortsUrl, watchUrl, canonicalUrl, inputKind, isVerifiedShort, shortsValidation | Identifies the submitted reference and the public evidence used to classify it as a Short. |
| Duration and channel | durationSeconds, durationFormatted, channelName, channelId, channelUrl, channelProfileUrl, uploader, uploaderId, uploaderUrl | Public metadata returned by the extractor. URLs are retained only for public YouTube origins. |
| Public metadata | uploadDate, timestamp, viewCount, likeCount, commentCount, channelFollowerCount, description, descriptionLength, categories, tags, tagCount, hashtags, hashtagCount, language, availability, ageLimit, liveStatus, isLive, wasLive, isUnlisted | Point-in-time values exposed by the public extractor. Missing values are omitted rather than invented. |
| Thumbnails | thumbnailUrl, thumbnails, thumbnailCount | Public image URLs only; no signed media URL is stored. |
| Artifact | fileName, fileSizeBytes, fileSizeMiB, fileSha256, mimeType, fileExtension, mediaProbe | Facts about the bytes actually written to the run key-value store. mediaProbe is produced by ffprobe. |
| Storage | keyValueStoreId, keyValueStoreKey, keyValueStoreUrl | Identifies and retrieves the stored media artifact. The URL is an Apify API URL, not a YouTube media URL. |
| Formats and provenance | downloadQualityPreference, availableFormats, availableFormatCount, metadataEnriched, metadataSource, extractionMethod, sourceType, source, status, downloadedAt | Public format summaries omit media URLs. Provenance and status describe the verified download. |
Nested mediaProbe contains containerFormat, mediaDurationSeconds, hasVideo, hasAudio, videoCodec, audioCodec, width, and height. Nested availableFormats contains format identifiers, extension, dimensions, codecs, bitrate/size estimates, protocol labels, and audio/video booleans, but never the source URL.
Deduplication, limits, and omissions
- References are normalized to a video ID and deduplicated before download; the first submitted occurrence supplies
inputRankandinputUrl. maxItemslimits normalized references processed; it is a maximum, not a promise of successful rows. Invalid, blocked, removed, or non-Short references reduce the successful count.- There is no pagination, search query, filter, or sort operation. Each input is an independent public watch-page download, processed in submitted order.
requestDelayMspaces valid download attempts.requestTimeoutSecsbounds the metadata/media attempt; yt-dlp and ffprobe can still fail earlier when the public source is unavailable.- The Actor omits absent public metadata, and it never stores cookies, authorization, proxy credentials/URLs, request identities, fingerprint data, alternate-client parameters, signed media URLs, streaming URLs, playback URLs, or downloaded metadata beyond the verified artifact and its public facts.
Proxy behavior and cost
Without an explicit proxy configuration, the Actor attempts the public target directly. When enableProxyFallback is true, a failed direct attempt may be followed by one request through the configured Apify Proxy. With explicit proxy settings, the resolved proxy is used for the attempt. OUTPUT.proxyRequested and OUTPUT.proxyConfigured report this state without exposing proxy details. A proxy is not a guarantee of availability and is not an access-control or CAPTCHA bypass.
Actor cost is driven by Apify compute time, key-value-store storage, and any proxy traffic used by your account; the Actor does not add a fixed per-result fee. Downloading media generally costs more storage and time than metadata-only scraping. Check current Apify pricing and the run’s resource usage for the authoritative amount.
Troubleshooting
The target is rejected as not a Short
Use a public /shorts/ or watch URL and confirm that the public extractor reports a positive duration no greater than 180 seconds. A /shorts/ path alone is not enough if the public metadata is unavailable or the content is longer than the Shorts limit.
The run has errors and no media key
Review the run logs and OUTPUT.blockedCount. A non-empty file is stored only after yt-dlp completes and ffprobe confirms a playable video stream with matching file size. No media key or dataset row is created for an invalid, blocked, removed, private, or failed target.
The result uses a different quality than requested
quality is a preference. Public format availability varies; inspect availableFormats, downloadQualityPreference, fileExtension, and mediaProbe to see what was actually stored.
Proxy fallback is not used
Fallback is disabled by default and requires enableProxyFallback: true plus a configuration that can resolve in the current Apify account. Proxy credentials are rejected. If the direct target succeeds, fallback is not attempted.
API and support
The Actor’s Console API tab exposes the current dataset and key-value-store links. Use the Apify API documentation to read dataset rows, read OUTPUT, and download the keyValueStoreKey media record. For Issues or support, provide the Actor run ID, sanitized input, public target, and relevant log code; never include credentials, cookies, or proxy secrets.
Privacy, legal, and non-affiliation
Use this Actor only for public content and in accordance with YouTube’s Terms of Service, applicable law, copyright rules, and site-specific limits. You are responsible for lawful targets, rights to download or retain the media, rate limits, and any personal information in the resulting export. The Actor does not log in, access private content, bypass CAPTCHAs, or evade access controls.
This Actor is an independent community tool and is not affiliated with, endorsed by, or sponsored by YouTube, Google, or YouTube Music. Names and trademarks belong to their respective owners.
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.