# Kick Data Extractor (`kawsar/kick-data-extractor`) Actor

Kick Data Extractor collects live streams from any Kick category, so you get viewer counts, streamer details, titles, and tags ready for research and reporting.

- **URL**: https://apify.com/kawsar/kick-data-extractor.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Kick Data Extractor

Kick Data Extractor turns any Kick category into clean, structured data. Paste one or more category URLs, press run, and you get every live stream in that category with viewer counts, titles, streamer names, language, tags, thumbnails, and social handles. The scraper pages through the whole category on its own and sorts streams from most viewers to fewest, so the biggest broadcasts land at the top of your dataset.

It works for any category on Kick: Just Chatting, Slots, Grand Theft Auto V, Garena Free Fire, and everything else. No login, no browser extension, no manual copying.

### What it does

- Reads live streams from any Kick category page
- Sorts results by viewer count, high to low
- Pulls the streamer's username, bio, profile picture, and social links
- Captures stream title, language, tags, category, and thumbnail
- Pages through the full category until it reaches your item limit
- Exports to JSON, CSV, Excel, or HTML, or pulls straight from the Apify API

### Who it is for

- **Marketers and agencies** scouting streamers for sponsorships and finding who actually pulls an audience in a niche
- **Analysts and researchers** tracking which games and categories are growing on Kick
- **Streamers** benchmarking themselves against the top channels in their category
- **Developers** feeding live Kick data into a dashboard, alerting tool, or their own app
- **Talent scouts** building lists of active creators with their contact and social details

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `categoryUrls` | array of strings | Yes | Garena Free Fire | One or more Kick category pages, for example `https://kick.com/category/Just-Chatting`. Paste the full URL or just the slug (`just-chatting`). Add as many as you want in one run. |
| `maxItems` | integer | No | `25` | Maximum number of streams to collect per run across all categories. Up to 1000. |
| `requestTimeoutSecs` | integer | No | `30` | Per-request timeout in seconds. Raise it if a category is very large. |

#### Where to find a category URL

Open Kick in your browser, click any category (or open the Browse page and pick one), and copy the address bar. It looks like `https://kick.com/category/Just-Chatting`. That is the value you paste into `categoryUrls`.

#### Example input

```json
{
    "categoryUrls": [
        "https://kick.com/category/Just-Chatting",
        "https://kick.com/category/Garena-Free-Fire"
    ],
    "maxItems": 25,
    "requestTimeoutSecs": 30
}
```

### Output

Every live stream becomes one record in the dataset. Here is a full example:

```json
{
    "streamId": 125265557,
    "streamTitle": "[HINDI] BGMS Season 5 | Playoffs Day 3",
    "channelSlug": "nodwingaming",
    "username": "NODWINGaming",
    "streamUrl": "https://kick.com/nodwingaming",
    "isLive": true,
    "viewerCount": 106150,
    "startedAt": "2026-09-02 09:33:20",
    "language": "English (India)",
    "isMature": false,
    "categoryName": "Battlegrounds Mobile India",
    "categorySlug": "battlegrounds-mobile-india",
    "tags": ["esports", "tournament"],
    "thumbnailUrl": "https://images.kick.com/video_thumbnails/.../720.webp",
    "channelId": 118266766,
    "isAffiliate": true,
    "vodEnabled": true,
    "subscriptionEnabled": true,
    "playbackUrl": "https://.../master.m3u8",
    "channelBio": "NODWIN Gaming is South Asia's leading esports company...",
    "profilePicture": "https://files.kick.com/images/user/.../thumb.webp",
    "instagram": "nodwingaming",
    "twitter": "NodwinGaming",
    "youtube": "NODWINgaming",
    "tiktok": null,
    "facebook": null,
    "discord": "discord.gg/nodwin",
    "sourceCategoryUrl": "https://kick.com/category/battlegrounds-mobile-india",
    "scrapedAt": "2026-09-02T12:00:00+00:00"
}
```

#### Field reference

