# Kick.com Scraper - Streamers, Live Streams, VODs & Clips (`scrapewise/kick-scraper`) Actor

Scrape Kick.com streamer profiles (followers, verified, bio, socials, live viewers), top live streams by category and language, VODs, clips and categories with viewers. Public JSON, no login. US$ 3 per 1,000 items; channels not found are free.

- **URL**: https://apify.com/scrapewise/kick-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.30 / 1,000 kick item delivereds

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

## Kick.com Scraper - Streamers, Live Streams, VODs & Clips

**Kick.com Scraper** turns Kick's public data into clean, flat rows: streamer profiles with followers, verification, bio and social links, the top live streams right now by category and language, past broadcasts (VODs), clips and categories with live viewers. It is built for influencer marketing agencies, brand sponsorship teams and streaming analytics products that need Kick numbers without logging in and without paying US$ 15 per 1,000 channels.

- **Influencer agencies:** check followers, verification, socials and recent categories of a creator list before pitching a campaign.
- **Sponsors and brand teams:** find the most-watched live streams in your category and language every hour, and see who is live right now with how many viewers.
- **Streaming analytics:** track category viewers, VOD views, peak viewers and top clips over time with a schedule, and feed dashboards, BI or AI agents.

Price: **US$ 3 per 1,000 items**, no monthly fee. Channels that do not exist, blocked requests and empty results are free. AI agents can call it through the Apify MCP server.

### At a glance

| | This Actor | zhorex/kick-scraper (most used for "kick.com") |
|---|---|---|
| Price per 1,000 channels, Free plan | **US$ 3.00** | US$ 15.00 |
| Price per 1,000 channels, Gold plan and above | **US$ 2.30** | US$ 15.00 (same on every plan) |
| Live streams, VODs, clips and categories | US$ 3.00 per 1,000 rows | Charged per channel only |
| Fee per run start | None | US$ 0.05 per 1,000 run starts |
| Channels that do not exist, empty filters, blocked requests | Free rows with an `errorCode` | Not stated on its page |
| Users in the last 30 days | 1 (published 2026-09-15) | 14 |
| Store rating | No reviews yet | No reviews yet |
| Public run success, last 30 days | No public runs yet; 29 of our 29 test runs succeeded | 99.8% (1,331 of 1,334) |

Competitor figures were read from the public Apify API (`api.apify.com/v2/store?search=kick.com`) on **2026-09-15** and change every day; the Store page always shows the live number. Among the ten most relevant Kick Actors that day, prices ran from about US$ 1 to US$ 15 per 1,000 rows, several of them with an extra fee of up to US$ 0.10 charged on every run start.

### One real row

Minimal input (this is also the default input):

```json
{ "mode": "channels", "channelNames": ["xqc", "adinross"] }
```

A real row from a run of 2026-09-15, trimmed (the full row and one example per mode are under "Output" below):

```json
{
  "type": "channel",
  "channelName": "xqc",
  "channelUrl": "https://kick.com/xqc",
  "channelId": 668,
  "displayName": "xQc",
  "followersCount": 1111456,
  "verified": true,
  "isLive": false,
  "recentCategories": ["Grand Theft Auto V (GTA)", "Just Chatting", "Escape From Tarkov"],
  "instagram": "https://www.instagram.com/xqcow1/",
  "twitter": "https://x.com/xqc",
  "scrapedAt": "2026-09-15T18:07:46.101Z"
}
```

### What you can scrape

| Mode | Input | One row per | Typical use |
|---|---|---|---|
| `channels` | channel names or URLs | channel | creator vetting, follower tracking |
| `liveStreams` | optional categories, languages, min viewers, tags | live stream | top streams now, sponsor discovery |
| `videos` | channel names or URLs | past broadcast (VOD) | views and duration of recent streams |
| `clips` | channels, categories, or nothing for trending | clip | viral moments, highlight research |
| `categories` | nothing (top N) or category slugs | category | category viewers leaderboard |
| `search` | keywords | channel | find streamers by name |

Every row has a `type` field (`channel`, `livestream`, `video`, `clip`, `category`) so you can mix modes in one pipeline, plus `scrapedAt`.

### Input examples

