How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
xqcin Channels. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Kick Live Streams & Viewer Count gets live status, viewer count, stream title, category, language and paid subscriber count for a list of Kick channels, or the top live streams of any Kick category. You paste channel names or kick.com links, or type a category such as Just Chatting, and add your own free Kick Client ID and Client Secret. You get one clean table row per channel, with numbers as numbers.
- Accepts channel names (
xqc), handles (@adinross) and links (https://kick.com/xqc). Upper and lower case do not matter. - Channel rows come in the order of your list. A channel that appears twice is looked up once.
- For a category, the Actor saves the channels live in it right now, most viewers first, up to
maxItems. A channel that is already in your list is not saved twice. - A channel that Kick does not have gets a
not_foundrow with your original line. A line that is not a Kick channel name gets aninvalid_inputrow. - An offline channel has
isLive: falseandnullviewers, title and category.nullis never written as0. - E-mail addresses in a channel description are replaced with
[email removed]. The Actor does not collect contacts.
Good for
- You track a list of streamers and need to know who is live, with how many viewers, right now.
- You want the biggest live streams of a category (for example Slots & Casino or Just Chatting) as a table.
- You want an official, stable data source instead of page scraping.
Not a good fit
- You need follower counts. The official Kick API does not give followers, so this Actor does not have them. It gives the paid subscriber count instead.
- You need clips, past broadcasts (VODs), chat messages or viewer lists.
- You need e-mails or other contacts of streamers. This Actor does not collect them.
- You have no Kick account with two-factor authentication. You need it to make the free key.
Who uses it
Streamer managers
Check which of your streamers are live now.
Sponsors
Compare viewer counts of channels before a deal.
Analysts
Save the top live streams of a category on a schedule.
Price
Prices will be shown after release.
Questions
Do I need a Kick key?
Yes. You make a free Client ID and Client Secret in your Kick account. Two-factor login must be on.
Does it give follower counts?
No. The official Kick API does not give followers. You get paid subscribers instead.
What if a channel is offline?
The row shows isLive false. Viewers, title and category are empty, not zero.
How many channels can I check?
Up to 1,000 channels and 20 categories per run. Kick gives up to 100 live streams per category.
Do I need a Kick account?
Yes, to make the free key, with two-factor authentication on. The Actor does not log in to your account and does not use cookies.
Does it cost Kick money?
No. The Kick API is free. You pay only the Apify price above.
Can I switch from another Kick scraper without changes?
Not without changes. Field names differ (for example viewerCount, channelSlug, title), and there are no followers. In return you get one row format for channels and categories, clear not_found / invalid_input rows and ISO UTC times.
Is personal data included?
Only public channel and stream data that Kick shows on the channel page. E-mail addresses in descriptions are removed. No viewer or chat data.
Details
Step by step on Apify
- Get a key (see above).
- Paste your Client ID and Client Secret.
- The Channels field already has
xqc. Add more names or links, one per line, or add a category in Categories. - Click Start. A few channels take about 3 seconds.
- Open the Channels view of the dataset, or download it as CSV, Excel or JSON.
Use cases
| Task | Input | Key fields | Next step |
|---|---|---|---|
| Check which of your streamers are live | the creators' channel names | isLive, viewerCount, title, category | Alert your team or update a dashboard |
| Find top streamers of a category for a campaign | categories, maxItems: 100 | rank, viewerCount, language, activeSubscribers | Shortlist channels of the right size and language |
| Track viewers over time | the same list every 15 minutes or every hour | viewerCount, fetchedAt, userId | Chart peak and average viewers in a sheet |
| Clean a creator list | a list from a sheet or CRM | status, channelSlug, url | Remove renamed or banned channels |
| Enrich data for BI or a model | many channels | all fields | Join on userId |
Tips for better results
- Paste names, @handles or kick.com links. Each form works.
- Add a category like Just Chatting to see the most watched channels.
- Run it on a schedule to build a history of viewer counts.
Limits and good to know
Data comes from the Kick Public API under your own Kick app. Please follow the Kick Developer Terms. This Actor is not affiliated with or endorsed by Kick.
- Up to 1,000 lines in
channelsand up to 20 categories with up to 100 live streams each per run. We tested both at once: 1,449 rows saved in about 118 seconds (the other category streams were already in the channel list) - Kick gives at most 100 live streams per category, most viewers first
- Kick marks its old live streams endpoint (the only one sorted by viewers) as deprecated. If Kick turns it off, the Actor switches by itself to the newer endpoint, reads all live streams of the category and sorts them by viewers. Results stay the same; a big category takes a few more requests
- If Kick says "too many requests" and the limit does not come back after about 45 seconds of waiting, the Actor keeps the saved rows and ends as
PARTIALwith reasonQUOTA_LIMIT. The run still SUCCEEDED. Run again a few minutes later, or split the list - The Actor stops looking up channels 15 seconds before the run timeout so it can save the results. It keeps the saved rows and ends as
PARTIALwith reasonTIME_LIMIT. The default timeout of 300 seconds is enough for the maximum input - If Kick fails again and again, the run keeps saved rows and ends with reason
SOURCE_ERROR isLiveandviewerCountare live atfetchedAtand change all the time- No follower counts: the official Kick Public API does not give them
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"status": "complete",
"input": "Just Chatting",
"matchedBy": "category",
"rank": 1,
"channelSlug": "absi",
"userId": 27894320,
"displayName": "Absi",
"isLive": true,
"title": "مين ضيف اليوم",
"viewerCount": 18942,
"category": "Just Chatting",
"categoryId": 15,
"language": "ar",
"isMature": false,
"startedAt": "2026-10-22T08:59:29.000Z",
"thumbnailUrl": "https://images.kick.com/video_thumbnails/IUNVIedvenl6/4RMUEbHHHebd/480.webp",
"description": null,
"activeSubscribers": 1593,
"profilePictureUrl": "https://files.kick.com/images/user/27894320/profile_image/conversion/951102c4-68da-415c-a344-d6dbaec3fb05-medium.webp",
"bannerPictureUrl": null,
"url": "https://kick.com/absi",
"source": "kick-public-api",
"fetchedAt": "2026-10-22T10:31:40.720Z",
"message": null
}Data fields (24)
| Field | Type | Meaning |
|---|---|---|
status | string | complete = all fields found; partial = saved, but Kick did not return some fields (see message); not_found = no Kick channel or category with this name (small empty-result fee); invalid_input = not a Kick channel name (small empty-result fee); api_key_required = free notice when the Client ID or Secret is missing. |
input | string | Your channels or categories entry as typed. |
matchedBy | string | channel = from your channels list; category = a live stream from one of your categories. |
rank | integer | 1-based position among the category's live streams by viewers (category rows only). |
channelSlug | string | Channel name as in kick.com/<channel>. |
userId | integer | Kick broadcaster user id; stable even when the channel name changes. |
displayName | string | Channel display name. |
isLive | boolean | True when the channel is live right now. |
title | string | Live stream title; null when offline. |
viewerCount | integer | Current viewers; null when offline (never a made-up 0). |
category | string | Category of the live stream, e.g. Just Chatting; null when offline. |
categoryId | integer | Kick category id of the live stream. |
language | string | Stream language as Kick reports it; null when offline. |
isMature | boolean | True when the stream is marked for mature audiences. |
startedAt | string | When the live stream started (ISO 8601, UTC). |
thumbnailUrl | string | Live stream thumbnail image. |
description | string | Channel description. E-mail addresses are replaced with [email removed]. |
activeSubscribers | integer | Active paid subscribers of the channel as reported by Kick. |
profilePictureUrl | string | Channel avatar. |
bannerPictureUrl | string | Channel banner image. |
url | string | https://kick.com/<channel>. |
source | string | Always kick-public-api. |
fetchedAt | string | When this row was fetched (ISO 8601, UTC). |
message | string | Why a row is partial, not_found, invalid_input or api_key_required; null otherwise. |
Input settings (5)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Kick Client ID | clientId | string | |
| Kick Client Secret | clientSecret | string | |
| Channels | channels | array | ["xqc"] |
| Categories | categories | array | |
| Max live streams per category | maxItems | integer | 50 |