Youtube Live Chat Scraper avatar

Youtube Live Chat Scraper

Pricing

from $0.80 / 1,000 chat events

Go to Apify Store
Youtube Live Chat Scraper

Youtube Live Chat Scraper

YouTube Live Chat Scraper extracts live chat from YouTube live streams and replays. Supports full replay chat (most reliable) and best-effort live polling. Outputs messages with timestamps, authors, badges (owner/mod/member), Super Chats/Stickers, and stream metadata for analytics and AI.

Pricing

from $0.80 / 1,000 chat events

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Extract live chat messages from YouTube streams and replays — messages, Super Chats, membership events, badges, timestamps. Replay-first, export-ready for moderation and analytics.

Provide video URLs or channel handles and get a clean, structured dataset of every chat event. No browser required.

YouTube Live Chat Scraper Banner

What does YouTube Live Chat Scraper do?

YouTube Live Chat Scraper is an Apify Actor that extracts live chat data from YouTube live streams and live replays using HTTP requests — no browser needed. It captures regular messages, Super Chats, Super Stickers, membership events, and moderation actions, then outputs them as a clean, analytics-ready dataset.

Key capabilities

  • Replay chat extraction — Extract the full chat replay from any YouTube live stream with chat replay enabled
  • Live chat capture — Best-effort real-time polling of live chat during active streams
  • Channel discovery — Provide a channel URL or @handle and auto-discover live streams and recent replays
  • Super Chats & Stickers — Capture paid messages with amounts, currencies, and tier colors
  • Membership events — Track member joins and renewals shown in chat
  • Moderation events — Capture message deletions, user bans, and system events
  • Batch processing — Process multiple videos or channels in parallel
  • Normalized schema — Stable output format with consistent event types across all renderers

Use cases

  • Moderation analytics — Audit chat for spam, toxicity patterns, and moderation effectiveness
  • Audience research — Analyze engagement peaks, sentiment, and discussion topics during live events
  • Revenue tracking — Collect Super Chat amounts and donor messages for creator analytics
  • Campaign measurement — Measure audience reaction during sponsored streams or product launches
  • AI/NLP datasets — Build training data for sentiment analysis, topic modeling, or spam classifiers
  • Community monitoring — Track live chat activity across multiple channels automatically

Input

You can provide video URLs/IDs directly, channel URLs/@handles for auto-discovery, or both. At least one of videoRefs or channelRefs is required.

Input example — Replay extraction (direct video)

{
"videoRefs": [
"https://www.youtube.com/watch?v=2VPo6OHrltU"
],
"mode": "replay",
"maxMessagesPerVideo": 5000,
"maxTimePerVideoSecs": 600,
"includeSuperChats": true,
"includeMembershipEvents": true,
"includeModerationEvents": true
}

Input example — Channel discovery

{
"channelRefs": [
"https://www.youtube.com/@TheCypherbyDbloc"
],
"channelDiscoveryMode": "current_live_then_replays",
"maxVideosPerChannel": 5,
"lookbackDays": 30,
"mode": "replay",
"maxMessagesPerVideo": 5000,
"maxTimePerVideoSecs": 600
}

Input parameters

Videos

FieldTypeDefaultDescription
videoRefsstring[][]YouTube watch URLs or 11-char video IDs
modestring"replay"replay or live

Channel Discovery

FieldTypeDefaultDescription
channelRefsstring[][]YouTube channel URLs, @handles, or channel IDs (UC...)
channelDiscoveryModestring"current_live_then_replays"current_live_only, latest_replays_only, or current_live_then_replays
maxVideosPerChannelinteger5Max videos to discover per channel (1–50)
lookbackDaysinteger30Only discover replays from the last N days (0 = no limit)
includeUpcomingLivesbooleanfalseInclude scheduled/upcoming live streams
includeMembersOnlybooleanfalseInclude members-only streams

Extraction limits

FieldTypeDefaultDescription
maxMessagesPerVideointeger5000Max messages per video (1–200,000)
maxTimePerVideoSecsinteger600Time budget per video in seconds

Event filters

FieldTypeDefaultDescription
includeSuperChatsbooleantrueExtract Super Chats and Super Stickers
includeMembershipEventsbooleantrueTrack membership events
includeModerationEventsbooleantrueTrack moderation events

Live mode controls

FieldTypeDefaultDescription
liveCaptureDurationSecsinteger300Total capture duration for live mode
pollIntervalMsinteger2000Poll interval in milliseconds (1000–10000)
stopWhenStreamEndsbooleantrueStop if stream ended is detected

Localization

FieldTypeDefaultDescription
languagestring"en"Localization language code
regionCodestring"US"Localization region code

Advanced settings

FieldTypeDefaultDescription
maxConcurrencyinteger3Parallel video processing (1–10)
useProxybooleanfalseUse Apify residential proxy
proxyCountryCodestring""Proxy exit country
requestTimeoutSecsinteger30HTTP timeout per request
maxRetriesinteger3Retries for 429/5xx errors
minDelayMsinteger0Delay between continuation requests
debugbooleanfalseEnable verbose logging

