# Twitch Scraper — Streamers, Influencer Emails & Socials (`cleandata/twitch-streamers-scraper`) Actor

Find Twitch streamers and gaming influencers by category, language and follower range, or look up any channel: followers, average views, streaming frequency, business emails, Instagram, TikTok, YouTube and X links, and sponsors. Influencer marketing leads, fast.

- **URL**: https://apify.com/cleandata/twitch-streamers-scraper.md
- **Developed by:** [Rodrigo Junqueiro](https://apify.com/cleandata) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 channels

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 Streamers Scraper — Influencer Profiles, Emails & Socials

Find **Twitch streamers** for influencer marketing, sponsorships and creator research. Discover streamers who are live in any category and language, or look up specific channels, and get one complete row per streamer: followers, partner status, live viewers, **average views per broadcast**, **streaming frequency**, **business emails** published on the channel, **Instagram / TikTok / YouTube / X links** and **sponsor panels**.

**Fast and cheap:** no headless browser. Over a thousand channels in under a minute. Follower and email filters run *before* billing, so you only pay for channels that match.

### What can you use it for?

- **Influencer discovery:** find streamers in your game or niche, in the languages your brand sells in.
- **Micro-influencer campaigns:** combine *Min followers* and *Max followers* (for example, 1,000 to 50,000).
- **Outreach lists:** use *Only channels with a business email* to get streamers who publish a contact for business inquiries.
- **Competitor sponsorship research:** see which brands already sponsor which streamers through their panels.
- **Creator vetting:** check average views per broadcast, broadcast frequency and last stream date before signing a deal.

### Sample results

A real run looking up six well-known channels (business emails, social links, sponsor panels and the latest broadcast are in the output too):

| Streamer | Followers | Language | Avg. views per broadcast | Avg. hours per stream | Streams per week |
|---|---|---|---|---|---|
| KaiCenat | 21,882,520 | EN | 2,890,116 | 6.7 | 1.5 |
| ibai | 20,329,546 | ES | 548,931 | 4.0 | 1.8 |
| Squeezie | 5,888,140 | FR | 455,426 | 4.8 | 0.9 |
| MontanaBlack88 | 5,777,397 | DE | 435,305 | 5.1 | 1.3 |
| Gaules | 4,310,867 | PT | 28,036 | 40.3 | 4.2 |
| zackrawrr | 2,493,341 | EN | 483,147 | 8.3 | 7.2 |

Discovery runs work the same way for the thousands of smaller streamers who are live in a category right now.

### How much does it cost?

You pay per result, with no monthly rental: **$5 per 1,000 channels** ($0.005 each). Channels removed by your follower and email filters are never charged. Apify's free plan includes $5 of monthly credit, which covers about 1,000 channels a month. You can also set a maximum cost per run in the run options.

### How to use it

1. Click **Try for free** and sign in to Apify (no credit card needed).
2. Add the categories (games) and languages you care about, or specific channels to look up.
3. Optionally set a follower range or keep only channels with a business email.
4. Click **Start**. When the run finishes, download the results as JSON, CSV or Excel, or send them to Google Sheets, your CRM or your own system.

### Input

| Field | Description |
|---|---|
| **Categories / games** | `Minecraft`, `Just Chatting`, `Valorant`… or a category URL. |
| **Stream languages** | 2-letter codes: `EN`, `ES`, `PT`, `DE`, `FR`, `IT`, `JA`, `KO`, `PL`, `TR`… |
| **Channels to look up** | Usernames or channel URLs. They don't need to be live. |
| **Min / Max followers** | Follower range (0 = no limit). |
| **Only channels with a business email** | Skip channels without an email in their bio or panels. |
| **Max channels** | Limit for the whole run. |

```json
{
    "categories": ["Minecraft", "Fortnite"],
    "languages": ["EN", "ES", "PT"],
    "minFollowers": 1000,
    "maxFollowers": 100000,
    "onlyWithEmail": true,
    "maxResults": 500
}
```

### Output

```json
{
    "login": "montanablack88",
    "displayName": "MontanaBlack88",
    "url": "https://www.twitch.tv/montanablack88",
    "description": null,
    "followers": 5777110,
    "isPartner": true,
    "isAffiliate": false,
    "language": "DE",
    "mainCategory": "Minecraft",
    "isLive": true,
    "liveViewers": 11333,
    "liveTitle": "CRAFT ATTACK 14 - TAG 5",
    "liveCategory": "Minecraft",
    "liveSince": "2026-10-14T06:45:55Z",
    "lastBroadcastAt": "2026-10-14T06:46:01Z",
    "lastBroadcastTitle": "CRAFT ATTACK 14 - TAG 5",
    "recentBroadcasts": 10,
    "avgViewsPerBroadcast": 435275,
    "avgBroadcastHours": 5.1,
    "broadcastsPerWeek": 1.3,
    "businessEmails": ["business@montanablack.de", "info@reason.to"],
    "socials": {
        "twitter": ["https://twitter.com/MontanaBlack"],
        "instagram": ["https://www.instagram.com/montanablack/"],
        "tiktok": ["https://www.tiktok.com/@montanablack"],
        "youtube": ["https://www.youtube.com/spontanablack", "https://www.youtube.com/montanablack88"]
    },
    "sponsorPanels": [
        { "title": "GÖNRGY (Werbung)", "url": "https://goenrgy.de/" },
        { "title": "noblechairs (Werbung)", "url": "https://tinyurl.com/MonteNC" }
    ],
    "panelLinks": [{ "title": "Donation", "url": "https://streamlabs.com/montanablack88/tip" }],
    "profileImageUrl": "https://static-cdn.jtvnw.net/...",
    "accountCreatedAt": "2013-06-21T23:14:20Z",
    "twitchId": "45044816",
    "foundVia": "live",
    "searchCategory": "Minecraft"
}
```

- `avgViewsPerBroadcast`, `avgBroadcastHours` and `broadcastsPerWeek` are calculated from the channel's last 10 saved broadcasts (VODs). They are `null` when the channel keeps no VODs.
- `businessEmails` are email addresses the streamer published in their bio or channel panels, usually for business inquiries. Imprint panels can also contain the address of a management company or lawyer.
- `sponsorPanels` are panels that look like sponsorships (for example "sponsor", "ad", "code", "Werbung", "patrocinado"). `panelLinks` lists every panel link.

### How discovery works

Twitch only lists live streams, up to 100 per list. For every category and language, this Actor reads four lists (top viewers, most relevant, newest and smallest streams), so you get the big names and the small up-and-coming streamers in one run. When you want more channels than that, it keeps looking through the languages and tags (like *Chill*, *Competitive* or *Español*) most used by the streamers it has found, which reaches far more of the people live in the category: in our tests, about 1,400 Minecraft streamers in under 20 seconds. To profile channels that are offline, add them under **Channels to look up**.

### Proxies

The Actor uses Apify **residential proxies** by default, because Twitch hides channel social links from datacenter IPs. Each channel needs only a few KB of traffic, so proxy costs stay at a few cents per thousand channels. With datacenter proxies everything else still works, but `socials` will be empty.

### Privacy

This Actor only collects information that streamers publish on their public Twitch channel. Business emails come from the streamer's own bio and panels. If you contact streamers, follow GDPR and anti-spam rules: send relevant business proposals and respect opt-outs.

### FAQ

**Do I need a Twitch account or API key?** No.

**Why did I get fewer streamers than expected?** Only streamers who are live during the run can be discovered, and strict filters (for example a follower range plus *Only channels with a business email*) keep only a small share of them. The run log says how many live streamers were checked. Run at a different time of day, add languages or categories, widen the filters, or add specific channels to look up.

**Is it legal to scrape Twitch?** This Actor only collects what streamers publish on their public channels, without logging in. Streamers are people, so if you store or contact them, the GDPR and anti-spam rules apply to you: have a legitimate reason, send relevant proposals and respect opt-outs. When in doubt, ask a lawyer.

**Can I run it from my own code?** Yes, through the Apify API. In Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("cleandata/twitch-streamers-scraper").call(
    run_input={"categories": ["Minecraft"], "languages": ["EN"], "minFollowers": 1000, "maxResults": 100}
)
for channel in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(channel["displayName"], channel["followers"], channel["businessEmails"])
```

The same works in JavaScript (`apify-client`) or with plain HTTP. See the *API* tab on this page.

**Something broke or you need a field?** Open an issue on the Actor's Issues tab. Feature requests are welcome.

**Found it useful?** A short review on the Reviews tab helps other people find this Actor and tells me what to improve next.

# Actor input Schema

## `categories` (type: `array`):

Find streamers who are live in these categories, e.g. <code>Minecraft</code>, <code>Just Chatting</code>, <code>Fortnite</code>, or a category URL like <code>https://www.twitch.tv/directory/category/valorant</code>.

## `languages` (type: `array`):

Only streams in these languages, as 2-letter codes: <code>EN</code>, <code>ES</code>, <code>PT</code>, <code>DE</code>, <code>FR</code>, <code>IT</code>, <code>JA</code>, <code>KO</code>, <code>PL</code>, <code>TR</code>… Each language also finds more streamers per category.

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

Usernames or channel URLs to get full profiles for, e.g. <code>xqc</code> or <code>https://www.twitch.tv/xqc</code>. They don't need to be live.

## `minFollowers` (type: `integer`):

Skip channels with fewer followers (0 = no minimum). Great for finding micro-influencers together with Max followers.

## `maxFollowers` (type: `integer`):

Skip channels with more followers (0 = no maximum).

## `onlyWithEmail` (type: `boolean`):

Only return channels that publish an email address in their bio or panels.

## `maxResults` (type: `integer`):

Maximum number of channels for the whole run (0 = no limit).

## `proxyConfiguration` (type: `object`):

Residential proxies are recommended: Twitch hides social links from datacenter IPs. Traffic is tiny (a few KB per channel), so proxy costs stay at cents per thousand channels.

## Actor input object example

```json
{
  "categories": [
    "Minecraft"
  ],
  "languages": [
    "EN"
  ],
  "minFollowers": 0,
  "maxFollowers": 0,
  "onlyWithEmail": false,
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `channels` (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 = {
    "categories": [
        "Minecraft"
    ],
    "languages": [
        "EN"
    ],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cleandata/twitch-streamers-scraper").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 = {
    "categories": ["Minecraft"],
    "languages": ["EN"],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("cleandata/twitch-streamers-scraper").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 '{
  "categories": [
    "Minecraft"
  ],
  "languages": [
    "EN"
  ],
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call cleandata/twitch-streamers-scraper --silent --output-dataset

```

## MCP server setup

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

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/Qu7m7EobnDBNqYjaJ/builds/Y6Szf8BHPuPIpQQOw/openapi.json
