# Kick Trending Clips Scraper: Rank Viral Clips by View Velocity (`getascraper/kick-trending-clips-scraper`) Actor

Find Kick.com clips going viral right now, ranked by view velocity (views per hour) or total views, scoped to the whole site, a category, or specific channels via Kick's real per-channel API. Monitor mode returns only clips you have not already seen. Export JSON, CSV, or Excel. $2 per 1,000 clips.

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

## Pricing

from $1.50 / 1,000 trending 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

## 🔥 Kick Trending Clips Scraper: Rank Viral Clips by View Velocity

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:24px 28px;background:#FFF7ED;border:1px solid #FED7AA;border-top:4px solid #C2410C;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Find Kick clips accelerating right now</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Ranked by views per hour, not just a high lifetime total, so you catch a clip while it's still rising instead of after everyone already saw it.</span>
</td>
</tr>
</table>

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td width="25%" style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #FED7AA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">⚡ Ranked by velocity</span><br>
<span style="font-size:12px;color:#57534E">Views per hour, not lifetime total, so rising clips surface before old ones with a bigger count.</span>
</td>
<td width="25%" style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #FED7AA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">🎯 Scope it your way</span><br>
<span style="font-size:12px;color:#57534E">Scan the whole site, one or more categories, or a specific list of channels.</span>
</td>
<td width="25%" style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #FED7AA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">🔔 Monitor mode</span><br>
<span style="font-size:12px;color:#57534E">Schedule it and only get clips you have not already seen in an earlier run.</span>
</td>
<td width="25%" style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #FED7AA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">🧹 Honest fields only</span><br>
<span style="font-size:12px;color:#57534E">Every field comes straight from Kick. Nothing guessed, nothing invented.</span>
</td>
</tr>
</table>

