Kick Chat Replay Scraper - VOD & Clip Chat Logs
Pricing
from $0.90 / 1,000 chat messages
Kick Chat Replay Scraper - VOD & Clip Chat Logs
Scrape the full chat replay of Kick.com VODs and clips by URL: every message with username, badges, subscriber months, emotes, replies and video timestamp. Pick a time range or cap the messages per video. No login needed.
Pricing
from $0.90 / 1,000 chat messages
Rating
0.0
(0)
Developer
Harish Garg
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Download the full chat replay of any Kick.com VOD or clip. Paste a video URL, and get every chat message that viewers sent during that part of the stream, with the username, badges, subscriber months, emotes, replies and the exact video timestamp of each message.
Kick videos have no comment section. The live chat is where viewers react, so the chat replay is the "comments" of a Kick video. This scraper gets all of it, in time order, as clean structured data.
Export the Kick chat log as JSON, CSV, Excel or HTML, or read it from the API. No Kick account, no login and no coding needed. Run it in Apify Console, call it from your code, schedule it, or let an AI assistant such as Claude or ChatGPT run it for you.
What does Kick Chat Replay Scraper do?
- Full Kick chat logs — every message of a VOD, from the first to the last, including streams with more than 100,000 messages.
- Clip chat — the chat that was on screen during a Kick clip.
- Video timestamps — the position of each message in the video, in seconds and as
H:MM:SS. - Chatter details — username, user ID, name color, badges (Subscriber, Sub Gifter, Moderator and others) and subscription months.
- Emotes — the emotes in each message, and a clean text version of the message with emote names.
- Replies — for a reply, the original message and its author.
- Time ranges — get only one part of a long stream, for example from 1:00:00 to 1:30:00.
- Many videos in one run — add as many VOD and clip URLs as you need.
Why scrape Kick chat replays?
- Highlight detection — find chat spikes with
offsetSecondsand jump to the best moments of a VOD. - Audience research — see what viewers talk about, which moments get reactions and which emotes they use.
- Sentiment and moderation analysis — send the full chat to a spreadsheet, a database or an AI model.
- Clip context — get exactly the chat that viewers saw during a clip.
- Creator and brand analytics — measure chat activity during sponsored segments, and compare streams over time.
- Community analysis — find the most active chatters, subscribers and gifters of a channel.
- Archives and research datasets — keep a permanent copy of the chat before the VOD is deleted.
Input
Fill in the Input tab, or send the same fields as JSON through the API.
| Field | Type | Default | Description |
|---|---|---|---|
videoUrls | string[] | — | Required. Kick VOD URLs (https://kick.com/<channel>/videos/<id>, where <id> is the VOD ID, the livestream ID or the livestream slug) or clip URLs (https://kick.com/<channel>/clips/<id>). |
maxMessagesPerVideo | integer | 0 | The maximum number of messages for each video, counted from the start of the time range. 0 gives all messages. |
startOffsetSeconds | integer | — | Start the chat at this point of the video, in seconds. For example, 3600 starts at 1:00:00. |
endOffsetSeconds | integer | — | Stop the chat at this point of the video, in seconds. Must be greater than the start offset. |
The start and end offsets apply to every video in the run. Duplicate URLs are scraped only once, also when two URLs name the same VOD in different forms. A livestream ID or slug works only for VODs of about the last 30 days, which Kick lists on the channel. Channel pages are not supported: open a VOD or a clip and copy its URL.
Input examples
The full chat of a VOD
{"videoUrls": ["https://kick.com/xqc/videos/e8885172-7587-4fa8-80a2-ec2f140159ba"]}
The chat of a clip
{"videoUrls": ["https://kick.com/xqc/clips/clip_01M4HN69RXAY9BJQXC35EQ3VA2"]}
Minutes 10 to 20 of a VOD, at most 5,000 messages
{"videoUrls": ["https://kick.com/xqc/videos/e8885172-7587-4fa8-80a2-ec2f140159ba"],"startOffsetSeconds": 600,"endOffsetSeconds": 1200,"maxMessagesPerVideo": 5000}
Output
You get one row for each chat message, in time order for each video. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. This is an example of a reply:
{"videoType": "vod","videoId": "e8885172-7587-4fa8-80a2-ec2f140159ba","videoUrl": "https://kick.com/xqc/videos/e8885172-7587-4fa8-80a2-ec2f140159ba","videoTitle": "🦖LIVE🦖LOCK IN🦖GTA V🦖NOPIXEL V🦖BIG DRAMA🦖MEGA DAY🦖HEIST DAY🦖","channel": "xqc","messageId": "52a2edfc-c79b-444e-95aa-86eb25760208","messageType": "reply","content": "eheheheheeeeEee CatSmile yeee [emote:5747912:collectiblesuwu]","contentText": "eheheheheeeeEee CatSmile yeee collectiblesuwu","emotes": [{ "id": "5747912", "name": "collectiblesuwu" }],"createdAt": "2026-10-09T18:52:37Z","offsetSeconds": 600,"videoTimestamp": "0:10:00","userId": 8816216,"username": "QunKe","userSlug": "qunke","userColor": "#FFC466","badges": ["Sub Gifter"],"subscriberMonths": null,"replyTo": {"messageId": "b496df58-0467-4d8f-b793-da9521b60f65","content": "agahi Hope you're well Qun!","username": "Flabbz","userId": 1689452},"scrapedAt": "2026-10-10T05:15:59.337289+00:00"}
Output fields
| Field | Description |
|---|---|
videoType | vod or clip |
videoId, videoUrl, videoTitle, channel | The video of the message |
messageId | The Kick ID of the message |
messageType | message or reply |
content | The message text, with Kick emote codes |
contentText | The message text, with emote names in place of the emote codes |
emotes | The emotes in the message (ID and name) |
createdAt | When the message was sent (UTC) |
offsetSeconds, videoTimestamp | The position of the message in the video (for a clip, from the start of the clip) |
userId, username, userSlug, userColor | The chatter |
badges, subscriberMonths | The chat badges of the chatter, and the length of the subscription in months |
replyTo | For a reply: the original message and its author. null for other messages |
scrapedAt | When the message was scraped (UTC) |
Run summary
Every run also saves a SUMMARY record in the key-value store (Storage tab), with one entry per video:
videoUrl,videoType,videoId,videoTitle,channel,channelId— the videochatFromandchatTo— the time range of the chat (UTC)messagesSaved— the number of messages savedstoppedAtLimit—truewhen Max messages per video stopped the videofailedTimeRanges— the parts of the video that could not be read, if anyerror— why a video gave no messages, for exampleVideo not found.
How to use Kick Chat Replay Scraper
You can use the scraper in three ways: in Apify Console, through the Apify API, or from an AI assistant. All three give the same data.
1. Scrape a Kick chat replay in Apify Console (no code)
- Click Try for free and sign in to Apify. A free account is enough.
- In Video URLs, add one or more Kick VOD or clip URLs, one per line. For example:
https://kick.com/xqc/clips/clip_01M4HN69RXAY9BJQXC35EQ3VA2 - Optional: set Max messages per video.
- Optional: set a Start offset and an End offset in seconds to get only one part of the video.
- Click Start.
- Open the Output tab. View the chat as a table, or download it as JSON, CSV, Excel or HTML.
2. Get Kick chat data with the Apify API
Run the scraper and read the results from any programming language with the Apify API. Get your API token in Apify Console under Settings → API & Integrations, and replace <YOUR_API_TOKEN> in the examples below.
HTTP (cURL) — run the scraper and get the chat of a clip in one call:
curl -X POST "https://api.apify.com/v2/acts/hgservices~kick-chat-replay-scraper/run-sync-get-dataset-items?format=json" \-H "Authorization: Bearer <YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{ "videoUrls": ["https://kick.com/xqc/clips/clip_01M4HN69RXAY9BJQXC35EQ3VA2"] }'
Change format=json to format=csv or format=xlsx to get a spreadsheet.
A synchronous call waits at most 5 minutes, and a full VOD can take longer. For a VOD, start the run, and read the dataset when the run finishes:
# Start the run. The response contains data.id (the run ID) and data.defaultDatasetId.curl -X POST "https://api.apify.com/v2/acts/hgservices~kick-chat-replay-scraper/runs" \-H "Authorization: Bearer <YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{ "videoUrls": ["https://kick.com/xqc/videos/e8885172-7587-4fa8-80a2-ec2f140159ba"] }'# Check the run. Wait until data.status is SUCCEEDED.curl "https://api.apify.com/v2/actor-runs/<RUN_ID>" \-H "Authorization: Bearer <YOUR_API_TOKEN>"# Download the chat as CSV.curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv" \-H "Authorization: Bearer <YOUR_API_TOKEN>" -o kick-chat.csv
JavaScript / Node.js (npm install apify-client) — get 30 minutes of a VOD chat:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });// call() starts the run and waits until it finishes.const run = await client.actor('hgservices/kick-chat-replay-scraper').call({videoUrls: ['https://kick.com/xqc/videos/e8885172-7587-4fa8-80a2-ec2f140159ba'],startOffsetSeconds: 3600,endOffsetSeconds: 5400,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const message of items) {console.log(message.videoTimestamp, message.username, message.contentText);}
Python (pip install apify-client, version 3.0 or later) — find the busiest minutes of a VOD:
from collections import Counterfrom apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")# call() starts the run and waits until it finishes.run = client.actor("hgservices/kick-chat-replay-scraper").call(run_input={"videoUrls": ["https://kick.com/xqc/videos/e8885172-7587-4fa8-80a2-ec2f140159ba"],})if run is None:raise RuntimeError("The run was not found.")# Count the messages in each minute of the stream to find the highlights.per_minute = Counter()for message in client.dataset(run.default_dataset_id).iterate_items():per_minute[message["offsetSeconds"] // 60] += 1for minute, count in per_minute.most_common(5):print(f"Minute {minute}: {count} messages")
3. Use Kick chat data in Claude, ChatGPT and other AI assistants (MCP)
This scraper works as a tool for AI assistants through the Apify MCP server. Your assistant can find the scraper, read its input options, run it, and use the chat in its answer. You sign in to Apify once, and the runs use your Apify account.
Claude (claude.ai or Claude Desktop) — go to Settings → Connectors, add a custom connector, and enter https://mcp.apify.com. Sign in to Apify when Claude asks.
Claude Code
$claude mcp add --transport http apify https://mcp.apify.com
ChatGPT — turn on Developer mode in Settings → Apps & Connectors → Advanced settings. Then create a connector with the MCP server URL https://mcp.apify.com.
Cursor, VS Code and other MCP clients — add the Apify MCP server to your MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=actors,hgservices/kick-chat-replay-scraper"}}}
The tools parameter adds this scraper as a ready-to-use tool. You can also use the MCP configurator to make the configuration for your client.
Then ask in plain language:
Use the Kick Chat Replay Scraper to get the chat of this clip, and summarize how viewers reacted: https://kick.com/xqc/clips/clip_01M4HN69RXAY9BJQXC35EQ3VA2
Get the chat from 1:00:00 to 1:30:00 of this Kick VOD and list the 10 most used emotes: https://kick.com/xqc/videos/e8885172-7587-4fa8-80a2-ec2f140159ba
Which minutes of the first 2 hours of this Kick VOD had the most chat messages? Give me the timestamps.
For the best results with AI assistants, give a time range or a message limit for long VODs. A short run finishes while the assistant waits, and a smaller result fits better in the conversation.
Integrations and scheduling
Connect the scraper to the tools you already use with Apify integrations: Google Sheets, Slack, Zapier, Make, n8n, Airbyte, Keboola and more. Use webhooks to call your own endpoint when a run finishes.
Use Schedules in Apify Console to run the scraper automatically, for example every day on the newest VOD of a channel.
Tips for faster Kick chat scraping
- Use a time range. If you need only one part of a stream, set Start offset and End offset. The run reads only that part.
- Set a message limit for a quick sample. Max messages per video stops each video at that number of messages.
- Expect long runs for busy VODs. A clip or a quiet 2-hour VOD finishes in less than a minute. A busy VOD with about 127,000 messages took 22 to 40 minutes in tests.
- Long runs are safe. If a run is interrupted by the platform, it continues from the last saved part of the video.
- Keep the default memory. The default memory is enough for every run.
FAQ
Do Kick videos have comments? No. Kick VODs and clips have no comment section. The chat replay is the only viewer discussion of a video, and this scraper gets it.
Do I need a Kick account? No. You need only an Apify account. The scraper reads the public chat that every visitor can see in the replay.
How old can a VOD be?
Kick keeps chat history for about one year. Kick usually deletes VODs before that, and the URL of a deleted VOD does not work. A deleted or private video shows Video not found. in the SUMMARY record.
Can I scrape the chat of a stream that is still live? Yes. Use the VOD URL of the live stream. You get the chat from the start of the stream to the time of the run.
Why is a part of a video missing?
If Kick does not answer for a time range, the run log shows a warning, and the SUMMARY record shows the range under failedTimeRanges. Run the scraper again with a start and end offset for that range.
Why did I get no messages?
Some streams have no chat, and some videos are deleted. Check the SUMMARY record and the warnings in the run log.
Can I get the chat of a whole channel? Yes. Copy the VOD URLs from the Videos page of the channel on Kick, and add all of them to Video URLs.
Is it legal to scrape Kick chat? The scraper collects only public chat messages and never signs in. Chat messages contain usernames, which can be personal data. Make sure that your use of the data obeys the GDPR and other laws in your country, and the Kick Terms of Service. If you are not sure, ask a lawyer.
Support and feedback
Did you find a bug, or do you need a field that is not here? Open an issue on the Issues tab. Custom solutions, such as whole-channel chat archives or live chat monitoring, are available on request.
This scraper is not affiliated with or endorsed by Kick.com.