# Twitch Clips Scraper - Clips, View Counts, Creator Names (`om_kh/twitch-clips-scraper`) Actor

Scrape Twitch clips for any channel or game: clip title, URL, creator, view count, duration, game and creation date. Export to JSON, CSV or Excel, or call it from the API, n8n or Make. No login needed. Built for esports research, creator discovery and highlight curation. $5 per 1,000 clips.

- **URL**: https://apify.com/om_kh/twitch-clips-scraper.md
- **Developed by:** [Khandji Omar](https://apify.com/om_kh) (community)
- **Categories:** Videos, Social media, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.75 / 1,000 clips

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 Clips Scraper — Clips, View Counts, Creator Names

> Scrape Twitch clips for any channel or game: clip title, URL, creator, view count, duration, game and creation date. Export to JSON, CSV or Excel, or call it from the API, n8n or Make. No login needed. Built for esports research, creator discovery and highlight curation.

**Price: $5 per 1,000 clips** ($0.005 per clip). The first 10 results of every run are free.

### In short: what you give, what you get, what it costs

| | |
|---|---|
| **You give** | Twitch channels or games |
| **We do** | Read their clips |
| **You get** | One row per clip: title, link, creator, game, view count, length, clipper and date, plus every field the supplier returns (`source_data`) |
| **It costs** | $5 per 1,000 clips, no start fee. From 16 November 2026: +$0.001 per run. Optional scheduled monitoring: +$0.12 per check (one-off runs never pay it). Apify also bills the supplier Actor `automation-lab/twitch-scraper` that this robot runs for you, at its own price (about $3.45 per 1,000 results). The first 10 results of every run are free of this robot's fee. |
| **It does not** | Sign in to Twitch or download the videos |

A real result row is shown further down this page.

### Free tier — 10 results free on every run

The free results waive this Actor's own fee; the source Actor (automation-lab/twitch-scraper) still bills its own price for every row it returns.

**The first 10 results of every run are free**, on every run you ever make —
not a one-off trial. Run it on your own subjects and see the real output before
you are billed for a single result.

One guard: the free allowance never covers more than half of a run, so a run
returning 6 results gets 3 free. That keeps the offer sustainable.

### What it does

Run it once and get the full, current data as clean rows you can export to JSON, CSV or Excel, or pull through the API. Need only fresh data? Turn on `monitorEnabled` and schedule it: every later run returns only what is new or changed since the previous one, so you never re-download or re-pay for the same rows.

### Compared with cryptosignals/twitch-scraper

Read on the Store on 2026-10-23 (Twitch Scraper — Streams, Channels, Clips & VODs (No OAuth)). Where it does better, this section says so.

- **Data source:** this Actor runs automation-lab/twitch-scraper for you, then cleans and checks every row.
- **This Actor's fee is free on the first results of every run**, and a hard cost cap (`maxTotalChargeUsd`) limits it.
- **Price:** about $8.45 per 1,000 in total here ($5 for this Actor + $3.45 for automation-lab/twitch-scraper), $10 at cryptosignals/twitch-scraper.

### Why this scraper

1. **Try before you pay.** The first 10 results of every run are free, on every run.
2. **Pay only for data delivered.** Failed sources and failed inputs are never billed.
3. **Cost cap on this Actor's fee.** Set `maxTotalChargeUsd` to cap this Actor's own fee; the supplier Actor is capped separately on every call, at its own price.
4. **Only-new mode.** With `monitorEnabled` on a schedule, you get just the new or changed rows, plus a spike signal when volume suddenly jumps.
5. **Clean, normalized rows** with the same field names every run, plus a `RUN_SUMMARY.json` — ready for spreadsheets, databases, n8n/Make/Zapier and AI agents (MCP).

### Example input

```json
{
  "channels": [
    "ninja",
    "pokimane"
  ],
  "maxTotalChargeUsd": 1.0
}
```

This returns the full current data right away. To receive only what is new on a schedule, add `"monitorEnabled": true`: the first monitored run stores a free baseline, later runs return only new or changed rows. Pin a `monitorId` to keep separate targets from sharing state.

### Output

Each row is **one Twitch clip**. A real row from a run on Apify (long texts are cut here and people's names hidden; your dataset has them in full):

A real row from this Actor's latest run on Apify (2026-10-24; long texts are cut and people's names hidden here, your dataset has them in full):

```json
{
  "record_id": "1967893419",
  "query_id": "ninja",
  "title": "Fact or Cap",
  "url": "https://www.twitch.tv/ninja/clip/PlacidTangibleKumquatBleedPurple--1vyhC3pZTChw9SR",
  "author": "(hidden here)",
  "published_at": "2026-10-21T01:46:09Z",
  "viewCount": 371,
  "durationSeconds": 30,
  "game": "Just Chatting",
  "curatorLogin": "itsxolten",
  "curatorDisplayName": "(hidden here)",
  "thumbnailUrl": "https://static-cdn.jtvnw.net/twitch-video-assets/twitch-vap-video-assets-prod-us-west-2/ca790260-d61d-4666-b37c-8c6e8362c543/landscape/th...",
  "scrapedAt": "2026-10-24T21:38:47.298Z"
}
```

| Field | What it holds |
|---|---|
| `title` | clip title |
| `author` | channel |
| `game` | game |
| `viewCount` | views |
| `durationSeconds` | length in seconds |
| `curatorDisplayName` | who clipped it |
| `published_at` | date |
| `thumbnailUrl` | thumbnail |
| `url` | clip link |

Each row also keeps the other fields the source returns, so you get everything above and more. In the **Output** tab, the **Overview** table shows these columns, readable without any code; export them as CSV, Excel, JSON or HTML.

#### Every supplier field included

Each row also carries `source_data`: the full row returned by [automation-lab/twitch-scraper](https://apify.com/automation-lab/twitch-scraper), every field it gives, untouched — you never get less than the supplier itself delivers. Our own fields above stay exactly as they are. A row over 200 KB is trimmed and `source_data_trimmed` lists the fields cut.

### How you're charged

- **Source Actor charge:** this Actor runs [automation-lab/twitch-scraper](https://apify.com/automation-lab/twitch-scraper) inside your run, and Apify bills that run to your account at automation-lab/twitch-scraper's own price (about $3.45 per 1,000 results, read on 2026-10-23), on top of this Actor's price. Each call to it is capped at $0.50.
- **Clip** — **$0.005 per clip ($5 per 1,000)**, billed for each clip delivered to your dataset. With scheduled monitoring on, only clips that are new since the last check are delivered and billed.
- **Scheduled monitoring check** ($0.12) — only when you turn on scheduled monitoring (`monitorEnabled`), once per target per run, and only when the source responded. **One-off runs never pay it**: you pay only per result.
- **One-off runs pay only per result.** The monitoring check applies only to scheduled monitoring; every call to the supplier Actor is capped per call, at its own price, and `maxTotalChargeUsd` caps this Actor's own fee.

### How to use it in 3 steps

1. Click **Try for free** and fill in **Twitch channel usernames** (`channels`).
2. Optional: adjust the other fields; every one has a description and a sensible default.
3. Click **Start** and download the results as JSON, CSV or Excel, or read them from the API.

### Use cases

- **Esports research**
- **Creator discovery**
- **Highlight curation**

### Use it from code (API)

Every Apify Actor is an API. Start a run and read the results with one call.

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/twitch-clips-scraper").call(run_input={"channels": ["ninja", "pokimane"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('om_kh/twitch-clips-scraper').call({
    "channels": [
        "ninja",
        "pokimane"
    ]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**One HTTP call (cURL)** — runs the Actor and returns the dataset in the same response:

```bash
curl -X POST "https://api.apify.com/v2/acts/om_kh~twitch-clips-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"channels": ["ninja", "pokimane"]}'
```

### Integrations: n8n, Make, Zapier, Google Sheets

- **n8n** — the official *Apify* node, operation *Run Actor and get dataset*, Actor `om_kh/twitch-clips-scraper`.
- **Make** — *Apify › Run an Actor*, then *Apify › Get Dataset Items*.
- **Zapier** — *Apify › Run Actor*; map the dataset items into your next step.
- **Google Sheets, webhooks, Slack** — add an integration from the *Integrations* tab of this Actor.
- **Schedules** — run it every hour or day from *Schedules* in Apify Console.

### Use it from an AI agent (MCP and x402)

Connect Claude Desktop, Cursor, VS Code or any MCP client to Apify's MCP server
at `https://mcp.apify.com` and add this Actor, `om_kh/twitch-clips-scraper`, as a tool — the
agent passes the same JSON as the run input and gets the dataset back.

AI agents that pay with **x402** can run it too, without an Apify account: the
Actor charges only per result delivered, so an agent pays exactly for what it gets.

### FAQ

**Is it legal to scrape Twitch?**
This Actor collects only publicly available Twitch data and never logs in. You are responsible for how you use it; check Twitch's terms and your local law (GDPR, CCPA) if you store personal data, and ask a lawyer if unsure.

**Do I need an account, cookies or an API key?**
No. You only need an Apify account to run it.

**What data do I get?**
Clips with title, views, creator, game and link. Download it as JSON, CSV, Excel, HTML or XML, or read it from the API.

**Am I charged when something fails?**
No. An input that fails is listed with its reason in the run summary and is never charged.

**Can I run it on a schedule?**
Yes. Create a schedule in Apify Console (hourly, daily, weekly) and connect webhooks, Google Sheets, Slack, n8n, Make or Zapier.

**Can I use it from Python, JavaScript or an AI agent?**
Yes: see the code samples above, or connect AI agents through MCP with the `twitch_new_clips` tool.

### All input fields

The main fields are described above; these are the others the form accepts:

- **`currentItems`** (Bring your own items (optional)) — Skip the chained fetch and pass records directly (no upstream call, no fetch fee).

### Your feedback

Did this Actor save you time? A short review on the **Reviews** tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the **Issues** tab: it is answered and fixed fast.

### More Actors from the same author

- [YouTube Transcript Scraper - Full Text, Timestamps, Language](https://apify.com/om_kh/youtube-transcript-api)
- [YouTube Video Transcript API - Text, Timestamps, JSON](https://apify.com/om_kh/video-transcript-api)
- [TikTok Profile Scraper - Videos, Views, Likes, Shares](https://apify.com/om_kh/tiktok-profile-scraper)
- [YouTube Comments Scraper - Likes, Replies, Date, $0.40/1K](https://apify.com/om_kh/youtube-comments-scraper)

# Actor input Schema

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

Twitch channel usernames to monitor for new clips.

## `currentItems` (type: `array`):

Skip the chained fetch and pass records directly (no upstream call, no fetch fee).

## `maxTotalChargeUsd` (type: `number`):

Hard maximum amount that this run may charge.

## `sources` (type: `array`):

Declare every upstream source before this run. Each item needs name, authorization, and estimated_cost_usd.

## `monitorEnabled` (type: `boolean`):

The first monitored run stores a free baseline. Later runs deliver and charge only new results.

## `monitorId` (type: `string`):

Pins the persistent baseline to a name of your choice, so separate targets never share state. Leave empty to derive it automatically.

## Actor input object example

```json
{
  "channels": [
    "ninja",
    "pokimane"
  ],
  "currentItems": [],
  "sources": [
    {
      "name": "Chained upstream actor",
      "authorization": "public_structured_data",
      "estimated_cost_usd": 0
    }
  ],
  "monitorEnabled": false,
  "monitorId": ""
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, changes, and source issues.

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

Business-ready results in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

## `runSummary` (type: `string`):

Machine-readable delivery, billing, and source diagnostics.

# 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": [
        "ninja",
        "pokimane"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/twitch-clips-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 = { "channels": [
        "ninja",
        "pokimane",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("om_kh/twitch-clips-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 '{
  "channels": [
    "ninja",
    "pokimane"
  ]
}' |
apify call om_kh/twitch-clips-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,om_kh/twitch-clips-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/uT0WSoqmKQDdBLpRq/builds/eFkxBdYyxMp496raV/openapi.json
