Skip to content

logiover/twitch-scraper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Twitch Scraper — Scrape Twitch Streamers, Live Streams, Top Games, Channels, Videos & Clips (No API Key)

Apify Actor No API key Pay per result Category Export

▶️ Run on Apify

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.


📊 What you get / Output fields

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

💡 Use cases

  • Influencer & creator discovery + outreach — find Twitch streamers by game or keyword, rank channels by followers and liveViewers, 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, startedAt and viewersCount, 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.


🚀 Quick start — 4 ways to run

1) Apify Console (no code)

  1. Open the Actor: apify.com/logiover/twitch-scraper
  2. Click Try for free.
  3. Pick a Mode (e.g. topStreams), adjust the fields that mode needs, and click Start.
  4. When the run finishes, open the Output / Dataset tab, switch between the six views, and export to JSON, CSV, Excel, HTML, XML or JSONL.

2) Apify CLI

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.

3) API / curl (run and get results in one call)

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.

4) apify-client (JavaScript & Python)

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


📥 Input

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.

The 7 modes at a glance

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

Example inputs

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"
}

📤 Output

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"
}

🔌 Integrations & automation

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-items or the JavaScript / Python clients from your own backend, ETL jobs or AI agents.

📦 Export formats

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)

❓ FAQ

How do I scrape Twitch data?

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.

Is this a Twitch API alternative?

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.

Can I scrape Twitch without login or an API key?

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.

Is it free?

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.

How do I export Twitch streamers to CSV or Excel?

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.

How do I find Twitch influencers by game or category?

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.

How do I get live stream viewer counts?

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.

How do I get the Twitch top games / directory data?

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.

Can I scrape Twitch clips and VODs?

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.

How many channels or streams can I scrape in one run?

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.

Does it work for esports and brand-safety monitoring?

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.


🔗 Related actors by logiover

Building a cross-platform creator or media dataset? Pair Twitch Scraper with the rest of the logiover social & creator suite:

Platform Actor
▶️ YouTube 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. ▶️ Run it: https://apify.com/logiover/twitch-scraper

Licensed under the MIT License.

About

Scrape Twitch streamers, live streams, top games, channels, VODs & clips as JSON/CSV — no API key, no login.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors