Twitch Scraper - Channels, Live Streams, Clips & VODs
Pricing
from $1.80 / 1,000 twitch item delivereds
Twitch Scraper - Channels, Live Streams, Clips & VODs
Scrape Twitch channel profiles (followers, partner status, socials, live viewers), live streams by category and language, clips by channel or category, VODs and categories with viewer counts. Public GraphQL, no login. US$ 2.50 per 1,000 items; channels not found are free.
Pricing
from $1.80 / 1,000 twitch item delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Twitch Scraper turns Twitch's public data into clean, flat rows: channel profiles with followers, partner status, bio and social links, the live streams running right now by category and language, clips by channel or category, past broadcasts (VODs) and the category directory with live viewers and broadcaster counts. It is built for influencer marketing agencies, brand sponsorship teams and streaming analytics products that need Twitch numbers without a developer app, without an OAuth token and without a browser.
- Influencer agencies: check followers, partner status, socials and what a creator streamed last before pitching a campaign, thirty channels per request.
- Sponsors and brand teams: list the most watched live streams in your category and language every hour, with viewer counts, tags and thumbnails, and see who is live right now.
- Streaming analytics: track category viewers, VOD views, clip performance and the top of the directory over time with a schedule, and feed dashboards, BI or AI agents.
Price: US$ 2.50 per 1,000 rows on the Free plan, down to US$ 2.00 on Gold and above. No monthly fee and no fee per run start. Channels that do not exist, filters with no match and blocked requests are free. AI agents can call it through the Apify MCP server.
At a glance
| This Actor | automation-lab/twitch-scraper (best measured competitor) | easyapi/twitch-channel-scraper | |
|---|---|---|---|
| Price per 1,000 channel rows, Free plan | US$ 2.50 | US$ 3.45 | US$ 4.99 |
| Price per 1,000 channel rows, Gold plan and above | US$ 2.00 | US$ 1.80 | US$ 4.99 (same on every plan) |
| Price per 1,000 live stream, clip or category rows, Free plan | US$ 2.50 | US$ 2.30 | US$ 4.99 |
| Fee per run start | None | US$ 5 per 1,000 run starts | US$ 90 per 1,000 run starts |
| Modes in one Actor | 6 (channels, live streams, clips, VODs, categories, search) | 6 (channels, search, top streams, game streams, top games, clips) | 1 (search channels) |
| Filter by stream language | Yes | No | No |
| Filter by minimum viewers and by tag | Yes | No | No |
| Rows that could not be scraped | Free, with an errorCode | Not stated on its page | Not stated on its page |
| Users in the last 30 days | 1 (published 2026-09-16) | 35 | 19 |
| Store rating | No reviews yet | No reviews yet | 4.56 (3 reviews) |
| Public run success, last 30 days | No public runs yet; 18 of our 18 cloud test runs succeeded | 100.0% (4,942 runs) | 99.4% (321 runs) |
Competitor figures were read from the public Apify API (api.apify.com/v2/store?search=twitch) on 2026-09-16, counting success as succeeded divided by succeeded plus failed plus timed out. They change every day and the Store page always shows the live number. Across the five searches we measured, prices in this niche run from US$ 0.57 to US$ 200 per 1,000 rows, and most of the cheap ones charge an extra fee on every run start.
One real row
Minimal input, which is also the default input:
{ "mode": "channels", "channelNames": ["ibai", "kaicenat"] }
A real row from a cloud run of 2026-09-16, trimmed. One full example per type is under "Output" below.
{"type": "channel","channelName": "ibai","channelUrl": "https://www.twitch.tv/ibai","channelId": "83232866","displayName": "ibai","followersCount": 20326381,"isPartner": true,"isLive": false,"lastBroadcastTitle": "ACTUALIZACION DE MI VIDA | LEAGUE OF LEGENDS CON MIS HERMANOS","lastBroadcastAt": "2026-09-15T18:40:12.076035Z","lastCategory": "League of Legends","twitter": "https://twitter.com/IbaiLlanos","instagram": "https://www.instagram.com/ibaillanos/","tiktok": "https://www.tiktok.com/@ibaillanos","scrapedAt": "2026-09-16T04:21:55.612Z"}
What you can scrape
| Mode | Input | One row per | Typical use |
|---|---|---|---|
channels | channel logins or URLs | channel | creator vetting, follower tracking, live checks |
liveStreams | optional categories, languages, minimum viewers, tags | live stream | top streams now, sponsor discovery |
clips | channels or categories, plus a period | clip | viral moments, highlight research |
videos | channel logins or URLs | past broadcast, highlight or upload | views and duration of recent streams |
categories | nothing for the top of the directory, or category slugs | category | viewers and broadcasters leaderboard |
search | keywords | channel | find streamers by name, with the full profile |
Every row carries a type field (channel, livestream, clip, video, category) and a scrapedAt timestamp, so you can mix modes in one pipeline and split them later.
Input examples
Channel profiles, which is also the default input:
{"mode": "channels","channelNames": ["ibai", "https://www.twitch.tv/kaicenat", "@jynxzi"]}
The 100 most watched live streams in Portuguese, Spanish and German:
{"mode": "liveStreams","languages": ["pt", "es", "de"],"maxResults": 100}
Live streams in one category with at least 10 viewers, and the 50 most viewed clips of a channel in the last 30 days:
{"mode": "liveStreams","categories": ["grand-theft-auto-v"],"minViewers": 10,"maxResults": 40}
{"mode": "clips","channelNames": ["ibai"],"clipPeriod": "month","clipSort": "views","maxResults": 50}
The top 60 categories by live viewers, and a channel search with followers and live status:
{ "mode": "categories", "maxResults": 60 }{ "mode": "search", "searchQueries": ["valorant", "gta rp"], "maxResults": 20 }
Coming from another Twitch scraper?
The input names used by the other Twitch Actors in the Store also work, so you can switch without touching your integration:
mode:channel,channel_info,channel_details,topStreams,top_streams,live_streams,gameStreams,game_streams,searchChannels,search_channels,channel_videos,topGames,top_games,topClips,subcategories- also read from
scrapeTypeandaction, so{"scrapeType": "top_games"}works - channels:
channelNames,channelUsernames,channels,logins,targets,streamers,channelUrls,startUrls,twitchUrls - keywords:
searchQueries,searchTerms,keywords,query; categories:categories,categorySlug,gameName,gameSlug,game - limits:
maxResults,maxItems,limit; filters:minViewers,languages,clipPeriod,period,videoType
Output names follow the convention the market already uses (channelName, displayName, followersCount, isLive, currentViewers, currentCategory, viewers, thumbnailUrl), so most field mappings keep working.
Output
Real rows from cloud runs on the Apify platform on 16 September 2026.
Channel
{"type": "channel","channelName": "ibai","channelUrl": "https://www.twitch.tv/ibai","channelId": "83232866","displayName": "ibai","bio": "Si lees esto que sepas que te aprecio","avatarUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/574228be-01ef-4eab-bc0e-a4f6b68bedba-profile_image-300x300.png","followersCount": 20326381,"isPartner": true,"accountCreatedAt": "2015-02-20T16:47:56.548434Z","isLive": false,"currentViewers": null,"currentStreamTitle": null,"currentCategory": null,"lastBroadcastTitle": "ACTUALIZACION DE MI VIDA | LEAGUE OF LEGENDS CON MIS HERMANOS","lastBroadcastAt": "2026-09-15T18:40:12.076035Z","lastCategory": "League of Legends","broadcastLanguage": "ES","socialLinks": {"youtube": "https://www.youtube.com/channel/UCaY_-ksFSQtTGk0y1HA_3YQ","twitter": "https://twitter.com/IbaiLlanos","instagram": "https://www.instagram.com/ibaillanos/","tiktok": "https://www.tiktok.com/@ibaillanos"},"scrapedAt": "2026-09-16T04:21:55.612Z"}
When the channel is live, isLive is true and currentViewers, currentStreamId, currentStreamTitle, currentCategory, currentCategorySlug, currentStreamLanguage, currentStreamTags, startedAt and thumbnailUrl are filled.
Live stream
{"type": "livestream","rank": 1,"channelName": "caseoh_","channelUrl": "https://www.twitch.tv/caseoh_","channelId": "267160288","displayName": "caseoh_","followersCount": 9033842,"isPartner": true,"livestreamId": "321448783450","title": "LOSING MY MIND","viewers": 52263,"category": "ROBLOX","categorySlug": "roblox","categoryId": "23020","language": "EN","tags": ["English"],"streamType": "live","startedAt": "2026-09-16T02:05:02Z","thumbnailUrl": "https://static-cdn.jtvnw.net/previews-ttv/live_user_caseoh_-640x360.jpg","isLive": true,"scrapedAt": "2026-09-16T04:05:56.648Z"}
Clip
{"type": "clip","clipId": "3058333305","channelName": "ibai","displayName": "ibai","title": "kamet0 es un mierda ???","url": "https://www.twitch.tv/ibai/clip/LachrymosePiliableKoupreyStrawBeary-lxxZ4KupfZMmtTNN","views": 8787,"duration": 22,"durationFormatted": "0:22","language": "ES","category": "League of Legends","categorySlug": "league-of-legends","videoId": "2859730034","videoOffsetSeconds": 14050,"createdAt": "2026-08-29T18:36:36Z","scrapedAt": "2026-09-16T04:02:06.615Z"}
videoId and videoOffsetSeconds point at the exact second of the source VOD, which is what you need to rebuild the moment on a timeline.
VOD (past broadcast)
{"type": "video","videoId": "2874817330","channelName": "ibai","channelUrl": "https://www.twitch.tv/ibai","title": "ACTUALIZACION DE MI VIDA | LEAGUE OF LEGENDS CON MIS HERMANOS","url": "https://www.twitch.tv/videos/2874817330","views": 290809,"duration": 17585,"durationFormatted": "4:53:05","language": "es","category": "Just Chatting","categorySlug": "just-chatting","videoType": "ARCHIVE","createdAt": "2026-09-15T13:47:02Z","publishedAt": "2026-09-15T13:47:02Z","thumbnailUrl": "https://static-cdn.jtvnw.net/cf_vods/.../thumb0-640x360.jpg","scrapedAt": "2026-09-16T04:03:13.976Z"}
Category
{"type": "category","rank": 1,"categoryId": "509658","name": "Just Chatting","slug": "just-chatting","url": "https://www.twitch.tv/directory/category/just-chatting","viewers": 209853,"broadcastersCount": 4405,"followersCount": 53198449,"tags": ["IRL"],"boxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/509658-285x380.jpg","scrapedAt": "2026-09-16T04:03:48.063Z"}
Rows that are not charged
A channel that does not exist, an invalid login, a category with no live streams or a blocked request becomes a row with errorCode and error, and is not charged:
{"type": "channel","input": "zzznaoexiste987654","channelName": "zzznaoexiste987654","error": "channel not found on Twitch","errorCode": "CHANNEL_NOT_FOUND"}
Error codes: CHANNEL_NOT_FOUND, INVALID_CHANNEL, CATEGORY_NOT_FOUND, INVALID_CATEGORY, CATEGORY_NOT_SUPPORTED, NO_RESULTS, BLOCKED. The run only fails when nothing at all could be delivered because Twitch blocked every retry, so one bad login in a list of 500 never ruins the run.
Field reference
| Field | Types | Description |
|---|---|---|
type | all | channel, livestream, clip, video or category |
channelName | channel, livestream, clip, video | channel login, as in twitch.tv/ |
displayName | channel, livestream, clip | display name with capitalization and non latin characters |
channelUrl, channelId | channel, livestream, clip, video | link and numeric id |
followersCount | channel, livestream, clip, category | followers of the channel, or of the category |
isPartner, isAffiliate, verified | channel, livestream | Twitch partner and affiliate flags |
bio, avatarUrl, bannerUrl, primaryColor, accountCreatedAt | channel | public profile |
socialLinks, twitter, instagram, youtube, tiktok, discord | channel | links the streamer published on the channel page |
isLive, currentViewers, currentStreamTitle, currentCategory, currentStreamLanguage, currentStreamTags, startedAt | channel | the live stream running at scrape time, if any |
lastBroadcastTitle, lastBroadcastAt, lastCategory, broadcastLanguage | channel | the previous broadcast, useful when the channel is offline |
rank, viewers, title, language, tags, streamType, livestreamId | livestream | one live stream, ranked by viewers |
clipId, clipSlug, views, duration, durationFormatted, videoOffsetSeconds | clip | clip stats and its position in the source VOD |
videoId, views, duration, durationFormatted, videoType, publishedAt | video | VOD, highlight or upload |
category, categorySlug, categoryId | livestream, clip, video | category of the content |
name, slug, viewers, broadcastersCount, tags, boxArtUrl | category | one category of the directory |
url, thumbnailUrl | livestream, clip, video, category | page link and image |
input | all | the input line that produced the row |
error, errorCode | error rows | why nothing was delivered, never charged |
scrapedAt | all | UTC time of the scrape |
Pricing
US$ 2.50 per 1,000 rows on the Free plan, no monthly rental and no fee per run start. One charge is one row, whatever the mode.
| Apify plan | Price per row | Per 1,000 rows |
|---|---|---|
| Free | US$ 0.0025 | US$ 2.50 |
| Bronze | US$ 0.0023 | US$ 2.30 |
| Silver | US$ 0.0021 | US$ 2.10 |
| Gold and above | US$ 0.0020 | US$ 2.00 |
Examples at the Free plan price: 100 creator profiles cost US$ 0.25. The top 500 live streams every hour for a day is 12,000 rows, US$ 30. A weekly clip report for 20 channels at 50 clips each is 1,000 rows, US$ 2.50. Error rows are free, and you can cap spending with the maximum cost per run in the Apify Console.
Speed and cost, measured
Our own cloud runs on the Apify platform, 2026-09-16, 512 MB of memory. "Platform cost" is what the run consumed in Apify usage. The percentage is that cost against what the Actor charges for the same rows.
| Run | Rows | Time | Platform cost | % of the charge |
|---|---|---|---|---|
| Top live streams, no filter | 500 | 33 s | US$ 0.0035 | 0.28% |
| Top live streams, three languages | 60 | 24 s | US$ 0.0010 | 0.69% |
| Live streams in one category, minimum 10 viewers | 36 | 8 s | US$ 0.0002 | 0.20% |
| Most viewed clips of one channel, last 30 days | 50 | 7 s | US$ 0.0005 | 0.41% |
| VODs of two channels | 59 | 9 s | US$ 0.0006 | 0.43% |
| Category directory | 58 | 7 s | US$ 0.0005 | 0.37% |
| Search, two keywords | 40 | 7 s | US$ 0.0005 | 0.47% |
| Two channel profiles | 2 | 5 s | US$ 0.0003 | 5.8% |
Eighteen cloud test runs, eighteen successes, 962 rows charged, US$ 0.0099 of platform cost in total, which is US$ 0.0103 per 1,000 rows or 0.41% of the price. Small runs carry the fixed cost of starting the container, which is why two channel profiles look expensive as a percentage and five hundred live streams do not. The Actor makes plain HTTP calls to the same public GraphQL endpoint the Twitch site uses, with no browser and no login, and reads up to thirty channel profiles per request.
How to use it
Apify Console
- Pick a mode and fill in channels, categories, languages or keywords.
- Click Start. Results appear in the Output tab, with one table view per type.
- Export as JSON, CSV, Excel or HTML, or copy the API link.
API
curl -X POST "https://api.apify.com/v2/acts/scrapewise~twitch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "liveStreams", "languages": ["en"], "maxResults": 100}'
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("scrapewise/twitch-scraper").call(run_input={"mode": "channels","channelNames": ["ibai", "kaicenat"],})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["channelName"], row.get("followersCount"), row.get("isLive"))
Schedules and integrations
- Schedule
liveStreamsevery 15 or 60 minutes to build a viewer history per channel and per category. - Send results to Google Sheets, Slack, Airtable, BigQuery, S3 or a webhook, or call it from n8n, Make or Zapier with the Apify app.
AI agents and MCP
The Actor works as a tool in the Apify MCP server, so Claude, ChatGPT, Cursor and other MCP clients can call it:
https://mcp.apify.com/?actors=scrapewise/twitch-scraper
Ask things like "Who are the twenty most watched Portuguese streamers live on Twitch right now?" or "Compare followers, partner status and last category for these thirty Twitch creators". The flat output with a type on every row keeps it easy for an agent to read without parsing anything.
Limits and honest notes
- Page size. Twitch's public endpoint refuses deep pagination without a browser generated integrity token, so each query returns one page: up to 30 rows for the global live directory, and up to 100 rows for streams inside a category, clips, VODs, categories and search. To go past that in
liveStreamsthe Actor walks the most watched categories and merges the result, which is how a request for 500 live streams is served. For clips and VODs the ceiling is 100 per channel or category per run. - Live streams are a snapshot of the moment the run happens, so schedule the Actor to build history. Category and language filters are applied by Twitch, and
minViewersandtagson top of the result. - Language filter. Twitch filters by the language set on the channel, so a handful of rows can report a different
languagevalue than the one you asked for. - Clip order. Twitch sorts clips by views inside a period or by trending, and offers no sort by creation date, so
clipSort: "trending"is the closest thing to newest. - VODs expire on Twitch after 7 to 60 days depending on the channel's plan.
- Social links are the one field Twitch serves only to residential IPs. A batch that comes back without them is retried once on a residential IP, and
includeSocials: falseturns that off. - Gambling, casino and betting categories are not collected in any mode. Slots, Virtual Casino and Poker are three of the largest categories on Twitch and none of them is returned.
- Chat messages are not collected, and the viewer who created a clip is not included. The Actor only returns public data about channels and their content.
- Requests go through the Apify datacenter proxy and blocked requests are retried on new IPs automatically.
If something breaks or you need a field, open an issue on the Issues tab. Issues are answered the same day.
FAQ
Do I need a Twitch account, a developer app or an API key? No. The Actor reads the same public GraphQL endpoint the Twitch website uses, with no login, no OAuth token and no cookies.
How fast is it? In cloud runs, 500 live streams took 33 seconds and 30 channel profiles come back in one request in about 3 seconds.
How do I get the most watched streams in one category?
Use liveStreams with categories: ["just-chatting"], taking the slug from the twitch.tv/directory/category URL. Add languages to narrow it down by audience and minViewers to drop the long tail.
Can I monitor whether a streamer is live?
Yes. Run channels on a schedule. isLive, currentViewers, currentStreamTitle and currentCategory show the live state at that moment, and lastBroadcastAt tells you when the channel was last on air.
Why did I get fewer rows than maxResults? The channel has fewer clips or VODs than you asked for, fewer streams match the filters right now, or one of Twitch's own ceilings applies (30 rows for the global live directory, 100 for everything else per query). You are only charged for rows actually delivered.
Are invalid or missing channels charged?
No. They come back as a row with errorCode and are free, so a list with typos costs nothing extra.
Can I export to CSV or Excel?
Yes, from the Output tab or the dataset API with format=csv or format=xlsx.
Does it collect chat, viewers or personal data? No. Chat messages and any data about regular viewers are out of scope. Only public channel, stream, clip, VOD and category data is returned.
Can I use the input of another Twitch Actor?
Yes. mode values such as channel, top_streams, gameStreams, channel_videos and topGames are accepted, as are scrapeType and action, and field names like channelUsernames, logins, targets, streamers, keywords, gameName and maxItems.
Is scraping Twitch legal? The Actor collects only public data that anyone can see on twitch.tv without an account. You are responsible for how you use it, under Twitch's terms and your local data protection law.
Why are gambling and casino categories missing?
They are blocked on purpose, in every mode, by slug, by category name and by the gambling content tag Twitch itself applies. A category asked for explicitly returns a free CATEGORY_NOT_SUPPORTED row. Games that only look like gambling by name, such as Buckshot Roulette, PokeRogue and Dicey Dungeons, are collected normally.
How do I build a viewer history instead of a snapshot?
Save the liveStreams or categories input as a task and attach an Apify schedule. Each run appends a dated snapshot, and viewers plus scrapedAt is all a chart needs.
Can I match a Twitch creator with their other social profiles?
Yes, through socialLinks and the flat twitter, instagram, youtube, tiktok and discord fields, which carry whatever the streamer published on the channel page. That is usually enough to find the same person on another platform.
Can an AI agent call it?
Yes, through the Apify MCP server. The input is short, every field has a description, and every row carries a type, so an agent can mix modes in one conversation.
Changelog
- 2026-09-16 (0.1.2): social links retried on a residential IP when Twitch withholds them from datacenter IPs, plus the
includeSocialsswitch. - 2026-09-16 (0.1): first version. Modes
channels,liveStreams,clips,videos,categoriesandsearch; batch of 30 channel profiles per request; input names of other Twitch scrapers accepted; gambling and casino categories blocked in every mode; error rows free; live streams ranked by viewers across the directory.
This Actor only collects public data and respects the site's terms.
Em português
Twitch Scraper extrai perfis de canais (seguidores, parceiro, bio, redes sociais, viewers ao vivo), as lives com mais audiência por categoria e idioma, clipes por canal ou categoria, VODs e o diretório de categorias com viewers, tudo sem login e sem chave de API. Serve para agências de marketing de influência, patrocinadores e produtos de analytics de streaming.
- Agências: conferir seguidores, status de parceiro e redes de uma lista de criadores, 30 canais por requisição.
- Patrocinadores: ver as lives mais assistidas da categoria e do idioma agora, com viewers, tags e miniatura.
- Analytics: acompanhar viewers por categoria, views de VODs e desempenho de clipes com agendamento.
Preço: US$ 2,50 por 1.000 linhas no plano Free (US$ 2,00 no Gold), sem mensalidade e sem taxa por execução. Canal inexistente, filtro sem resultado e requisição bloqueada voltam como linha gratuita com errorCode. Categorias de aposta, cassino e jogo de azar não são coletadas em nenhum modo. Mensagens de chat ficam fora do escopo.
Keywords: twitch scraper, twitch api, twitch channel scraper, twitch streamers, twitch live streams, twitch viewers, twitch clips, twitch vods, twitch categories, twitch directory, twitch followers, streamer analytics, influencer marketing, esports data, twitch search, live streaming data.