Output

The actor outputs one dataset row per chat event. Each row contains the message content, author information, event metadata, and discovery provenance.

Event types: message, super_chat, super_sticker, membership, moderation, system, error

Output example (JSON)

{
"videoId": "BZ_UzbpMjMg",
"videoUrl": "https://www.youtube.com/watch?v=BZ_UzbpMjMg",
"eventType": "message",
"messageId": "ChwKGkNNamR6OTJMbEpNREZkSUwxZ0FkaVRRYVpR",
"timestampUsec": 1773103087877500,
"publishedAt": "2026-03-10T00:38:07.877Z",
"authorChannelId": "UC9N4Cb1knbL1DJE1K1S7xnQ",
"authorName": null,
"authorHandle": "@kasparaskriauciunas2433",
"authorPhotoUrl": "https://yt4.ggpht.com/ytc/AIdro_l0N2E6QEsxEQF9oCJnhf1j9wAfU22I374hUQAbatg=s32-c-k-c0x00ffffff-no-rj",
"authorBadges": [],
"messageText": "@ByornVarg what if we dont have enough gas, whats ur thoughts then?",
"messageParts": [
{
"type": "text",
"text": "@ByornVarg what if we dont have enough gas, whats ur thoughts then?"
}
],
"isPinned": null,
"likeCount": null,
"superChatAmount": null,
"superChatCurrency": null,
"superChatColor": null,
"membershipLevel": null,
"moderationAction": null,
"seq": 1,
"regionCode": "US",
"retrievedAt": "2026-03-10T01:24:20.274Z",
"streamStatus": "replay",
"runId": "qg6A5QXp9LNumBfpA",
"discoverySource": "channel_discovery_api",
"channelRef": "https://www.youtube.com/@TheCypherbyDbloc",
"discoveredAt": "2026-03-10T01:24:19.503Z",
"isDiscoveredLive": true,
"isDiscoveredUpcoming": false
}

Output screenshot — All fields table view

YouTube Live Chat Scraper Output — All Fields Table View

Output fields

FieldTypeDescription
retrievedAtstring (ISO)When the event was captured
videoIdstringYouTube video ID
videoUrlstringCanonical watch URL
streamStatusstringlive, replay, ended, or unknown
eventTypestringmessage, super_chat, super_sticker, membership, moderation, system, error
messageIdstringStable message ID
seqintegerSequential index per video (1..N)
publishedAtstring (ISO)Message timestamp (when available)
timestampUsecintegerRaw microsecond timestamp
authorChannelIdstringAuthor's channel ID
authorNamestringDisplay name
authorHandlestring@handle
authorPhotoUrlstringAvatar URL
authorBadgesstring[]e.g., ["OWNER", "MODERATOR", "MEMBER"]
messageTextstringChat message text
messagePartsobject[]Structured runs (text + emojis)
isPinnedbooleanWhether message is pinned
likeCountintegerLike count (rare)
superChatAmountstringe.g., "$5.00"
superChatCurrencystringe.g., "USD"
superChatColorstringUI tier color
membershipLevelstringe.g., "Silver Member"
moderationActionstringe.g., "MESSAGE_DELETED"
regionCodestringRegion used for request
runIdstringApify run ID
discoverySourcestringdirect_videoRef, channel_discovery_api, or channel_discovery_html
channelRefstringChannel input that produced this video
discoveredAtstring (ISO)When the video was discovered
isDiscoveredLivebooleanWhether video was live when discovered
isDiscoveredUpcomingbooleanWhether video was upcoming when discovered

Run summary

The actor writes a RUN_SUMMARY.json to the key-value store with per-video totals, errors, and channel discovery results.

How it works

  1. Channel discovery (if channelRefs provided) — Resolves channel handles/URLs to channel IDs, discovers live streams and replays using YouTube Data API with HTML fallback, and applies discovery filters
  2. Token extraction — Fetches YouTube watch page HTML and extracts innertube API key, context, and chat continuation token
  3. Chat pagination — Paginates chat events using continuation tokens via the youtubei API (replay) or polls live chat (live mode)
  4. Event normalization — Maps YouTube renderer types into stable event types (message, super_chat, etc.)
  5. Output — Pushes clean dataset rows and writes RUN_SUMMARY.json

Performance

  • Replay mode — 5,000 messages typically in 1–5 minutes
  • Live mode — Near real-time at 1–10 seconds latency
  • Channel discovery — Adds ~2–5 seconds per channel
  • Concurrency — Up to 10 videos processed in parallel
  • HTTP-only — No browser overhead

Limitations

  • Chat replay must be enabled on the video
  • Members-only chat behind authentication is best-effort
  • Live mode is best-effort polling (not websocket)
  • Age-gated or restricted content may not be accessible
  • Channel discovery depends on YouTube Data API quota and/or streams tab availability

Pricing

This actor uses a pay-per-event pricing model. You are charged for each chat event (dataset row) extracted.

EventDescription
chat-event1 event per dataset row