YouTube Shorts Media Downloader avatar

YouTube Shorts Media Downloader

Pricing

from $2.99 / 1,000 shorts downloads

Go to Apify Store
YouTube Shorts Media Downloader

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

w3crawler

Maintained by Community

Actor 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.

FieldType and defaultDescription
videoUrlsstring array; required; 1–100Public /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.
maxItemsinteger; effective default min(20, videoUrls.length); 1–100Maximum normalized references processed from the submitted list.
qualityenum; bestPreference: best, hd, sd, or lowest. The selector tries the preference first and may fall back to another public playable format when needed.
proxyConfigurationobject; noneOptional account-authorized Apify Proxy configuration or credential-free HTTP/SOCKS proxy URLs. Supported keys are useApifyProxy, apifyProxyGroups/groups, apifyProxyCountry, and proxyUrls.
enableProxyFallbackboolean; falseAfter a failed direct attempt, allow one ordinary request through the configured Apify Proxy. This does not bypass authentication, CAPTCHA, or access controls.
requestDelayMsinteger; 250; 0–5000Delay between valid download attempts.
requestTimeoutSecsinteger; 60; 15–180Bounded 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

  1. Open the Actor and click Start.
  2. In Input, paste one of the JSON examples above or enter the fields in the form.
  3. Confirm the target references, media quality, timeout, and any account-authorized proxy settings.
  4. Click Start and wait for the run to finish.
  5. Open the Dataset for verified metadata rows, the media_* key in the run’s key-value store for the bytes, and OUTPUT for 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

GroupFieldsSemantics
Identity and verificationrecordType, inputUrl, inputRank, videoId, title, shortsUrl, watchUrl, canonicalUrl, inputKind, isVerifiedShort, shortsValidationIdentifies the submitted reference and the public evidence used to classify it as a Short.
Duration and channeldurationSeconds, durationFormatted, channelName, channelId, channelUrl, channelProfileUrl, uploader, uploaderId, uploaderUrlPublic metadata returned by the extractor. URLs are retained only for public YouTube origins.
Public metadatauploadDate, timestamp, viewCount, likeCount, commentCount, channelFollowerCount, description, descriptionLength, categories, tags, tagCount, hashtags, hashtagCount, language, availability, ageLimit, liveStatus, isLive, wasLive, isUnlistedPoint-in-time values exposed by the public extractor. Missing values are omitted rather than invented.
ThumbnailsthumbnailUrl, thumbnails, thumbnailCountPublic image URLs only; no signed media URL is stored.
ArtifactfileName, fileSizeBytes, fileSizeMiB, fileSha256, mimeType, fileExtension, mediaProbeFacts about the bytes actually written to the run key-value store. mediaProbe is produced by ffprobe.
StoragekeyValueStoreId, keyValueStoreKey, keyValueStoreUrlIdentifies and retrieves the stored media artifact. The URL is an Apify API URL, not a YouTube media URL.
Formats and provenancedownloadQualityPreference, availableFormats, availableFormatCount, metadataEnriched, metadataSource, extractionMethod, sourceType, source, status, downloadedAtPublic 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 inputRank and inputUrl.
  • maxItems limits 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.
  • requestDelayMs paces valid download attempts. requestTimeoutSecs bounds 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.

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.