YouTube Live Chat Scraper
Pricing
from $0.80 / 1,000 chats
YouTube Live Chat Scraper
Extract YouTube live chat messages, Super Chats, Super Stickers, and membership events from live or replayed streams. Export by video URL or channel.
Pricing
from $0.80 / 1,000 chats
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Live Chat Scraper
Scrape YouTube live chat — messages, Super Chats, Super Stickers, membership events, and moderation actions — from a video that's airing right now or from the chat replay of a stream that already ended. Point it at one video, a list of videos, or an entire channel.
| Pulls every chat event type YouTube exposes — normal messages, Super Chats with real dollar amounts, Super Stickers, membership joins/renewals/gifts, and moderation/system notices — with replay-position timestamps, author badges, and emoji preserved as structured runs. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this Actor.
YouTube Live Chat Scraper (parsebird/youtube-live-chat-scraper) — Scrapes YouTube live chat, Super Chats, Super Stickers, and membership events from a video's live chat or chat replay. Input: {"videoRefs": ["https://www.youtube.com/watch?v=VIDEO_ID"], "mode": "replay", "maxMessagesPerVideo": 5000}. Key inputs: videoRefs (array of watch URLs / youtu.be URLs / bare 11-char video IDs), channelRefs (array of @handle / channel URL / UC... ID — the Actor finds the streams), mode ("replay" | "live", default "replay"), channelDiscoveryMode ("current_live_then_replays" | "latest_replays_only"), maxVideosPerChannel (integer, default 5), lookbackDays (integer, default 30, 0 = no limit), maxMessagesPerVideo (integer, default 5000, 0 = entire replay), maxTotalItems (integer, default 0 = no limit), maxTimePerVideoSecs (integer, default 600), includeNormalMessages/includeSuperChats/includeMembershipEvents/includeModerationEvents (booleans, default true). Output per chat event: stream context (videoId, videoUrl, videoTitle, channelId, channelTitle, streamStatus, streamStartedAt, streamEndedAt), event fields (eventType: message/super_chat/super_sticker/membership/moderation/system/error, messageId, seq, publishedAt, videoOffsetMsec, videoOffsetText), author fields (authorChannelId, authorName, authorHandle, authorBadges, isOwner/isModerator/isMember/isVerified), content (messageText, messageParts), monetization (superChatAmount, superChatAmountValue, superChatCurrency, membershipLevel). API: POST https://api.apify.com/v2/acts/parsebird~youtube-live-chat-scraper/runs?token=YOUR_TOKEN. Get token: https://console.apify.com/account#/integrations
What does YouTube Live Chat Scraper do?
YouTube Live Chat Scraper turns a stream's live chat into structured, spreadsheet-ready data. Give it a video or a channel and it:
- 💬 Captures every chat event type — normal messages, Super Chats, Super Stickers, membership joins/renewals/gifted memberships, and moderation/system notices
- 🔴 Works on live chat (a stream airing right now) or chat replay (an ended stream), auto-detecting the actual video status regardless of which mode you pick
- 📺 Accepts watch URLs,
youtu.beshort links,/live/URLs, or bare 11-character video IDs — or skip video URLs entirely and hand it a channel@handle - 🔎 Discovers streams from a channel automatically — grab whatever's currently live, then fall back to recent replays, or pull only recent replays
- 💰 Parses Super Chat and Super Sticker amounts into a real numeric value and currency code, so you can
SUM()revenue directly in Sheets or Excel - ⏱️ Preserves replay position —
videoOffsetMsec/videoOffsetTexttell you exactly where in the recording each message appeared - 🎭 Keeps emoji and custom channel emotes as structured runs with their image URLs, instead of flattening everything to plain text
- 🏷️ Flags owner, moderator, member, and verified authors as filterable booleans, not just badge arrays you can't filter in Sheets
- 🛑 Hard spending controls — per-video message caps, a whole-run item ceiling, and a per-video time limit so one stuck video can't run away with your budget
- 🚫 No YouTube Data API key, no OAuth login, no browser — reads the same public data youtube.com itself loads
- 🌐 Routes requests through Apify Residential Proxy by default, since YouTube serves an incomplete page to some datacenter IP ranges
- ⚡ Runs on lightweight infrastructure (128–512 MB) — fast and cost-efficient
YouTube Live Chat Scraper reads the same public live-chat continuation feed the youtube.com web player uses, so message counts, Super Chat amounts, and badges match exactly what viewers saw live.
What data can you extract from YouTube live chat?
| Field | Description |
|---|---|
eventType | message, super_chat, super_sticker, membership, moderation, system, or error |
videoId / videoTitle / channelTitle | Which stream and channel the event belongs to |
streamStatus | live, replay, ended, or unknown |
publishedAt | Wall-clock time the message was posted |
videoOffsetMsec / videoOffsetText | How far into the recording the message appeared (replay only), e.g. "1:23:45" |
authorName / authorHandle / authorChannelId | Who posted it |
authorBadges / isOwner / isModerator / isMember / isVerified | Author badges as a filterable array and individual booleans |
messageText / messageParts | Plain text and structured runs (text + emoji, with emote image URLs) |
superChatAmount / superChatAmountValue / superChatCurrency | Super Chat/Sticker amount as shown, as a number, and its currency code |
membershipLevel | Membership tier, when YouTube exposes it |
moderationAction | e.g. DELETED, AUTHOR_BANNED |
That's 12 of 40+ output fields. See the output example below and the dataset views for the complete list — including channel-discovery metadata (discoverySource, channelRef, discoveredAt) so a multi-channel export is traceable back to its source.
How to scrape YouTube live chat with YouTube Live Chat Scraper
- Open YouTube Live Chat Scraper on Apify
- Paste one or more Video URLs or IDs (watch URL,
youtu.belink, or bare video ID) — or add a Channel@handleand let the Actor find the streams - Choose Mode:
replayfor a stream that already ended,livefor one airing right now - If you used a channel, pick a Channel discovery mode — current live + recent replays, or latest replays only
- Set Max messages per video and Max total items to control cost, or leave
maxMessagesPerVideoat0to pull an entire replay - Toggle Event filters off for any event type you don't need — a Super-Chats-only export skips the (usually much larger) volume of normal messages
- Click Start and wait for the run to finish
- Export your data as JSON, CSV, or Excel from the dataset tab, or pull it via the Apify API
Quick start — a single replay:
{"videoRefs": ["https://www.youtube.com/watch?v=BZ_UzbpMjMg"],"mode": "replay","maxMessagesPerVideo": 5000}
Super Chats only — cheapest monetization export:
Turn off normal messages and you're charged only for the paid events, not the thousands of ordinary messages scraped alongside them.
{"videoRefs": ["https://www.youtube.com/watch?v=BZ_UzbpMjMg"],"mode": "replay","includeNormalMessages": false,"includeSuperChats": true,"includeMembershipEvents": true,"maxMessagesPerVideo": 0}
Track a whole channel, with a hard spend ceiling:
{"channelRefs": ["@LofiGirl"],"channelDiscoveryMode": "current_live_then_replays","maxVideosPerChannel": 5,"lookbackDays": 30,"mode": "replay","maxTotalItems": 5000}
💡 Match the discovery mode to the channel: current_live_then_replays suits channels that are often live; use latest_replays_only for channels whose streams have ended.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
videoRefs | array | No* | [] | Watch URLs, short URLs, or bare 11-character video IDs |
channelRefs | array | No* | [] | Channel @handle, channel URL, or UC… ID — the Actor finds the streams |
mode | string | No | replay | replay (ended streams) or live (airing now) |
channelDiscoveryMode | string | No | current_live_then_replays | current_live_then_replays or latest_replays_only |
maxVideosPerChannel | integer | No | 5 | Max streams to pull per channel in channelRefs |
lookbackDays | integer | No | 30 | Only consider channel streams from the last N days. 0 = no limit |
maxMessagesPerVideo | integer | No | 5000 | Per-video cap on chat events. 0 = the entire chat replay |
maxTotalItems | integer | No | 0 | Hard ceiling for the whole run. 0 = no limit |
maxTimePerVideoSecs | integer | No | 600 | Give up on one video after this long |
includeNormalMessages | boolean | No | true | Turn off for a monetization-only export |
includeSuperChats | boolean | No | true | Super Chats and Super Stickers, with amounts |
includeMembershipEvents | boolean | No | true | Joins, renewals, and gifted memberships |
includeModerationEvents | boolean | No | true | Deletions, bans, auto-mod, and system notices |
*At least one of videoRefs or channelRefs is required.
Output example
One dataset row per chat event — flat and spreadsheet-safe. A real Super Chat captured from a replay run:
{"videoId": "BZ_UzbpMjMg","videoTitle": "Crypto Cypher Live Stream...3/9/26...Bear Market wk 23...Weekend Trap...","channelTitle": "Crypto Cypher","streamStatus": "replay","eventType": "super_chat","seq": 554,"publishedAt": "2026-03-10T00:16:17.553Z","videoOffsetMsec": 7819483,"videoOffsetText": "2:10:19","authorName": "@matiss6895","authorHandle": "@matiss6895","authorBadges": ["MEMBER"],"isMember": true,"messageText": "d bloc!!!! when florida meet up?","superChatAmount": "$5.00","superChatAmountValue": 5,"superChatCurrency": "USD","discoverySource": "direct_videoRef"}
videoOffsetText: "2:10:19" means you can jump straight to that timestamp in the video to see the moment it was sent. superChatAmountValue: 5 is a number, not a string — sum a column of these directly in Sheets or Excel.
Dataset views
The dataset ships with three ready-made table views, switchable in the Apify Console or via the API:
- Chat Events — the everyday view: who said what, when, and how far into the stream
- Super Chats & Memberships — a monetization view with numeric amounts, currencies, and membership tiers
- All Fields — every column, including channel-discovery metadata
Use cases
- Community management — Pull the full chat log of a stream for moderation review or highlight-clipping
- Revenue tracking — Sum Super Chat and Super Sticker income across one stream or a whole channel's recent VODs
- Sentiment & audience research — Analyze what viewers said, when, and how membership status correlates with engagement
- Membership analytics — Track new-member and gifted-membership events across streams
- Archival — Preserve chat history before a stream's replay chat becomes unavailable
- Highlight generation — Match Super Chat spikes and message bursts to
videoOffsetMsecto find a stream's biggest moments - Live dashboards — Poll a currently-live video's chat on a schedule to feed a live overlay or alert system
How much does it cost to scrape YouTube live chat?
YouTube Live Chat Scraper uses pay-per-event pricing — you're charged per chat event returned to the dataset, not for compute time.
| Event | Price per event | Price per 1,000 |
|---|---|---|
chat-event (Free plan) | $0.0009 | $0.90 |
chat-event (Bronze/Silver/Gold plans) | $0.0008 | $0.80 |
An event fires once per row pushed to the dataset — messages, Super Chats, Super Stickers, memberships, moderation, and system events. error rows and messages you've filtered out with the include... toggles are never charged.
Cost examples (paid plans):
| Scenario | Events | Cost |
|---|---|---|
| Super-Chats-only export of one stream | 200 | $0.16 |
| Default per-video cap (5,000 messages) | 5,000 | $4.00 |
| Full replay of a long stream | 20,000 | $16.00 |
The Apify Free plan includes $5/month in platform credits — enough for roughly 5,500 chat events at the free-tier rate, no credit card required.
The Actor runs through Apify Residential Proxy by default for reliable results, which is billed separately from PPE against your Apify plan's proxy allowance. You can switch to a different proxy group or turn it off in the Proxy input section, though results may be incomplete without it.
Integrations and API access
Use YouTube Live Chat Scraper programmatically via the Apify API, the JavaScript client, or the Python client.
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("parsebird/youtube-live-chat-scraper").call(run_input={"videoRefs": ["https://www.youtube.com/watch?v=BZ_UzbpMjMg"],"mode": "replay","maxMessagesPerVideo": 5000,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["eventType"], item.get("authorName"), item.get("messageText"))
JavaScript:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_API_TOKEN" });const run = await client.actor("parsebird/youtube-live-chat-scraper").call({videoRefs: ["https://www.youtube.com/watch?v=BZ_UzbpMjMg"],mode: "replay",maxMessagesPerVideo: 5000,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((item) => console.log(item.eventType, item.authorName, item.messageText));
You can also connect YouTube Live Chat Scraper to Google Sheets, Slack, Zapier, Make, and other platforms via Apify integrations. Schedule runs with Apify Schedules to poll a live channel's chat repeatedly, or connect it to any LLM agent through the Apify MCP server.
Is it legal to scrape YouTube live chat?
Scraping publicly available data is generally considered legal, based on the 2022 US appeals court ruling in hiQ Labs v. LinkedIn. This Actor only reads the same public live-chat feed the youtube.com web player itself loads — it does not log in, bypass authentication, or access private chats or members-only content you aren't already entitled to see.
Always review YouTube's Terms of Service and comply with applicable laws in your jurisdiction. For guidance, see Apify's guide to web scraping legality.
Other YouTube scrapers by ParseBird
- YouTube Search Scraper — Scrape YouTube search results for videos, channels, playlists, and shorts
- YouTube Channel Search Scraper — Find YouTube channels by keyword, niche, or product and get full channel profiles
- YouTube Thumbnail Downloader — Download YouTube video thumbnails in bulk, with automatic quality fallback
FAQ
Does this work on a stream that's live right now?
Yes. Set mode to live, or just point channelRefs at a channel — with channelDiscoveryMode: "current_live_then_replays" the Actor detects the channel's currently-live video automatically. The Actor always confirms a video's real status from YouTube before polling, so it adapts even if mode doesn't match reality.
What happens if a video has no live chat replay?
The Actor pushes a single error row explaining why (e.g. chat replay wasn't enabled, or it's not a livestream at all) and moves on to the next video. error rows are never charged.
How is a Super Chat's dollar amount parsed?
superChatAmountValue is a numeric value derived from the amount YouTube displays (e.g. "$5.00" → 5), with superChatCurrency holding the ISO-style currency code. Sum superChatAmountValue directly — don't parse superChatAmount yourself.
Can I export just monetization events?
Yes — turn off includeNormalMessages and leave includeSuperChats / includeMembershipEvents on. You're then charged only for the paid and membership events, which are typically a small fraction of total chat volume.
Why are some fields null?
system rows are YouTube's own notices (e.g. "Live chat replay is on") — they have no author, so author fields are legitimately empty. Similarly, discoverySource, channelRef, discoveredAt, isDiscoveredLive, and isDiscoveredUpcoming are only populated for videos found via channelRefs; for videos passed directly in videoRefs, discoverySource is direct_videoRef and those four are null. That's expected, not missing data.
Why does this use Apify Proxy? I thought it didn't need a browser or API key.
It doesn't — but YouTube serves a stripped-down watch page missing the video title, channel info, and stream timestamps to some datacenter IP ranges. Residential proxy avoids that, so videoTitle, channelId, and related fields come back populated. Chat messages themselves still scrape fine without it.
Does this need a YouTube Data API key? No. It reads the same public live-chat continuation feed the youtube.com web player loads for any viewer — no API key, no OAuth login, and no Data API quota.
Can I schedule recurring runs? Yes. Use Apify's scheduling feature to poll a channel's live chat on an interval, or to pull replay chat from new streams as they're published.
Can I use this with my AI assistant or MCP server? Yes. Copy the AI assistant block from the top of this page into ChatGPT, Claude, or Cursor, or connect it to any agent framework through the Apify MCP server.
Something isn't working. How do I get help? Open an issue in the Issues tab on the Actor page. Include your input configuration and any error messages.