| Field | Type | Description |
|-------|------|-------------|
| `streamId` | integer | Kick's unique id for the live stream |
| `streamTitle` | string | The stream title the broadcaster set |
| `channelSlug` | string | The channel handle used in the URL |
| `username` | string | The streamer's display name |
| `streamUrl` | string | Direct link to the channel, `https://kick.com/{channelSlug}` |
| `isLive` | boolean | Whether the stream is live (always true in results) |
| `viewerCount` | integer | Current viewers, the basis for the sort order |
| `startedAt` | string | When the stream went live (UTC) |
| `language` | string | Broadcast language |
| `isMature` | boolean | Whether the stream is marked mature |
| `categoryName` | string | The category the stream is listed under |
| `categorySlug` | string | Slug of that category |
| `tags` | array | Tags the streamer applied |
| `thumbnailUrl` | string | Live preview thumbnail |
| `channelId` | integer | Kick's channel id |
| `isAffiliate` | boolean | Whether the channel is a Kick affiliate |
| `vodEnabled` | boolean | Whether past broadcasts are saved |
| `subscriptionEnabled` | boolean | Whether the channel accepts subscriptions |
| `playbackUrl` | string | HLS playback URL for the live video |
| `channelBio` | string | The streamer's profile bio |
| `profilePicture` | string | Profile image URL |
| `instagram`, `twitter`, `youtube`, `tiktok`, `facebook`, `discord` | string | Social handles the streamer added, `null` when left blank |
| `sourceCategoryUrl` | string | The category this record came from |
| `scrapedAt` | string | When the record was collected (UTC) |

### How to run it

#### On Apify Console

1. Open the actor and go to the Input tab.
2. Paste one or more category URLs into **Category URLs**.
3. Set **Max items** to how many streams you want.
4. Click **Start**.
5. When the run finishes, open the **Dataset** tab and export as JSON, CSV, or Excel.

### Common use cases

- **Sponsorship research**: pull a category, sort is already done for you, and reach out to the top streamers using the social handles in each record.
- **Trend tracking**: schedule the actor to run every hour on a category and watch how viewer counts move over the day.
- **Lead lists**: collect active creators in a niche with their Instagram, YouTube, TikTok, and Discord in one export.
- **Competitive benchmarking**: see where your channel would rank against everyone else live in your category right now.
- **Content planning**: find which titles and tags the biggest streams are using.

### Tips

- Results only include streams that are live at the moment of the run. An empty category means nobody is streaming it right now.
- Viewer counts are a snapshot. Run the actor on a schedule if you want a time series.
- You can mix several categories in one run. Set `maxItems` to cover all of them, since the limit applies to the run as a whole.
- Social fields come back as `null` when the streamer never filled them in. That is normal.

### Frequently asked questions

**Does this need a Kick login or API key?**
No. You only provide the category URLs.

**Can I scrape more than one category at a time?**
Yes. Add every category URL to `categoryUrls` and they run in the same job.

**How are results ordered?**
By current viewer count, from highest to lowest, within each category.

**What is the maximum number of results?**
Up to 1000 per run. Set `maxItems` to control it.

**Can I get offline channels or past streams?**
No. This actor focuses on live streams in a category.

### Support

If a category returns nothing, first check that streams are actually live on that Kick category page in your browser. If something looks off, open an issue on the actor and include the input you used.

# Actor input Schema

## `categoryUrls` (type: `array`):

One or more Kick category pages (for example https://kick.com/category/Garena-Free-Fire). You can paste the full category URL or just the category slug. The scraper paginates through every live stream in each category until the item limit is reached.

## `maxItems` (type: `integer`):

Maximum number of live streams to collect per run across all categories.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://kick.com/category/Garena-Free-Fire"
  ],
  "maxItems": 25,
  "requestTimeoutSecs": 30
}
```

# Actor output Schema

## `properties` (type: `string`):

Extract Kick live streams by category with viewers, streamer, title, tags, and thumbnails from any category URL.

# 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 = {
    "categoryUrls": [
        "https://kick.com/category/Garena-Free-Fire"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/kick-data-extractor").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 = { "categoryUrls": ["https://kick.com/category/Garena-Free-Fire"] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/kick-data-extractor").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 '{
  "categoryUrls": [
    "https://kick.com/category/Garena-Free-Fire"
  ]
}' |
apify call kawsar/kick-data-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kawsar/kick-data-extractor"
        }
    }
}

```

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/w5DglEwn4im9XU4p6/builds/o1UuhckRjCGgPUO5x/openapi.json