Scan [Kick](https://kick.com) for clips gaining views fast, ranked by views per hour or total views, across the whole site, a category, or specific channels. Export results to JSON, CSV or Excel, or connect them into your own pipeline via the API. No account, no login, no coding required.

### ✨ Why use this Actor

**Built for anyone who needs to know what is taking off on Kick before the rest of the internet notices.**

- 🎬 **Clip compilation creators**: cut the clip that is climbing right now, not the one that already peaked last week.
- 🔍 **Talent scouts and community managers**: spot who is breaking out in a category or channel before it shows up anywhere else.
- 📅 **Scheduled trend trackers**: run it on a timer with monitor mode and only review clips you have not already seen.

**Velocity is the real signal.** A clip with 10,000 views over three months is not trending, it is just old. This Actor ranks by views gained per hour since a clip was posted, so what surfaces is what is actually happening now.

### 🚀 How it works

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td width="33%" style="width:33.333%;padding:16px 14px;background:#FFF7ED;border:1px solid #FED7AA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C2410C;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick your scope</span><br>
<span style="font-size:12px;color:#57534E">Whole site, one or more categories, or a list of channels.</span>
</td>
<td width="33%" style="width:33.333%;padding:16px 14px;background:#FFF7ED;border:1px solid #FED7AA;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C2410C;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your bar</span><br>
<span style="font-size:12px;color:#57534E">Minimum views, minimum velocity, freshness window, duration cap.</span>
</td>
<td width="33%" style="width:33.333%;padding:16px 14px;background:#FFF7ED;border:1px solid #FED7AA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C2410C;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get ranked clips</span><br>
<span style="font-size:12px;color:#57534E">Sorted by velocity or views, ready to review, download, or pipe elsewhere.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `mode` | enum | No | Scan the whole site, a set of categories, or a set of channels. |
| `categories` | array of strings | No | Category slugs to keep, used when mode is category. |
| `channels` | array of strings | No | Channel slugs to scan, used when mode is channel. |
| `sortBy` | enum | No | Rank by views per hour (velocity) or total views. |
| `timeWindowHours` | integer | No | Only rank clips created within this many hours. |
| `minViews` | integer | No | Drop clips below this total view count. |
| `minViewsPerHour` | number | No | Drop clips below this velocity. |
| `maxDurationSeconds` | integer | No | Drop clips longer than this. 0 means no limit. |
| `excludeMature` | boolean | No | Skip clips flagged as mature content. |
| `maxClips` | integer | No | Maximum ranked clips to return. |
| `scanDepth` | integer | No | How many recent clips to scan before ranking and filtering. |
| `onlyNew` | boolean | No | Monitor mode: skip clips already returned in an earlier run. |
| `proxyConfiguration` | object | No | Proxy settings. Datacenter by default. |

### 📤 Output

Every result is one ranked clip:

```json
{
  "rank": 1,
  "clipId": "clip_01M3JGSWY39CRJQKD5ZASD4KXD",
  "title": "The next big king of kick",
  "channel": "ghosthlubitv",
  "creator": "Trezz88",
  "category": "Just Chatting",
  "views": 9,
  "viewsPerHour": 90,
  "ageHours": 0.04,
  "durationSeconds": 46,
  "isMature": false,
  "createdAt": "2026-09-27T22:47:51.350591Z",
  "clipPageUrl": "https://kick.com/ghosthlubitv?clip=clip_01M3JGSWY39CRJQKD5ZASD4KXD",
  "videoUrl": "https://clips.kick.com/clips/a6/clip_01M3JGSWY39CRJQKD5ZASD4KXD/playlist.m3u8",
  "thumbnailUrl": "https://clips.kick.com/clips/a6/clip_01M3JGSWY39CRJQKD5ZASD4KXD/thumbnail.webp"
}
```

Download the dataset in JSON, CSV, Excel, HTML or XML from the Apify Console, or pull it through the API.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `rank` | number | Position in this run's ranked results. |
| `clipId` | string | Kick's unique clip identifier. |
| `title` | string | The clip's title. |
| `channel` | string | The channel the clip belongs to. |
| `creator` | string | The Kick user who created the clip. |
| `category` | string | The game or stream category. |
| `views` | number | Total views at scan time. |
| `viewsPerHour` | number | Views divided by hours since the clip was created. |
| `ageHours` | number | How many hours ago the clip was created. |
| `durationSeconds` | number | Clip length in seconds. |
| `likes` | number | Like count. Kick's own data currently reports 0 for every clip on the platform. |
| `isMature` | boolean | Whether Kick flagged the clip as mature content. |
| `createdAt` | string | When the clip was created. |
| `clipPageUrl` | string | Link to view the clip on Kick. |
| `videoUrl` | string | Direct link to the clip's video source. |
| `thumbnailUrl` | string | Clip thumbnail image. |
| `sourceMode` | string | Which scope found this clip: global, category, or channel. |
| `sourceTarget` | string | The specific category or channel that matched, when applicable. |

The Output tab also ships a creator and category detail view alongside the main ranking view.

### 💰 Pricing

This Actor is pay per result, $2.00 per 1,000 ranked clips returned. Scanning itself costs nothing. A run that finds nothing to rank costs nothing. There is no subscription.

### ⭐ Enjoying Kick Trending Clips Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#FFF7ED;border:1px solid #FED7AA;border-left:5px solid #C2410C;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Found a clip before it blew up?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other clippers and scouts find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#C2410C;border:1px solid #FED7AA;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/kick-trending-clips-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛠️ Tips for better runs

- Raise `scanDepth` if you widen `timeWindowHours` or narrow `categories`/`channels`. A wider window or a narrower target needs more clips scanned to find enough matches.
- Use `minViewsPerHour` instead of `minViews` when you specifically want clips that are actively accelerating, not just clips that happen to be old and popular.
- Turn on `onlyNew` and schedule the Actor to get a running feed of newly trending clips instead of the same ones every time.
- Start with `mode: "channel"` and a short list of channels you already care about. It scans that channel's own feed directly, so results are complete rather than a sample.

### ❓ FAQ

**Why does this rank by views per hour instead of total views?**
Total views reward age, not momentum. A clip posted months ago can out-count a clip posted an hour ago just by existing longer. Views per hour surfaces what is actually gaining attention right now, which is the useful signal for finding something worth clipping or covering before it peaks.

**Why is `likes` always 0?**
That is Kick's own data, not a limitation of this Actor. Kick's public clip data currently reports 0 likes for every clip on the platform. The field is still included because it is real data Kick returns, not removed to hide the gap.

**Can I track just one category or a handful of channels?**
Yes. Set `mode` to category or channel and list the categories or channels you want. Channel scope scans that channel's own feed directly, so it is complete rather than sampled from the wider site.

**How do I get an ongoing feed instead of re-scanning the same clips?**
Turn on `onlyNew` and run the Actor on a schedule. Each run only returns clips it has not already returned to you for that same scope.

Found a bug or need a custom version of this Actor? Open an issue from the Actor's Issues tab and it will be looked at directly.

### 🔗 Other actors

- [Kick.com Scraper: Streams, Clips & Channel Data](https://apify.com/getascraper/kick-scraper) ↗ - Kick channel, stream, VOD and clip metadata with change tracking.
- [Kick Video Downloader: Clips and VODs as MP4 with Watchlist](https://apify.com/getascraper/kick-video-downloader) ↗ - download Kick clips and VODs as MP4 files before they disappear.
- [Twitch Scraper: Channels, Streams, Clips & Games](https://apify.com/getascraper/twitch-scraper) ↗ - the same kind of channel and clip data, for Twitch instead of Kick.
- [Viewstats YouTube Analytics & Rankings Scraper](https://apify.com/getascraper/viewstats-scraper) ↗ - global rankings and growth analytics for YouTube channels.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/kick-trending-clips-scraper/changelog.md

# Actor input Schema

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

Global scans Kick's site-wide recent-clips feed and ranks across everything. Category and Channel scan that same feed but only keep clips matching the categories or channels you list below, since Kick's API does not filter these server side.

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

Kick category slugs to keep, for example just-chatting or grand-theft-auto-v. Only used when Discovery scope is set to Category. Find a category's slug in its Kick.com URL.

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

Kick channel slugs to scan, for example xqc. Only used when Discovery scope is set to Channel. Each channel is fetched from its own clips feed instead of the global one, so results are complete for that channel rather than sampled.

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

Velocity ranks clips by views per hour since they were created, the real signal for what is trending right now. Views ranks by total lifetime view count instead, which favors older clips that have simply had more time to accumulate views.

## `timeWindowHours` (type: `integer`):

Only rank clips created within this many hours. This is applied after scanning, since Kick's API has no server-side time filter, so a wide window only works if Scan depth below is also raised enough to actually reach that far back; a narrow window is reachable with a small scan depth.

## `minViews` (type: `integer`):

Drop clips with fewer than this many total views.

## `minViewsPerHour` (type: `number`):

Drop clips below this views-per-hour velocity. Raise this to keep only clips that are actively gaining views fast, not just old clips with a high total.

## `maxDurationSeconds` (type: `integer`):

Drop clips longer than this many seconds. Use 0 for no duration limit.

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

Skip clips Kick has flagged as mature (18+).

## `maxClips` (type: `integer`):

The hard cap on ranked clips returned and charged in this run. Keep this low for a quick check; raise it once you know the scope and filters above return what you expect.

## `scanDepth` (type: `integer`):

How many recent clips to fetch and rank before filters and the Max clips cap are applied. Scanning is free; only the ranked clips actually returned are charged. A wider Freshness window or a narrower Category/Channel scope needs a higher scan depth to find enough matching clips.

## `onlyNew` (type: `boolean`):

When enabled, clips already returned to you in an earlier run with the same Discovery scope are skipped, so a scheduled run only reports genuinely new trending clips.

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

Datacenter proxy is sufficient for Kick's clip API and is far cheaper than residential. Only switch to residential if you start seeing blocked or empty responses.

## Actor input object example

```json
{
  "mode": "global",
  "categories": [],
  "channels": [],
  "sortBy": "velocity",
  "timeWindowHours": 24,
  "minViews": 0,
  "minViewsPerHour": 0,
  "maxDurationSeconds": 0,
  "excludeMature": false,
  "maxClips": 20,
  "scanDepth": 150,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (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": "global",
    "categories": [],
    "channels": [],
    "sortBy": "velocity",
    "timeWindowHours": 24,
    "minViews": 0,
    "minViewsPerHour": 0,
    "maxDurationSeconds": 0,
    "excludeMature": false,
    "maxClips": 20,
    "scanDepth": 150,
    "onlyNew": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/kick-trending-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 = {
    "mode": "global",
    "categories": [],
    "channels": [],
    "sortBy": "velocity",
    "timeWindowHours": 24,
    "minViews": 0,
    "minViewsPerHour": 0,
    "maxDurationSeconds": 0,
    "excludeMature": False,
    "maxClips": 20,
    "scanDepth": 150,
    "onlyNew": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/kick-trending-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 '{
  "mode": "global",
  "categories": [],
  "channels": [],
  "sortBy": "velocity",
  "timeWindowHours": 24,
  "minViews": 0,
  "minViewsPerHour": 0,
  "maxDurationSeconds": 0,
  "excludeMature": false,
  "maxClips": 20,
  "scanDepth": 150,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/kick-trending-clips-scraper --silent --output-dataset

```

## MCP server setup

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