Twitch Scraper — Scrape Twitch Streamers, Live Streams, Top Games, Channels, Videos & Clips (No API Key)
Documentation & integration guide for the Twitch Scraper Apify Actor. This repository contains usage docs and client-side code samples only — the Actor itself runs fully hosted on the Apify platform.
Twitch Scraper is an unofficial Twitch data API in a single hosted Apify Actor. Extract live streams, streamer & channel profiles, the top games directory, past broadcasts (VODs) and top clips, plus free-text channel & game search — all as clean, flat JSON you can export to CSV, Excel or JSON. There is no API key, no OAuth login and no registered developer app to set up: you send structured input and get structured Twitch data back.
A single run scales to thousands of results. The topStreams mode sweeps the top games and pulls the live streams inside each one, aggregating the whole live directory into one high-volume dataset. Every row is tagged with a _mode field, so you can mix modes in one dataset and filter later. This makes Twitch Scraper a practical Twitch API alternative for influencer & creator discovery, gaming and esports market research, streamer analytics, sponsorship targeting, live-stream monitoring and viewership analysis.
Results stream into your dataset as flat JSON. Every item carries a _mode tag so rows from different modes can coexist and be filtered. Six pre-built dataset views (Overview, Streams, Games, Channels, Videos, Clips) slice the data with zero post-processing.
| Field | Appears in | Description |
|---|---|---|
_mode |
all | Which mode / endpoint produced the row |
twitchUrl |
all | Canonical Twitch URL for the stream, channel, game or clip |
scrapedAt |
all | Scrape timestamp (ISO 8601) |
login |
streams, channels, search | Twitch channel login / username |
displayName |
streams, channels, search | Streamer display name |
title |
streams, videos, clips | Stream / video / clip title |
gameName |
streams, videos, clips | Game or category being played |
viewersCount |
streams, games | Current live viewer count |
startedAt |
streams | When the stream went live |
tags |
streams | Freeform stream tags (array) |
isPartner |
streams, channels | Twitch Partner flag |
isAffiliate |
channels | Twitch Affiliate flag |
isLive |
channels | Whether the channel is live right now |
liveGame |
channels | Game the channel is currently streaming |
liveViewers |
channels | Live viewer count for the channel right now |
followers |
channels | Channel follower count |
description |
channels | Channel bio |
profileImageUrl |
channels | Channel avatar image URL |
thumbnailUrl |
streams, videos | Preview / thumbnail image URL |
rank |
games | Directory rank of the game |
name |
games | Game / category name |
gameId |
games | Twitch game ID |
boxArtUrl |
games | Game box-art image URL |
channelName |
videos, clips | Owning channel name |
viewCount |
videos, clips | View count for the video / clip |
durationMinutes |
videos | VOD length in minutes |
publishedAt |
videos | Video publish date |
durationSeconds |
clips | Clip length in seconds |
createdAt |
clips | Clip creation date |
curatorName |
clips | Who clipped it |
- Influencer & creator discovery + outreach — find Twitch streamers by game or keyword, rank channels by
followersandliveViewers, and build targeted outreach lists for sponsorships and brand deals. - Gaming & esports market research — track which games top the directory over time, measure category viewership with
viewersCount, and benchmark titles by concurrent viewers. - Streamer analytics — pull channel profiles with
followers, partner/affiliate status, current game and live status to profile and monitor creators. - Sponsorship & brand-deal targeting — filter channels by follower tier, game vertical and live activity to shortlist partners that match a campaign.
- Competitor & channel tracking — snapshot a set of channels on a schedule to watch follower growth, what they stream and when they go live.
- Live-stream monitoring — capture who is broadcasting in a category right now, with stream
title,tags,startedAtandviewersCount, on a recurring schedule. - Audience & viewership analysis — aggregate viewer counts across games and streams to chart directory trends and audience concentration.
- Brand-safety vetting — review live stream titles, tags and games before a sponsorship to check a channel's content fit and safety.
Who uses it: influencer-marketing & talent agencies · gaming and esports analysts · brand & sponsorship teams · recommendation-engine and ML developers · data scientists and AI-agent builders · streamers and community managers.
- Open the Actor: apify.com/logiover/twitch-scraper
- Click Try for free.
- Pick a Mode (e.g.
topStreams), adjust the fields that mode needs, and click Start. - When the run finishes, open the Output / Dataset tab, switch between the six views, and export to JSON, CSV, Excel, HTML, XML or JSONL.
npm i -g apify-cli
apify login
# Run the hosted Actor with an input file and wait for it to finish
apify call logiover/twitch-scraper --input '{
"mode": "topStreams",
"gameFanout": 30,
"gameSort": "VIEWER_COUNT",
"maxResults": 500
}'See examples/cli.md for more.
curl -X POST "https://api.apify.com/v2/acts/logiover~twitch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "streamsByGame",
"game": "VALORANT",
"maxResults": 200
}'The response is the dataset items array (the scraped Twitch data). See examples/api-curl.md for async runs, polling and pagination.
JavaScript / Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/twitch-scraper').call({
mode: 'user',
logins: ['shroud', 'pokimane', 'xqc'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/twitch-scraper").call(run_input={
"mode": "user",
"logins": ["shroud", "pokimane", "xqc"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)Full versions: examples/javascript.md · examples/python.md
Pick a mode, then fill only the fields that mode needs — everything else is optional. Several fields are dropdowns (selects) or batch string-lists.
| Field | Type | Required | Description |
|---|---|---|---|
mode |
string (select) | No (default topStreams) |
Which Twitch endpoint to run. One of topStreams, topGames, streamsByGame, user, videos, clips, search. |
gameSort |
string (select) | No | Games-directory ordering for topStreams / topGames: VIEWER_COUNT, RELEVANCE or NUM_FOLLOWERS. Default VIEWER_COUNT. |
gameFanout |
integer | No | How many top games topStreams sweeps for live streams (1–100). More games = more streams. Default 30. |
game |
string | No | Category name for streamsByGame, e.g. Just Chatting, Minecraft, League of Legends, VALORANT. Use the exact Twitch category name. |
games |
array of strings | No | Batch of category names for streamsByGame. |
login |
string | No | Twitch channel login for user / videos / clips, e.g. shroud. A full URL (https://twitch.tv/shroud) or @handle also works. |
logins |
array of strings | No | Batch of channel logins for user, e.g. ["shroud", "pokimane", "xqc"]. |
videoSort |
string (select) | No | Video ordering for videos: TIME (newest first) or VIEWS (most viewed). Default TIME. |
clipPeriod |
string (select) | No | Clip time window for clips: LAST_DAY, LAST_WEEK, LAST_MONTH or ALL_TIME. Default ALL_TIME. |
clipSort |
string (select) | No | Clip ordering for clips: VIEWS_DESC, VIEWS_ASC, CREATED_AT_DESC or CREATED_AT_ASC. Default VIEWS_DESC. |
query |
string | No | Free-text term for search mode (a streamer name, keyword or game title). |
searchIndex |
string (select) | No | Search target for search: CHANNEL (streamers) or GAME (categories). Default CHANNEL. |
maxResults |
integer | No | Upper bound on rows returned (1–100000). Drives the multi-game sweep for topStreams / streamsByGame. Default 300. |
| Mode | What it returns |
|---|---|
topStreams |
Sweep the top games and pull their live streams — the whole live directory (highest volume) |
topGames |
Top games / categories ranked by current viewers |
streamsByGame |
Live streams for one or more specific games |
user |
Channel / streamer profile for one or many logins (batch) |
videos |
A channel's past broadcasts / VODs |
clips |
A channel's top clips |
search |
Free-text search across channels or games |
Sweep the top games for live streams (high-volume default)
{
"mode": "topStreams",
"gameFanout": 30,
"gameSort": "VIEWER_COUNT",
"maxResults": 500
}Batch channel / streamer profiles (lead-gen)
{
"mode": "user",
"logins": ["shroud", "pokimane", "xqc", "ninja"]
}Live streams for one game
{
"mode": "streamsByGame",
"game": "VALORANT",
"maxResults": 200
}Top games ranked by viewers
{
"mode": "topGames",
"gameSort": "VIEWER_COUNT",
"maxResults": 100
}Channel top clips (last 7 days, most viewed)
{
"mode": "clips",
"login": "shroud",
"clipPeriod": "LAST_WEEK",
"clipSort": "VIEWS_DESC"
}Search channels by keyword
{
"mode": "search",
"query": "valorant",
"searchIndex": "CHANNEL"
}Each mode returns rows tagged with _mode. Below are realistic sample items using the real dataset fields.
Live stream row (topStreams / streamsByGame)
{
"_mode": "topStreams",
"login": "shroud",
"displayName": "shroud",
"title": "ranked grind",
"gameName": "VALORANT",
"viewersCount": 28450,
"startedAt": "2026-07-06T09:12:00Z",
"tags": ["English", "FPS"],
"isPartner": true,
"thumbnailUrl": "https://static-cdn.example/previews/shroud.jpg",
"twitchUrl": "https://www.twitch.tv/shroud",
"scrapedAt": "2026-07-06T12:00:00Z"
}Channel / streamer profile row (user / channel search)
{
"_mode": "user",
"login": "pokimane",
"displayName": "pokimane",
"followers": 9420000,
"isPartner": true,
"isAffiliate": false,
"isLive": false,
"liveGame": null,
"liveViewers": 0,
"description": "hi i'm poki",
"profileImageUrl": "https://static-cdn.example/avatars/pokimane.png",
"twitchUrl": "https://www.twitch.tv/pokimane",
"scrapedAt": "2026-07-06T12:00:00Z"
}Top game row (topGames)
{
"_mode": "topGames",
"rank": 1,
"name": "Just Chatting",
"viewersCount": 412300,
"gameId": "509658",
"boxArtUrl": "https://static-cdn.example/boxart/just-chatting.jpg",
"twitchUrl": "https://www.twitch.tv/directory/category/just-chatting",
"scrapedAt": "2026-07-06T12:00:00Z"
}Video / VOD row (videos)
{
"_mode": "videos",
"channelName": "shroud",
"title": "VALORANT ranked to Radiant",
"viewCount": 184000,
"durationMinutes": 312,
"publishedAt": "2026-07-04T21:00:00Z",
"gameName": "VALORANT",
"thumbnailUrl": "https://static-cdn.example/vods/vod123.jpg",
"twitchUrl": "https://www.twitch.tv/videos/1234567890",
"scrapedAt": "2026-07-06T12:00:00Z"
}Clip row (clips)
{
"_mode": "clips",
"channelName": "shroud",
"title": "insane 1v5 clutch",
"viewCount": 92000,
"durationSeconds": 28,
"createdAt": "2026-07-05T18:30:00Z",
"gameName": "VALORANT",
"curatorName": "clipfan99",
"twitchUrl": "https://clips.twitch.tv/AbcDefGhi",
"scrapedAt": "2026-07-06T12:00:00Z"
}Because Twitch Scraper is a hosted Apify Actor, it plugs into the whole Apify automation ecosystem:
- Schedules — run the Actor on a cron schedule to snapshot the Twitch directory or specific channels daily, hourly or weekly.
- Webhooks — fire an Apify webhook on run success to push fresh Twitch data into your own systems.
- Export & storage — send dataset items to Google Sheets, Amazon S3, or your database / data warehouse.
- No-code connectors — trigger runs and consume results via Zapier, Make, n8n and Pipedream using the Apify integrations.
- Direct API — call
run-sync-get-dataset-itemsor the JavaScript / Python clients from your own backend, ETL jobs or AI agents.
Download any run's dataset — or pull it via the Apify API — in:
- CSV
- JSON
- JSONL (JSON Lines)
- Excel (XLSX)
- XML
- (plus HTML and RSS from the run page)
Run the Twitch Scraper Actor on Apify, pick a mode (e.g. topStreams, user, streamsByGame), and start the run. You get structured Twitch data back as JSON that you can export to CSV, Excel or JSON — no code required, and no Twitch API key or login to set up.
Yes. Twitch's official Helix API requires a registered developer app and OAuth tokens. This Actor works as an unofficial Twitch API alternative: you send structured input (a mode plus its fields) and get structured JSON back, without registering a Helix app, managing OAuth, or hitting official rate limits.
Yes. You only need an Apify account. There is no Twitch API key, no OAuth and no login required to run the Actor and collect publicly available directory and profile data.
The Actor runs on a pay-per-result model and you can start on Apify's free tier. See the Pricing tab on the Actor page for the current rate.
Run any mode (for example user with a batch of logins, or streamsByGame), then download the dataset as CSV or Excel (XLSX) from the run page — or pull it via the Apify API in CSV, JSON or JSONL.
Use streamsByGame with the exact category name (e.g. VALORANT) to list everyone live in that game right now, with viewersCount and full broadcaster details. For keyword or name lookups, use search with searchIndex: "CHANNEL". Then rank the resulting channels by followers and liveViewers to shortlist influencers.
Use topStreams or streamsByGame. Every live-stream row includes viewersCount (current viewers) plus startedAt, title, tags and gameName, so you can rank streams by live audience and track viewership over time.
Use topGames for categories ranked by current viewers (each row has rank, name, viewersCount, gameId and boxArtUrl), or topStreams to also pull the live streams inside each of those games.
Yes. clips returns a channel's top clips (filter with clipPeriod for last day / week / month / all time and sort with clipSort), and videos returns past broadcasts / VODs with viewCount, durationMinutes, publishedAt and gameName.
The topStreams mode sweeps many games (gameFanout up to 100) and pulls up to 100 live streams per game, so a single run easily yields thousands of live-stream rows. maxResults (up to 100000) caps the total, and for batch user lookups you can pass many logins at once.
Yes. Snapshot live streams in a category on a schedule to monitor who is broadcasting, their titles, tags and viewer counts — useful for esports tracking, sponsorship measurement and brand-safety review before a deal.
Building a cross-platform creator or media dataset? Pair Twitch Scraper with the rest of the logiover social & creator suite:
| Platform | Actor |
|---|---|
| YouTube Channel Scraper | |
| 🌟 Influencers | YouTube Influencer Discovery Scraper |
| 🎵 TikTok | TikTok Creator Lead Finder |
👉 Browse all logiover scrapers on Apify Store.
📄 Documentation only — the Actor runs on the Apify platform.
Licensed under the MIT License.