Channel profiles (this is also the default input):

```json
{
  "mode": "channels",
  "channelNames": ["xqc", "https://kick.com/adinross", "@amouranth"]
}
```

Top 50 live streams in Just Chatting in Portuguese and Spanish with at least 50 viewers:

```json
{
  "mode": "liveStreams",
  "categories": ["just-chatting"],
  "languages": ["pt", "es"],
  "minViewers": 50,
  "maxResults": 50
}
```

The 100 most viewed clips of a channel, all time:

```json
{
  "mode": "clips",
  "channelNames": ["xqc"],
  "clipSort": "view",
  "clipPeriod": "all",
  "maxResults": 100
}
```

Top 100 categories by live viewers:

```json
{
  "mode": "categories",
  "maxResults": 100
}
```

#### Coming from another Kick scraper?

The input names of the other Kick actors in the Store also work, so you can switch without touching your integration:

- `mode`: `channel_details`, `live_streams`, `top_channels`, `channel_videos` (with `videoType`: `videos` or `clips`), `livestreams`, `subcategories`
- `channelNames`, `channelSlugs`, `channelUrls`, `startUrls`, `watchlist`
- `category`, `categorySlugs`, `minViewers`, `sortBy`, `maxResults`, `maxItems`
- `livestreamLanguages`, `livestreamTags`, `searchKeywords`

Output names follow the same convention as the market leader (`channelName`, `displayName`, `followersCount`, `isLive`, `currentViewers`, `currentCategory`, `currentStreamTitle`, `viewers`, `thumbnailUrl`), so most mappings keep working.

### Output

Real rows from runs on the Apify platform on 15 September 2026.

#### Channel

```json
{
  "type": "channel",
  "channelName": "xqc",
  "channelUrl": "https://kick.com/xqc",
  "channelId": 668,
  "displayName": "xQc",
  "bio": "THE BEST AT ABSOLUTELY EVERYTHING. THE JUICER. LEADER OF THE JUICERS.",
  "avatarUrl": "https://files.kick.com/images/user/676/profile_image/conversion/931b4e8f-5445-427c-bd82-b473530390cc-fullsize.webp",
  "followersCount": 1111456,
  "verified": true,
  "isAffiliate": false,
  "isBanned": false,
  "hasSubscriptions": true,
  "isLive": false,
  "currentViewers": null,
  "currentStreamTitle": null,
  "currentCategory": null,
  "recentCategories": ["Grand Theft Auto V (GTA)", "Just Chatting", "Escape From Tarkov"],
  "instagram": "https://www.instagram.com/xqcow1/",
  "twitter": "https://x.com/xqc",
  "youtube": "https://www.youtube.com/channel/UCmDTrq0LNgPodDOFZiSbsww",
  "discord": "xqcow",
  "scrapedAt": "2026-09-15T18:07:46.101Z"
}
```

When the channel is live, `isLive` is `true` and `currentViewers`, `currentStreamTitle`, `currentCategory`, `currentStreamLanguage`, `currentStreamTags` and `startedAt` are filled.

#### Live stream

```json
{
  "type": "livestream",
  "rank": 2,
  "channelName": "alabinha5",
  "channelUrl": "https://kick.com/alabinha5",
  "displayName": "alabinha5",
  "title": "JOGANDO OUTROS JOGOS e REACTS | 3 DIAS PRO NOVO FIFA",
  "viewers": 2534,
  "category": "Just Chatting",
  "categorySlug": "just-chatting",
  "language": "pt",
  "tags": [],
  "isMature": false,
  "startedAt": "2026-09-15T12:19:23Z",
  "thumbnailUrl": "https://images.kick.com/video_thumbnails/PojA0sivArGt/gxyEwKQGmd9g/720.webp",
  "isLive": true,
  "scrapedAt": "2026-09-15T18:07:48.081Z"
}
```

#### VOD (past broadcast)

