
Instagram Reel Scraper
scrape.ly/store/echofield/instagram-reel-scraperSocial mediaVideos
1 monthly user

Download public YouTube videos as MP4, MP3, and other formats. Paste a video link, choose the quality, and the file is saved with the run.
Download public YouTube videos as MP4, MP3, and a dozen other formats. Paste a video link, pick a quality and a format, and get a download link for the finished file on every dataset row. No YouTube account, no cookies, and you pay only for the megabytes you download.
OUTPUT record, and the rest of the run carries on.youtu.be, shorts, or embed links).downloadedFileUrl. Export the table as JSON, CSV, or Excel if you need it.| Field | Type | What it does |
|---|---|---|
videos | array | Public YouTube watch, share, shorts, or embed links. Required. |
maxVideos | integer | How many links to download in this run. Default 10. |
preferredQuality | string | 144p to 2160p. Default 720p. Largest stream at or below this size. |
preferredFormat | string | mp4 (default), mkv, mov, webm, avi, flv, or audio: mp3, m4a, aac, wav, flac, ogg, opus, vorbis, aiff, alac, mka. |
storeInKVStore | boolean | Save the file and add a link to the row. Default on. |
filenameTemplateParts | array | Extra parts after the video id in the file name. Default ["title"]. |
transcriptionAndSubtitle | string | NONE, ALWAYS_SUBTITLES, TRANSCRIPTION_AS_FALLBACK, or ALWAYS_TRANSCRIBE. |
proxyConfiguration | object | Residential by default. |
{
"videos": [
{ "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw" }
],
"maxVideos": 10,
"preferredQuality": "720p",
"preferredFormat": "mp4",
"storeInKVStore": true
}
MP4 and MKV keep the original streams. Other formats are converted. Audio formats save the soundtrack only.
Each link is one dataset row.
| Field | Description |
|---|---|
id, title, channelName, input | Video id, title, channel, and the link you gave. |
downloadedFileUrl, fileKey | Download link and file name in storage. |
quality, format, bytes, durationSeconds | Details of the saved file. |
audioOnlyUrl, videoOnlyUrl | Direct stream links, which expire on YouTube's own schedule. |
subtitles, transcriptionUrl | Caption data when requested and published. |
note | Status note, such as the link expiry. |
Real item from a test run (links shortened):
{
"note": "The file link expires in 7 days.",
"id": "jNQXAC9IVRw",
"title": "Me at the zoo",
"channelName": "jawed",
"input": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"downloadedFileUrl": "https://api-staging.scrape.ly/v2/key-value-stores/bcb0fd16-.../records/jNQXAC9IVRw_Meatthezoo.mp4?signature=...",
"fileKey": "jNQXAC9IVRw_Meatthezoo.mp4",
"audioOnlyUrl": "https://rr1---sn-....googlevideo.com/videoplayback?...",
"videoOnlyUrl": "https://rr1---sn-....googlevideo.com/videoplayback?...",
"subtitles": null,
"transcriptionUrl": null,
"durationSeconds": 19,
"quality": "240p",
"format": "mp4",
"bytes": 742447
}
When a link cannot be read, no row is saved for it and the rest of the run continues. The run's OUTPUT record lists it under failedInputs (input and reason), and the status message names the first reason. Reasons start with one of these codes:
| Code | Meaning |
|---|---|
INVALID_URL | The link is not a YouTube video. |
VIDEO_UNAVAILABLE | The video is private, removed, or blocked. |
AGE_RESTRICTED | YouTube asks for an age check. |
NO_STREAMS | No public media stream was published. |
DOWNLOAD_FAILED | YouTube refused the file after three tries from fresh addresses. |
MUX_FAILED | The streams could not be combined into the requested format. |
$1 per 1,000 MB downloaded, which is $0.001 per megabyte, rounded up. Billing follows the media downloaded from YouTube, not the size of a converted file: an MP3 is billed from the audio that was downloaded. Rows that fail before a download are free.
Residential proxy traffic ($2 per GB) and compute are billed separately at standard rates. A download uses about 1 MB of residential traffic per MB of video, so it adds about $0.002 per MB, and the all-in price is about $0.003 per MB plus compute.
Worked example: a 100 MB video costs $0.10 in event fees plus about $0.20 of residential traffic (about 0.1 GB) plus a few cents of compute, so about $0.31 to $0.33 in total. The 19-second clip above is billed 1 MB ($0.001 in event fees); with compute and proxy the whole run costs well under one cent.
Is it legal to download YouTube videos? Only download videos you have the right to save, and follow YouTube's terms and copyright law. The actor handles public videos only.
Do I need a YouTube login or my own proxy? No login. Residential proxy is selected by default because YouTube challenges datacenter addresses. Each video uses one residential address for the whole download, and the run creates YouTube's proof-of-origin token itself, so you need no cookies.
Which quality do I get? The largest published stream at or below your choice. An old video may only offer 240p or 144p even if you ask for 720p.
Are captions included? Choose a subtitles option to attach captions when YouTube published them. Speech-to-text is not included.
How large can a file be? Files over 90 MB are not saved. The row still carries the direct stream links.
Can I use the API?
Yes. Start a run and read the dataset over the API, then fetch each downloadedFileUrl.
maxVideos to download more.failedInputs.failedInputs with DOWNLOAD_FAILED and is not charged. In October 2026 tests, 126 of 126 downloads of public videos succeeded across seven runs (shorts, music videos, talks, and videos up to 65 minutes, from watch, share, shorts, embed, mobile and music links).Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
videosarrayRequiredVideo links
Public YouTube watch, share, shorts, or embed links.
maxVideosintegerOptionaldefault 10Maximum videos
How many links to download in this run.
Quality and container. Audio formats ignore the picture size and save the soundtrack.
preferredQualityenumOptionaldefault "720p"Preferred quality
Highest quality to download, at or below this size. A short video may only offer a lower size.
preferredFormatenumOptionaldefault "mp4"Preferred format
Container for the saved file. MP4 and MKV keep the original streams. Other formats are converted.
Where the file is saved and how it is named.
storeInKVStorebooleanOptionaldefault trueSave the file
Save the file in this run's storage and add a download link to the dataset. Turn this off to return stream links only.
filenameTemplatePartsarrayOptionaldefault ["title"]Name the file with
Extra parts after the video id, separated by underscores. The name is shortened to 252 characters.
Optional captions published with the video.
transcriptionAndSubtitleenumOptionaldefault "NONE"Subtitles
Attach YouTube's own captions when the video has them. Speech-to-text is not included.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential addresses are the default. Datacenter addresses are challenged before the video can be read.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| title | string | null | Video title |
| id | string | null | Video id |
| input | string | null | Link from the input |
| downloadedFileUrl | string | null | Link to the saved file |
| fileKey | string | null | Storage key of the saved file |
| quality | string | null | Picture size that was downloaded |
| format | string | null | File format |
| durationSeconds | integer | null | Length of the video in seconds |
| bytes | integer | null | Bytes downloaded from the media servers |
| channelName | string | null | Channel name |
| audioOnlyUrl | string | null | Direct audio stream link |
| videoOnlyUrl | string | null | Direct video stream link |
| subtitles | string | null | Caption text when requested and published with the video |
| transcriptionUrl | string | null | Unused. Speech-to-text is not included. |
| note | string | null | Expiry note or warning |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Video download of 1 MB | Each megabyte of media downloaded, rounded up. | $0.001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('echofield/youtube-video-downloader').call({
"videos": [
{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"
}
],
"maxVideos": 10,
"preferredQuality": "720p",
"preferredFormat": "mp4",
"storeInKVStore": true,
"filenameTemplateParts": [
"title"
],
"transcriptionAndSubtitle": "NONE",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run echofield/youtube-video-downloaderPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=echofield/youtube-video-downloader"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Two Shorts saved as small 144p video files.
Audio-only file plus the subtitle track.
Works with Shorts and youtu.be links.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.