# Download from Any Website: YouTube, TikTok, IG & 1000 (`scrapepilot/download-from-any-website-youtube-tiktok-ig-1000`) Actor

The most powerful way to download videos from any website on Apify. Extract direct download URLs, metadata, thumbnails, and audio from YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Vimeo, Twitch, and 1000+ more platforms — . No browser. No login. Just results.

- **URL**: https://apify.com/scrapepilot/download-from-any-website-youtube-tiktok-ig-1000.md
- **Developed by:** [Scrape Pilot](https://apify.com/scrapepilot) (community)
- **Categories:** Videos, Automation, Developer tools
- **Stats:** 5 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$9.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🎬 Download Videos from Any Website — YouTube, TikTok, Instagram & 1000+ Sites

> **The most powerful way to download videos from any website on Apify.** Extract direct download URLs, metadata, thumbnails, and audio from YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Vimeo, Twitch, and 1000+ more platforms — powered by yt***. No browser. No login. Just results.

---

### 📌 Table of Contents

- [What Is This Actor?](#what-is-this-actor)
- [Why Use This Tool to Download Videos?](#why-use-this-tool-to-download-videos)
- [Supported Platforms](#supported-platforms)
- [Use Cases](#use-cases)
- [Supported Input Types](#supported-input-types)
- [Output Fields (Full Reference)](#output-fields-full-reference)
- [Input Parameters](#input-parameters)
- [Example Inputs & Outputs](#example-inputs--outputs)
- [How Download Videos Extraction Works](#how-download-videos-extraction-works)
- [Video Quality Options](#video-quality-options)
- [Audio-Only Extraction](#audio-only-extraction)
- [Playlist & Channel Extraction](#playlist--channel-extraction)
- [Proxy Configuration](#proxy-configuration)
- [Performance & Rate Limits](#performance--rate-limits)
- [FAQ](#faq)
- [Changelog](#changelog)
- [Legal & Terms of Use](#legal--terms-of-use)

---

### 🔍 What Is This Actor?

**Universal Video Downloader** is a production-grade Apify actor that lets you **download videos from any website** — or more precisely, extract the direct signed download URLs, full metadata, and available quality formats for any publicly accessible video on the internet.

Built on top of **yt-dlp**, the world's most trusted open-source video extraction engine, this actor supports over **1000 websites** out of the box. Provide one or many URLs — from YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Vimeo, Twitch, Dailymotion, Snapchat, Pinterest, LinkedIn, Threads, and hundreds more — and receive back clean, structured records with everything you need: title, uploader, view count, thumbnail, duration, and ready-to-use download URLs for every available resolution.

No browser automation. No Playwright overhead. No login required. Just fast, clean, direct extraction that works at scale.

---

### 🚀 Why Use This Tool to Download Videos?

| Feature | This Actor | Browser Scrapers | Manual Tools | Platform APIs |
|---|---|---|---|---|
| **Download videos from 1000+ sites** | ✅ | ⚠️ Limited | ✅ One-by-one | ❌ Platform-specific |
| **Bulk URL processing** | ✅ | ⚠️ Slow | ❌ | ❌ |
| **Direct download URL returned** | ✅ All formats | ⚠️ Partial | ✅ | ❌ |
| **Audio-only extraction** | ✅ | ❌ | ⚠️ | ❌ |
| **Playlist / channel scrape** | ✅ | ⚠️ | ❌ | ⚠️ Quota |
| **4K / 1080p quality selection** | ✅ | ❌ | ✅ | ❌ |
| **No login required** | ✅ | ✅ | ✅ | ❌ |
| **Residential proxy support** | ✅ Built-in | ⚠️ Extra setup | ❌ | ❌ |
| **Metadata (views, likes, tags)** | ✅ Rich | ⚠️ Partial | ❌ | ✅ Limited |
| **Bot detection triggered** | ❌ Never | ⚠️ Frequently | ❌ | ❌ |

> **Bottom line:** If you need to **download videos** from multiple platforms at scale — with full metadata, multiple quality options, and zero logins — this actor is the fastest and most reliable solution available.

---

### 🌐 Supported Platforms

This actor can **download videos** from **1000+ websites** via yt-dlp. Key supported platforms include:

#### 📱 Social Media
| Platform | Videos | Reels/Shorts | Stories | Live |
|---|---|---|---|---|
| **YouTube** | ✅ | ✅ Shorts | ❌ | ✅ |
| **TikTok** | ✅ | ✅ | ❌ | ✅ |
| **Instagram** | ✅ | ✅ Reels | ❌ | ✅ |
| **Facebook** | ✅ | ✅ | ❌ | ✅ |
| **Twitter / X** | ✅ | ✅ | ❌ | ❌ |
| **Reddit** | ✅ | ✅ | ❌ | ❌ |
| **Threads** | ✅ | ✅ | ❌ | ❌ |
| **Snapchat** | ✅ | ✅ | ❌ | ❌ |
| **Pinterest** | ✅ | ✅ | ❌ | ❌ |
| **LinkedIn** | ✅ | ✅ | ❌ | ❌ |

#### 🎥 Video Hosting
| Platform | HD | 4K | Live | Subtitles |
|---|---|---|---|---|
| **Vimeo** | ✅ | ✅ | ✅ | ✅ |
| **Dailymotion** | ✅ | ❌ | ✅ | ✅ |
| **Twitch** | ✅ | ✅ | ✅ | ✅ |
| **Rumble** | ✅ | ❌ | ✅ | ❌ |
| **Odysee / LBRY** | ✅ | ✅ | ❌ | ❌ |
| **Bitchute** | ✅ | ❌ | ❌ | ❌ |

#### 🎵 Music & Audio
Bandcamp, SoundCloud, Mixcloud, and many more — extract audio streams directly.

#### 📺 News & Media
CNN, BBC, NBC, Fox News, The Guardian, and major broadcast network video players.

> For the complete list of 1000+ supported sites, visit: [yt-dlp supported sites](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md)

---

### 🎯 Use Cases

#### 📥 Content Archiving & Backup
- **Download videos** from channels or playlists before they are deleted or made private
- Archive news broadcast clips, public interest statements, or viral moments with timestamped metadata
- Preserve educational content from online courses and tutorial channels at scale

#### 🤖 AI & Machine Learning Datasets
- Extract download URLs for thousands of videos to build training datasets for video AI models
- Collect video metadata (duration, views, tags, categories) for content classification systems
- Download audio streams from videos for speech recognition, music analysis, or sentiment NLP

#### 📊 Social Media Research & Analytics
- **Download videos** and metadata from TikTok, Instagram, and Twitter/X for academic research
- Track view count and engagement metrics across platforms for viral content analysis
- Collect thumbnail URLs for visual trend analysis across social media platforms

#### 🎓 Education & E-Learning
- Build automated pipelines to download videos from online courses for offline access
- Extract lecture recordings from Vimeo, Dailymotion, or private video platforms
- Collect educational video metadata for learning management system integrations

#### 🛠️ Developer Integrations
- Integrate video download URLs into your own app without hitting platform API rate limits
- Build a multi-platform video player backend that resolves stream URLs on demand
- Create automated content pipelines that monitor channels and download new uploads

#### 📰 Journalism & Evidence Preservation
- **Download videos** from social media as evidence for investigative journalism
- Preserve public statements, interviews, and news clips with full metadata records
- Archive content from platforms that may remove it after reporting

---

### 🔗 Supported Input Types

#### Single Video URL
Provide any direct video URL from any supported platform.
````

https://www.youtube.com/watch?v=dQw4w9WgXcQ
https://www.tiktok.com/@username/video/1234567890
https://www.instagram.com/reel/ABC123/
https://twitter.com/username/status/1234567890
https://vimeo.com/123456789
https://www.reddit.com/r/sub/comments/abc/title/
https://www.facebook.com/watch/?v=1234567890

````

#### Multiple URLs (Batch)
Pass a list of URLs to download videos from multiple platforms in one run.
```json
{
  "urls": [
    "https://www.youtube.com/watch?v=VIDEO1",
    "https://www.tiktok.com/@user/video/VIDEO2",
    "https://vimeo.com/123456789"
  ]
}
````

#### YouTube Playlist or Channel

Pass a playlist or channel URL to extract up to `max_results` videos from it.

```
https://www.youtube.com/playlist?list=PLxxxxxxxxxxxxxxxxxx
https://www.youtube.com/@ChannelHandle
https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxx
https://www.twitch.tv/username/videos
```

***

### 📋 Output Fields (Full Reference)

Every record returned when you **download videos** with this actor contains:

#### 🎬 Core Video Fields

| Field | Type | Description | Example |
|---|---|---|---|
| `title` | string | Full video title (max 500 chars) | `"Never Gonna Give You Up"` |
| `original_url` | string | The URL you provided as input | `"https://youtu.be/dQw4w9WgXcQ"` |
| `webpage_url` | string | Canonical URL for the video | `"https://www.youtube.com/watch?v=..."` |
| `platform` | string | Source platform name (yt-dlp extractor) | `"Youtube"`, `"TikTok"`, `"Vimeo"` |
| `video_id` | string | Platform-specific video ID | `"dQw4w9WgXcQ"` |
| `duration_seconds` | integer | Duration in seconds | `212` |
| `duration` | string | Human-readable duration | `"3:32"` |
| `upload_date` | string | Raw upload date (YYYYMMDD) | `"20091025"` |
| `upload_date_formatted` | string | ISO formatted date | `"2009-10-25"` |
| `is_live` | boolean | Whether the video is a live stream | `false` |
| `was_live` | boolean | Whether this was a past live stream | `false` |
| `age_limit` | integer | Age restriction (0 = none, 18 = adult) | `0` |

#### 👤 Uploader Fields

| Field | Type | Description | Example |
|---|---|---|---|
| `uploader` | string | Channel or creator name | `"Rick Astley"` |
| `uploader_url` | string | URL to uploader's channel/profile | `"https://www.youtube.com/@RickAstley"` |

#### 📈 Engagement Fields

| Field | Type | Description | Example |
|---|---|---|---|
| `view_count` | integer | Total views | `1450000000` |
| `like_count` | integer | Total likes | `16000000` |
| `comment_count` | integer | Total comments | `850000` |
| `repost_count` | integer | Shares/reposts (where available) | `45000` |

#### 🖼️ Media Fields

| Field | Type | Description | Example |
|---|---|---|---|
| `thumbnail` | string | Best thumbnail URL | `"https://i.ytimg.com/vi/.../maxresdefault.jpg"` |
| `description` | string | Video description (max 2000 chars) | `"The official video for..."` |
| `tags` | array | Video tags (max 20) | `["pop", "80s", "music"]` |
| `categories` | array | Platform categories | `["Music"]` |

#### ⬇️ Download URL Fields

| Field | Type | Description |
|---|---|---|
| `best_video_url` | string | Best combined video+audio stream URL (highest resolution available) |
| `best_audio_url` | string | Best audio-only stream URL (highest bitrate available) |
| `formats_available` | array | Up to 10 format objects with individual download URLs per quality level |

#### 🎞️ Format Object (inside `formats_available`)

Each entry in `formats_available` lets you **download videos** at a specific quality:

```json
{
  "format_id":  "137",
  "ext":        "mp4",
  "resolution": "1920x1080",
  "fps":        30,
  "vcodec":     "avc1.640028",
  "acodec":     "none",
  "filesize":   156000000,
  "tbr":        3120.5,
  "url":        "https://rr3---sn-xxxx.googlevideo.com/..."
}
```

***

### ⚙️ Input Parameters

```json
{
  "urls":      ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
  "url":       "",
  "quality":   "best",
  "max_results": 20,
  "proxyConfiguration": {
    "useApifyProxy":    true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

| Parameter | Type | Default | Description |
|---|---|---|---|
| `urls` | array or string | `[]` | List of video URLs to download videos from (one URL per item, or newline-separated string) |
| `url` | string | `""` | Single video URL shortcut — added to `urls` automatically |
| `quality` | string | `"best"` | Preferred quality: `"best"`, `"1080p"`, `"720p"`, `"480p"`, `"audio_only"` |
| `max_results` | integer | `20` | Max videos to extract per playlist or channel URL |
| `proxyConfiguration` | object | Residential | Apify proxy config — recommended for TikTok, Instagram, and high-volume runs |

> **Note:** When both `url` and `urls` are provided, `url` is prepended to the `urls` list. All are processed in order.

***

### 📦 Example Inputs & Outputs

#### Example 1: Download Videos — Single YouTube Video

**Input:**

```json
{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "quality": "best"
}
```

**Output:**

```json
{
  "title": "Rick Astley - Never Gonna Give You Up (Official Music Video)",
  "original_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "webpage_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "platform": "Youtube",
  "video_id": "dQw4w9WgXcQ",
  "duration_seconds": 212,
  "duration": "3:32",
  "upload_date_formatted": "2009-10-25",
  "uploader": "Rick Astley",
  "uploader_url": "https://www.youtube.com/@RickAstleyVEVO",
  "view_count": 1450000000,
  "like_count": 16000000,
  "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
  "description": "The official video for 'Never Gonna Give You Up' by Rick Astley...",
  "tags": ["Rick Astley", "Never Gonna Give You Up", "OfficialMusicVideo"],
  "categories": ["Music"],
  "best_video_url": "https://rr3---sn-xxxx.googlevideo.com/videoplayback?...",
  "best_audio_url": "https://rr3---sn-xxxx.googlevideo.com/videoplayback?...",
  "formats_available": [
    {
      "format_id": "137",
      "ext": "mp4",
      "resolution": "1920x1080",
      "fps": 30,
      "vcodec": "avc1.640028",
      "acodec": "none",
      "filesize": 156000000,
      "url": "https://..."
    },
    {
      "format_id": "22",
      "ext": "mp4",
      "resolution": "1280x720",
      "fps": 30,
      "vcodec": "avc1.64001F",
      "acodec": "mp4a.40.2",
      "filesize": 78000000,
      "url": "https://..."
    }
  ]
}
```

***

#### Example 2: Download Videos — Multi-Platform Batch

**Input:**

```json
{
  "urls": [
    "https://www.tiktok.com/@charlidamelio/video/7123456789012345678",
    "https://vimeo.com/123456789",
    "https://twitter.com/username/status/1234567890123456789"
  ],
  "quality": "720p"
}
```

**Output:** 3 separate records — one per platform — each with platform-specific metadata, thumbnail, and `best_video_url` for direct download.

***

#### Example 3: Download Videos — YouTube Playlist

**Input:**

```json
{
  "url": "https://www.youtube.com/playlist?list=PLbpi6ZahtOH6Ar_3GPy3workS_ij8",
  "max_results": 25,
  "quality": "1080p"
}
```

**Output:** Up to 25 video records from the playlist, each with title, video ID, duration, thumbnail, uploader, and download URL.

***

#### Example 4: Download Videos — Audio Only (Podcast/Music)

**Input:**

```json
{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "quality": "audio_only"
}
```

**Output:** Full metadata record with `best_audio_url` pointing to the highest-bitrate M4A/WebM audio stream — ready for transcription, music analysis, or podcast archiving.

***

### ⚙️ How Download Videos Extraction Works

This actor uses a **metadata-first approach** — it never actually downloads the video file to the server. Instead, it extracts the signed direct URLs that point to the video hosted on the platform's CDN. Here is exactly how it works:

#### Step 1 — URL Detection

The actor automatically detects whether each URL is a single video, a playlist, or a channel page. YouTube playlists, Twitch VOD archives, and channel pages are all handled with the correct extraction mode.

#### Step 2 — yt-dlp Extraction

yt-dlp communicates directly with the platform's internal API or web endpoint — no browser, no Playwright, no Puppeteer. It negotiates the video manifest, deciphers any obfuscation, and retrieves the full list of available format streams with their signed URLs.

#### Step 3 — Format Selection

Based on your `quality` preference, the actor selects the best matching format. For `"best"`, it prioritizes combined MP4 streams (video+audio in one file). For high resolutions like `"1080p"` or `"4K"`, it returns the video-only and audio-only streams separately for maximum quality.

#### Step 4 — Metadata Enrichment

All available metadata is extracted and cleaned: title, uploader, view count, like count, comment count, tags, categories, description, thumbnail, upload date, duration, and more — unified into a single clean record.

#### Step 5 — Output

Results are pushed to the Apify dataset and saved as `results.json` in the Key-Value Store. Every record contains `best_video_url` and `best_audio_url` as ready-to-use direct download links.

> ⚠️ **Important:** Direct download URLs are **signed and time-limited** by the hosting platform (typically valid for 6–12 hours). Use them immediately or re-run the actor to refresh them.

***

### 🎬 Video Quality Options

Control the output quality when you **download videos** using the `quality` parameter:

| Value | Description | Format Strategy | Best For |
|---|---|---|---|
| `"best"` | Highest available combined stream | `bestvideo+bestaudio/best` | General use, recommended |
| `"1080p"` | Full HD (max 1080p) | `bestvideo[height<=1080]+bestaudio` | HD archiving |
| `"720p"` | HD (max 720p) | `bestvideo[height<=720]+bestaudio` | Balanced quality/size |
| `"480p"` | SD (max 480p) | `bestvideo[height<=480]+bestaudio` | Mobile, low bandwidth |
| `"audio_only"` | Audio-only stream | `bestaudio[ext=m4a]/bestaudio` | Podcast, music, transcription |

> **Tip:** Even when you select a specific quality, the `formats_available` array always contains all available resolutions so you can choose programmatically from the output.

***

### 🎵 Audio-Only Extraction

When you need to **download videos** purely for their audio content, set `quality: "audio_only"`. The actor returns:

- `best_audio_url` — direct URL to the highest-bitrate audio stream (M4A, WebM, or Opus format)
- All other metadata fields (title, uploader, duration, thumbnail, etc.)

**Common audio extraction use cases:**

- Podcast archiving from YouTube
- Music extraction for personal listening
- Speech-to-text transcription pipelines
- Sentiment analysis on spoken content
- Language learning audio datasets

To convert the audio stream to MP3 using FFmpeg after downloading:

```bash
ffmpeg -i "audio_stream_url" -codec:a libmp3lame -qscale:a 2 output.mp3
```

***

### 📋 Playlist & Channel Extraction

When the provided URL is a playlist or channel, the actor runs in flat extraction mode for speed:

#### What You Get Per Item

- `title` — video title
- `video_id` — platform video ID
- `webpage_url` — direct URL to the video (use this to re-run for full metadata + download URL)
- `platform` — source platform
- `duration` — video duration
- `thumbnail` — thumbnail URL
- `uploader` — creator name
- `view_count` — view count (where available in flat mode)
- `upload_date` — upload date
- `playlist_title` — parent playlist or channel name
- `playlist_id` — playlist or channel ID

#### Note on Flat Mode

Flat extraction returns lightweight records **without** `best_video_url` or `best_audio_url`. This is by design for speed — extracting full download URLs for 50+ videos sequentially would be very slow. Instead:

1. Use flat/playlist mode to get the list of `webpage_url` values
2. Feed those URLs back into this actor (or another run) with `quality: "best"` to **download videos** with full format data

This two-step approach is the most efficient pattern for large channel or playlist processing.

***

### 🌐 Proxy Configuration

#### Recommended Setup

```json
{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### When Is a Proxy Required?

- **TikTok** — residential proxy strongly recommended; TikTok blocks datacenter IPs aggressively
- **Instagram** — residential proxy recommended for Reels and video pages
- **High-volume runs** — any run with 50+ videos benefits from proxy rotation
- **Geo-restricted content** — use a proxy in the appropriate region to access region-locked videos

#### When Is Proxy Optional?

- **YouTube** — yt-dlp typically works without a proxy for YouTube at moderate volumes
- **Vimeo, Dailymotion, Reddit** — generally accessible without proxy
- **Single video runs** — proxy usually not needed for 1–5 videos from major platforms

#### No Proxy Setup

```json
{
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

Leave proxy disabled for low-volume runs on YouTube, Vimeo, or Reddit to save proxy credits.

***

### ⚡ Performance & Rate Limits

#### Speed Benchmarks (with residential proxy)

| Mode | Count | Estimated Time |
|---|---|---|
| Single video (any platform) | 1 | ~5–15 seconds |
| Multi-platform batch | 5 | ~30–60 seconds |
| Multi-platform batch | 20 | ~2–4 minutes |
| YouTube playlist (flat) | 50 | ~30–60 seconds |
| YouTube playlist (full metadata) | 20 | ~2–4 minutes |
| TikTok batch (with proxy) | 10 | ~1–2 minutes |

#### Reliability Features

- **3 automatic retries** with backoff on failed requests
- **30-second socket timeout** to prevent hanging on slow platforms
- **Graceful error handling** — private, deleted, or age-restricted videos are skipped with a warning instead of crashing the run
- **Per-URL isolation** — a failure on one URL never prevents other URLs from being processed

#### Concurrent Runs

Multiple instances of this actor can run simultaneously — for example, one run per platform or one run per playlist — without conflicts.

***

### ❓ FAQ

**Q: Does this actually download the video file to Apify's servers?**
A: No. The actor extracts and returns the **direct signed URL** for the video hosted on the platform's CDN. The video file itself is never downloaded to Apify. You use the URL to download videos to your own system.

**Q: How long are the download URLs valid?**
A: Signed video URLs typically expire in **6–12 hours** depending on the platform. Use them immediately after the run, or re-run the actor to generate fresh URLs.

**Q: Why is `best_video_url` returning a video-only stream (no audio)?**
A: For high-resolution videos (1080p+), YouTube and some other platforms serve video and audio as separate streams. Use `best_video_url` for the video track and `best_audio_url` for the audio, then merge them with FFmpeg:

```bash
ffmpeg -i video.mp4 -i audio.m4a -c:v copy -c:a aac output_merged.mp4
```

**Q: Can I download videos from private Instagram or TikTok accounts?**
A: No. This actor only works with publicly accessible video content. Private accounts and login-gated content require cookies/authentication, which is not supported.

**Q: TikTok extraction is failing — what should I do?**
A: Enable residential proxy. TikTok is one of the most aggressive platforms at blocking datacenter IPs. With a residential proxy, TikTok extraction works reliably.

**Q: Can I download videos in 4K?**
A: Yes — for platforms that offer 4K (like YouTube). Set `quality: "best"` and the `formats_available` array will include 4K streams where available. The `best_video_url` will point to the highest resolution available.

**Q: Does this work for live streams?**
A: Yes. For active live streams, yt-dlp returns the HLS/DASH stream manifest URL. Note that live stream URLs work differently — they are not pre-recorded file URLs.

**Q: Can I extract subtitles?**
A: The current version does not return subtitle files. Subtitle availability can be added in a future version.

**Q: What happens if a URL is deleted or private?**
A: The actor logs a warning and skips that URL gracefully, continuing to process all remaining URLs in the batch.

**Q: Is there a limit on how many URLs I can process per run?**
A: No hard limit. For very large batches (500+ URLs), consider splitting into multiple runs for better reliability and speed.

***

### 📜 Changelog

#### v1.0.0 (Current)

- ✅ yt-dlp integration supporting 1000+ platforms to download videos
- ✅ Single video, playlist, and channel extraction modes
- ✅ Multi-URL batch processing in one run
- ✅ Quality selection: best / 1080p / 720p / 480p / audio\_only
- ✅ `best_video_url` and `best_audio_url` in every record
- ✅ `formats_available` array with up to 10 quality options per video
- ✅ Full metadata: views, likes, comments, tags, categories, description
- ✅ Auto URL type detection (video / playlist / channel)
- ✅ Residential proxy support for TikTok, Instagram, and others
- ✅ Graceful handling of private, deleted, and age-restricted content
- ✅ Results exported to dataset + `results.json` in Key-Value Store

***

### ⚖️ Legal & Terms of Use

This actor extracts publicly accessible video metadata and direct stream URLs in the same way that a regular user accesses video content through a browser.

**Please note:**

- This tool is intended for **research, archiving, education, journalism, and personal use**
- Use this tool only to **download videos** that you have the right to access and store
- Redistributing copyrighted video content without authorization may violate copyright law
- Respect each platform's Terms of Service — do not use this tool to bypass paywalls or access private content
- Do not use extracted content for unauthorized commercial redistribution
- The actor developer is not responsible for how users choose to use the extracted URLs

**Fair Use:** Downloading videos for personal backup, academic research, journalism, or evidence preservation is generally considered fair use in many jurisdictions. Always consult a legal professional for your specific use case.

***

### 🤝 Support & Feedback

- **Bug report?** Open a GitHub issue or contact us via the Apify actor page
- **Feature request?** Suggest it in the Apify Community forum
- **Works great?** Please leave a ⭐ review on the Apify Store!

***

<p align="center">
  <strong>Built with ❤️ on Apify · Powered by yt-dlp · Download Videos from 1000+ Websites</strong><br/>
  <em>The fastest, most reliable way to download videos from any platform — no login, no browser, no limits</em>
</p>

# Actor input Schema

## `url` (type: `string`):

Single video URL from any supported platform. E.g: https://www.youtube.com/watch?v=xxx OR https://www.tiktok.com/@user/video/xxx

## `urls` (type: `string`):

Process multiple video URLs at once — one URL per line. Supports mixing different platforms.

## `quality` (type: `string`):

Preferred video quality for download URLs

## `max_results` (type: `integer`):

Maximum videos to extract from playlists or channels

## `proxyConfiguration` (type: `object`):

RESIDENTIAL proxy recommended for TikTok, Instagram and Facebook. Not required for YouTube.

## Actor input object example

```json
{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "quality": "best",
  "max_results": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapepilot/download-from-any-website-youtube-tiktok-ig-1000").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapepilot/download-from-any-website-youtube-tiktok-ig-1000").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapepilot/download-from-any-website-youtube-tiktok-ig-1000 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapepilot/download-from-any-website-youtube-tiktok-ig-1000",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Download from Any Website: YouTube, TikTok, IG & 1000",
        "description": "The most powerful way to download videos from any website on Apify. Extract direct download URLs, metadata, thumbnails, and audio from YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Vimeo, Twitch, and 1000+ more platforms — . No browser. No login. Just results.",
        "version": "0.0",
        "x-build-id": "eWsEclRy3p4kf5SkS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapepilot~download-from-any-website-youtube-tiktok-ig-1000/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapepilot-download-from-any-website-youtube-tiktok-ig-1000",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapepilot~download-from-any-website-youtube-tiktok-ig-1000/runs": {
            "post": {
                "operationId": "runs-sync-scrapepilot-download-from-any-website-youtube-tiktok-ig-1000",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapepilot~download-from-any-website-youtube-tiktok-ig-1000/run-sync": {
            "post": {
                "operationId": "run-sync-scrapepilot-download-from-any-website-youtube-tiktok-ig-1000",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "url": {
                        "title": "Video URL",
                        "type": "string",
                        "description": "Single video URL from any supported platform. E.g: https://www.youtube.com/watch?v=xxx OR https://www.tiktok.com/@user/video/xxx"
                    },
                    "urls": {
                        "title": "Multiple URLs (batch)",
                        "type": "string",
                        "description": "Process multiple video URLs at once — one URL per line. Supports mixing different platforms."
                    },
                    "quality": {
                        "title": "Video Quality",
                        "enum": [
                            "best",
                            "1080p",
                            "720p",
                            "480p",
                            "audio_only"
                        ],
                        "type": "string",
                        "description": "Preferred video quality for download URLs",
                        "default": "best"
                    },
                    "max_results": {
                        "title": "Max Results (for playlists/channels)",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum videos to extract from playlists or channels",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy (RESIDENTIAL Recommended)",
                        "type": "object",
                        "description": "RESIDENTIAL proxy recommended for TikTok, Instagram and Facebook. Not required for YouTube."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
