YouTube Video Downloader & Metadata Extractor avatar

YouTube Video Downloader & Metadata Extractor

Under maintenance

Pricing

from $3.99 / 1,000 results

Go to Apify Store
YouTube Video Downloader & Metadata Extractor

YouTube Video Downloader & Metadata Extractor

Under maintenance

Downloads YouTube videos using yt-dlp with support for multiple quality levels (144p-4K), various formats (MP4, WebM, MP3, etc.), and cloud storage uploads (AWS S3, Azure Blob, Google Cloud). Extracts comprehensive video metadata including title, description, channel info, vie.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Coding Frontned

Coding Frontned

Maintained by Community

Actor stats

0

Bookmarked

50

Total users

4

Monthly active users

24 days ago

Last modified

Security

Limited permissions

Share

YouTube Video Downloader and Metadata Extractor

Download a public YouTube video or its audio when the public watch page provides accessible media, save the file to the run's key-value store, and receive a dataset row with source metadata and properties measured from the saved file. Optional cloud-storage settings save additional copies. The actor accepts up to 100 video links per run.

The input form is prefilled with YouTube's public video Me at the zoo. The prefill is a convenient example link; it does not guarantee that a video will be available from every run's network.

Run the actor

  1. Open Input and add one or more video links under Videos.
  2. Choose a format and adjust the optional limits if needed.
  3. Add proxy or cloud-storage settings only if you need them.
  4. Select Save & Start. When the run finishes, open Storage → Dataset for saved video records and Key-value store → OUTPUT_SUMMARY for the run summary.

Input

videos is required and accepts one to 100 objects, each containing only a url field. Supported links are HTTPS YouTube watch, Shorts, embed, and youtu.be video links. The actor validates the video ID, converts accepted links to the canonical YouTube watch URL, and downloads duplicate video IDs only once, keeping their first position. It does not accept channel, playlist, or search pages.

FieldTypeRequired?DefaultWhat it does
videosArray of { "url": string } objectsRequired; 1–100 itemsOne public video link is prefilledVideos to download. Each URL must identify one video.
preferredQualityStringOptional720pMaximum requested video height. Choices: 144p, 240p, 360p, 480p, 720p, 1080p, 1440p, 2160p. Audio-only formats ignore this setting.
preferredFormatStringOptionalmp4Requested container or audio format. Choices: avi, flv, mkv, mov, mp4, webm, aac, aiff, alac, flac, m4a, mka, mp3, ogg, opus, vorbis, wav.
filenameTemplatePartsArray of stringsOptional; 1–3 unique values["title"]Adds selected title, uploader, or timestamp after the video ID in the saved filename. The final name is sanitized.
maxFileSizeMbytesIntegerOptional; 1–512128Maximum file size in megabytes. Larger files are skipped.
maxDurationSecondsIntegerOptional; 1–7200900Maximum duration for videos whose duration is available before download.

ALAC is saved in an .m4a container, Vorbis in .ogg, and MKA in a Matroska audio container. Audio conversions use FFmpeg when needed. The result's format reports the selected format or codec, while the filename uses the saved container's extension.

Proxy and cloud storage

Direct connections are used by default. proxyConfiguration uses the standard Apify proxy editor. Enable Use Apify Proxy to select managed proxy groups or a country, or supply custom HTTP(S) proxy URLs. Managed settings and custom URLs cannot be combined. The input is validated before the Actor uses it. Apify Proxy may incur charges under your account's current plan.

Proxy settingTypeDefaultWhat it does
useApifyProxyBooleanfalseUses an Apify-managed proxy when set to true.
apifyProxyGroupsArray of stringsNoneUp to 10 managed proxy group names; requires useApifyProxy: true.
apifyProxyCountryTwo-letter stringNoneManaged proxy country code; requires useApifyProxy: true.
proxyUrlsArray of HTTP(S) URLsNoneUp to 25 custom proxy origins, each up to 2,048 characters. Use an origin only, without a path, query, or fragment. Proxy URL credentials are accepted but are not returned in the dataset.
FieldTypeRequired?DefaultWhat it does
proxyConfigurationObjectOptional{ "useApifyProxy": false }Configures the standard Apify proxy editor. Managed groups and a country require useApifyProxy: true; custom proxy URLs are limited to 25 origin URLs.
s3AccessKeyIdSecret stringOptional; requires the other S3 fieldsNoneAWS access key ID.
s3SecretAccessKeySecret stringOptional; requires the other S3 fieldsNoneAWS secret access key.
s3BucketStringOptional; requires the other S3 fieldsNoneExisting S3 bucket. Objects are uploaded with private access.
s3RegionStringOptionalus-east-1AWS region. Use lowercase letters, numbers, and hyphens.
azureConnectionStringSecret stringOptional; requires azureContainerNameNoneAzure Storage connection string.
azureContainerNameStringOptional; requires azureConnectionStringNoneAzure Blob Storage container.
googleCloudServiceKeySecret stringOptional; requires googleCloudBucketNameNoneGoogle Cloud service-account JSON.
googleCloudBucketNameStringOptional; requires googleCloudServiceKeyNoneGoogle Cloud Storage bucket.

For each provider, enter its complete set of settings. Every validated media file is saved in the run's default key-value store under its generated filename. Configured cloud providers receive additional copies, and successful uploads add their URLs to the dataset row. If one provider succeeds and another configured provider fails, the saved result can still include the successful link and the run can be marked partial. Keep credentials in secret input fields; do not put them in shared input files or examples. Cloud object access follows the permissions and policies in your storage account; S3 uploads are private.

Results

The dataset contains one row per video file that was successfully saved. Failed downloads do not create rows. Optional metadata is omitted when the source does not provide it.

An acknowledged run result is not yet available for a complete dataset example. The dataset example below therefore shows the correct empty-array form, not a sample video record.

[]

The result is mostly flat. categories, tags, subtitleLanguages, and thumbnails are arrays of strings; chapters is an array of objects with a title, start time, and optional end time. A saved row requires videoId, url, title, filename, format, mimeType, fileSizeBytes, and fileSha256. Other metadata and storage links are optional.

FieldTypeRequired?Meaning
videoIdStringRequiredNative YouTube video ID, checked against the video link.
urlURL stringRequiredCanonical YouTube watch URL for this video.
titleStringRequiredVideo title.
filenameStringRequiredActual saved filename and key-value-store file key.
uploaderStringOptionalUploader name published by YouTube.
uploaderIdStringOptionalUploader identifier.
uploaderUrlURL stringOptionalPublic uploader page.
channelStringOptionalChannel name published by YouTube.
channelIdStringOptionalNative YouTube channel ID.
channelUrlURL stringOptionalPublic channel page.
channelFollowerCountIntegerOptionalChannel follower count when available.
channelIsVerifiedBooleanOptionalWhether YouTube marks the channel as verified.
durationNumberOptionalDuration reported in video metadata, in seconds.
durationFormattedStringOptionalSource duration as a readable time string.
mediaDurationNumberOptionalDuration measured from the downloaded file, in seconds.
uploadDateDate stringOptionalUpload date reported by YouTube.
timestampIntegerOptionalUpload time as Unix seconds.
releaseDateDate stringOptionalRelease date reported by the source.
releaseTimestampIntegerOptionalRelease time as Unix seconds.
viewCountIntegerOptionalVideo view count.
likeCountIntegerOptionalVideo like count.
commentCountIntegerOptionalVideo comment count.
descriptionStringOptionalFull video description, including source-published chapter text when present.
categoriesArray of stringsOptionalVideo categories published by YouTube.
tagsArray of stringsOptionalVideo tags or keywords published by YouTube.
tagCountIntegerOptionalNumber of source-published tags retained in tags.
languageStringOptionalVideo language.
availabilityStringOptionalAvailability status reported by the source.
ageLimitIntegerOptionalAge restriction when provided.
licenseStringOptionalVideo license reported by the source.
liveStatusStringOptionalLive-stream status reported for the video.
wasLiveBooleanOptionalWhether YouTube identifies the video as a past live stream.
thumbnailUrlURL stringOptionalPrimary public thumbnail image.
thumbnailsArray of URL stringsOptionalPublic thumbnail image URLs.
thumbnailCountIntegerOptionalNumber of thumbnail URLs retained in thumbnails.
subtitleLanguagesArray of stringsOptionalSubtitle language labels. Caption URLs are not included.
chaptersArray of objectsOptionalSource-published chapters in order. Each has required title (string) and startTime (number of seconds), plus optional endTime (number of seconds).
formatStringRequiredFormat verified for the saved file.
mimeTypeStringRequiredMIME type matching the saved format.
fileSizeBytesIntegerRequiredPositive size measured from the saved file, in bytes.
fileSha256StringRequiredSHA-256 checksum of the saved file.
widthIntegerOptionalVideo width measured from the saved file, in pixels.
heightIntegerOptionalVideo height measured from the saved file, in pixels.
fpsNumberOptionalFrame rate measured from the saved file.
videoCodecStringOptionalVideo codec measured from the saved file.
audioCodecStringOptionalAudio codec measured from the saved file.
audioChannelsIntegerOptionalAudio channel count measured from the saved file.
audioSampleRateIntegerOptionalAudio sample rate measured from the saved file, in hertz.
bitRateIntegerOptionalOverall media bit rate measured from the saved file, in bits per second.
s3UrlURL stringOptionalS3 object locator when upload succeeds; it may require credentials to read.
azureUrlURL stringOptionalAzure blob locator when upload succeeds; it may require credentials to read.
googleCloudUrlURL stringOptionalGoogle Cloud Storage locator when upload succeeds; it may require credentials to read.
keyValueStoreUrlURL stringOptionalLink to the file saved under its filename in the run's key-value store, when a real store ID is available.

You can download the dataset in formats such as JSON, CSV, or Excel.

Run summary

The run summary is stored separately from video rows under the exact key OUTPUT_SUMMARY in the default key-value store. It contains only these three fields:

{
"status": "FAILED",
"itemsStored": 0,
"isPartial": false
}

This shows the summary shape for a run with no saved rows; it is not a report of a particular Actor run.

FieldTypeMeaning
statusStringSUCCEEDED when at least one dataset row is saved; otherwise FAILED.
itemsStoredNonnegative integerNumber of successful dataset writes acknowledged during the run.
isPartialBooleantrue when some work fails after at least one row has been saved.

Access and cost

  • A video must be reachable from the run's network location. Private, removed, age-restricted, region-restricted, or otherwise unavailable videos may fail.
  • YouTube may change its access requirements. A valid link does not guarantee a download. The actor uses public watch-page data and stops internal player API fallbacks that YouTube disallows in its robots guidance; it does not use account cookies or verification workarounds.
  • Each download has a 120-second processing limit, including conversion and media checks. Optional provider copies have a 90-second limit each. A cloud run also stops early enough to save its results and summary before its configured timeout.
  • Use only videos and content you are allowed to download, and follow YouTube's terms and your storage provider's terms.
  • Costs depend on runtime, file size, selected quality, any FFmpeg conversion, proxy use, and cloud storage or transfer. Check current pricing in your Apify account and with your storage provider.