Universal Video Downloader and Converter avatar

Universal Video Downloader and Converter

Pricing

Pay per usage

Go to Apify Store
Universal Video Downloader and Converter

Universal Video Downloader and Converter

Download videos from 1000s of sites or your own URLs, then convert, compress, trim, resize, extract audio (MP3/M4A), grab thumbnails, or make GIFs — all in one run. Fast, reliable media processing with flexible output. Perfect for content creators, archivers, and automation workflows.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Harish Garg

Harish Garg

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

What does Universal Video Downloader and Converter do?

Universal Video Downloader and Converter downloads videos from YouTube, TikTok, Vimeo, X/Twitter, Facebook, Instagram, SoundCloud, podcast feeds, and 1000+ other sites — or from any direct media file URL you already have — and then, in the same run, can convert the format, compress, trim, resize, extract audio (MP3/M4A and more), grab a thumbnail, or turn a segment into a GIF. Give it a list of URLs and it processes them all with the settings you choose, saving every output file to storage with a direct download link.

It's built on FFmpeg for fast, reliable media processing and yt-dlp for broad site coverage. Powered by the Apify platform, you get API access, scheduling, webhook integrations, proxy rotation, and data export — all without managing any infrastructure.

YouTube and TikTok are downloaded through dedicated downloaders. Their anti-bot and login walls make direct extraction unreliable, so YouTube links go through the maintained streamers/youtube-video-downloader Actor and TikTok through clockworks/tiktok-scraper, with a built-in fallback to in-process yt-dlp. This affects pricing for those two sources — see Pricing.

Why use Universal Video Downloader and Converter?

  • One tool, whole pipeline — Download and convert/compress/trim/resize/clip in a single run instead of stitching together separate tools.
  • Bulk downloading — Hand it a list of URLs and collect every file from one dataset.
  • Content repurposing — Pull a clip, make a GIF for social, or extract the audio for a podcast feed.
  • Archiving — Save public videos in a consistent format (e.g. everything as MP4 720p) for long-term storage.
  • Automation workflows — Call it from the API, run it on a schedule, or chain it after your own scraper via webhooks and feed it the media URLs it produced.
  • Storage savings — Compress or downscale on the way in so you only keep what you need.

Supported sources at a glance

SourceHow to pass itNotes
YouTubeWatch/Shorts URLDownloading is delegated to a maintained downloader for reliability; the per-MB download fee is waived (see Pricing).
TikTokVideo URLDelegated downloader returns the no-watermark video, plus full metadata (title, author, views).
Vimeo, X/Twitter, SoundCloud, Dailymotion, Reddit, podcast RSS, + 1000+ yt-dlp sitesPublic page/episode URLMust be public — login/age-walled posts can't be fetched anonymously.
Facebook / InstagramThe page URL (facebook.com / instagram.com)Prefer the post page URL so the Actor resolves a fresh stream. A raw fbcdn.net / cdninstagram.com link works only if it's a progressive .mp4 and hasn't expired.
Skool lessonsThe lesson page URL (skool.com/...?md=...)Resolves embedded Loom/YouTube/Vimeo players and self-hosted Mux videos.
Your own hosted files (S3, Google Drive, Dropbox, your CDN, Apify Key-Value Store)Direct public file linkmp4, mkv, webm, mov, mp3, m4a, wav, flac, … — downloaded as-is, then processed.

Rule of thumb: paste a web page URL for a platform, or a direct file link for your own media. You can mix both in one startUrls list.

How to download and convert videos

  1. Open the Actor and click Try for free.
  2. Add your URLs to Source URLs — one per line, page URLs or direct file links, in any mix.
  3. Pick what you want (all optional): a download quality, an output format (or keep the original), and any transforms — resize, compress, trim, extract audio, thumbnail, or GIF.
  4. Run the Actor and wait for it to finish.
  5. Download your files from the Storage → Key-value store tab, or get direct links and metadata from the Dataset (Output) tab.

No external API keys required.

Run it via API or on a schedule

Most production usage drives this Actor through the Apify API. Start a run with a single POST:

curl -X POST "https://api.apify.com/v2/acts/hgservices~video-downloader-converter/runs?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{ "url": "https://www.youtube.com/watch?v=aqz-KE-bpKQ" }],
"format": "mp4",
"videoQuality": "720p"
}'

Or with the Apify client (the Actor slug is hgservices/video-downloader-converter):

run = client.actor("hgservices/video-downloader-converter").call(run_input={
"startUrls": [{"url": "https://www.youtube.com/watch?v=aqz-KE-bpKQ"}],
"format": "mp4",
"extractAudio": True,
"audioFormat": "mp3",
})

To run it unattended, point a Schedule at it, or fire it from your own scraper's success event with webhooks and feed the scraped media URLs into startUrls.

Input

The only required input is startUrls. Everything else is optional and applies to every URL in the run.

