Twitch Streams & Channels Scraper

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

Data fields

FieldTypeDescription
urlstringCanonical public Twitch channel URL.
channelIdstringStable Twitch user/channel ID.
channelNamestringLowercase Twitch channel login.
displayNamestring | nullPublic Twitch display name.
broadcasterTypestring | nullTwitch broadcaster type, such as partner or affiliate, when returned.
channelCreatedAtstring | nullISO timestamp when the Twitch account was created.
isLivebooleanWhether the channel is live at scrape time.
isMatureboolean | nullLive stream mature-content flag when available.

Input preview

startUrlsTwitch channel, category, or search URLs
categoriesTwitch categories or games
searchTermsChannel search terms
maxItemsMaximum saved channels
includeOfflineChannelsInclude offline channels
includeVideosInclude recent public VODs

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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 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 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 followersCount and followersText therefore remain null for 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.

Common questions

Questions and answers reused from the canonical actor README.

Do users need a Twitch account or API key?

No. The Actor operator supplies an authorized Twitch application. 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 are follower counts null?

Twitch restricts follower totals to qualifying broadcaster/moderator authorization. The Actor does not collect that user authorization, so it avoids presenting an unsupported or stale 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.