Twitch Streams & Channels Scraper avatar

Twitch Streams & Channels Scraper

Pricing

from $0.30 / 1,000 results

Go to Apify Store
Twitch Streams & Channels Scraper

Twitch Streams & Channels Scraper

Export public Twitch streams, channels, categories, viewer metrics, account details, recent videos, and top clips through the official Twitch API.

Pricing

from $0.30 / 1,000 results

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Share

Export public Twitch streams and channels with follower totals, live viewer metrics, stable IDs, account details, recent VODs, and top clips.

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, follower totals, 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.
  • Scalable content enrichment: Attach up to five recent public VODs and five public clips per selected channel using bounded pages rather than several API calls per channel.
  • 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": "125,400 followers",
"followersCount": 125400,
"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": [],
"dataSource": "graphql",
"sourceType": "category",
"sourceValue": "Minecraft",
"scrapedAt": "2026-07-20T11:00:00.000Z"
}

Ready-to-run examples

Each example is a tested public task with a bounded input, selected output view, and a dedicated landing page. Duplicate one into your Apify account to run it as-is or customize the input.

With no channel, category, or search input, the Actor exports the current top live Twitch streams.

Input settings

SettingAPI keyDescription
Twitch URLsstartUrlsUp to 100 public channel, category, or Twitch search URLs.
Categories or gamescategoriesUp to 100 category names. The legacy games API alias remains accepted.
Channel search termssearchTermsUp to 100 public Twitch channel searches.
Maximum saved channelsmaxItemsGlobal unique-row limit from 1 to 10,000. Default: 20.
Include offline channelsincludeOfflineChannelsInclude offline profiles from direct channel and search inputs. Default: true.
Include recent VODsincludeVideosAttach public archived broadcasts. Default: false.
VODs per channelvideosPerChannelAttach 1–5 recent broadcasts. Default: 3.
Include top clipsincludeClipsAttach public clips. Default: false.
Clips per channelclipsPerChannelAttach 1–5 clips. Default: 3.
Maximum enriched channelsmaxEnrichedChannelsBound optional VOD/clip requests to 1–100 channels. Default: 20.
Allow empty resultsallowEmptyResultsPermit a successful zero-row monitoring run. Default: false.
Active work deadlinemaxRunSecondsStop admitting work after 60–270 seconds while preserving cleanup time. Default: 240.
ProxyproxyConfigurationOptional compatibility setting. Direct public Twitch traffic is the default.

Output fields

FieldDescription
url, channelId, channelName, displayNameCanonical URL plus stable and human-readable channel identity.
broadcasterType, channelCreatedAtPartner/affiliate type and account creation time when returned.
isLive, isMature, streamId, streamTitleCurrent live status and stream identity.
categoryId, category, viewerCount, startedAtCurrent game/category and live audience metrics.
language, tagsPublic stream or channel classification metadata.
thumbnailUrl, profileImageUrl, offlineImageUrlPublic stream preview and channel imagery.
channelDescriptionPublic channel biography.
followersText, followersCountFormatted and numeric public follower totals when Twitch returns them.
recentVideosOptional nested VOD metadata: IDs, titles, dates, URLs, views, language, type, and duration.
topClipsOptional nested clip metadata: IDs, URLs, titles, creators, views, timestamps, duration, and VOD offset.
warnings, dataSourceRow-specific warnings and whether GraphQL or Helix produced the row.
sourceType, sourceValue, scrapedAtProvenance and collection time.

The default key-value store also contains RUN_SUMMARY and PENDING_WORK. These records report target failures, warnings, processed work, deadline state, and the latest idempotent cursor checkpoint without adding paid dataset rows.

Pricing

The Actor charges one start event per valid run and one item event for each stream or channel row successfully saved. Optional VODs and clips are nested in the paid parent row and do not create additional result events. Failed targets and unsaved enrichment are not charged as items.

Apify pricing tierStartSaved item rowApproximate 1,000 rows
Free$0.005$0.000575$0.575 + start
Starter / Bronze$0.005$0.000500$0.500 + start
Scale / Silver$0.005$0.000390$0.390 + start
Business / Gold$0.005$0.000300$0.300 + start
Platinum$0.005$0.000200$0.200 + start
Diamond$0.005$0.000140$0.140 + start

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 maxItems and maxEnrichedChannels when testing VOD or clip enrichment.
  • Set includeOfflineChannels: false for live-only creator lists.
  • Multiple inputs share one global result limit and are deduplicated by stable Twitch channel ID.
  • Direct public Twitch access is normally the fastest and least expensive route; a residential proxy is not required.

Limits and responsible use

  • The Actor uses Twitch's public website GraphQL data interface first and the documented Twitch API for recovery. Twitch does not publish a compatibility or rate-limit contract for the website interface, so query changes or throttling can temporarily cause slower fallback runs.
  • It does not collect Twitch passwords, cookies, chat history, subscriptions, messages, or private account data.
  • Follower totals are point-in-time public counts. Individual follower identities are not collected.
  • 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.

FAQ

Do users need a Twitch account or API key?

No. Run inputs never ask customers for Twitch credentials, login cookies, or access tokens.

Can it export Twitch clips and VODs?

Yes. Enable includeClips or includeVideos. Metadata is nested in each channel row; the Actor does not download media files.

Why can follower counts be null?

The public count is normally returned with the channel profile. It can be null if Twitch omits the profile, changes the public response, or the run recovered through an API response that did not include the total.

Why did my run fail instead of returning an empty dataset?

Empty success often hides invalid categories, removed channels, credential problems, or source changes. The default is therefore to fail with diagnostics. Set allowEmptyResults: true only for a workflow where zero matches are expected.

Can I export to CSV, Excel, JSON, or an API?

Yes. Apify datasets support CSV, Excel, JSON, XML, RSS, HTML table, API access, webhooks, and integrations.

Can I monitor Twitch channels on a schedule?

Yes. Use Apify schedules and stable channel IDs to compare viewer counts, live state, stream titles, and categories over time.

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.