Twitch Scraper
Pricing
from $1.49 / 1,000 channels
Twitch Scraper
Scrape Twitch channels, live streams, clips, games, and VODs from the public Twitch API. No login or API key. Get followers, partner status, viewer counts, stream titles, and games. Export as JSON, CSV, or Excel.
Pricing
from $1.49 / 1,000 channels
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Twitch Scraper
Twitch Scraper extracts structured data from Twitch using the platform's public GraphQL API — no login, no API key, no browser. Scrape channel profiles, live streams, clips, games and categories, and VODs in one run. Get follower counts, partner and affiliate status, live viewer counts, stream titles, the games being played, recent past broadcasts, and top clips.
| Six modes in one Twitch scraper — channel profiles (up to 1,000), channel search, top live streams, streams for a game, top games, and clips by time period. Usernames or full twitch.tv URLs both work. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Actor: parsebird/twitch-scraper (Twitch Scraper on Apify)Purpose: scrape Twitch channels, streams, clips, games, and VODs from the public Twitch GraphQL API (no auth).Call it with ApifyClient. Example (Python):from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("parsebird/twitch-scraper").call(run_input={"mode": "channels", # channels | searchChannels | topStreams | gameStreams | topGames | clips"channelUsernames": ["shroud", "pokimane", "xqc"], # channels + clips modes; usernames or twitch.tv URLs"searchQuery": "valorant", # searchChannels mode"gameName": "League of Legends", # gameStreams mode (exact Twitch category name)"maxResults": 30, # channels: up to 1000; gameStreams/topGames/clips: up to 100; topStreams: 30"clipPeriod": "LAST_WEEK", # LAST_DAY | LAST_WEEK | LAST_MONTH | ALL_TIME"includeVideos": True, # channels mode: attach 5 recent VODs"includeClips": False # channels mode: attach top 5 clips})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)Output depends on mode: channel profiles (login, displayName, followersCount, isPartner, isLive, currentViewers,lastBroadcastTitle, recentVideos[], topClips[]), stream rows (broadcasterLogin, title, viewersCount, game,startedAt), game rows (name, viewersCount, broadcastersCount, boxArtUrl), or clip rows (title, url, viewCount,durationSeconds, game, channelLogin, curatorLogin).API docs: https://docs.apify.com/api/v2 | Token: https://console.apify.com/account/integrations
What can Twitch Scraper do?
The Twitch Scraper reads the same public data any visitor sees on twitch.tv, through Twitch's own GraphQL endpoint. Pick one of six modes per run:
- 👤 Channel profiles — pass a list of usernames (or channel URLs) and get full profiles for up to 1,000 channels: follower count, partner/affiliate status, whether they are live now, current viewers and game, last broadcast, and account creation date. Optionally attach the 5 most recent VODs and top 5 clips.
- 🔎 Search channels — find channels matching a keyword, name, or game.
- 📡 Top live streams — the current top streams across all of Twitch, ranked by viewers.
- 🎮 Streams for a game — every live stream in a specific category (e.g.
Just Chatting,League of Legends), ranked by viewers. - 🏆 Top games / categories — trending games with total viewers, live-channel counts, and box art.
- 🎬 Clips from channels — top clips for one or more channels over the last day, week, month, or all time.
Platform features: schedule runs to track follower growth or live status over time, call the actor from the Apify API, chain it into integrations (Zapier, Make, n8n, Slack, GitHub), and export to JSON, CSV, or Excel.
Why scrape Twitch?
- Influencer and sponsorship research — shortlist streamers by follower count, partner status, and the games they play.
- Live monitoring — poll
topStreamsorgameStreamson a schedule to see who is live and how big their audience is right now. - Games and category trends — track which games are gaining or losing viewers with
topGames. - Content and highlights — pull the best clips for a channel or a time window for editing, reels, or archives.
- Competitive analysis — compare a set of channels' growth, broadcast cadence, and game mix.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
mode | string | Yes | channels | channels, searchChannels, topStreams, gameStreams, topGames, or clips |
channelUsernames | array | For channels, clips | [] | Twitch usernames or twitch.tv/... URLs. Up to 1,000 |
searchQuery | string | For searchChannels | — | Search term for finding channels |
gameName | string | For gameStreams | — | Exact Twitch category name, e.g. League of Legends |
maxResults | integer | No | 30 | Channel profiles: up to 1,000. Game streams / top games / clips: up to 100. Top live streams: 30 |
clipPeriod | string | No | LAST_WEEK | LAST_DAY, LAST_WEEK, LAST_MONTH, or ALL_TIME |
includeVideos | boolean | No | true | channels mode: attach the 5 most recent VODs |
includeClips | boolean | No | false | channels mode: attach the top 5 clips for clipPeriod |
proxyConfiguration | object | No | Apify Proxy | Optional — Twitch works without a proxy |
What data can you extract from Twitch?
Channel profiles
| Field | Description |
|---|---|
login / displayName | Channel username and display name |
description | Channel bio |
profileImageUrl / bannerImageUrl | Avatar and banner image URLs |
url | Channel page URL |
followersCount | Total follower count |
isPartner / isAffiliate | Twitch Partner / Affiliate status |
isLive | Whether the channel is streaming now |
currentViewers / streamTitle / currentGame | Live stream stats (when live) |
lastBroadcastTitle / lastBroadcastGame / lastBroadcastDate | Most recent broadcast |
createdAt | Account creation date |
recentVideos | Up to 5 recent VODs: title, view count, duration, game |
topClips | Up to 5 top clips: title, URL, view count, curator |
Live streams, game streams, search results
| Field | Description |
|---|---|
broadcasterLogin / broadcasterDisplayName | Channel username and display name |
broadcasterFollowers | Follower count |
title | Stream title |
viewersCount | Current viewer count |
game | Game / category name |
startedAt | Stream start time |
url | Channel URL |
Top games / categories
| Field | Description |
|---|---|
name | Game / category name |
viewersCount | Total viewers across all streams |
broadcastersCount | Number of live channels |
boxArtUrl | Game cover image |
Clips
| Field | Description |
|---|---|
title / url | Clip title and URL |
viewCount / durationSeconds | View count and length |
game | Game name |
channelLogin / curatorLogin | Source channel and who created the clip |
thumbnailUrl | Clip thumbnail |
Output example
Channel profile (channels mode):
{"id": "37402112","login": "shroud","displayName": "shroud","description": "I'm back baby","profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/...","url": "https://www.twitch.tv/shroud","followersCount": 11313275,"isPartner": true,"isAffiliate": false,"isLive": false,"currentViewers": null,"lastBroadcastTitle": "Ready or Not with friends","lastBroadcastGame": "Ready or Not","createdAt": "2012-11-03T15:50:32Z","recentVideos": [{ "id": "2724725765", "title": "Marathon stream", "viewCount": 260226, "durationSeconds": 27466, "game": "Marathon" }]}
Stream row (topStreams / gameStreams modes):
{"broadcasterLogin": "caedrel","broadcasterDisplayName": "Caedrel","broadcasterFollowers": 1667911,"title": "🔴 LEC WAITING ROOM 🔴","viewersCount": 23259,"game": "League of Legends","startedAt": "2026-08-28T07:27:44Z","url": "https://www.twitch.tv/caedrel"}
How to scrape Twitch
- Open the Actor and go to the Input tab.
- Choose a Mode.
- Fill the field that mode needs:
channelsorclips→ Channel usernames (usernames or fulltwitch.tv/...URLs).searchChannels→ Search query.gameStreams→ Game name (the exact Twitch category name).topStreamsandtopGamesneed no extra input.
- Set Max results. Keep it low for the first run.
- For
channelsmode, toggle Include recent VODs and Include top clips, and pick a Clip period. - Click Start. When the run finishes, open the Dataset tab and export as JSON, CSV, or Excel.
Run from the Apify API — Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("parsebird/twitch-scraper").call(run_input={"mode": "gameStreams","gameName": "Just Chatting","maxResults": 50,})for stream in client.dataset(run["defaultDatasetId"]).iterate_items():print(stream["broadcasterLogin"], stream["viewersCount"], stream["title"])
Run from the Apify API — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('parsebird/twitch-scraper').call({mode: 'channels',channelUsernames: ['shroud', 'pokimane', 'xqc'],includeVideos: true,includeClips: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
The actor also works over plain HTTP and as an MCP tool for AI assistants.
How it works
- Validate input — the actor checks the mode and the field it requires (usernames, query, or game name).
- Query the Twitch GraphQL API —
https://gql.twitch.tv/gqlwith Twitch's public web client ID. No authentication is sent. - Batch and paginate — channel profiles are fetched in batches of 30 usernames per request; browse modes fetch a single ranked page.
- Normalize — nested GraphQL responses are flattened into clean, consistent records; streams are sorted by viewer count.
- Push and charge — each record is written to the dataset and charged once (see Pricing). Transient API errors are retried; unknown usernames and games are logged and skipped.
How much does it cost to scrape Twitch?
Pricing is pay-per-event with four events, one per record type:
| Event | Fires for | Free | Bronze | Silver | Gold |
|---|---|---|---|---|---|
channel | channels + searchChannels records | $2.99 / 1k | $2.49 / 1k | $1.99 / 1k | $1.49 / 1k |
stream | topStreams + gameStreams records | $1.99 / 1k | $1.49 / 1k | $1.29 / 1k | $0.99 / 1k |
game | topGames records | $1.99 / 1k | $1.49 / 1k | $1.29 / 1k | $0.99 / 1k |
clip | clips records | $1.99 / 1k | $1.49 / 1k | $1.29 / 1k | $0.99 / 1k |
Scraping 100 channel profiles costs about $0.30 on the Free plan. Getting the top 30 live streams costs about $0.06. Apify's monthly platform credits on the Free plan cover thousands of records. See Apify pricing.
Is it legal to scrape Twitch?
Scraping publicly available data is generally legal. This Actor accesses only public data through Twitch's own public API endpoints — the same data any visitor sees on twitch.tv — and never logs in or bypasses access controls. You are responsible for how you use the data: comply with Twitch's Terms of Service, and with data-protection laws such as GDPR and CCPA when the data includes personal information. For background, read the Apify blog on the legality of web scraping.
Related actors
- YouTube Channel Search Scraper — find and profile YouTube channels.
- YouTube Live Chat Scraper — capture live chat messages from YouTube streams.
- Kick Video Downloader — download videos from Kick.
- Threads Scraper — scrape profiles and posts from Threads.
- Bluesky Scraper — scrape posts and profiles from Bluesky.
Browse all ParseBird actors.
FAQ
Do I need a Twitch account or API key? No. The Actor uses Twitch's public GraphQL endpoint with the same client ID the website ships to every visitor. Nothing is logged in.
How many results can I get per mode? Channel profiles: up to 1,000 per run. Streams for a game, top games, and clips: up to 100. Top live streams: Twitch caps the global directory at 30. Search returns roughly the top 10–20 matches.
Why do top-streams and clips modes stop at a certain number? Twitch applies an integrity check to deep pagination of its directory. The Actor fetches everything the API returns in one ranked page and stops cleanly when Twitch limits further pages — you still get the top results.
Can I pass channel URLs instead of usernames?
Yes. https://www.twitch.tv/shroud, twitch.tv/shroud, @shroud, and shroud all work.
What happens if a username or game doesn't exist? It is logged as a warning and skipped; the run continues with the rest.
How do I get a channel's recent VODs and clips?
Use channels mode with includeVideos and/or includeClips enabled. VODs are the 5 most recent past broadcasts; clips are the top 5 for the selected clipPeriod.
Can I schedule this to track a channel over time?
Yes. Use Apify Schedules to run channels mode daily and record follower counts, live status, and broadcast history.
Something's not working — how do I report it? Open an issue on the Actor's Issues tab with your input and what you expected. Feedback is welcome.