# Kick Streamers Scraper (`badr_xba/kick-streamers-scraper`) Actor

Extract Kick streamers with no API key: username, followers, live status, viewers, stream title, category, language, bio and social profiles. Browse live channels worldwide or track named channels, with a documented estimate of which streamers are US-based.

- **URL**: https://apify.com/badr\_xba/kick-streamers-scraper.md
- **Developed by:** [Badr Bouargan](https://apify.com/badr_xba) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 streamer scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Streamers Scraper – Live Channels, Followers & Socials

![Kick Streamers Scraper](https://api.apify.com/v2/key-value-stores/paDGjcmD1ZMsRJLZS/records/kick-banner.png?signature=mOrhpd0aKAvwNFB7tSoX)

Extract **Kick streamers** with no API key and no account: username, followers, live status, viewers, stream title, category, language, bio, and the Instagram, X, YouTube, TikTok and Discord accounts each streamer publishes. Browse the live channels of the whole platform, or track a list of channels you name.

### What you can do with it

- **Find creators to sponsor**: filter by followers, viewers, category and language, then contact them through the socials they publish.
- **Track named streamers**: followers and live status for a watchlist, whether they are streaming or not.
- **Study a category**: who streams Slots, GTA or Just Chatting right now, and how big their audience is.
- **Spot rising channels**: sort ascending to reach the small channels nobody else lists.
- **Build a daily audience history**: schedule a run and keep a record of viewers over time.

### Why this Actor

- **No key, no OAuth app.** Kick's official API needs credentials; this Actor reads the public data the site itself serves.
- **Popular first, or the long tail.** Sorted by viewers descending, or ascending to mine small channels nobody lists.
- **Social accounts included.** Instagram, X, YouTube, TikTok, Discord and Facebook as published by the streamer — a contact sheet in one run.
- **Named channels too.** Feed it `xqc`, `kick.com/adinross` or full URLs and get their live status and stats, even offline.

### About "US streamers" — read this first

**Kick publishes no country.** Not on the channel, not on the stream, and no `country`, `region` or `geo` parameter filters its listings — this was tested against the live API, all variants return the identical list.

So the Actor does two honest things instead of pretending:

1. **A factual filter**: the declared stream **language**. Keeping `English` is the practical way to land on US, UK, Canadian and Australian streamers.
2. **A transparent estimate**: every row carries `usScore` and `usSignals`, built from visible clues — a US city or state in the title or bio, "USA", a US timezone (EST, PST…), a US league (NFL, NBA, MLB, NHL, UFC), the declared language, and whether the stream runs during US prime time. You see exactly which clues fired, so you can judge each row yourself.

Switch on **Only streamers with US clues** if you want a short, high-precision list; leave it off and sort by `usScore` in your spreadsheet if you want coverage. For a guaranteed US list, put the channels you already know in **Specific channels**.

### How it works

1. The Actor reads Kick's live-stream listing page by page (32 streams per page, sorted by viewers) and its featured selection.
2. Each channel page is then read once for followers, bio, social accounts and recent categories.
3. Streams are de-duplicated on the channel slug, filtered, scored, and saved.

### Step-by-step tutorial

1. Set **Maximum streamers** — 100 is a good first run.
2. Keep **Languages** on `English`, or empty it for the whole platform.
3. Optional: **Minimum viewers**, **Minimum followers**, **Verified only**, **Exclude mature**, **Category contains** (`slots`, `just chatting`, `gta`…).
4. Optional: paste channels in **Specific channels** to follow named streamers instead of browsing.
5. Press **Start**, then export as Excel, CSV or JSON.

### Input example

```json
{
  "maxStreamers": 200,
  "languages": ["English"],
  "minViewers": 50,
  "includeChannelDetails": true,
  "sortBy": "viewers",
  "usOnly": false,
  "usScoreThreshold": 3
}
```

### Output example

![Sample output](https://api.apify.com/v2/key-value-stores/paDGjcmD1ZMsRJLZS/records/kick-output.png?signature=1SCOiqGYQvImzZuyIlhwv)

Every row as JSON:

```json
{
  "username": "DeenTheGreat",
  "slug": "deenthegreat",
  "profileUrl": "https://kick.com/deenthegreat",
  "followers": 439111,
  "isVerified": true,
  "isLive": true,
  "viewerCount": 12524,
  "streamTitle": "LOCKED-IN-ATHON DAY 70 OF 90",
  "language": "English",
  "category": "IRL",
  "streamStartedAt": "2026-09-21T09:12:03+00:00",
  "streamMinutes": 181,
  "instagramUrl": "https://instagram.com/deenthegreat",
  "twitterUrl": "https://x.com/deenthegreat",
  "usScore": 2,
  "usSignals": ["langue : anglais"],
  "isLikelyUS": false
}
```

The **Contacts** dataset view shows username, followers and every social link — ready for outreach.

### Pricing

Pay per streamer returned, shown on the Actor's pricing tab; proxy and compute are included. A 40-streamer run with channel details takes about 40 seconds.

### FAQ

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

**Why is `isLikelyUS` false for an obviously American streamer?** Because that streamer's title and bio contain no geographic clue. The field is an estimate, never a fact — use it to sort, not to exclude blindly.

**Why so few streamers at some hours?** Live listings only contain who is streaming right now. Run during US evening hours (22:00–06:00 UTC) for the American scene.

**Can I get offline streamers?** Yes — name them in **Specific channels**. Browsing only sees live channels, because that is all Kick lists.

**Viewer counts look like zero.** Sorted ascending, the listing starts with micro-streams that genuinely have no viewers. Keep the default sorting for the popular ones.

**Some requests were refused.** Kick rate-limits bursts. Lower **Requests in parallel**, or pick the **RESIDENTIAL** proxy group.

### Integrations

- **Schedules**: run it during US evening hours to catch the American scene live.
- **API**: each dataset exports as JSON, CSV or Excel.
- **Webhooks**: trigger your own tooling the moment a run ends.
- **No-code tools**: Google Sheets, Slack, Zapier and Make from the Integrations tab.

### Support

Open an issue on the Actor's **Issues** tab: a bug, a missing field, or a filter you need.

**Did this Actor do the job?** Leaving a short review on its Store page takes a minute and helps other people find it — and tells me which feature to build next.

### Legal

This Actor reads **public** Kick pages and their public JSON, the same data any visitor sees without signing in. It collects channel and stream information plus the social accounts streamers publish themselves; it never signs in and never touches private messages or chat history. Automated access may conflict with Kick's Terms of Service, and how you use the data is your responsibility.

### En français

Extrait les **streamers Kick** sans clé ni compte : pseudo, abonnés, statut en direct, spectateurs, titre, catégorie, langue, bio et réseaux sociaux (Instagram, X, YouTube, TikTok, Discord). Parcourt les directs de toute la plateforme, du plus regardé au plus confidentiel, ou suit une liste de chaînes que vous nommez. **Kick ne publie aucun pays** : le rattachement aux États-Unis est donc une estimation, livrée avec sa note et le détail des indices retenus (ville, État, fuseau horaire, ligue sportive, langue, heure de diffusion). Filtres : langue, spectateurs, abonnés, certification, contenu adulte, catégorie.

# Actor input Schema

## `usOnly` (type: `boolean`):

Kick publishes no country for any streamer, and offers no country filter. Switched on, this keeps only channels whose title, bio or category carries an explicit US clue (city, state, “USA”, an EST/PST timezone, NFL/NBA…). Precise, but very restrictive. Left off, you get every streamer matching the other filters, each with its score and clues (usScore and usSignals) so you can sort them yourself. To cover the US broadly, simply keep the language set to English.

## `maxStreamers` (type: `integer`):

How many streamers to save before the run stops.

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

To follow named streamers instead of browsing live channels: “xqc”, “kick.com/adinross” or a full URL. When filled, this replaces the automatic browsing.

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

Most-watched first, or smallest first to mine the long tail.

## `includeFeatured` (type: `boolean`):

Adds the live channels Kick promotes on its home page.

## `includeChannelDetails` (type: `boolean`):

Opens each streamer's channel to get followers, bio, social accounts and recent categories. One extra request per streamer.

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

Declared stream language: English, Spanish, French, Portuguese, Arabic… Empty means every language.

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

Keep only streams with at least this many viewers.

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

Keep only channels with at least this many followers. Requires channel data.

## `verifiedOnly` (type: `boolean`):

Keep only channels carrying Kick's verified badge.

## `excludeMature` (type: `boolean`):

Drops streams the streamer flagged as adult content.

## `categoryKeywords` (type: `array`):

Keep only streams whose category contains one of these words, e.g. slots, gta, just chatting.

## `usScoreThreshold` (type: `integer`):

Points needed for a streamer to count as likely US. 2 (default): they speak English and nothing points elsewhere — mentions of the UK, Australia, Canada, India or Nigeria, a foreign currency, or the language “English (India)” subtract points. 5 also requires an explicit geographic clue (city, state, timezone, US sports league).

## `maxConcurrency` (type: `integer`):

How many channel pages are read at the same time. Kick publishes no rate limit; 10 is brisk and stable.

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

Apify Proxy prevents Kick from blocking requests. If requests are repeatedly refused, pick the RESIDENTIAL group.

## Actor input object example

```json
{
  "usOnly": false,
  "maxStreamers": 100,
  "sortBy": "viewers",
  "includeFeatured": true,
  "includeChannelDetails": true,
  "languages": [
    "English"
  ],
  "verifiedOnly": false,
  "excludeMature": false,
  "usScoreThreshold": 2,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Nom, abonnés, spectateurs, catégorie, langue, certification.

## `contacts` (type: `string`):

Instagram, X, YouTube, TikTok et Discord déclarés par chaque streamer.

## `allFields` (type: `string`):

Champs complets, dont la note et les indices « États-Unis ».

## `runStats` (type: `string`):

Streamers enregistrés, écartés, pages parcourues et requêtes.

# 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 = {
    "maxStreamers": 100,
    "languages": [
        "English"
    ],
    "maxConcurrency": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("badr_xba/kick-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 = {
    "maxStreamers": 100,
    "languages": ["English"],
    "maxConcurrency": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("badr_xba/kick-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 '{
  "maxStreamers": 100,
  "languages": [
    "English"
  ],
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call badr_xba/kick-streamers-scraper --silent --output-dataset

```

## MCP server setup

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