# Kick Streamer Scraper (`maximedupre/kick-streamers`) Actor

Find public Kick channels by username, URL, category, live feed, featured live, or one creator keyword. Export channel profiles, audience signals, live context, social handles, recent categories, VODs, clips, and discovery details when available.

- **URL**: https://apify.com/maximedupre/kick-streamers.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 channel profiles

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 streamer data for channel research

Find public Kick channels for creator researchers, influencer agencies, market researchers, and content teams. This Actor returns structured channel profiles with public identity, audience signals, live status, viewer and stream context, social handles, recent categories, recent VOD and clip summaries, and the discovery route that found each channel. Use one discovery method per run to look up known channels or build a focused public Kick list without a Kick login or API credential.

- Find **[Top Kick Streamers](https://apify.com/maximedupre/kick-streamers/examples/top-kick-streamers)** with public live status, viewer context, and channel links.
- Build a comparison list with **[Kick Vs Twitch](https://apify.com/maximedupre/kick-streamers/examples/kick-vs-twitch)** from public Kick channel records.
- Review **[Kick Streaming Platform](https://apify.com/maximedupre/kick-streamers/examples/kick-streaming-platform)** profiles with audience, stream, and discovery details.
- Check **[Kick Live](https://apify.com/maximedupre/kick-streamers/examples/kick-live)** channels from live feeds or a category.
- Create **[Kick Streaming](https://apify.com/maximedupre/kick-streamers/examples/kick-streaming)** creator lists from usernames, URLs, or one keyword search.

#### 📊 Public channel profiles and live context

Each saved dataset row represents one public Kick channel. It can include the channel identity, account status, follower count, live stream context, public social handles, current or recent categories, recent VODs and clips, and the first discovery value that produced the row. Optional values are included when Kick exposes them. Offline channels still have `liveStream.isLive: false`, while unavailable details are omitted rather than guessed.

#### ▶️ Find channels in one focused run

1. Choose one discovery method in `discoveryMethod`.
2. For Known usernames or URLs, add one or more public usernames or channel URLs. Each value is checked separately.
3. For Live category, enter a category or leave it empty to use current trending live categories. Add `minimumViewers` when you need a viewer floor.
4. Use Live feed or Featured live to collect from those public live surfaces.
5. Use Creator name or keyword for one search per run. Use `categoryFilter` when you want a current or recent category filter.
6. Turn on `liveOnly` for known channels or keyword search when you need only channels live at collection time.
7. Set `maxItems` to cap returned channel records. Leave it empty to return all available results until the source is exhausted.

Fields for another discovery choice are ignored. If a channel appears through more than one submitted value, the first eligible occurrence is saved and later matches are ignored. Its `discovery` object keeps the first saved method and value.

#### ⚙️ Input

Choose one discovery route per run. Fields for another choice are ignored.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `discoveryMethod` | string | Selects `knownChannels`, `liveCategory`, `liveFeed`, `featuredLive`, or `keyword`. |
| `channelIdentifiers` | array of strings | Public Kick usernames or public channel URLs to look up when `discoveryMethod` is `knownChannels`. Each value is checked separately. |
| `category` | string | Optional Kick category name or slug for `liveCategory`. Leave it empty to use current trending live categories. |
| `minimumViewers` | integer | Keeps live channels with at least this many current viewers for `liveCategory`. |
| `keyword` | string | One creator name or keyword for one `keyword` search per run. |
| `categoryFilter` | string | Optional current or recent Kick category filter for known channels, live feed, featured live, and keyword search. It is ignored for `liveCategory`. |
| `liveOnly` | boolean | Keeps only channels live at collection time for known channels and keyword search. Other discovery choices already return live channels. |
| `maxItems` | integer | Optional positive limit for returned channel records. Leave it empty to return all available results until the source is exhausted. |

**Example input**

This is the public input from successful current-beta default-input run `zMpffKKBs8o3D8ZP7`:

```json
{
  "discoveryMethod": "knownChannels",
  "channelIdentifiers": [
    "xqc"
  ]
}
```

#### 🧾 Output

The Output tab links to the default dataset. Every row uses one channel result shape. Optional top-level groups may be omitted when Kick does not expose data. Each row includes `channel`, `liveStream`, and `discovery`.

**Output fields**

| Field | Type | What it does |
| --- | --- | --- |
| `channel` | object | Public channel identity and profile details. |
| `channel.username` | string | Public Kick username. |
| `channel.displayName` | string | Public name shown for the channel, when available. |
| `channel.channelUrl` | URL | Canonical public URL for the channel. |
| `channel.avatarUrl` | URL | Public channel avatar URL, when available. |
| `channel.bio` | string | Public channel biography, when available. |
| `account` | object | Public account status signals, when available. |
| `account.isVerified` | boolean | Whether Kick marks the channel as verified. |
| `account.isAffiliate` | boolean | Whether Kick marks the channel as an affiliate. |
| `account.isBanned` | boolean | Whether Kick marks the channel as banned. |
| `audience` | object | Public audience information, when available. |
| `audience.followerCount` | integer | Public follower count. |
| `liveStream` | object | Live status and available current stream context. |
| `liveStream.isLive` | boolean | Whether the channel is live when the row is collected. |
| `liveStream.viewerCount` | integer | Current live viewer count, when available. |
| `liveStream.title` | string | Current live stream title, when available. |
| `liveStream.startedAt` | ISO date-time string | Start time of the current live stream, when available. |
| `liveStream.language` | string | Language reported for the current live stream, when available. |
| `liveStream.category` | object | Current Kick category for the live stream, when available. |
| `liveStream.category.name` | string | Public name of the current Kick category. |
| `liveStream.category.slug` | string | Public slug of the current Kick category, when available. |
| `liveStream.isMature` | boolean | Whether the current live stream is marked as mature content. |
| `socialLinks` | array of objects | Public social platform handles, when available. |
| `socialLinks[].platform` | string | Social platform for the handle or link. |
| `socialLinks[].handle` | string | Public creator handle on that platform. |
| `recentCategories` | array of objects | Current or recent public Kick categories, when available. |
| `recentCategories[].name` | string | Public category name. |
| `recentCategories[].slug` | string | Public category slug, when available. |
| `recentVods` | array of objects | Recent public VOD or broadcast summaries, when available. |
| `recentVods[].title` | string | Public VOD or broadcast title, when available. |
| `recentVods[].url` | URL | Public VOD or broadcast URL. |
| `recentVods[].thumbnailUrl` | URL | Public VOD or broadcast thumbnail URL, when available. |
| `recentVods[].publishedAt` | ISO date-time string | Public publication time, when available. |
| `recentVods[].durationSeconds` | integer | VOD or broadcast duration in seconds, when available. |
| `recentVods[].viewCount` | integer | Public VOD or broadcast view count, when available. |
| `recentClips` | array of objects | Recent public clip summaries, when available. |
| `recentClips[].title` | string | Public clip title, when available. |
| `recentClips[].url` | URL | Public clip URL. |
| `recentClips[].thumbnailUrl` | URL | Public clip thumbnail URL, when available. |
| `recentClips[].createdAt` | ISO date-time string | Public clip creation time, when available. |
| `recentClips[].viewCount` | integer | Public clip view count, when available. |
| `discovery` | object | Discovery route and submitted value that produced the channel row. |
| `discovery.method` | string | Route that produced the row: `knownChannels`, `liveCategory`, `liveFeed`, `featuredLive`, or `keyword`. |
| `discovery.value` | string | The first username, URL, category, or search term that produced the row, when applicable. |

**Shortened example row**

This shortened row is genuine data from current-beta run `zMpffKKBs8o3D8ZP7`. The full row has more recent VOD and clip objects. The string `"..."` marks omitted data.

```json
{
  "channel": {
    "username": "xqc",
    "channelUrl": "https://kick.com/xqc",
    "displayName": "xQc",
    "avatarUrl": "https://files.kick.com/images/user/676/profile_image/conversion/931b4e8f-5445-427c-bd82-b473530390cc-fullsize.webp",
    "bio": "THE BEST AT ABSOLUTELY EVERYTHING. THE JUICER. LEADER OF THE JUICERS."
  },
  "liveStream": {
    "isLive": false
  },
  "discovery": {
    "method": "knownChannels",
    "value": "xqc"
  },
  "account": {
    "isVerified": true,
    "isAffiliate": false,
    "isBanned": false
  },
  "audience": {
    "followerCount": 1112695
  },
  "socialLinks": [
    {
      "platform": "instagram",
      "handle": "xqcow1/"
    },
    {
      "platform": "twitter",
      "handle": "xqc"
    },
    "..."
  ],
  "recentCategories": [
    {
      "name": "Grand Theft Auto V (GTA)",
      "slug": "grand-theft-auto-v"
    },
    {
      "name": "Just Chatting",
      "slug": "just-chatting"
    },
    "..."
  ],
  "recentVods": [
    {
      "url": "https://kick.com/xqc/videos/7892f37b-27d1-4097-a04e-60102a10b82c",
      "title": "...",
      "publishedAt": "2026-09-16T18:14:01.000Z",
      "durationSeconds": 41964,
      "viewCount": 47092
    },
    "..."
  ],
  "recentClips": [
    {
      "url": "https://kick.com/xqc/clips/clip_01M2RC6HDZWGSSHHMKWV8ZQ4SC",
      "title": "th4th4th",
      "createdAt": "2026-09-17T19:09:34.940Z",
      "viewCount": 0
    },
    "..."
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. You are charged for each public Kick channel profile returned successfully. The event price shown by Apify can vary by your pricing tier. `maxItems` limits how many channel profiles can be returned, so it can also limit charged profile events. The pricing contract charges the successful profile event only, so this copy does not treat setup, diagnostic, or no-result work as a profile charge.

#### 🔌 Integrations

Open the default dataset in Apify or read it through the Apify API. Export the structured rows for tables or downstream workflows.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### How do I look up a known Kick channel?

Choose `knownChannels` and add one or more public usernames or public channel URLs in `channelIdentifiers`. Each submitted value is checked separately.

##### How do I find live channels?

Choose `liveCategory`, `liveFeed`, or `featuredLive`. For `liveCategory`, add a category or leave `category` empty to use current trending live categories. You can also set `minimumViewers`.

##### Can I search for a creator by name or keyword?

Yes. Choose `keyword` and enter one creator name or keyword. Run a separate run for another search, and use `categoryFilter` when a current or recent category matters.

##### What happens when a channel matches more than one submitted value?

Only the first eligible occurrence is saved. Later matches are ignored, and the row keeps the first saved discovery method and value.

##### What do I get for an offline channel?

The row can still include the public channel profile, account signals, audience data, and recent media. `liveStream.isLive` is `false`, and unavailable live details are omitted.

##### Does this Actor download videos or collect chat?

No. It returns public VOD and clip summaries with source links when available. It does not download or store video, clip, or livestream media, and it does not collect chat messages, chat history, comments, or subscriber counts.

##### Does this Actor collect Twitch data too?

No. This Actor collects public Kick data. Use the Kick records with your own Twitch data when you need a platform comparison.

##### How many channel records can a run return?

`maxItems` is a cap, not a guarantee. Leave it empty to return all available results until the chosen source is exhausted. The source may provide fewer records, and there is no fixed maximum in this input schema.

##### Does it find every Kick creator?

No. Search and discovery follow the public result sets available from Kick. The Actor does not create an exhaustive index of every Kick creator.

##### Do I need a Kick login or API credential?

No. The Actor collects public Kick data without requiring a Kick login or API credential.

### 📝 Changelog

**v0.0** (17-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~kick-streamers/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [YouTube Channel Search Scraper](https://apify.com/maximedupre/youtube-channel-search-scraper): Find public YouTube channels by keyword or search URL for cross-platform creator research.
- [Influencer Scraper](https://apify.com/maximedupre/influencer-scraper): Find public TikTok, Instagram, and YouTube profiles by keyword or URL for broader creator discovery.
- [Twitch Scraper](https://apify.com/maximedupre/twitch-scraper): Collect public Twitch channels, live streams, clips, and VOD metadata for comparison with Kick channels.
- [TikTok Live Search Scraper](https://apify.com/maximedupre/tiktok-live-search-scraper): Search active public TikTok LIVE rooms by keyword for live-creator discovery outside Kick.
- [Kick Clips](https://apify.com/maximedupre/kick-clips): Find or enrich public Kick clips when channel research needs content-level context.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `discoveryMethod` (type: `string`):

Choose one way to find public Kick channels. Run a separate run for another keyword search.

## `channelIdentifiers` (type: `array`):

Add one or more public Kick usernames or public channel URLs to look up. Each value is checked separately.

## `category` (type: `string`):

Optional. Enter a Kick category name or slug. Leave it empty to use current trending live categories.

## `minimumViewers` (type: `integer`):

Optional. Keep only live channels with at least this many current viewers. This applies to Live category.

## `keyword` (type: `string`):

Enter one creator name or keyword for one search. Use a separate run for another search.

## `categoryFilter` (type: `string`):

Optional current or recent Kick category filter for known channels, live feed, featured live, and keyword search. It is ignored for Live category because that choice already uses Category.

## `liveOnly` (type: `boolean`):

When enabled, keep only channels live at collection time for known channels and keyword search. Live category, live feed, and featured live already return live channels.

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

Optional positive limit for returned channel records. Leave it empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "discoveryMethod": "knownChannels",
  "channelIdentifiers": [
    "xqc"
  ]
}
```

# Actor output Schema

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

Open the successful channel records from this run.

# 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 = {
    "discoveryMethod": "knownChannels",
    "channelIdentifiers": [
        "xqc"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/kick-streamers").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 = {
    "discoveryMethod": "knownChannels",
    "channelIdentifiers": ["xqc"],
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/kick-streamers").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 '{
  "discoveryMethod": "knownChannels",
  "channelIdentifiers": [
    "xqc"
  ]
}' |
apify call maximedupre/kick-streamers --silent --output-dataset

```

## MCP server setup

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

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/ETzxYs54WTAznitXg/builds/BGckEeJBwshUkcnVr/openapi.json
