YouTube All-in-One Downloader & Scraper avatar

YouTube All-in-One Downloader & Scraper

Pricing

Pay per usage

Go to Apify Store
YouTube All-in-One Downloader & Scraper

YouTube All-in-One Downloader & Scraper

Download YouTube videos, Shorts, playlists, and channels as MP4. Up to 10 concurrent downloads with no browser needed. Extract comments, captions, and rich metadata. Metadata-only mode for fast, cheap research. Quality selection with automatic fallback. $10/mo — 3x cheaper than alternatives.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Juyeop Park

Juyeop Park

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Pay per video — no monthly fee | Up to 10 concurrent downloads | MP4 & audio | Comments & captions | Playlist & channel support | Metadata-only mode

Batch download YouTube videos, Shorts, playlists, and entire channels as MP4. Extract comments, captions, transcripts, and rich metadata -- all through a fast, concurrent API with no browser required.

Quick Start

  1. Click "Try for free" on this page
  2. Paste one or more YouTube URLs into startUrls
  3. Click Start -- your MP4 download links and full video metadata appear in the output within seconds
{
"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"quality": "720p"
}

That's it. The output contains a direct downloadUrl for each video.

What is YouTube Video Downloader?

YouTube Video Downloader is an Apify Actor that lets you batch download YouTube videos at scale. Paste in one URL or hundreds -- single videos, Shorts, full playlists, or entire channel libraries -- and get direct download links in seconds. It uses the YouTube InnerTube API directly (no headless browser), so it is significantly faster and cheaper than browser-based or yt-dlp alternatives.

Every run produces structured JSON output with download URLs (stored in Apify Key-Value Store) and optional rich metadata including comments, captions/transcripts, view counts, and tags -- making it easy to plug into any data pipeline, automation workflow, YouTube archiving system, or content research tool.

Don't need the video file? Set downloadVideo: false to run in metadata-only mode -- extract titles, view counts, comments, captions, and more without downloading any video. This is ideal for research and analytics at a fraction of the cost.

Key Features

  • Concurrent downloads -- Process up to 10 videos in parallel instead of one at a time
  • No browser needed -- Uses the YouTube InnerTube API directly for faster, cheaper runs
  • Quality selection -- Choose from highest, 1080p, 720p, 480p, 360p, or audio-only (MP4)
  • Automatic quality fallback -- If your chosen resolution is unavailable, the actor selects the nearest lower quality
  • Playlist and channel support -- Automatically expands playlists and channels into individual video downloads
  • Caption/subtitle extraction -- Pull full transcript text in your preferred language
  • Comment extraction -- Extract top comments with author, likes, and timestamps
  • Rich metadata by default -- Every result includes title, description, channel, views, likes, duration, tags, thumbnail, and more
  • Retry with exponential backoff -- Automatic retries with proxy rotation for reliable large-batch downloads
  • Metadata-only mode -- Set downloadVideo: false to extract metadata, captions, and comments without downloading the video file -- much faster and cheaper
  • Configurable output -- Set extractMetadata: false for lightweight output with only sourceUrl + downloadUrl
  • Proxy enabled by default -- Apify Proxy is on by default; RESIDENTIAL group recommended for best reliability

Use Cases

Content Creators and Editors

Download your own videos or reference clips for editing, reaction videos, compilations, or repurposing across platforms.

Researchers and Analysts

Build video datasets for academic research, sentiment analysis, or media studies. Use metadata-only mode (downloadVideo: false) to extract titles, view counts, comments, and captions for NLP projects -- without downloading video files.

Digital Marketers

Audit competitor YouTube channels, archive campaign videos, and track video performance metrics at scale. Use metadata-only mode to collect view counts, comments, and engagement data without downloading videos.

Archivists and Librarians

Preserve educational content, conference talks, or cultural videos before they are removed or made private.

Developers and Automation Engineers

Integrate YouTube video downloading into automated workflows using the Apify API, webhooks, and scheduled runs.

Why Choose This Over Alternatives?

FeatureThis Actoryt-dlp / Browser-based ToolsCompeting Actors ($30/mo)
Pricing$0.10/video (pay per use)Free (self-hosted)$30/month + usage
SpeedUp to 10 concurrent downloadsSequentialVaries
Playlists/ChannelsAutomatic expansionManual scriptingLimited
Comment ExtractionBuilt-inNot availableAvailable
Caption ExtractionBuilt-in with language selectionManualAvailable
Metadata ExtractionIncluded by defaultManual parsingAvailable
Quality FallbackAutomatic downgradeManualAutomatic
Metadata-only ModeBuilt-in (no download, lower cost)N/ANot available
Retry LogicExponential backoff + proxy rotationManualNot available
API AccessFull REST API + SDKNone (CLI)Full REST API + SDK
SchedulingApify schedulerCron (self-managed)Apify scheduler

Input Parameters

ParameterTypeDefaultDescription
startUrlsstring[](required)YouTube URLs to download. Supports videos, Shorts, playlists, and channels.
qualitystring"highest"Video quality: highest, 1080p, 720p, 480p, 360p, or audio_only
downloadVideobooleantrueDownload the video file. Set to false for metadata-only mode (no video download -- much faster and cheaper).
maxConcurrencyinteger4Number of parallel downloads (1--10). Higher values are faster but use more memory.
maxRequestRetriesinteger3Retry attempts per video before marking it as failed (0--10)
includeFailedVideosbooleanfalseInclude failed videos in output with error details for debugging
extractMetadatabooleantrueInclude full video metadata: title, description, channel, views, likes, duration, tags, thumbnail, and more. Set to false for lightweight output (sourceUrl + downloadUrl only). Auto-enabled when extractCaptions, extractComments, or downloadVideo: false is set.
extractCaptionsbooleanfalseExtract captions/subtitles as full transcript text
captionLanguagestring"en"Preferred caption language code (e.g., en, ko, ja, es). Falls back to first available if not found.
extractCommentsbooleanfalseExtract top comments from each video (author, text, likes, timestamp)
maxCommentsinteger100Maximum number of comments to extract per video (1--500)
maxVideosinteger100Maximum videos to process from playlists or channels (1--500)
proxyConfigurationobjectApify Proxy ONProxy settings. Enabled by default. RESIDENTIAL group recommended for best reliability. Proxy usage incurs additional data transfer costs. Disable to reduce costs (may cause blocks).

Example Input

Download a Single Video

{
"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"quality": "720p"
}

Download an Entire Playlist with Metadata

