# YouTube Downloader - Video + Audio (MP3, 4K) (`hasnainnisar67/youtube-downloader`) Actor

Get direct download URLs for any YouTube video in every resolution (144p to 4K) plus MP3 / M4A audio. Returns one ready-to-use URL per format, plus a best-combined and best-audio shortcut. Bulk input, no API key, no login.

- **URL**: https://apify.com/hasnainnisar67/youtube-downloader.md
- **Developed by:** [Hasnain Nisar](https://apify.com/hasnainnisar67) (community)
- **Categories:** Videos, Developer tools
- **Stats:** 31 total users, 3 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$0.99 / 1,000 video resolveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 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

## YouTube Downloader - MP4 & MP3 Direct URLs (4K, 1080p, 720p, 480p, Audio)

**Get direct download URLs for any YouTube video — 4K MP4, 1080p, 720p, 480p, plus MP3 audio.** Works on regular videos, YouTube Shorts, live streams, and Music URLs. No login. No API key. No watermark.

### What this YouTube Downloader does

Pass in any YouTube URL and the actor returns:

- **Best combined download URL** (video + audio in one MP4)
- **Best video-only URL** (for the highest possible resolution — 4K, 1440p, 1080p)
- **Best audio URL** (M4A / Opus) — perfect for MP3 conversion
- **Full format list** with every resolution / bitrate available, file size, and codec

### Why use this YouTube Downloader?

- **No API key, no login** — start downloading immediately
- **All qualities included** — from 144p up to 4K (when available)
- **Audio-only mode** — extract MP3-ready audio without re-downloading the video
- **Bulk URLs** — pass an array, get back every download link
- **Shorts and live VODs supported**
- **No watermark** — direct CDN URLs from YouTube itself

### Use cases

- **Offline viewing** — download videos for travel, low-bandwidth use
- **Audio extraction** — convert YouTube to MP3 for podcasts, music, lectures
- **Content archival** — back up your own uploads or favourites
- **Compliance / legal review** — download videos for editorial or court records
- **Captioning / transcription** — feed audio into Whisper, AssemblyAI, etc.
- **Research** — bulk-download videos for AI/ML training data

### Input

```json
{
    "videoUrls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "https://youtu.be/9bZkp7q19f0",
        "https://www.youtube.com/shorts/abc123"
    ]
}
````

### Output

Each dataset record contains the video's metadata and a list of every available format URL, plus pre-resolved best-video / best-audio / best-combined URLs.

```json
{
    "title": "Rick Astley - Never Gonna Give You Up (Official Video)",
    "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
    "duration": 213,
    "duration_string": "3:33",
    "uploader": "Rick Astley",
    "platform": "Youtube",
    "audio_url": "https://… (best audio direct URL)",
    "formats": [
        {
            "format_id": "313",
            "type": "video",
            "ext": "webm",
            "height": 2160,
            "quality": "2160p",
            "filesize": 312456789,
            "has_audio": false,
            "url": "https://…"
        },
        {
            "format_id": "137",
            "type": "video",
            "ext": "mp4",
            "height": 1080,
            "quality": "1080p",
            "filesize": 31456789,
            "has_audio": false,
            "url": "https://…"
        }
    ]
}
```

### How it works

The actor uses [yt-dlp](https://github.com/yt-dlp/yt-dlp) — the open-source standard for YouTube extraction. The same code powers tens of thousands of production downloaders. Format URLs are extracted from YouTube's player JSON exactly the way the YouTube web app does it.

### Cost & speed

Format URLs resolve in 2–4 seconds per video. Memory stays under 256 MB. You only pay for compute time used.

### Related actors

- **YouTube Video Info Scraper** — extract metadata only (no format URLs)
- **YouTube Channel Scraper** — get a channel's full video list
- **YouTube Competitor Analyzer** — compare up to 5 channels
- **Universal Video Downloader** — same engine, every supported site

### FAQ

**Q: Why does my download URL stop working after a few hours?**
YouTube signs all CDN URLs with a time-limited token (typically 6 hours). Re-run the actor to get fresh URLs.

**Q: Does the actor download the actual MP4 file?**
No. It returns the direct URL. You download with `curl`, `wget`, `ffmpeg`, or any HTTP client. This keeps the actor cheap, fast, and avoids Apify storage costs.

**Q: Can I get a single MP4 with both video and audio?**
Yes — the `formats` list includes every "combined" stream YouTube offers (typically up to 720p). For higher resolutions, YouTube serves video and audio separately; merge with ffmpeg: `ffmpeg -i video.mp4 -i audio.m4a -c copy out.mp4`.

**Q: Does it work for age-restricted videos?**
Some age-gated videos require login and won't resolve. Public, non-restricted videos always work.

**Q: Is downloading legal?**
For your own videos and creative-commons content, yes. For copyrighted material, you must comply with YouTube's Terms of Service and your local copyright law (fair use, personal-use exceptions, etc).

# Actor input Schema

## `videoUrls` (type: `array`):

One or more YouTube video, Shorts, live, or Music/Mix URLs to resolve. Returns direct MP4 / MP3 download URLs at every available quality. Mix and radio params (?list=, ?start\_radio=, ?si=) are stripped automatically.

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

yt-dlp is routed through this proxy. Apify datacenter IPs are aggressively rate-limited by YouTube ('Sign in to confirm you're not a bot'), so a proxy is required for reliable extraction. If a video still fails the bot-challenge, the actor automatically retries it via the RESIDENTIAL proxy group.

## `cookies` (type: `string`):

Strongly recommended. YouTube serves only the low-quality 360p muxed stream to most Apify proxy IPs (a 'stripped response'). Pasting a Netscape-format cookies.txt blob from a logged-in YouTube session unlocks the full 4K/1440p/1080p ladder plus high-quality audio. Export via the 'Get cookies.txt LOCALLY' browser extension. See https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "cookies": ""
}
```

# 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 = {
    "videoUrls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("hasnainnisar67/youtube-downloader").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 = {
    "videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("hasnainnisar67/youtube-downloader").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 '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call hasnainnisar67/youtube-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hasnainnisar67/youtube-downloader",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Downloader - Video + Audio (MP3, 4K)",
        "description": "Get direct download URLs for any YouTube video in every resolution (144p to 4K) plus MP3 / M4A audio. Returns one ready-to-use URL per format, plus a best-combined and best-audio shortcut. Bulk input, no API key, no login.",
        "version": "0.1",
        "x-build-id": "UvKie5GWQBEUrx2Cg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/hasnainnisar67~youtube-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-hasnainnisar67-youtube-downloader",
                "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/hasnainnisar67~youtube-downloader/runs": {
            "post": {
                "operationId": "runs-sync-hasnainnisar67-youtube-downloader",
                "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/hasnainnisar67~youtube-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-hasnainnisar67-youtube-downloader",
                "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",
                "required": [
                    "videoUrls"
                ],
                "properties": {
                    "videoUrls": {
                        "title": "YouTube video URLs",
                        "type": "array",
                        "description": "One or more YouTube video, Shorts, live, or Music/Mix URLs to resolve. Returns direct MP4 / MP3 download URLs at every available quality. Mix and radio params (?list=, ?start_radio=, ?si=) are stripped automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "yt-dlp is routed through this proxy. Apify datacenter IPs are aggressively rate-limited by YouTube ('Sign in to confirm you're not a bot'), so a proxy is required for reliable extraction. If a video still fails the bot-challenge, the actor automatically retries it via the RESIDENTIAL proxy group.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "cookies": {
                        "title": "YouTube cookies (Netscape format) - HIGHLY RECOMMENDED",
                        "type": "string",
                        "description": "Strongly recommended. YouTube serves only the low-quality 360p muxed stream to most Apify proxy IPs (a 'stripped response'). Pasting a Netscape-format cookies.txt blob from a logged-in YouTube session unlocks the full 4K/1440p/1080p ladder plus high-quality audio. Export via the 'Get cookies.txt LOCALLY' browser extension. See https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