```json
{
  "type": "video",
  "videoId": "c3df33dd-375c-4955-862e-5fd0a32d43a1",
  "channelName": "xqc",
  "title": "LIVE HERE GTA V NOPIXEL ROLEPLAY",
  "url": "https://kick.com/xqc/videos/c3df33dd-375c-4955-862e-5fd0a32d43a1",
  "views": 52550,
  "peakViewers": 7218,
  "duration": 39804,
  "durationFormatted": "11:03:24",
  "language": "English",
  "category": "Grand Theft Auto V (GTA)",
  "startedAt": "2026-09-14T19:57:58Z",
  "thumbnailUrl": "https://images.kick.com/video_thumbnails/DsuAwCgUc9Bh/Jr2H5bkEnOFA/720.webp",
  "videoUrl": "https://stream.kick.com/3c81249a5ce0/ivs/v1/196233775518/DsuAwCgUc9Bh/2026/9/14/19/57/Jr2H5bkEnOFA/media/hls/master.m3u8",
  "scrapedAt": "2026-09-15T18:07:45.634Z"
}
```

#### Clip

```json
{
  "type": "clip",
  "clipId": "clip_01H811MXG4FBR62FXPE1AXABDH",
  "channelName": "xqc",
  "displayName": "xQc",
  "title": "soda",
  "url": "https://kick.com/xqc/clips/clip_01H811MXG4FBR62FXPE1AXABDH",
  "views": 327397,
  "duration": 30,
  "category": "Just Chatting",
  "parentCategory": "irl",
  "createdAt": "2023-08-17T06:07:19.490719Z",
  "thumbnailUrl": "https://clips.kick.com/clips/dh/clip_01H811MXG4FBR62FXPE1AXABDH/thumbnail.png",
  "videoUrl": "https://clips.kick.com/clips/dh/clip_01H811MXG4FBR62FXPE1AXABDH/playlist.m3u8",
  "scrapedAt": "2026-09-15T18:07:45.869Z"
}
```

#### Category

```json
{
  "type": "category",
  "rank": 1,
  "categoryId": 8,
  "name": "Grand Theft Auto V (GTA)",
  "slug": "grand-theft-auto-v",
  "url": "https://kick.com/category/grand-theft-auto-v",
  "parentCategory": "Games",
  "viewers": 269060,
  "tags": ["Shooter", "Action", "Open World"],
  "isMature": false,
  "scrapedAt": "2026-09-15T18:07:47.239Z"
}
```

#### Rows that are not charged

A channel that does not exist, an invalid name, a category with no live streams or a blocked request becomes a row with `errorCode` and `error`, and **is not charged**:

```json
{
  "type": "channel",
  "input": "this-channel-does-not-exist-zz9",
  "channelName": "this-channel-does-not-exist-zz9",
  "error": "channel not found on Kick",
  "errorCode": "CHANNEL_NOT_FOUND"
}
```

Error codes: `CHANNEL_NOT_FOUND`, `INVALID_CHANNEL`, `CATEGORY_NOT_FOUND`, `INVALID_CATEGORY`, `NO_RESULTS`, `CHANNEL_UNAVAILABLE`, `BLOCKED`. The run only fails when nothing at all could be delivered because Kick blocked every retry, so one bad name in a list of 500 never ruins the run.

### Field reference

| Field | Types | Description |
|---|---|---|
| `type` | all | `channel`, `livestream`, `video`, `clip` or `category` |
| `channelName` | channel, livestream, video, clip | channel slug, as in kick.com/<slug> |
| `displayName` | channel, livestream, clip | display name with capitalization |
| `channelUrl`, `channelId` | channel, livestream, video, clip | link and numeric id |
| `followersCount` | channel, category | followers (category only with slug input) |
| `verified`, `isAffiliate`, `isBanned`, `hasSubscriptions`, `vodEnabled` | channel | channel flags |
| `bio`, `avatarUrl`, `bannerUrl` | channel | public profile |
| `instagram`, `twitter`, `youtube`, `tiktok`, `facebook`, `discord`, `socialLinks` | channel | social links set by the streamer |
| `isLive`, `currentViewers`, `currentStreamTitle`, `currentCategory`, `currentStreamLanguage`, `currentStreamTags`, `startedAt` | channel | current live stream, if any |
| `recentCategories` | channel | categories streamed recently |
| `rank`, `viewers`, `title`, `language`, `tags`, `isMature` | livestream | live stream now, ranked by viewers |
| `videoId`, `views`, `peakViewers`, `duration`, `durationFormatted`, `videoUrl` | video | VOD stats and HLS playlist |
| `clipId`, `views`, `likes`, `duration`, `createdAt`, `videoUrl` | clip | clip stats and HLS playlist |
| `category`, `categorySlug`, `parentCategory` | livestream, video, clip | category of the content |
| `categoryId`, `name`, `slug`, `viewers`, `tags`, `description` | category | category with live viewers now |
| `url`, `thumbnailUrl` | video, clip, category | page link and image |
| `input` | all | the input line that produced the row |
| `error`, `errorCode` | error rows | why nothing was delivered (not charged) |
| `scrapedAt` | all | UTC time of the scrape |