FieldTypeDescription
startUrlsarrayURLs to download — platform page URLs or direct media file links (any mix)
videoQualityenumMax download resolution for platforms: best (default), 2160p, 1440p, 1080p, 720p, 480p, 360p
formatenumOutput container: original (default, no re-encode), mp4, mkv, webm, mov, avi
resizeenumRe-encode down to a height: none (default), 1440p, 1080p, 720p, 480p, 360p, 240p
compressenumRe-encode smaller: none (default), low, medium, high
trimStart / trimEndstringKeep only this segment (seconds or HH:MM:SS); applies to video + extracted audio
extractAudiobooleanAlso save an audio-only file (default false)
audioFormatenummp3 (default), m4a, aac, opus, ogg, wav, flac
thumbnailbooleanAlso save a still frame as JPEG (default false)
thumbnailTimestringWhen to grab it (seconds or HH:MM:SS); empty = middle of the video
gifbooleanAlso create a looping GIF (default false)
gifStart / gifDuration / gifFps / gifWidthstring/intGIF segment start, length (s), frame rate, and width
maxDurationMinutesintegerSkip sources longer than this, before download (default 180; 0 = no limit)
maxFileSizeMbintegerCap on a single direct-file download (default 2048)
proxyConfigurationobjectOptional Apify Proxy (off by default)

format: "original" is the fastest and is lossless — use it when you just want the file. Any of format (other than original), resize, compress, or trim causes a re-encode of the video.

Output

Every produced file is stored in the run's key-value store with a direct download URL, and a summary row is pushed to the dataset (the Output tab) for each source URL:

{
"url": "https://www.youtube.com/watch?v=aqz-KE-bpKQ",
"sourceType": "platform",
"platform": "youtube",
"videoId": "aqz-KE-bpKQ",
"title": "Big Buck Bunny",
"channel": "Blender",
"uploadDate": "2008-05-20",
"viewCount": 12345678,
"sourceThumbnailUrl": "https://i.ytimg.com/vi/aqz-KE-bpKQ/maxresdefault.jpg",
"durationSeconds": 635.0,
"width": 1280,
"height": 720,
"videoFormat": "mp4",
"isAudioOnly": false,
"downloadDelegated": true,
"status": "ok",
"videoFileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/01-big-buck-bunny-video.mp4",
"audioFileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/01-big-buck-bunny-audio.mp3",
"thumbnailFileUrl": null,
"gifFileUrl": null,
"outputs": [
{ "type": "video", "key": "01-big-buck-bunny-video.mp4", "format": "mp4", "sizeBytes": 41231234, "url": "https://api.apify.com/v2/..." },
{ "type": "audio", "key": "01-big-buck-bunny-audio.mp3", "format": "mp3", "sizeBytes": 10231234, "url": "https://api.apify.com/v2/..." }
]
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel, and the media files individually from the key-value store.

Output data fields

FieldTypeDescription
urlstringThe source URL you submitted
sourceTypestring"platform" (yt-dlp/delegated) or "directUrl"
platformstringCoarse platform bucket (youtube, tiktok, vimeo, …)
videoId, title, channel, channelUrl, uploadDate, viewCountmixedSource metadata (null for direct file URLs)
sourceThumbnailUrlstringThe platform's own thumbnail image (null for direct file URLs)
durationSecondsnumberSource duration
width, height, fpsnumberDimensions of the saved video output
videoFormatstringContainer of the saved video
isAudioOnlybooleanTrue when the source had no video stream (saved as audio)
downloadDelegatedbooleanTrue when a YouTube/TikTok downloader Actor was used
statusstring"ok" or a failure category (see Troubleshooting)
statusMessagestringHuman-readable note when something needs attention
videoFileUrl, audioFileUrl, thumbnailFileUrl, gifFileUrlstringDirect download links to each produced file
outputsarrayAll produced files with key, format, and size in bytes

Use it as a download/convert step in your pipeline

Already scraping pages with your own Actor or tool? You don't need this one to find the media — hand it the direct media URLs in startUrls and it becomes the download-and-convert stage at the end of your pipeline. Wire it up code-free with Apify task chaining / webhooks: fire it on your scraper's SUCCEEDED event and map the scraped URLs into startUrls.

Operational note for signed CDN links (Facebook, Instagram, X): these expire within hours and are often IP-bound, so download promptly and prefer the original page URL when you can. Pass a freshly minted, broadly fetchable link.

Pricing / cost estimation

This Actor uses pay-per-event pricing — you pay only for what it produces, with no separate compute units or proxy bandwidth to track. Charges scale with how much work each source actually takes: the download is billed by size, and processing is billed by the length of the output it creates.

EventPrice (USD)When charged
Video downloaded$0.0005 / MBPer megabyte of source media downloaded, rounded up (min 1 MB). Waived for YouTube and TikTok (see below)
Video processed$0.004 / minPer minute of the produced video, rounded up (min 1 min), when it's re-encoded. Format conversion, compression, resizing, and trimming are done in one pass and billed once
Audio extracted$0.001 / minPer minute of extracted audio, rounded up (min 1 min)
Thumbnail captured$0.005Once per thumbnail image grabbed
GIF created$0.01Once per animated GIF produced

A plain download in its original format costs only the per-MB download — there's no processing charge unless you ask for a transform. Combining several video transforms (e.g. resize + compress) is a single re-encode and bills once under Video processed; extra outputs like audio, thumbnails, and GIFs each add their own charge on top.

Example costs:

What you doApprox. cost
Download a 50 MB clip, original format$0.025
Download 50 MB + convert/compress a 5-min video$0.025 + $0.020 = $0.045
Download 50 MB + compress + resize a 5-min video (one pass)$0.025 + $0.020 = $0.045
5-min video: process + extract 5-min MP3 + thumbnail$0.020 + $0.005 + $0.005 = $0.030 (+ download)
5-min video: process + MP3 + thumbnail + GIF$0.020 + $0.005 + $0.005 + $0.010 = $0.040 (+ download)

YouTube and TikTok sources: the per-MB download fee is waived, but the dedicated downloader Actor (streamers/youtube-video-downloader / clockworks/tiktok-scraper) bills your Apify account directly at its own small rate. Any FFmpeg processing you request on top is still billed at the rates above.

The maxDurationMinutes cap (default 180) skips overly long sources before download so a marathon livestream can't run up a surprise bill. New Apify accounts include free monthly platform credits to try it out.

Tips and advanced options

  • Just want the file? Leave format as original. It's the fastest path (no re-encode) and cheapest (no processing event).
  • Smaller downloads: set videoQuality to 720p or lower for platform sources — it downloads a smaller stream directly, no re-encode needed.
  • resize vs videoQuality: videoQuality picks a smaller source stream (cheap, platforms only); resize re-encodes to an exact height (works on any source, including your own files).
  • Clip + GIF in one go: set trimStart/trimEnd for the video and audio, and gifStart/gifDuration independently for the GIF.
  • Large files: outputs are buffered in memory before upload — raise the run's Memory if you're processing big 1080p/4K videos, and lower maxFileSizeMb to guard against runaway direct downloads.
  • Blocked source? Enable proxyConfiguration with the RESIDENTIAL group and, if needed, a specific country for geo-restricted content.

Troubleshooting: common statuses and what to do

Each source URL gets its own dataset row. A URL that couldn't be delivered still finishes as part of a Succeeded run — its row carries an empty file set, a status category, and a statusMessage explaining the cause and fix.

Status / messageWhat it meansWhat to do
bot_wall — "blocked this request as automated traffic"YouTube's bot wall (in-process fallback).Enable Apify proxy or retry later.
auth_wall — "requires a logged-in account"Login/age wall (TikTok, Instagram, Facebook, Reddit).Use publicly accessible content; the Actor downloads anonymously.
geo_blockedNot available from the Actor's region.Enable Apify proxy with a different country.
rate_limited (HTTP 429)Too many requests to the platform.Retry later or enable Apify proxy.
http_error 403/404 (direct URL)Link is wrong, expired, private, or IP-bound.Re-fetch a fresh, public, direct file link and submit promptly.
not_media_fileThe URL served an HTML page, not a file.Point at the file itself, not a webpage.
invalid_mediaThe download was corrupt or truncated.Retry with a fresh URL.
processing_failedAn FFmpeg step failed; the original download was delivered when possible.Check the message; try a different format, or original.
over_capSource is longer than maxDurationMinutes. No charge.Raise maxDurationMinutes.
no_mediaThe post has no video (e.g. a photo/carousel).Submit a post that contains a video.

Still stuck? Email the creator directly at harish@harishgarg.com — include the URL and the status message, and we'll help you sort it out.

FAQ, disclaimers, and support

Which sites are supported? Any of the 1000+ sites yt-dlp supports, plus any direct public link to a media file.

Can I download multiple videos at once? Yes — put as many URLs in startUrls as you like. They're processed one after another, each with its own dataset row and files.

Can I download private or unlisted content? Only if you can provide a direct, publicly reachable file URL (e.g. an S3 presigned link). The Actor downloads anonymously and can't sign in to platforms.

Why is the file WebM/MKV instead of MP4? With format: "original" you get exactly what the source provides, which on YouTube is often VP9/WebM. Set format: "mp4" to convert.

Is this Actor legal to use? You are responsible for complying with the Terms of Service of any source platform and with applicable copyright law. Only download content you have the rights to, or that is available for your intended use.

For issues, feature requests, or feedback, use the Issues tab on this Actor's page. For custom solutions or enterprise needs, contact Apify support.