Twitch Scraper: Channels, Live Streams, VODs and Clips
Pricing
from $1.09 / 1,000 rows
Twitch Scraper: Channels, Live Streams, VODs and Clips
Scrape public Twitch data without a login: channels with followers, partner status, live stream, last broadcast, schedule and social links; live streams by category and language; VODs; clips; top categories. Pay per row.
Pricing
from $1.09 / 1,000 rows
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Why choose this actor?
- Five Twitch jobs in one actor, without a login or API key. Channels, live streams by category and language, videos (VODs), clips, and the top categories. Our proof run listed 762 live streams in 9.4 seconds: four categories (Just Chatting, Fortnite, Grand Theft Auto V, League of Legends) in English and Spanish, 359,552 viewers between them. No Twitch account, no OAuth token, no Helix app.
- Channel rows built for outreach and research. Followers, partner or affiliate status, live right now (with title, viewers, category and tags), last broadcast, the stream schedule, and every link in the channel's about panels with the social profiles picked out. For 20 big channels in our proof run: 20 of 20 partners, 18 with social links, 7 live at the time, 180,558,874 followers between them, read in one request.
- You pay only for rows you receive. One charge per channel, stream, video, clip or category row saved to your dataset, plus a flat start fee per run. Channels and categories that do not exist (our proof runs had one of each, reported as not found), repeats and refused requests are never charged.
Part of The Mine Works Social media and video family: Threads Scraper, Reddit Scraper, Threads Search Scraper, Instagram Profile Scraper, Instagram Followers & Following, Reddit Search Scraper.
Try it in one minute
Paste this input and press Start. It returns 20 channel rows with followers, live status, schedule and social links, in about 3 seconds:
{"mode": "channels","channels": ["shroud", "pokimane", "ninja", "xqc", "kaicenat", "ibai", "hasanabi", "tfue", "summit1g", "lirik","sodapoppin", "timthetatman", "nickmercs", "drlupo", "valkyrae", "amouranth", "tarik", "caseoh_", "jynxzi", "zackrawrr"]}
Pick the job with mode, then fill the field that mode reads:
- channels, videos and clips read
channels: a channel name (shroud), an@name, or a channel link (https://www.twitch.tv/shroud, any sub page such as/videosor/about). - streams reads
categories: a category name (Just Chatting), a slug (just-chatting) or a directory link (https://www.twitch.tv/directory/category/just-chatting). Leave it empty for live streams across all of Twitch. - top_categories needs nothing else.
Apify's free plan includes $5 of credit every month, which covers about 2,400 results at this actor's price.
Copy to your AI assistant
themineworks/twitch-scraper on Apify. Reads public Twitch data without a login: channels (followers, partner or affiliate, live stream with viewers, last broadcast, schedule, about panel links and social links), live streams of categories or of all Twitch (viewers, title, tags, language, start time, broadcaster followers), a channel's videos, a channel's clips, and the top categories by viewers. Call ApifyClient("TOKEN").actor("themineworks/twitch-scraper").call(run_input={"mode": "channels", "channels": ["shroud", "pokimane"]}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: mode (channels, streams, videos, clips or top_categories). Optional: channels (names or links), categories (names, slugs or directory links; empty for all Twitch), maxResults (default 50, 20 to 100), languages (codes such as en, es), streamSort (viewers_high, viewers_low or recent), tag, videoType (all, archive, highlight, upload), videoSort (time or views), clipPeriod (last_day, last_week, last_month, all_time), clipSort (views or trending). Skip rows that have "_type": "status". Full spec: GET https://api.apify.com/v2/acts/themineworks~twitch-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- Five modes:
channels,streams,videos,clipsandtop_categories, each with its own row shape, in one actor and one price. - Channel rows with 39 fields: id, name, link, bio, followers, partner or affiliate, created date, images and accent color; live status with stream title, viewers, start time, category and tags; the channel's title, category and language settings; last broadcast; next scheduled stream and the rest of this week's schedule; about panel links and social links (X, Instagram, YouTube, TikTok, Discord, Kick and others). 20 channels per request.
- Live streams the way the directory shows them: per category, per language (each language its own list), sorted by most viewers, fewest viewers (small and new streamers) or most recently started, optionally only streams with one tag. Each row has viewers, title, start time, language, tags, mature flag, preview image, and the broadcaster's followers and partner status.
- Videos and clips: a channel's past broadcasts, highlights and uploads, newest or most viewed, with length and views; its clips for the last day, week, month or all time, most viewed or trending, with views, length, who clipped it, and a link into the original video at the clip's moment.
- Top categories: up to 100 categories by current viewers, with live channel count, followers, tags and box art.
- What Twitch allows a logged out visitor, stated plainly: every list (streams, videos, clips, categories) is its first page, up to 100 items per query; Twitch asks for a browser integrity token for any next page, which this actor does not generate. Across all of Twitch (no category), Twitch caps the list at 30 per language.
How to use it
Basic: channel profiles
{"mode": "channels","channels": ["shroud", "https://www.twitch.tv/pokimane", "@ninja"]}
One row per channel, 20 channels per request, up to 500 per run. A channel that does not exist gets a free status row.
Live streams in a few categories, in two languages
{"mode": "streams","categories": ["Just Chatting", "Fortnite", "https://www.twitch.tv/directory/category/grand-theft-auto-v", "League of Legends"],"languages": ["en", "es"],"maxResults": 100}
This is our proof input: 8 lists (4 categories, 2 languages), 762 live streams in 9.4 seconds. Each category and language pair is its own list of up to 100 streams, most viewers first.
Find small streamers to work with
{"mode": "streams","categories": ["Fortnite"],"languages": ["en"],"streamSort": "viewers_low","maxResults": 50}
Fewest viewers first: in our test all 47 English Fortnite streams returned had 0 to 2 viewers. Add tag (for example vtuber) to narrow the niche, then run channels on the names you pick to get their followers and social links.
Live streams across all of Twitch
{"mode": "streams","categories": [],"languages": ["en", "es", "de", "fr", "ja"]}
With no category, Twitch lists at most 30 streams per language: our test returned 147 streams for these 5 languages.
A channel's videos and clips
{"mode": "videos","channels": ["shroud", "pokimane"],"videoType": "archive","videoSort": "views","maxResults": 100}
{"mode": "clips","channels": ["shroud", "kaicenat"],"clipPeriod": "all_time","clipSort": "views","maxResults": 100}
Up to 100 videos or clips per channel and query. For more of a channel's videos, run each videoType (past broadcasts, highlights, uploads) or both sort orders; for more clips, run each clipPeriod.
Category popularity tracking
{"mode": "top_categories","maxResults": 100}
Schedule it every hour in Apify Console (Schedules, then Add schedule) and chart viewers and live_channels per category over the day.
Sponsor and agency prospecting
Run streams with viewers_low or viewers_high in the categories your client cares about, then channels on the names you shortlist: each channel row carries followers, partner status, schedule and social links, enough to qualify and contact through public channels.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
mode | string | channels | channels, streams, videos, clips or top_categories. Required. |
channels | array of strings | ["shroud", "pokimane"] | channels, videos and clips: channel names, @names or channel links. Up to 500 per run. |
categories | array of strings | ["Just Chatting"] | streams: category names, slugs or directory links; empty for all of Twitch. Up to 500 per run. |
maxResults | integer | 50 | Streams, videos, clips or categories per list, 20 to 100. |
languages | array of strings | none | streams: two letter codes such as en, es; each language is its own list. |
streamSort | string | viewers_high | streams: viewers_high, viewers_low or recent. |
tag | string | none | streams: only streams with this tag, for example vtuber. |
videoType | string | all | videos: all, archive (past broadcasts), highlight or upload. |
videoSort | string | time | videos: time (newest first) or views. |
clipPeriod | string | last_week | clips: last_day, last_week, last_month or all_time. |
clipSort | string | views | clips: views or trending. |
There is no proxy setting: the actor always reads through Apify's datacenter proxy, which is included in the price.
What data do you get?
One row per channel, stream, video, clip or category, told apart by record_type. Every row says which source_mode and source_input produced it and its position in its list. Rows about a channel share channel_id, login, display_name and channel_url.
Channel rows: description, followers_count, broadcaster_type, is_partner, is_affiliate, created_at, profile_image_url, banner_image_url, offline_image_url, primary_color; live status is_live, stream_id, stream_title, stream_viewers, stream_started_at, stream_category, stream_tags; channel settings title, category_name, language, is_mature; last_broadcast_at, last_broadcast_title, last_broadcast_category; schedule next_stream_at, next_stream_title, next_stream_category, schedule_upcoming; panel_links and social_links.
Stream rows: stream_id, title, viewers, started_at, language, tags, is_mature, stream_type, preview_image_url, category_id, category_name, followers_count, broadcaster_type, and query_language when you set languages.
Video rows: video_id, video_url, title, created_at, published_at, length_seconds, view_count, video_type, category_id, category_name, thumbnail_url.
Clip rows: clip_id, clip_slug, clip_url, title, view_count, created_at, duration_seconds, language, thumbnail_url, curator_login, curator_display_name, category_id, category_name, vod_id, vod_offset_seconds, vod_url, clip_period, clip_sort.
Category rows: category_id, category_name, category_slug, category_url, viewers, live_channels, followers_count, box_art_url, tags, release_date.
All times are UTC in ISO 8601. In our proof runs every stream, video and clip row had its id, link, title, counts and time filled; 95% of clips named their category and 62% still linked to the video they were cut from (Twitch deletes past broadcasts after a while).
Stable fields for automations
These fields were present in every row of their type in the proof runs (762 streams, 20 channels, 200 videos, 200 clips, 99 categories):
| Field | Rows | What it holds |
|---|---|---|
record_type | all | channel, stream, video, clip or category |
source_input | all | The channel, category or list you asked for |
login | channel, stream, video, clip | Channel name as in its link |
channel_url | channel, stream, video, clip | Link to the channel |
followers_count | channel, stream, category | Followers |
is_live | channel | Live at run time |
broadcaster_type | channel, stream | partner, affiliate or none |
stream_id | stream | Live stream id |
viewers | stream, category | Viewers at run time |
started_at | stream | When the stream started |
title | stream, video, clip | Title |
video_url | video | Link to the video |
clip_url | clip | Link to the clip |
view_count | video, clip | Views |
category_name | stream, video, category | Category (game) name |
These names will not change. New fields may be added; existing ones keep their name and meaning.
Output examples
Five real rows from the proof runs, with image links left out.
Channel, live at the time (shroud)
{"record_type": "channel","source_mode": "channels","source_input": "shroud","channel_id": "37402112","login": "shroud","display_name": "shroud","channel_url": "https://www.twitch.tv/shroud","description": "I'm back baby","followers_count": 11293974,"broadcaster_type": "partner","created_at": "2012-11-03T15:50:32.878Z","primary_color": "#00ADFF","is_live": true,"stream_viewers": 15347,"stream_started_at": "2026-10-05T16:32:04.000Z","stream_category": "AION 2","stream_tags": ["English", "DropsEnabled"],"title": "NEW DROPS + F2P LAUNCH + LUDRA REMOVED + 2350+ SORC + CHANTER ALT + !AION2 #AION2Global #sponsored","category_name": "AION 2","language": "en","last_broadcast_at": "2026-10-05T16:32:09.230Z","next_stream_at": "2026-10-06T18:00:00.000Z","schedule_upcoming": ["2026-10-05T18:00:00.000Z", "2026-10-06T18:00:00.000Z", "2026-10-08T18:00:00.000Z", "2026-10-09T18:00:00.000Z", "2026-10-10T18:00:00.000Z"],"panel_links": ["https://gsght.com/c/cf8z7g", "https://load.gg/shroudLogitech", "https://www.youtube.com/shroud", "https://pally.gg/p/shroud", "https://streamelements.com/shroud/tip", "https://twitter.com/shroud", "https://www.instagram.com/shroud/"],"social_links": ["https://www.youtube.com/shroud", "https://twitter.com/shroud", "https://www.instagram.com/shroud/"]}
Live stream in a category (Fortnite, Spanish list)
{"record_type": "stream","source_mode": "streams","source_input": "Fortnite","position": 1,"query_language": "es","stream_id": "317947822563","channel_id": "185913819","login": "recuerd0p","display_name": "Recuerd0p","channel_url": "https://www.twitch.tv/recuerd0p","title": "✅*[!DROPS ACTIVOS]* Jugando en EXCLUSIVA con la SKIN de HALLOWEEN HORROR NIGHTS 🤡🎁 | CODIGO: RECU en tienda de FORTNITE! #epicpartner","viewers": 598,"started_at": "2026-10-05T20:17:31.000Z","language": "es","tags": ["Fortnite", "directo", "DirectoJugando", "fortnitegameplay", "Español", "epicpartner", "DropsActivados"],"is_mature": false,"stream_type": "live","category_id": "33214","category_name": "Fortnite","followers_count": 353181,"broadcaster_type": "partner"}
Past broadcast (pokimane)
{"record_type": "video","source_input": "pokimane","video_id": "2886637167","video_url": "https://www.twitch.tv/videos/2886637167","title": "im sorry","created_at": "2026-09-28T20:32:09.000Z","length_seconds": 373,"view_count": 41567,"video_type": "archive","category_name": "Just Chatting","login": "pokimane","channel_url": "https://www.twitch.tv/pokimane"}
Most viewed clip of all time (shroud)
{"record_type": "clip","source_input": "shroud","clip_id": "2358589597","clip_url": "https://www.twitch.tv/shroud/clip/TangentialBillowingJalapenoYee-ccA2oB1pEYh4CHWJ","title": "F Shroud","view_count": 563072,"created_at": "2023-06-02T11:41:50.000Z","duration_seconds": 28,"curator_login": "pato_bolado","category_name": "Diablo IV","vod_id": "1835200464","vod_offset_seconds": 48930,"vod_url": "https://www.twitch.tv/videos/1835200464?t=13h35m30s","clip_period": "all_time","clip_sort": "views"}
Top category (Just Chatting)
{"record_type": "category","source_mode": "top_categories","position": 1,"category_id": "509658","category_name": "Just Chatting","category_slug": "just-chatting","category_url": "https://www.twitch.tv/directory/category/just-chatting","viewers": 434791,"live_channels": 5541,"followers_count": 53241384,"tags": ["IRL"]}
Pricing
Pay per event: you pay for each row delivered to your dataset (a channel, stream, video, clip or category), plus a flat $0.005 per run, whatever memory you choose. Nothing else is billed: no proxy add-on, no charge per request.
| Event | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) and above |
|---|---|---|---|---|
| Row delivered, per 1,000 rows | $1.99 | $1.69 | $1.39 | $1.09 |
| Run start, once per run | $0.005 | $0.005 | $0.005 | $0.005 |
Never charged: channels and categories that do not exist, lines that are not channel names or category links, a channel or stream listed twice, requests Twitch refuses, and the status rows that explain a target with no results (for example a category with nobody live in your language). A run that delivers nothing costs only the start fee.
To cap a run's cost, set Maximum cost per run in the run options; the actor stops delivering, and charging, when that budget is used.
FAQ
What does this actor read?
Twitch's GraphQL endpoint (gql.twitch.tv), the one the twitch.tv website itself calls, with the public Client-ID the website sends for a visitor who is not logged in. It reads public channel, stream, video, clip and category data only.
Do I need a Twitch account, an API key or an OAuth token?
No. The actor never logs in and needs no Twitch developer app, client secret or token from you. Nothing it does can affect an account of yours.
Why at most 100 items per list?
Twitch serves a logged out visitor the first page of every list, up to 100 items, and asks for a browser integrity token for every next page. This actor does not generate integrity tokens, so each list stops at its first page: 100 streams per category and language (30 across all of Twitch), 100 videos or clips per channel and query, 100 categories. To cover more, split the work into more lists: more languages for streams, each video type or sort order for videos, each period for clips.
Why are there no social links for some channels?
Twitch keeps a channel's social link block behind the same integrity token, so the actor reads the links the streamer put in their about panels and bio instead, and picks out the social profiles (X, Instagram, YouTube, TikTok, Discord, Kick, Facebook, Reddit and others) into social_links. All panel links stay in panel_links. In our proof run 18 of 20 big channels had social links this way; a channel without panels or links in its bio has none.
How fresh is the data?
Live. Every run reads Twitch at that moment: viewers, live status and follower counts are as of the run. Run on a schedule to track them over time.
Do I need my own proxy?
No. Requests go through Apify's datacenter proxy, which is included in the price. In our proof runs Twitch answered every request; it sometimes answers a list with a "service error", and the actor retries those on a new IP (2 of 5 video requests in one test, all recovered).
What happens with a channel or category that does not exist?
It gets a free status row (_type: status) that says not found, nothing is charged for it, and the other targets still run. A category with nobody live (in your language) gets a no_results status row, also free.
Does it include chat messages, subscribers or emails?
No. It returns what Twitch shows publicly on channel, stream, video, clip and category pages. Chat logs, subscriber counts and private contact details are not included; a business email a streamer typed into their bio stays inside description, unparsed.
Can I schedule it?
Yes. Schedule any input in Apify Console (Schedules, then Add schedule): hourly top_categories for category trends, daily channels for follower growth, or streams with viewers_low to find new small streamers in your niche every day.
In what formats can I export the data?
From the dataset: JSON, CSV, Excel, XML, HTML table or RSS, from Console or the API. In CSV and Excel the list fields (tags, stream_tags, panel_links, social_links, schedule_upcoming) are flattened into columns.
Can I use it from Claude, ChatGPT or another AI assistant?
Yes, through Apify's MCP server.
- Connector URL: https://mcp.apify.com/?tools=themineworks/twitch-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http twitch-scraper "https://mcp.apify.com/?tools=themineworks/twitch-scraper"
Is it legal to scrape Twitch?
The actor collects only public data that Twitch shows to anyone without logging in, and it does not log in or bypass any login. You are responsible for how you use the data: check Twitch's terms for your use case and the data protection laws that apply to you, such as GDPR and CCPA, especially when you contact streamers or store data about them.
Integrations
- Google Sheets: send each run's dataset to a sheet with Apify's Google Sheets integration, one row per channel or stream.
- Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example to add new small streamers in your category to a CRM.
- Webhooks: have Apify call your URL when a run finishes, then fetch the dataset.
- API: start runs and read results from any language with the Apify API or the Python and JavaScript clients (see "Copy to your AI assistant" above).
- MCP clients: Claude, ChatGPT, Cursor, VS Code and Claude Code, through the connector URL in the FAQ.
More from The Mine Works
Social media and video
- Threads Scraper
- Reddit Scraper
- Threads Search Scraper
- Instagram Profile Scraper
- Instagram Followers & Following
- Reddit Search Scraper
- Twitter / X Scraper
- YouTube Transcript
- Xiaohongshu (RED) Scraper
- Telegram Channel Scraper
- Telegram Channel Finder
- Pinterest Profile Scraper
Leads and business directories
Marketing, SEO and reviews
Real estate
Science, health and government data
Jobs and hiring
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
Found a channel, category or list that does not come back right, or a field you need? Open an issue in the Issues tab and include the run link. For new sources or a custom build, email dmineworks@gmail.com.
Twitch channels with followers, live status, schedule and social links, live streams by category and language, videos, clips and top categories, read without a login and charged only for rows you receive.