### Pricing

**US$ 3 per 1,000 items on the Free plan**, no monthly rental, no start fee. One charge is one row, whatever the mode.

| Apify plan | Price per row | Per 1,000 rows |
|---|---|---|
| Free | US$ 0.0030 | US$ 3.00 |
| Bronze | US$ 0.0027 | US$ 2.70 |
| Silver | US$ 0.0025 | US$ 2.50 |
| Gold and above | US$ 0.0023 | US$ 2.30 |

| Actor | Price per 1,000 channels | Live streams, VODs, clips |
|---|---|---|
| **This actor** | **US$ 3 on Free, US$ 2.30 on Gold** | **US$ 3 per 1,000 rows** |
| Kick scraper charged per channel (most used for "kick.com") | US$ 15 | channel event only |
| Kick scraper charged per run start | US$ 6 per 1,000 runs on Free, any run size | per run |
| Other Kick scrapers in the Store | US$ 1 to 21 plus start fees | varies |

Prices of other Actors as listed in the Apify Store on 2026-09-15.

Examples at the Free plan price: 100 creator profiles cost US$ 0.30. The top 500 live streams every hour for a day is 12,000 rows, US$ 36. Error rows are free, and you can cap spending with the maximum cost per run in the Apify Console.

### Speed and cost, measured

Our own cloud runs on the Apify platform, 2026-09-15 and the days before, 512 MB of memory. "Platform cost" is what the run consumed in Apify usage; the percentage is that cost against what the Actor charges.

| Run | Rows | Time | Platform cost | % of the charge |
|---|---|---|---|---|
| Top live streams, no filter | 600 | 31 s | US$ 0.0041 | 0.23% |
| Top live streams, no filter | 200 | 17 s | US$ 0.0016 | 0.26% |
| Most viewed clips of one channel, all time | 500 | 44 s | US$ 0.0039 | 0.26% |
| Every category with live viewers | 626 | 552 s | US$ 0.0189 | 1.0% |
| Categories leaderboard | 100 | 10 s | US$ 0.0009 | 0.29% |
| VODs of two channels | 36 | 6 s | US$ 0.0004 | 0.37% |
| Two channel profiles | 2 | 3 s | US$ 0.0002 | 2.5% |

Twenty-nine test runs, twenty-nine successes, across builds 0.1.1 to 0.1.7. Small runs carry the fixed cost of starting the container, which is why two channels look expensive as a percentage and six hundred live streams do not. The Actor makes plain HTTP calls to the same public JSON kick.com uses in the browser, five at a time, with no browser and no login.

### How to use it

#### Apify Console

1. Pick a mode, fill the channels, categories or languages.
2. Click **Start**. Results appear in the **Output** tab, with one table view per type (Channels, Live streams, VODs, Clips, Categories).
3. Export as JSON, CSV, Excel or HTML, or copy the API link.

