Export public Twitch streams and channels with live viewer metrics, stable IDs, account details, recent VODs, and top clips through an authorized Twitch application.
Twitch Streams & Channels Scraper turns channel URLs, category names, and search terms into structured rows for creator discovery, live-stream monitoring, gaming research, dashboards, and API workflows. You do not need to supply a Twitch login, cookies, or API credentials.
Unofficial integration: This Actor is independently maintained and is not affiliated with, sponsored by, or endorsed by Twitch.
What does this Actor do?
- Live stream discovery: Export top streams or streams from categories such as Just Chatting, Minecraft, and League of Legends.
- Channel search and profiles: Find live and offline channels and collect stable Twitch IDs, display names, profile images, account dates, and broadcaster type.
- Live metrics: Collect viewer counts, stream titles, game/category IDs, languages, tags, timestamps, thumbnails, and mature-content flags.
- Optional content enrichment: Attach up to five recent public VODs and five public clips to selected channel rows.
- Reliable automation: Cursor pagination, global deduplication, bounded retries, progressive saves, pending-work checkpoints, and a machine-readable run summary.
- Flexible export: Download JSON, CSV, Excel, XML, or use the Apify API, schedules, webhooks, and MCP.
Who is it for?
- Creator and influencer teams discovering Twitch channels for sponsorship research.
- Game studios and esports analysts monitoring live category audiences and streamer activity.
- Content teams comparing recent public VODs and clips across channels.
- Researchers and data journalists collecting repeatable public Twitch snapshots.
- Developers and AI agents integrating Twitch stream and channel data through API or MCP.
Example input
{
"categories": ["Just Chatting", "Minecraft"],
"searchTerms": ["vtuber"],
"includeOfflineChannels": true,
"includeVideos": true,
"videosPerChannel": 3,
"includeClips": true,
"clipsPerChannel": 3,
"maxEnrichedChannels": 20,
"maxItems": 75
}
Example output
{
"url": "https://www.twitch.tv/examplechannel",
"channelId": "123456789",
"channelName": "examplechannel",
"displayName": "ExampleChannel",
"broadcasterType": "partner",
"channelCreatedAt": "2020-01-15T12:00:00Z",
"isLive": true,
"isMature": false,
"streamId": "987654321",
"streamTitle": "Ranked matches with viewers",
"categoryId": "27471",
"category": "Minecraft",
"viewerCount": 1245,
"startedAt": "2026-07-20T10:00:00Z",
"language": "en",
"tags": ["English", "Survival"],
"thumbnailUrl": "https://static-cdn.jtvnw.net/previews-ttv/live_user_examplechannel-440x248.jpg",
"profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/example-profile.png",
"offlineImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/example-offline.png",
"followersText": null,
"followersCount": null,
"channelDescription": "Public Twitch channel description.",
"recentVideos": [
{
"id": "2468013579",
"title": "Recent broadcast",
"url": "https://www.twitch.tv/videos/2468013579",
"viewCount": 4321,
"duration": "2h14m8s"
}
],
"topClips": [
{
"id": "InterestingClipSlug",
"title": "Top play",
"url": "https://clips.twitch.tv/InterestingClipSlug",
"viewCount": 9800,
"durationSeconds": 28.4
}
],
"warnings": [],
"sourceType": "category",
"sourceValue": "Minecraft",
"scrapedAt": "2026-07-20T11:00:00.000Z"
}
Input settings
| Setting | API key | Description |
|---|---|---|
| Twitch URLs | startUrls |
Up to 100 public channel, category, or Twitch search URLs. |
| Categories or games | categories |
Up to 100 category names. The legacy games API alias remains accepted. |
| Channel search terms | searchTerms |
Up to 100 public Twitch channel searches. |
| Maximum saved channels | maxItems |
Global unique-row limit from 1 to 10,000. Default: 20. |
| Include offline channels | includeOfflineChannels |
Include offline profiles from direct channel and search inputs. Default: true. |
| Include recent VODs | includeVideos |
Attach public archived broadcasts. Default: false. |
| VODs per channel | videosPerChannel |
Attach 1–5 recent broadcasts. Default: 3. |
| Include top clips | includeClips |
Attach public clips. Default: false. |
| Clips per channel | clipsPerChannel |
Attach 1–5 clips. Default: 3. |
| Maximum enriched channels | maxEnrichedChannels |
Bound optional VOD/clip requests to 1–100 channels. Default: 20. |
| Allow empty results | allowEmptyResults |
Permit a successful zero-row monitoring run. Default: false. |
| Active work deadline | maxRunSeconds |
Stop admitting work after 60–270 seconds while preserving cleanup time. Default: 240. |
| Proxy | proxyConfiguration |
Optional compatibility setting. Direct authorized API traffic is the default. |
Use as a Twitch data API
Replace YOUR_TOKEN with your Apify API token.
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/twitch-streams-channels-scraper').call({
categories: ['Minecraft'],
includeVideos: true,
includeClips: true,
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('fetch_cat/twitch-streams-channels-scraper').call(run_input={
'categories': ['Minecraft'],
'includeVideos': True,
'includeClips': True,
'maxItems': 50,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~twitch-streams-channels-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"categories":["Minecraft"],"includeVideos":true,"includeClips":true,"maxItems":50}'
MCP and AI agents
This Actor works through the official Apify MCP server. A focused server URL exposes only this Actor:
https://mcp.apify.com?tools=fetch_cat/twitch-streams-channels-scraper
Claude CLI setup:
claude mcp add apify-twitch --transport http "https://mcp.apify.com?tools=fetch_cat/twitch-streams-channels-scraper"
JSON configuration:
{
"mcpServers": {
"apify-twitch": {
"url": "https://mcp.apify.com?tools=fetch_cat/twitch-streams-channels-scraper"
}
}
}
Example prompts:
- “Export 50 live Minecraft Twitch channels and rank them by current viewers.”
- “Find Twitch channels matching speedrun, include recent VODs and clips for the first 20, and summarize content themes.”
- “Check these five Twitch channel URLs every hour and highlight changes in live status, title, category, and viewers.”
Schedule Twitch monitoring
Use an Apify schedule for hourly, daily, or weekly snapshots. Keep the same input and export destination so stable channelId, streamId, categoryId, and scrapedAt values can support change tracking. Enable allowEmptyResults only when a zero-match interval is a valid monitoring outcome.
Tips for better results
- Use exact Twitch category names when possible.
- Start with a small
maxItemsandmaxEnrichedChannelswhen testing VOD or clip enrichment. - Set
includeOfflineChannels: falsefor live-only creator lists. - Multiple inputs share one global result limit and are deduplicated by stable Twitch channel ID.
- Direct authorized API access is normally the fastest and least expensive route; a residential proxy is not required.
Limits and responsible use
- The Actor exports public metadata through an authorized Twitch application. It does not collect Twitch passwords, cookies, chat history, subscriptions, messages, or private account data.
- Twitch follower totals require qualifying broadcaster/moderator authorization. The compatibility fields
followersCountandfollowersTexttherefore remainnullfor ordinary public lookups. - Recent VOD and clip arrays may be empty when a channel has no public content or Twitch does not return it.
- Viewer counts and live state are point-in-time values and can change immediately after collection.
- Review Twitch’s Terms of Service, privacy expectations, and applicable laws. Do not use exported data for spam, harassment, or prohibited profiling.
Support
If a run fails or the output looks wrong, open an issue or report a bug from the Actor page. Include the Apify run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL from Twitch, category, or search term. Do not include Twitch application secrets or access tokens.