{
"startUrls": ["https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"],
"quality": "highest",
"maxConcurrency": 6,
"extractMetadata": true,
"extractCaptions": true,
"captionLanguage": "en",
"maxVideos": 50,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Download Channel Videos (Audio Only)

{
"startUrls": ["https://www.youtube.com/@RickAstleyYT"],
"quality": "audio_only",
"maxVideos": 20,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Metadata Only (No Download)

{
"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"downloadVideo": false,
"extractComments": true,
"extractCaptions": true,
"maxComments": 50,
"proxyConfiguration": {
"useApifyProxy": true
}
}

When downloadVideo is false, the actor skips video downloading entirely and only extracts metadata, captions, and comments. This is significantly faster and cheaper -- ideal for data collection and research.

Output Examples

Lightweight Output (extractMetadata: false)

When extractMetadata is set to false, each video produces a minimal entry:

{
"sourceUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"downloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/dQw4w9WgXcQ_video"
}

The downloadUrl is a direct link to the MP4 file stored in the Apify Key-Value Store. You can download it directly, share it, or integrate it into your pipeline.

Default Output (Rich Metadata)

By default (extractMetadata: true), you get full video details including: video ID, title, description, channel name & URL, view count, like count, duration, upload date, thumbnail URL, quality, file size, captions, comments, tags, and live stream status.

{
"sourceUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"downloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/dQw4w9WgXcQ_video",
"videoId": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"description": "The official video for 'Never Gonna Give You Up' by Rick Astley...",
"channelName": "Rick Astley",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"viewCount": 1500000000,
"likeCount": 16000000,
"duration": "3:33",
"durationSeconds": 213,
"uploadDate": "Oct 25, 2009",
"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"quality": "best",
"fileSize": "11.28 MB",
"captions": [
{
"language": "English",
"languageCode": "en",
"text": "We're no strangers to love You know the rules and so do I..."
}
],
"comments": [
{
"author": "YouTube User",
"authorChannelUrl": "https://www.youtube.com/channel/UC...",
"text": "This song is timeless!",
"likes": 42000,
"publishedTime": "2 years ago",
"replyCount": 150
}
],
"tags": ["rick astley", "never gonna give you up", "official video"],
"isLive": false
}

Metadata-only Output (No Download)

When downloadVideo is false, you get full metadata without downloading the video file. Note that downloadUrl is null, and quality / fileSize are empty:

{
"sourceUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"downloadUrl": null,
"videoId": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"description": "The official video for 'Never Gonna Give You Up' by Rick Astley...",
"channelName": "Rick Astley",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"viewCount": 1743960084,
"likeCount": 18807636,
"duration": "3:33",
"durationSeconds": 213,
"uploadDate": "Oct 25, 2009",
"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"quality": "none",
"fileSize": "",
"captions": [],
"comments": [
{
"author": "@YouTube",
"authorChannelUrl": "https://www.youtube.com/@YouTube",
"text": "can confirm: he never gave us up",
"likes": 186,
"publishedTime": "9 months ago",
"replyCount": 959
}
],
"tags": [],
"isLive": false
}

Failed Video Output

When includeFailedVideos is set to true, failed videos are included in the output with diagnostic details (by default, failed videos are silently skipped):

{
"sourceUrl": "https://www.youtube.com/watch?v=INVALID_ID",
"downloadUrl": null,
"error": "This video is unavailable",
"status": "failed"
}

Supported URL Formats

The actor recognizes all common YouTube URL patterns:

URL TypeExample
Standard videohttps://www.youtube.com/watch?v=VIDEO_ID
Short URLhttps://youtu.be/VIDEO_ID
Shortshttps://www.youtube.com/shorts/VIDEO_ID
Embedhttps://www.youtube.com/embed/VIDEO_ID
Playlisthttps://www.youtube.com/playlist?list=PLAYLIST_ID
Channel (handle)https://www.youtube.com/@ChannelHandle
Channel (ID)https://www.youtube.com/channel/CHANNEL_ID
Channel (custom URL)https://www.youtube.com/c/ChannelName

You can mix and match URL types in a single run. For example, pass a playlist URL and three individual video URLs together.

How to Use the YouTube Video Downloader API

You can call this actor programmatically from any language using the Apify API or official client libraries.

JavaScript / TypeScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('jy-labs/youtube-all-in-one-downloader-scraper').call({
startUrls: [
'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
'https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf',
],
quality: '720p',
maxConcurrency: 4,
extractMetadata: true,
proxyConfiguration: { useApifyProxy: true },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(`${item.title || item.sourceUrl}${item.downloadUrl}`);
}

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('jy-labs/youtube-all-in-one-downloader-scraper').call(run_input={
'startUrls': [
'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
'https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf',
],
'quality': '720p',
'maxConcurrency': 4,
'extractMetadata': True,
'proxyConfiguration': {'useApifyProxy': True},
})
dataset_items = client.dataset(run['defaultDatasetId']).list_items().items
for item in dataset_items:
print(f"{item.get('title', item['sourceUrl'])}{item['downloadUrl']}")

cURL (REST API)

curl -X POST "https://api.apify.com/v2/acts/jy-labs~youtube-all-in-one-downloader-scraper/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"quality": "highest",
"proxyConfiguration": { "useApifyProxy": true }
}'

Pricing -- Pay Per Video, No Monthly Fee

This actor uses pay-per-event pricing -- you only pay for what you use, with no monthly subscription. Because it uses the InnerTube API directly (no browser), it runs significantly faster and cheaper than browser-based alternatives.

EventPrice
Video download (with metadata)$0.10 per video
Metadata only (downloadVideo: false)$0.02 per video

Prices above are the actor usage fee. Apify platform costs (compute units, proxy data transfer) are billed separately. Proxy (enabled by default) incurs additional data transfer costs per GB. RESIDENTIAL proxies provide better reliability with YouTube. Apify Free plan includes $5/month of platform credits.

Estimated monthly cost by usage:

UsageMonthly Cost
50 video downloads~$5
200 video downloads~$20
500 video downloads~$50
500 metadata extractions~$10
1,000 metadata extractions~$20

Tip: Use audio_only quality if you only need audio tracks -- it is significantly faster and cheaper. Use downloadVideo: false for metadata-only extraction at a fraction of the cost.

This ActorCompeting Actors
Pricing ModelPay per video (no monthly fee)$30/month + usage
Video download$0.10/video$30/mo subscription required
Metadata only$0.02/videoNot available
Comments extractionIncludedIncluded
Captions extractionIncludedIncluded
Playlist expansionIncludedLimited or extra
Retry + proxy rotationIncludedNot available

FAQ

Do I need a proxy to run this actor?

Apify Proxy is enabled by default. For best results, select the RESIDENTIAL proxy group in the proxy settings. YouTube aggressively rate-limits and blocks automated requests, so keeping the proxy enabled is highly recommended. Disabling it may cause errors or blocks after a few videos. Note: Proxy usage incurs additional data transfer costs (billed per GB). You can disable it in the proxy settings to reduce costs if needed.

What video quality options are available?

You can choose from: highest (best available), 1080p, 720p, 480p, 360p, and audio_only. If your chosen quality is not available for a specific video, the actor automatically falls back to the nearest lower resolution.

Can I download age-restricted or private videos?

Currently, age-restricted videos and private videos cannot be downloaded because they require YouTube authentication. Only publicly available videos are supported.

What is the maximum number of videos I can download per run?

You can process up to 500 videos per run (configurable via the maxVideos parameter). For larger batches, schedule multiple runs or use the Apify API to chain runs.

How long are the downloaded files stored?

Downloaded files are stored in the Apify Key-Value Store. On the Free plan, data is retained for 7 days. On paid plans, retention is longer. You can export or move files before they expire.

Can I download only the audio track?

Yes. Set quality to "audio_only" and the actor will extract just the audio track in an MP4 container. This format is compatible with all major players and is ideal for podcast archiving, music extraction, or NLP audio processing.

Does this actor extract subtitles/captions?

Yes. Set extractCaptions to true and specify your preferred captionLanguage (default is "en"). The actor extracts the full transcript text. If the preferred language is unavailable, it falls back to the first available language.

Can I extract video comments?

Yes. Set extractComments to true and optionally set maxComments (default 100, max 500). Each comment includes the author name, channel URL, comment text, like count, published time, and reply count. Comments are sorted by top comments.

Can I get metadata without downloading the video?

Yes. Set downloadVideo to false. The actor will extract all metadata (title, channel, views, likes, duration, upload date, tags, thumbnail), captions, and comments without downloading the video file. This is significantly faster and cheaper -- ideal for research, analytics, and data collection at scale.

How do I batch download YouTube videos?

Simply add multiple URLs to the startUrls array. The actor will download them all concurrently (up to 10 in parallel). You can mix single videos, Shorts, playlists, and channel URLs in a single run.

How do I archive a YouTube channel?

Paste the channel URL (e.g., https://www.youtube.com/@ChannelHandle) into startUrls. The actor will automatically discover and download all videos from the channel. Use maxVideos to limit the number of videos and extractMetadata to preserve full video details for archival.

How do I extract a YouTube video transcript?

Set extractCaptions to true and captionLanguage to your preferred language (e.g., "en" for English). The actor extracts the full plaintext transcript from available captions. This is useful for NLP, content indexing, and accessibility.

Can I process playlists and channels?

Yes. Paste a YouTube playlist or channel URL into startUrls and the actor will automatically expand it into individual videos. Use maxVideos to limit how many videos are processed.

What format are the downloaded videos in?

All videos are downloaded in MP4 format, which is universally compatible with all major video players and editing software.

Is this actor suitable for production use?

Yes. It includes retry logic with exponential backoff, proxy rotation, concurrent processing, and structured error handling. It is designed for automated pipelines and scheduled runs.

Limitations

  • Age-restricted videos require YouTube authentication and are not currently supported
  • Private and unlisted videos accessible only to the uploader cannot be downloaded
  • Live streams that are currently broadcasting cannot be downloaded (completed live streams work)
  • DRM-protected content (YouTube Premium originals) cannot be downloaded
  • File size limit -- Videos larger than 500 MB cannot be downloaded. Lower the quality or use audio_only for very long videos
  • Very long videos (> 2 hours) may require more memory; consider lowering maxConcurrency for these
  • YouTube rate limiting may affect large batch downloads without a proxy -- always use proxy configuration for production runs
  • Geographically restricted videos may fail depending on proxy location

Technology

  • youtubei.js -- YouTube InnerTube API client (no browser required)
  • Apify SDK -- Actor framework with dataset, key-value store, and proxy management
  • p-limit -- Concurrent download management
  • TypeScript -- Type-safe ESM implementation

Changelog

See the Changelog tab on the Apify Store page for version history and updates.

Support and Feedback

If you encounter any issues or have feature requests, please open an issue on the actor's Apify Store page. For custom integrations or enterprise use cases, feel free to reach out through the Apify platform.