Twitch Public Video Downloader
Pricing
Pay per event
Twitch Public Video Downloader
Download authorized public Twitch videos and clips as stored files with creator, timestamps, duration, quality, provenance, and retrieval status.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Download authorized, anonymously playable Twitch videos and clips from supplied public URLs. The Actor stores the selected media in the run key-value store and writes typed provenance records to the default dataset.
It supports:
- public Twitch VOD URLs such as
https://www.twitch.tv/videos/{id}; - public Twitch clip URLs on
twitch.tv/{channel}/clip/{slug}; - short public clip URLs on
clips.twitch.tv/{slug}; - complete MP4 clip downloads;
- duration-bounded HLS VOD downloads as MPEG transport streams;
- metadata-only exports when no media file is needed.
No Twitch account, user OAuth token, browser, or proxy is required for anonymously playable media. Private, removed, subscriber-only, region-restricted, encrypted, or otherwise unavailable media is not bypassed.
What does this Twitch video downloader do?
For each supplied URL, the Actor validates the Twitch URL, resolves public metadata, selects a video rendition, and optionally streams media into the run's key-value store.
Each successful dataset row includes:
- Twitch VOD or clip identity;
- title and creator identity;
- creation and publication timestamps;
- full media duration;
- downloaded duration for bounded VOD assets;
- public view count and VOD category when available;
- selected resolution and frame rate;
- stored-file key, API URL, size, and format;
- canonical source URL and retrieval status.
Clip files are MP4.
VOD files are assembled from complete public HLS segments and stored as .ts files.
Who is it for?
Creators and channel teams can back up authorized public clips and bounded VOD sections with stable provenance metadata.
Media archivists can schedule recurring runs and send file links plus source records to an archive pipeline.
Editors and researchers can fetch a lower-resolution working copy without manually navigating the Twitch player.
Data engineers can export metadata-only rows to datasets, spreadsheets, warehouses, or webhooks.
Only download media you own or have permission to archive.
Why use this Actor?
- One input accepts both VOD and clip URLs.
- Media is stored with the same run that produced its provenance row.
- Quality, duration, byte limits, item limits, and retries are explicit.
- Metadata-only mode avoids unnecessary media transfer.
- Duplicate URLs in one run are processed once.
- Failed URLs produce diagnostic rows but are not charged as successful items.
- There is no hidden residential proxy fallback.
The Actor does not search Twitch channels or discover videos by keyword. Supply exact public media URLs.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | One to 25 public Twitch VOD or clip URLs. |
maxItems | integer | URL count | Maximum unique URLs to process, from 1 to 25. |
downloadMedia | boolean | true | Store media when enabled; export metadata only when disabled. |
quality | string | 480p | best, 1080p, 720p, 480p, 360p, or worst. |
maxDurationSeconds | integer | 15 | Maximum VOD media duration, from 1 to 21,600 seconds. Clips remain complete. |
maxMediaSizeMb | integer | 20 | Per-file safety limit, from 1 to 100 MB. |
maxRequestRetries | integer | 2 | Transient request retries, from 0 to 5. |
If the requested resolution does not exist, the Actor chooses the closest available rendition at or below it. If every rendition is higher, it chooses the lowest available rendition.
Getting started
- Open the Actor input page.
- Add one or more public Twitch VOD or clip URLs.
- Keep Download media enabled for files, or disable it for metadata only.
- Select the desired quality.
- For a VOD, choose the maximum duration to store.
- Set a byte limit appropriate for the expected media.
- Start the run.
- Open Dataset for records and Storage for downloaded files.
Start with a short clip or a 15-second VOD sample when validating a new workflow. Increase duration and file limits only after checking output size and cost.
Example input: download a public clip
{"startUrls": [{ "url": "https://clips.twitch.tv/SmokyFragileFoxRedCoat-MRH2eCK-8aE8xUzd" }],"maxItems": 1,"downloadMedia": true,"quality": "360p","maxMediaSizeMb": 100}
This path stores the complete selected MP4 rendition.
Example input: export VOD metadata only
{"startUrls": [{ "url": "https://www.twitch.tv/videos/2850006339" }],"maxItems": 1,"downloadMedia": false,"quality": "480p"}
Metadata-only mode still resolves current public title, creator, duration, category, thumbnail, and view count. It does not create a media file.
Example input: archive a bounded VOD sample
{"startUrls": [{ "url": "https://www.twitch.tv/videos/2850006339" }],"downloadMedia": true,"quality": "360p","maxDurationSeconds": 15,"maxMediaSizeMb": 100,"maxRequestRetries": 2}
The Actor stores complete HLS segments whose total duration fits the requested bound. Because Twitch segment lengths vary, the resulting duration can be slightly below the exact limit.
Output fields
| Field | Meaning |
|---|---|
mediaType | video or clip. |
twitchId | Twitch VOD ID or clip ID. |
title | Public media title. |
creatorId | Twitch broadcaster ID. |
creatorLogin | Broadcaster login. |
creatorName | Broadcaster display name. |
createdAt | Twitch creation timestamp. |
publishedAt | Publication timestamp when available. |
durationSeconds | Full source duration. |
downloadedDurationSeconds | Duration represented by the stored asset. |
viewCount | Public view count at retrieval time. |
game | VOD category or game when available. |
thumbnailUrl | Twitch preview image. |
sourceUrl | Canonical public Twitch page. |
format | mp4 for clips or ts for stored VOD media. |
resolution | Selected Twitch rendition label. |
frameRate | Selected frame rate when available. |
storedFileKey | Key-value store record key. |
storedFileUrl | Apify API URL for the file. |
storedFileSizeBytes | Stored file size. |
retrievalStatus | downloaded, partial, metadata_only, or failed. |
error | Concise failure reason, otherwise null. |
retrievedAt | Record production timestamp. |
Fields can be null when Twitch does not expose the value or when an input fails.
Example output
{"mediaType": "clip","twitchId": "ExampleClipSlug123","title": "Example stream highlight","creatorId": "123456789","creatorLogin": "examplechannel","creatorName": "Example Channel","createdAt": "2026-01-15T12:00:00.000Z","publishedAt": "2026-01-15T12:00:00.000Z","durationSeconds": 29,"downloadedDurationSeconds": 29,"viewCount": 1500,"game": null,"thumbnailUrl": "https://static-cdn.jtvnw.net/example-thumbnail.jpg","sourceUrl": "https://clips.twitch.tv/ExampleClipSlug123","format": "mp4","resolution": "360p","frameRate": 30,"storedFileKey": "twitch-clip-ExampleClipSlug123-360p.mp4","storedFileUrl": "https://api.apify.com/v2/key-value-stores/exampleStore/records/twitch-clip-ExampleClipSlug123-360p.mp4","storedFileSizeBytes": 2852913,"retrievalStatus": "downloaded","error": null,"retrievedAt": "2026-01-15T12:01:00.000Z"}
The dataset record is the durable integration contract. Playback authorization and CDN URLs are intentionally not exposed because they are short-lived.
Where are downloaded files stored?
Downloaded files are records in the run's default key-value store.
Use storedFileUrl from the dataset row to retrieve a file through the Apify API.
twitch-clip-*.mp4contains a complete selected clip rendition.twitch-video-*.tscontains the selected VOD HLS segments.
Storage retention follows your Apify account and storage settings. Copy important files to your long-term object storage before retention expires.
How much does it cost to download Twitch videos?
The Actor uses pay-per-event pricing:
- Start:
$0.005once per run. - Twitch media record: each successful metadata or download record uses tiered pricing; the FREE-tier rate is
$0.0088228per item and BRONZE is$0.007672.
Downloaded and metadata-only records use the same item event. Failed and duplicate inputs are not charged as successful items.
At FREE-tier rates, a one-record run costs about $0.0138 including the run start, whether it stores a file or returns metadata only.
A five-record run costs about $0.0491 at FREE-tier rates.
Higher subscription tiers receive the active tier discounts shown on the Actor pricing page.
Limits and expected behavior
- A run accepts at most 25 supplied URLs.
- A VOD download is limited to complete HLS segments within
maxDurationSeconds. - A file that exceeds
maxMediaSizeMbis rejected and removed rather than stored partially by bytes. - Clip media is downloaded in full or rejected.
- Public metadata and playback availability can change between runs.
- Stored VOD files are MPEG transport streams, not remuxed MP4 files.
- The Actor does not combine separate audio/video tracks or transcode media.
- The Actor does not bypass login, subscription, DRM, geographic, or rights restrictions.
- A stored file is capped at 100 MB; long or high-resolution VODs may need a shorter duration or lower rendition.
A partial status for a VOD is expected when its full duration exceeds maxDurationSeconds.
A failed status includes a concise error suitable for retry classification.
Retry and failure behavior
The Actor retries only transient network errors, HTTP 429 responses, and server failures. Retry delay increases between attempts.
It does not blindly retry:
- malformed or unsupported URLs;
- a Twitch media ID that no longer exists;
- private or subscriber-only media;
- anonymous playback denial;
- encrypted media;
- a deterministic file-size violation.
If every supplied URL fails, the run exits as failed instead of reporting a misleading successful empty run. Mixed runs preserve diagnostic rows for failed URLs and useful records for successful ones.
Scheduling an archival workflow
Use an Apify schedule when you maintain a known list of authorized media URLs. A practical workflow is:
- Keep the exact Twitch URLs in Task input.
- Run metadata-only checks frequently.
- Trigger media downloads only for newly approved URLs.
- Export dataset records to a table or warehouse.
- Copy stored files to long-term storage.
- Deduplicate downstream by
mediaTypeplustwitchId.
The Actor does not discover newly published channel media. Pair it with a separate URL-discovery process if discovery is required.
Integrations
Use Apify integrations to send records to:
- Google Sheets for a lightweight archive index;
- webhooks for downstream file transfer;
- Make or Zapier for approval workflows;
- cloud storage automation;
- a database or data warehouse;
- another Actor through a Task or API workflow.
Always pass exact authorized Twitch URLs into this Actor.
Run with the Apify API using cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~twitch-public-video-downloader/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://clips.twitch.tv/SmokyFragileFoxRedCoat-MRH2eCK-8aE8xUzd"}],"downloadMedia": true,"quality": "360p","maxMediaSizeMb": 100}'
Use the returned run ID to inspect status, dataset items, and key-value store records. Do not place an Apify token in source control.
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/twitch-public-video-downloader').call({startUrls: [{ url: 'https://www.twitch.tv/videos/2850006339' },],downloadMedia: false,maxItems: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For media downloads, read storedFileUrl from each successful item.
Run with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/twitch-public-video-downloader").call(run_input={"startUrls": [{"url": "https://www.twitch.tv/videos/2850006339"}],"downloadMedia": False,"maxItems": 1,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
The Python client can also fetch key-value store records after a download run.
Use through MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/twitch-public-video-downloader"
Claude Desktop
Add this server configuration to Claude Desktop:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/twitch-public-video-downloader"}}}
Cursor
Use the same MCP server URL in Cursor's MCP settings and authenticate with your Apify account when prompted.
VS Code
Add the same HTTP MCP server URL to your VS Code MCP configuration. Keep tokens in the editor's secure environment rather than in the workspace file.
Example prompts:
- "Export metadata for this public Twitch VOD without downloading the file."
- "Download this authorized public Twitch clip at up to 360p."
- "Store the first 30 seconds of this public Twitch VOD and return its provenance row."
Include the exact URL and explicit download limits in an MCP request.
Responsible and legal use
Twitch media can be protected by copyright, contract, privacy, publicity, and platform rules. Use this Actor only for media you own, control, or are authorized to download and archive.
Do not use it to:
- redistribute media without permission;
- bypass access controls or subscriptions;
- archive private or restricted content;
- evade geographic or rights limitations;
- violate Twitch terms or applicable law.
You are responsible for your inputs, storage, retention, and downstream use. The Actor deliberately fails closed when anonymous public playback is unavailable.
FAQ and troubleshooting
Why did my VOD return partial?
maxDurationSeconds was shorter than the full VOD.
Increase the duration if you are authorized to archive more, and ensure the byte limit is sufficient.
Why did the file-size check fail?
The selected rendition exceeded maxMediaSizeMb.
Choose a lower quality, reduce VOD duration, or raise the size limit within the supported maximum.
Why does a Twitch URL fail even though the page once worked?
Twitch VODs and clips can be removed, expire, become restricted, or lose anonymous playback availability. Confirm the URL still plays while logged out.
Why is a VOD file .ts instead of .mp4?
Public Twitch VOD playback uses HLS segments. The Actor joins complete selected segments without transcoding, preserving a low-memory streaming path. Use a media tool you trust to remux the authorized file when MP4 is required.
Does it download live streams?
No. This Actor supports supplied public VOD and clip URLs, not active live channels.
Does it search Twitch?
No. Use exact media URLs.
Related Actors
- Twitch Scraper for public Twitch channel, stream, game, and clip metadata workflows.
- M3U8 Playlist Downloader for authorized public HLS playlists you already possess.
- Reddit Public Video Downloader for authorized Reddit-hosted video archives.
These Actors solve separate source or discovery jobs. Use only the tool whose source and access scope match your workflow.