Twitch ALL IN ONE URL | Search | Streams, VODs, Clips Scraper
Pricing
from $1.00 / 1,000 results
Twitch ALL IN ONE URL | Search | Streams, VODs, Clips Scraper
From $1/1K. Scrape Twitch data at scale, including channels, live streams, clips, VODs, and top games. Extract HLS m3u8 stream URLs, clip MP4 downloads in multiple qualities, chapter markers, and metadata. Supports keyword search with rich, analytics-ready output.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
AbotAPI
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Twitch Scraper
Pull rich, structured data from Twitch.tv at scale: channel profiles, live streams in any game/category, clips with direct MP4 download URLs, VODs with chapter markers, top games, and unified keyword search. Returns playable HLS m3u8 stream URLs and clip MP4 download URLs (multiple qualities), features rarely available elsewhere.
Why this scraper?
- Nine modes in one actor: channel, live streams, game streams, top games, search, clips, videos (VODs), VOD metadata, and a free-form URL mode that auto-detects what you paste.
- Direct media URLs as a default field. Each live stream record carries a ready-to-play HLS playlist URL. Each clip record carries 1080p / 720p / 480p / 360p MP4 download URLs.
- Resilient query path: raw GraphQL strings, not persisted-query SHA hashes (which Twitch rotates without notice). Survives upstream changes that would otherwise break a fixed-hash scraper.
- Multi-tier session bootstrap with automatic failover: when the upstream edge tightens, the actor refreshes its session through alternate channels rather than stopping cold.
- Lightweight runtime, ~512 MB peak memory, with per-call work amortised across many records per session.
- Pricing is set on the actor's Apify Store page; volume discounts apply on paid plans.
Data you get
Sample shape, values are illustrative placeholders, not from a live record.
| Field | Example | Notes |
|---|---|---|
recordType | live_stream | One of: channel, live_stream, game, clip, video, vod_metadata, search_channel, search_game |
id | 00000000 | Twitch internal ID |
login | examplelogin | URL-safe username |
displayName | Example Display | User-set display name |
url | https://www.twitch.tv/examplelogin | Canonical channel/category/video URL |
title | Sample stream title | Live stream title or VOD title |
viewersCount | 12345 | Concurrent viewers (live) |
viewCount | 54321 | Total views (clips, VODs) |
followersCount | 100000 | Channel followers |
gameName | Sample Game | Game / category name |
gameSlug | sample-game | URL slug for the category |
gameId | 000000 | Game ID |
language | en | ISO 639-1 |
createdAt | 2026-01-01T00:00:00Z | Stream / clip / VOD start |
thumbnailUrl | https://static-cdn.jtvnw.net/.../000000.jpg | Preview image |
profileImageUrl | https://static-cdn.jtvnw.net/.../profile.png | Avatar |
boxArtUrl | https://static-cdn.jtvnw.net/ttv-boxart/000000-285x380.jpg | Game cover art |
isLive | true | Whether the channel is currently broadcasting |
isPartner | false | Twitch Partner status |
isAffiliate | true | Twitch Affiliate status |
streamHlsUrl | https://usher.ttvnw.net/api/channel/hls/examplelogin.m3u8?sig=...&token=... | Playable HLS playlist (live mode) |
clipMp4Urls | { "1080": "https://.../1080.mp4", "720": "https://.../720.mp4" } | Direct MP4 by quality (clips mode) |
chapters | [{ "type": "GAME_CHANGE", "positionMs": 0, "gameName": "Game A" }] | Game-change markers (vod_metadata mode) |
tags | ["English", "FPS"] | Stream / video tags |
socialMedias | [{ "name": "twitter", "url": "https://twitter.com/example" }] | Linked socials (channel mode) |
scrapedAt | 2026-05-09T00:00:00.000Z | UTC timestamp |
How to use
Channel profile + clips + recent VODs
{"mode": "channel","channels": ["shroud", "ninja", "pokimane"],"includeMediaUrls": true,"maxResults": 30}
Live streams in a game (with playable HLS URLs)
{"mode": "live_streams","gameSlug": "valorant","streamSort": "VIEWER_COUNT","includeMediaUrls": true,"maxResults": 50,"maxPages": 2}
Top games right now
{"mode": "top_games","maxResults": 100}
Top clips per channel (with MP4 download URLs)
{"mode": "clips","channels": ["xqc"],"clipPeriod": "LAST_WEEK","includeMediaUrls": true,"maxResults": 25}
Unified search
{"mode": "search","searchQuery": "valorant","maxResults": 20}
Recent VODs
{"mode": "videos","channels": ["shroud"],"maxResults": 20}
VOD metadata with chapter markers
{"mode": "vod_metadata","videoIds": ["2767213751"],"includeMediaUrls": true}
URL mode (paste any twitch.tv URL)
{"mode": "url","urls": ["https://www.twitch.tv/shroud","https://www.twitch.tv/directory/category/just-chatting","https://www.twitch.tv/videos/2767213751","https://www.twitch.tv/shroud/clip/TangentialBillowingJalapenoYee-ccA2oB1pEYh4CHWJ"],"maxResults": 50}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string enum | channel | One of: channel, live_streams, game_streams, top_games, search, clips, videos, vod_metadata, url |
channels | string[] | ["shroud"] | Twitch logins (used by channel, clips, videos modes) |
gameSlug | string | valorant | Category slug (used by live_streams and game_streams modes) |
streamSort | enum | VIEWER_COUNT | One of: VIEWER_COUNT, RECENT, RELEVANCE |
searchQuery | string | valorant | Free-text query (used by search mode) |
videoIds | string[] | [] | Numeric video IDs (used by vod_metadata mode) |
clipPeriod | enum | LAST_WEEK | One of: LAST_DAY, LAST_WEEK, LAST_MONTH, ALL_TIME |
urls | string[] | [] | Any twitch.tv URLs (used by url mode) |
includeMediaUrls | boolean | true | When true, attach playable HLS m3u8 (live streams + VODs) and direct clip MP4 URLs |
maxResults | integer | 30 | Maximum records to push, 0 means unlimited up to maxPages cap |
maxPages | integer | 1 | Pages of results to walk for paginated modes (each page is ~30 items) |
proxyConfiguration | object | Apify Datacenter | Apify Residential US is recommended |
Output example
Sample shape, values are illustrative placeholders, not from a live record.
{"recordType": "live_stream","id": "000000000000","login": "examplelogin","displayName": "Example Display","url": "https://www.twitch.tv/examplelogin","title": "Sample stream title","viewersCount": 12345,"createdAt": "2026-01-01T00:00:00Z","streamType": "live","gameName": "Sample Game","gameSlug": "sample-game","gameId": "000000","boxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/000000-285x380.jpg","thumbnailUrl": "https://static-cdn.jtvnw.net/preview/0000.jpg","broadcasterId": "00000000","broadcasterDescription": "Sample broadcaster bio.","profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/0000-profile_image-70x70.png","isPartner": true,"isAffiliate": false,"followersCount": 100000,"tags": ["English", "FPS"],"streamHlsUrl": "https://usher.ttvnw.net/api/channel/hls/examplelogin.m3u8?sig=0000&token=%7B...%7D","scrapedAt": "2026-05-09T00:00:00.000Z"}
For very large pulls (over 10,000 records) we recommend Apify Residential and setting maxPages to at least 3 per mode (or 0 for unlimited) to give the actor enough room to paginate.