# Twitch Channel Scraper (Followers, Viewers, Emails) (`juliob.rangel/twitch-channel-scraper-fast`) Actor

Paste Twitch channel names or links and get followers, live status and viewers, game, language, partner status, last stream, bio, business emails and social links from the panels. No login. Export to Excel, CSV or JSON.

- **URL**: https://apify.com/juliob.rangel/twitch-channel-scraper-fast.md
- **Developed by:** [Julio Barcellos Rangel](https://apify.com/juliob.rangel) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 channel scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Twitch Channel Scraper (Followers, Viewers, Emails)

Twitch Channel Scraper takes a list of Twitch channel names or links and returns each channel's stats and contact details: followers, live status and viewers, game, language, partner status, last stream, bio, business emails and social links from the panels. It is a Twitch streamer scraper for brands, agencies and esports teams who look for sponsorship partners or track channel growth. Use it as a Twitch follower count checker or to find Twitch streamer emails and export them to Excel, CSV or JSON, with no login.

### What does Twitch Channel Scraper do?

You paste Twitch channels. The scraper asks Twitch for the same public channel data the twitch.tv website shows, 20 channels per request, and saves one row per channel.

It accepts these forms, mixed in the same list:

| Input form | Example |
|---|---|
| Channel name | `pokimane` |
| Channel name with @ | `@pokimane` |
| Channel link | `https://www.twitch.tv/kaicenat` |

Names are lowercased and duplicates are removed, so `Pokimane`, `@pokimane` and `twitch.tv/pokimane` count as one channel.

For each channel you get the follower count, whether it is live right now (with viewers, title, game and tags), the title and category currently set, the last broadcast, partner and affiliate status, the bio, any email addresses written in the bio or panels, social links found in the panels, and the profile and banner images. No Twitch account, OAuth token or API key is needed.

### What data can you extract?

| Field | What it means | Example |
|---|---|---|
| `input` | The channel name the scraper read from your line | `pokimane` |
| `login` | Twitch login name | `pokimane` |
| `url` | Channel link | `https://www.twitch.tv/pokimane` |
| `channelId` | Twitch numeric user ID | `44445592` |
| `displayName` | Display name | `pokimane` |
| `followers` | Number of followers | `9442180` |
| `description` | Channel bio | `hi ♡ i stream sometimes 📧 Business inquiries: …` |
| `isLive` | Live at the moment of the run | `true` |
| `viewers` | Current viewers, only when live | `9904` |
| `streamTitle` | Title of the live stream, only when live | `[some1saydrops?] NEW WEEK NEW ME!` |
| `streamGame` | Game or category of the live stream | `AION 2` |
| `streamStartedAt` | When the live stream started | `2026-10-12T16:59:01Z` |
| `streamTags` | Tags of the live stream (empty when offline) | `["English", "DropsEnabled"]` |
| `language` | Broadcast language from the channel settings | `EN` |
| `currentTitle` | Stream title currently set on the channel (also when offline) | `im sorry` |
| `currentGame` | Category currently set on the channel | `Just Chatting` |
| `lastStreamAt` | Start time of the last broadcast | `2026-09-28T20:38:29.567135Z` |
| `lastStreamTitle` | Title of the last broadcast | `im sorry` |
| `lastStreamGame` | Category of the last broadcast | `Just Chatting` |
| `isPartner` | Twitch Partner | `true` |
| `isAffiliate` | Twitch Affiliate | `false` |
| `emails` | Email addresses found in the bio and panel texts | `["teampokimane@wmeagency.com"]` |
| `socials` | First panel link per network: `youtube`, `instagram`, `twitter`, `tiktok`, `discord`, `facebook`, `kick`, `linktree` | `{"tiktok": "https://www.tiktok.com/@poki"}` |
| `panelLinks` | Every unique link in the channel panels | `["https://streamelements.com/pokimane/tip", …]` |
| `profileImageUrl` | Profile picture (300 px) | `https://static-cdn.jtvnw.net/jtv_user_pictures/…-profile_image-300x300.png` |
| `bannerImageUrl` | Channel banner image | `https://static-cdn.jtvnw.net/jtv_user_pictures/…-profile_banner-480.jpeg` |
| `createdAt` | When the channel account was created | `2013-06-07T14:25:22.266478Z` |
| `scrapedAt` | When the row was collected | `2026-10-12T20:22:09.582Z` |
| `error` | Only on error rows: why the channel was not returned | `Channel not found or banned` |

The live examples (`viewers` and the `stream…` fields) come from a real earlier run on a channel (shroud) that was live at the time; the other examples are pokimane. When a channel is offline, `viewers`, `streamTitle`, `streamGame` and `streamStartedAt` are `null` and `streamTags` is empty.

### How to use Twitch Channel Scraper

1. Open Twitch Channel Scraper in Apify Console (sign in or create an Apify account).
2. In **Channels**, paste channel names or links, one per line. Thousands at once are fine.
3. Leave **Proxy** on the default Apify Proxy unless you have a reason to change it.
4. Click **Start**. The log shows how many channels were returned.
5. Open the **Output** tab, then click **Export** to download JSON, CSV, Excel or HTML.
6. Optional: save the input as a task and schedule it to track follower growth or see who is live at a given time.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `channels` | array of strings (required) | `["pokimane", "https://www.twitch.tv/kaicenat"]` | Twitch channel names or links (`twitch.tv/name`). |
| `proxy` | object | `{"useApifyProxy": true}` | Apify Proxy settings. |

There is no "max results" setting: each channel returns one row. A channel name must be 2 to 25 letters, numbers or underscores. Lines that are not a valid name or `twitch.tv` link get an error row instead of being skipped silently.

Example input:

```json
{
  "channels": [
    "pokimane",
    "https://www.twitch.tv/kaicenat",
    "@shroud"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}
```

### Output example

A real row from the latest run:

```json
{
  "input": "pokimane",
  "login": "pokimane",
  "url": "https://www.twitch.tv/pokimane",
  "channelId": "44445592",
  "displayName": "pokimane",
  "followers": 9442180,
  "description": "hi ♡ i stream sometimes 📧 Business inquiries: teampokimane@wmeagency.com",
  "isLive": false,
  "viewers": null,
  "streamTitle": null,
  "streamGame": null,
  "streamStartedAt": null,
  "streamTags": [],
  "language": "EN",
  "currentTitle": "im sorry",
  "currentGame": "Just Chatting",
  "lastStreamAt": "2026-09-28T20:38:29.567135Z",
  "lastStreamTitle": "im sorry",
  "lastStreamGame": "Just Chatting",
  "isPartner": true,
  "isAffiliate": false,
  "emails": ["teampokimane@wmeagency.com"],
  "socials": {
    "youtube": "https://www.youtube.com/c/pokimane",
    "twitter": "http://www.twitter.com/pokimanelol",
    "instagram": "http://www.instagram.com/imane",
    "tiktok": "https://www.tiktok.com/@poki",
    "discord": "https://www.discord.gg/poki"
  },
  "panelLinks": [
    "https://streamelements.com/pokimane/tip",
    "https://secure.twitch.tv/products/pokimane/ticket",
    "https://www.youtube.com/c/pokimane",
    "http://www.twitter.com/pokimanelol",
    "http://www.instagram.com/imane",
    "https://www.tiktok.com/@poki",
    "https://www.discord.gg/poki"
  ],
  "profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/912232e8-9e53-4fb7-aac4-14aed07869ca-profile_image-300x300.png",
  "bannerImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/cfaf7ac8-56d9-4f3a-b5b0-328e90976ea3-profile_banner-480.jpeg",
  "createdAt": "2013-06-07T14:25:22.266478Z",
  "scrapedAt": "2026-10-12T20:22:09.582Z"
}
```

Real error rows from an earlier run. They are not charged:

```json
[
  { "input": "bad name!", "error": "Not a Twitch channel name or link" },
  { "input": "nonexistentuser_zz981", "error": "Channel not found or banned" }
]
```

### How much does it cost?

Twitch Channel Scraper uses pay per event pricing. You pay **$2.00 per 1,000 channels** returned ($0.002 per channel) on the Free plan. Platform usage (compute and proxy) is included in that price.

| Apify plan | Price per 1,000 channels |
|---|---|
| Free | $2.00 |
| Bronze (10% off) | $1.80 |
| Silver (20% off) | $1.60 |
| Gold and higher (30% off) | $1.40 |

Worked examples on the Free plan:

- 200 streamers on a sponsorship shortlist = **$0.40**
- 5,000 channels from a gaming niche = **$10.00**
- 1,000 channels checked every day for 30 days = 30,000 channels = **$60.00** ($42.00 on Gold)

What you are **not** charged for:

- Error rows: lines that are not a Twitch name or link, channels that do not exist or are banned, and channels in a request Twitch did not answer.
- Retries. A channel is charged once, only when it is returned.
- Duplicate channels in your list.

### Use cases

- **Sponsorship and influencer outreach.** Build a list of streamers with follower counts, partner status, business emails and social links in one table.
- **Follower growth tracking.** Run the same list every day and chart `followers` per channel over time.
- **Live monitoring.** Schedule runs to see which channels are live, what they play and how many viewers they have at that moment.
- **Esports and gaming market research.** Compare channels by language, current category and last stream date.
- **Activity checks.** Use `lastStreamAt` to drop channels that have not streamed for months from a partner list.
- **Cross-platform mapping.** Get each streamer's YouTube, Instagram, X (Twitter), TikTok, Discord, Facebook, Kick or Linktree link from the panels.
- **CRM enrichment.** Add Twitch IDs, follower counts and avatars to existing creator records.

### Tips and limits

- **Emails come from text only.** The scraper looks for email addresses in the channel bio and in the text of the channel panels. Emails shown only inside panel images, behind links or on other websites are not found.
- **Social links come from panels.** `socials` is filled from links in the channel panels, matched by domain, keeping the first link per network. It is a best-effort match, so check `panelLinks` for the full list of links.
- **Live data is a snapshot.** `isLive`, `viewers` and the `stream…` fields describe the moment of the run. Run again to refresh them.
- **What is not collected.** Videos (VODs), clips, chat, schedules, follower lists and subscriber counts are not part of the output.
- **You need the channel names.** The scraper does not search Twitch or list channels by game. Paste the channels you want.
- **Batches and retries.** Channels are requested 20 at a time. Each request gets up to 5 tries with a growing pause. If Twitch does not answer a batch after 5 tries, each channel in it gets the error "Twitch did not answer"; run them again.
- **Error rows.** "Not a Twitch channel name or link" is for lines that are not a valid name (2 to 25 letters, numbers or underscores) or `twitch.tv` link. "Channel not found or banned" is for channels Twitch did not return.
- **Text fields as typed.** `language` comes as Twitch stores it (for example `EN`), and links keep their original `http` or `https`.

### Use it from the API, Python or JavaScript

JavaScript (Node.js) with the official `apify-client` package:

```javascript
const { ApifyClient } = require('apify-client');

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const input = { channels: ['pokimane', 'https://www.twitch.tv/kaicenat'] };

(async () => {
    const run = await client.actor('juliob.rangel/twitch-channel-scraper-fast').call(input);
    const { items } = await client.dataset(run.defaultDatasetId).listItems();
    console.log(items);
})();
```

Python with the official `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')
run_input = {'channels': ['pokimane', 'https://www.twitch.tv/kaicenat']}

run = client.actor('juliob.rangel/twitch-channel-scraper-fast').call(run_input=run_input)
items = client.dataset(run['defaultDatasetId']).list_items().items
for item in items:
    print(item.get('login'), item.get('followers'), item.get('emails'))
```

Plain HTTP, running the scraper and getting the rows in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/juliob.rangel~twitch-channel-scraper-fast/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channels": ["pokimane"]}'
```

The scraper also works with Make, Zapier and n8n, can export results to Google Sheets, can call your webhook when a run finishes, and can be used by AI agents through the Apify MCP server.

### FAQ

#### Do I need a Twitch login, OAuth token or API key?

No. The scraper reads public channel data without logging in. You only need an Apify account to run it.

#### Can I export Twitch channel data to Excel or CSV?

Yes. Open the Output tab after the run and export as Excel, CSV, JSON or HTML, or read the dataset through the API.

#### How many channels can I scrape in one run?

Thousands. There is no fixed cap in the scraper; channels are requested 20 at a time, so bigger lists take longer.

#### How does it find streamer emails?

It reads the bio and the text of the channel panels and keeps every email address written there, in lowercase and without duplicates. If a streamer did not write an email as text, `emails` is empty.

#### Is it legal to scrape Twitch channels?

The scraper only collects publicly available data. You are responsible for complying with Twitch's terms and with privacy laws such as GDPR and LGPD. Personal data such as emails needs a legitimate reason to be collected and used.

#### Why did I get a row with an `error` field?

The line was not a valid Twitch name or link, the channel does not exist or is banned, or Twitch did not answer that batch. Error rows are not charged.

#### Can I get subscriber counts or past videos?

No. Subscriber counts, VODs and clips are not part of the output. You get follower counts, live data and the last broadcast.

### Related scrapers

- [YouTube Channel Info Scraper (Subscribers, Views, Links)](https://apify.com/juliob.rangel/youtube-channel-info)
- [TikTok Profile Stats Scraper (Followers, Likes, Bio)](https://apify.com/juliob.rangel/tiktok-profile-stats)
- [Instagram Profile Stats Scraper (Followers, Bio, Posts)](https://apify.com/juliob.rangel/instagram-profile-stats)
- [Snapchat Profile Scraper (Subscribers, Spotlight Views, Bio)](https://apify.com/juliob.rangel/snapchat-profile-scraper-fast)
- [Website Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/juliob.rangel/website-contact-details-scraper)

***

## Extrator de Canais da Twitch (PT-BR)

Cole nomes ou links de canais da Twitch e receba seguidores, se está ao vivo e quantos espectadores, jogo, idioma, parceria, última live, bio, e-mails comerciais e redes sociais dos painéis. Sem login. Você paga só por canal retornado.

# Actor input Schema

## `channels` (type: `array`):

Twitch channel names or links (twitch.tv/name). Thousands at once.

## `proxy` (type: `object`):

Apify Proxy settings.

## Actor input object example

```json
{
  "channels": [
    "pokimane",
    "https://www.twitch.tv/kaicenat"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "channels": [
        "pokimane",
        "https://www.twitch.tv/kaicenat"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("juliob.rangel/twitch-channel-scraper-fast").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "channels": [
        "pokimane",
        "https://www.twitch.tv/kaicenat",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("juliob.rangel/twitch-channel-scraper-fast").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "channels": [
    "pokimane",
    "https://www.twitch.tv/kaicenat"
  ]
}' |
apify call juliob.rangel/twitch-channel-scraper-fast --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,juliob.rangel/twitch-channel-scraper-fast"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xWtRadXaF2oyYxgFA/builds/DzOGxIJacV5pijxZu/openapi.json
