# Streamable Video Downloader: MP4 Links & Metadata (`getascraper/streamable-video-downloader`) Actor

Resolve Streamable URLs, embed codes, or short codes into direct signed MP4 download links, quality variants, and full metadata. No login or API key required.

- **URL**: https://apify.com/getascraper/streamable-video-downloader.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Social media, Videos, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.65 / 1,000 video records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 🎬 Streamable Video Downloader: Direct MP4 links in seconds

**Turn any Streamable link into a direct, downloadable MP4 in seconds.** Paste a share link, an embed snippet, or just the short code, and get back the video file link, every available quality, and the title, size, and thumbnail. No login and no browser extension required.

### 🔍 What does the Streamable Video Downloader do?

The Streamable Video Downloader resolves [Streamable](https://streamable.com/) videos into a ready-to-use download link. Paste in one or many videos and it looks each one up and returns the direct file link plus full details.

It accepts almost any format you might have copied a Streamable video from:

- A share link, like `streamable.com/abc123`
- An embed link, like `streamable.com/e/abc123` or `streamable.com/o/abc123`
- A full embed snippet copied from a website's page source
- Just the short code on its own, like `abc123`

Because it runs on the Apify platform, you also get scheduling, ready-made integrations, run monitoring, and clean exports in JSON, CSV, or Excel.

### 💡 Why use the Streamable Video Downloader?

Streamable links expire, get deleted, or simply aren't convenient to watch outside a browser. This tool turns any link into a file you can actually save, archive, or pipe into another tool.

- **Content archiving**: back up clips shared in Discord, Slack, or forums before they disappear.
- **Media monitoring**: pull video links in bulk from a list of posts or messages for review.
- **Automation pipelines**: feed resolved video links straight into your own editing, hosting, or transcription workflow.
- **Research and QA**: verify a batch of Streamable links are still live and check their resolution before using them elsewhere.

### 🚀 How to use the Streamable Video Downloader

1. Click **Try for free** at the top of this page.
2. Paste one or more Streamable links, embed snippets, or short codes into **Streamable videos**, one per line.
3. Leave **Download and store the video file** off for just the link, or turn it on to also save a copy of the file.
4. Set **Max items** if you want to cap how many videos are processed.
5. Press **Start** and watch the results fill the Output tab in seconds.
6. Download the dataset in JSON, CSV, or Excel, or connect it to Google Sheets, Make, Zapier, or your own app.

New here? Try it with a single link first to see the output shape before pasting in a longer list.

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| Streamable videos | array of strings | Yes | Share links, embed links, iframe snippets, or short codes. One per line. |
| Download and store the video file | boolean | No | When on, the actor also downloads the video file and stores it, adding a direct download link. Off by default since this takes longer and uses more data. |
| Max items | integer | No | Maximum number of videos to resolve. Use 0 for no limit. |
| Proxy configuration | object | No | Proxy settings. The default works well for almost every run. |

### 📤 Output

Every video becomes one clean row. Here is an example for a resolved video:

```json
{
  "input": "moo",
  "streamableId": "moo",
  "canonicalUrl": "https://streamable.com/moo",
  "title": "\"Please don't eat me!\"",
  "width": 852,
  "height": 480,
  "thumbnailUrl": "https://cdn-cf-west.streamable.com/image/f6441ae0c84311e4af010bc47400a0a4.jpg?Expires=...",
  "bestMediaUrl": "https://cdn-cf-west.streamable.com/video/f6441ae0c84311e4af010bc47400a0a4.mp4?Expires=...",
  "mediaVariants": [
    { "quality": "mp4", "url": "https://cdn-cf-west.streamable.com/video/....mp4?Expires=...", "width": 852, "height": 480 }
  ],
  "status": "ready",
  "available": true,
  "scrapedAt": "2026-07-02T21:58:40.708Z"
}
````

A video that was deleted or never existed still gets a row, so you always know what happened to every input:

```json
{
  "input": "deleted-video-code",
  "streamableId": "deleted-video-code",
  "canonicalUrl": "https://streamable.com/deleted-video-code",
  "status": "not_found",
  "available": false,
  "scrapedAt": "2026-07-02T22:01:15.375Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The Output tab has three ready-made views: Videos, Quality variants, and Failed or unavailable.

### 📊 Data table

Fields returned per video. A field only appears when Streamable actually provides it, so every value you see is real.

| Field | Type | Description |
|---|---|---|
| input | string | The original link, snippet, or code you provided. |
| streamableId | string | The resolved Streamable short code. |
| canonicalUrl | string | The clean streamable.com share link for this video. |
| title | string | The video's title, if it has one. |
| durationSeconds | number | Length of the video in seconds, when reported. |
| width / height | number | Resolution of the best available file. |
| thumbnailUrl | string | Direct link to the video's preview image. |
| plays | number | View count, when Streamable reports it. |
| dateAdded | string | Upload date, when Streamable reports it. |
| bestMediaUrl | string | Direct link to the highest quality video file available right now. |
| mediaVariants | array | Every available quality of the video, with its own link, resolution, and file size. |
| status | string | `ready`, `processing`, `uploading`, `failed`, `not_found`, or `invalid_input`. |
| available | boolean | True only when a working download link was actually found. |
| savedFile | object | Details of the stored copy of the file, only present when file download is turned on. |
| scrapedAt | string | When this video was checked, in ISO 8601 UTC. |

### 💰 Pricing

This Actor uses **pay per result**, so you only pay for the records you actually receive. Runs that return nothing cost nothing, and there are no monthly subscriptions or hidden fees. Set **Max items** to keep any run within your budget.

### ❓ FAQ

#### Is this legal to use?

This Actor only resolves videos that are already public on Streamable and viewable without logging in. You are responsible for how you use the results, including respecting the rights of whoever uploaded the video.

#### Do I need a Streamable account or API key?

No. Paste a link or code and press start. No login is needed.

#### What happens if a video was deleted or never existed?

You still get a row for it, marked `not_found` with `available: false`, so nothing silently disappears from your results.

#### Why is a video marked as not available even though I can see it in my browser?

Some videos are still uploading or processing on Streamable's side. Try again in a few minutes, and the status will update to `ready` once the file finishes processing.

#### Can I get the actual video file, not just a link?

Yes. Turn on **Download and store the video file** in the input. This takes longer and uses more data, so it's off by default.

### 🛟 Support

Found a bug, or need an extra field? Open an issue on the **Issues** tab of this Actor and it will be reviewed. Custom versions and larger data pulls are available on request.

# Actor input Schema

## `targets` (type: `array`):

Streamable share URLs (streamable.com/abc123), embed URLs (streamable.com/e/abc123 or /o/abc123), iframe embed snippets, or bare short codes. One per line.

## `downloadFile` (type: `boolean`):

When enabled, the actor downloads the actual MP4 bytes and stores them in the run's key-value store, adding a direct download link to each result. Off by default because this uses significantly more bandwidth and run time. When off, you still get the signed streaming URL, just not a copy of the file.

## `maxItems` (type: `integer`):

Maximum number of videos to resolve and push to the dataset. Use 0 for no limit (all provided targets). You are billed per record returned.

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

Streamable has no anti-bot protection, so even no proxy resolves every video. Datacenter proxy is kept as the default for IP diversity at scale.

## Actor input object example

```json
{
  "targets": [
    "https://streamable.com/moo",
    "abc123",
    "<iframe src=\"https://streamable.com/o/xyz789\"></iframe>"
  ],
  "downloadFile": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "targets": [
        "https://streamable.com/moo"
    ],
    "downloadFile": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/streamable-video-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 = {
    "targets": ["https://streamable.com/moo"],
    "downloadFile": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/streamable-video-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 '{
  "targets": [
    "https://streamable.com/moo"
  ],
  "downloadFile": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/streamable-video-downloader --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Streamable Video Downloader: MP4 Links & Metadata",
        "description": "Resolve Streamable URLs, embed codes, or short codes into direct signed MP4 download links, quality variants, and full metadata. No login or API key required.",
        "version": "0.1",
        "x-build-id": "Vju3tCl0iDgd1IU8u"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~streamable-video-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-streamable-video-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/getascraper~streamable-video-downloader/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-streamable-video-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/getascraper~streamable-video-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-streamable-video-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": [
                    "targets"
                ],
                "properties": {
                    "targets": {
                        "title": "Streamable videos",
                        "type": "array",
                        "description": "Streamable share URLs (streamable.com/abc123), embed URLs (streamable.com/e/abc123 or /o/abc123), iframe embed snippets, or bare short codes. One per line.",
                        "default": [
                            "https://streamable.com/moo"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "downloadFile": {
                        "title": "Download and store the video file",
                        "type": "boolean",
                        "description": "When enabled, the actor downloads the actual MP4 bytes and stores them in the run's key-value store, adding a direct download link to each result. Off by default because this uses significantly more bandwidth and run time. When off, you still get the signed streaming URL, just not a copy of the file.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of videos to resolve and push to the dataset. Use 0 for no limit (all provided targets). You are billed per record returned.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Streamable has no anti-bot protection, so even no proxy resolves every video. Datacenter proxy is kept as the default for IP diversity at scale.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