#### API

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapewise~kick-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "liveStreams", "languages": ["en"], "maxResults": 100}'
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("scrapewise/kick-scraper").call(run_input={
    "mode": "channels",
    "channelNames": ["xqc", "adinross"],
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["channelName"], row.get("followersCount"), row.get("isLive"))
```

#### Schedules and integrations

- **Schedule** `liveStreams` every 15 or 60 minutes to build a viewer history per channel and category.
- Send results to **Google Sheets, Slack, Airtable, BigQuery, S3** or a webhook with Apify integrations.
- Use it from **n8n, Make or Zapier** with the Apify app: "Run actor" then "Get dataset items".

#### AI agents and MCP

The actor works as a tool in the Apify MCP server, so Claude, ChatGPT, Cursor and other MCP clients can call it:

```
https://mcp.apify.com/?actors=scrapewise/kick-scraper
```

Ask things like "Who are the top 20 Spanish streamers live on Kick right now?" or "Compare followers and recent categories of these 30 Kick creators". The flat output with `type` keeps it easy for an agent to read.

### Limits and honest notes

- **VODs:** Kick serves the 24 most recent past broadcasts per channel through its public API. Older VODs are not available without login, so `videos` returns up to 24 per channel.
- **Live streams** are a snapshot of the moment the run happens; schedule the actor for history. Filters by category and language are applied by Kick; `minViewers` and `tags` are applied on top.
- **Search** returns up to 20 channels per keyword, which is Kick's own limit.
- **Categories:** `followersCount` only comes when you pass category slugs; the top list has live viewers.
- **Gambling, casino and betting categories are not collected** in any mode.
- **Chat messages are not collected**, and the username of the viewer who created a clip is not included. The actor only returns public data about channels and their content.
- Kick sits behind Cloudflare. Requests go through Apify datacenter proxy, and blocked requests are retried on new IPs automatically.

If something breaks or you need a field, open an issue on the Issues tab. Issues are answered the same day.

### FAQ

**Do I need a Kick account, API key or cookies?**
No. The actor reads the same public JSON that kick.com uses in the browser, with no login.

**How fast is it?**
In platform runs, 50 top live streams took one request, 100 clips took 5 requests in about 10 seconds, and 100 channel profiles take about 100 light requests that run 5 at a time.

**How do I get the most-watched streams in one category?**
Use `liveStreams` with `categories: ["just-chatting"]` (the slug from kick.com/category/just-chatting). Add `languages` to narrow by country audience.

**Can I monitor if a streamer is live?**
Yes. Run `channels` on a schedule: `isLive`, `currentViewers`, `currentStreamTitle` and `currentCategory` show the live state at that moment.

**Why did I get fewer rows than maxResults?**
The channel has fewer VODs or clips, fewer streams match the filters right now, or Kick's own limits apply (24 VODs, 20 search results). You are only charged for rows delivered.

**Are invalid channel names charged?**
No. They come back as a row with `errorCode` and are free.

**Can I export to CSV or Excel?**
Yes, from the Output tab or the dataset API (`format=csv` or `format=xlsx`).

**Does it collect chat or viewer data?**
No. Chat messages and personal data of regular viewers are out of scope. Only public channel, stream, VOD, clip and category data is returned.

**Can I use it with other Kick actors' inputs?**
Yes. `channel_details`, `live_streams`, `top_channels`, `channel_videos`, `channelSlugs`, `category`, `minViewers` and similar names are accepted.

**Is scraping Kick legal?**
The actor collects only public data that anyone can see on kick.com without an account. You are responsible for how you use it; follow Kick's terms and data protection laws in your country.

**Why are gambling and casino categories missing?**
They are blocked on purpose, in every mode, by category name and by parent category. Twenty-four categories sit under Kick's `gambling` parent and none of them is collected. Categories whose name only looks like gambling, such as chat-roulette and buckshot-roulette, are collected normally.

**Can I compare a Kick creator with their Twitch or YouTube channel?**
Not in the same run. What this actor gives you is the Kick side plus the social links the streamer publishes on their Kick profile (`instagram`, `twitter`, `youtube`, `tiktok`, `facebook`, `discord`), which is usually enough to match the same person on another platform.

**How do I build a viewer history instead of a snapshot?**
Save the `liveStreams` or `categories` input as a task and attach an Apify schedule every 15 or 60 minutes. Each run appends a dated snapshot, and `viewers` plus `scrapedAt` is all a chart needs.

**Can an AI agent call it?**
Yes, through the Apify MCP server. The input is short, every field has a description, and every row carries a `type`, so an agent can mix modes without parsing anything.

### Changelog

- **2026-09-15 (page):** added the "At a glance" comparison with the most used Kick Actor, measured on the public Apify API that day, the minimal input and a real row in the first screen, the measured speed and cost table, the Store discount ladder and four more FAQ entries.
- **2026-09-15** (0.1.7): gambling, casino and betting categories blocked by parent category, whole word and slug; categories that only look like gambling (chat-roulette, buckshot-roulette, hunter-roulette) stay available.
- **2026-09-15** (0.1): first version. Modes `channels`, `liveStreams`, `videos`, `clips`, `categories` and `search`; input names of other Kick scrapers accepted; error rows free; categories ranked by live viewers.

This actor only collects public data and respects the site's terms.

### Em português

**Kick.com Scraper** extrai perfis de streamers (seguidores, verificado, bio, redes, viewers ao vivo), as lives com mais audiência por categoria e idioma, VODs, clips e categorias com viewers da Kick.com, sem login. Serve para agências de marketing de influência, patrocinadores e produtos de analytics de streaming.

- Agências: conferir seguidores, verificação e redes de uma lista de criadores.
- Patrocinadores: ver as lives mais assistidas da categoria e do idioma agora.
- Analytics: acompanhar viewers de categorias, views de VODs e clips com agendamento.

Preço: **US$ 3 por 1.000 itens no plano Free (US$ 2,30 no Gold), sem mensalidade e sem taxa por execução.** Canal inexistente, filtro sem resultado e requisição bloqueada voltam como linha gratuita com `errorCode`. Categorias de aposta, cassino e jogo de azar não são coletadas em nenhum modo.

Keywords: kick.com scraper, kick scraper, kick streamers, kick live streams, kick livestream viewers, kick clips, kick vods, kick channel followers, kick api, kick analytics, kick categories, streamer analytics, influencer marketing, twitch alternative.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. The mode names of other Kick scrapers also work when called by API: channel\_details, live\_streams, top\_channels, channel\_videos (with videoType), livestreams, subcategories.

## `channelNames` (type: `array`):

For 'channels', 'videos' and 'clips'. Channel name (xqc), @xqc, kick.com/xqc or a full URL. Also accepted by API as channelSlugs, channelUrls or startUrls. If empty, 'channels' and 'videos' use xqc and adinross; 'clips' returns trending clips.

## `searchQueries` (type: `array`):

For 'search': each keyword returns up to 20 matching channels (Kick's own limit) with their full profile.

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

Category slug as in the Kick URL (just-chatting, grand-theft-auto-v, counter-strike-2) or kick.com/category/... URL. Filters 'liveStreams' and 'clips'; in 'categories' mode returns these categories with followers. Leave empty for all.

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

For 'liveStreams': two-letter language codes (en, es, pt, tr, de). Empty means all languages.

## `minViewers` (type: `integer`):

For 'liveStreams': skip streams with fewer current viewers.

## `tags` (type: `array`):

For 'liveStreams': keep only streams that have at least one of these tags (case-insensitive).

## `sortBy` (type: `string`):

For 'liveStreams'. The top streams are always selected by viewers; 'recent' only re-orders them.

## `clipSort` (type: `string`):

For 'clips'.

## `clipPeriod` (type: `string`):

For 'clips': time window Kick applies to the clip list.

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

For 'videos' and 'clips': per channel or category (Kick serves only the 24 most recent VODs per channel). For 'liveStreams', 'categories' and 'search': run total per keyword. Ignored by 'channels', which returns one row per channel.

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

Apify datacenter proxy is the default and works for Kick. Blocked requests are retried on a new IP.

## Actor input object example

```json
{
  "mode": "channels",
  "channelNames": [
    "xqc",
    "adinross"
  ],
  "minViewers": 0,
  "sortBy": "viewers",
  "clipSort": "view",
  "clipPeriod": "all",
  "maxResults": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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 = {
    "mode": "channels",
    "channelNames": [
        "xqc",
        "adinross"
    ],
    "maxResults": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/kick-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 = {
    "mode": "channels",
    "channelNames": [
        "xqc",
        "adinross",
    ],
    "maxResults": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/kick-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 '{
  "mode": "channels",
  "channelNames": [
    "xqc",
    "adinross"
  ],
  "maxResults": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/kick-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/kick-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/5T0qiHkvdShqIwJsY/builds/8nqa8akZTYPQx5eKj/openapi.json
