The chat on a six-hour Twitch VOD is the most honest live audience you'll ever measure. KEKW spam tells you exactly when something landed. PogChamp clusters mark the hype moments. A wall of OMEGALUL at minute 47 is your highlight reel pointing itself out — if you can get the data into a spreadsheet before Twitch deletes it. Non-affiliate VODs only retain chat for 14 days. Affiliate and partner VODs hang on a little longer, but not forever. This guide walks you through using ExportComments' Twitch chat exporter to pull every message from any VOD into Excel, CSV, or JSON, with VOD-second timestamps so you can jump straight back to the moment.

Why export Twitch chat

Twitch VOD chat is unusual on two fronts. First, every message carries a timestamp in seconds-from-VOD-start, which means the export doubles as a navigable index into the video — the spreadsheet tells you where to scrub. Second, the badges and emote columns turn casual viewer chatter into surprisingly useful audience signal: subscriber length, VIP status, partner badges, name color, the exact emote codes used. Once a VOD is in a spreadsheet:

  • Highlight-reel curation — sort by emote density per minute (PogChamp, KEKW, OMEGALUL, Pog bursts), pick the top spikes, then use the VOD timestamp to jump straight to the moment in the player. AdmiralBahroo's editors do a version of this.
  • Mod-log audit — pull the chat plus the mod actions visible in the channel and you can replay how a moderation incident actually unfolded second by second.
  • Sub-only retention — filter is_subscriber=Y and you isolate the audience that's already paying. Their chat patterns differ noticeably from drive-by viewers.
  • Bits leaderboard — sort by the bits column to see the top supporters of the stream and which moments triggered them to cheer.
  • Sponsored-segment sentiment — take the 60-second window around each sponsor read, slice the chat by timestamp, and you've got a real measure of how the audience reacted instead of relying on engagement-rate vanity metrics.
  • VOD-retention triage — the 14-day clock on non-affiliate chat means "export later" usually means "export never." Run the job within the window or accept losing it.

How to export — step by step

Step 1: Grab the Twitch VOD URL

Open the VOD on twitch.tv — the URL looks like https://www.twitch.tv/videos/123456789. Live streams aren't VODs; you need the recorded video, not the live channel page. If you want a specific clip rather than a full VOD, the clip URL works too.

Step 2: Paste the URL into the exporter

Head to the Twitch exporter and drop the VOD URL into the input field. If you want to pull a streamer's last month of broadcasts in one batch, switch to bulk mode and paste one VOD URL per line. Bulk runs return one file per VOD, packaged together in a single ZIP at the end of the job, so each broadcast stays cleanly separated for downstream analysis.

Step 3: Pick a format

Choose Excel (.xlsx), CSV, or JSON. Excel is the right pick if you want to immediately pivot by minute and chart emote density. CSV is the safest pick for BI imports. JSON is the right pick if you're piping into a notebook to compute emote-cluster spikes programmatically.

Step 4: Start the export

Click Export. The job runs server-side and pulls the entire VOD chat replay. Long broadcasts with hundreds of thousands of chat lines take a few minutes; you can close the tab and the file lands in your dashboard plus your inbox when it's ready. Mind the 14-day retention window for non-affiliate VODs.

Step 5: Open the file

Open the .xlsx in Excel, Numbers, or Google Sheets and you're ready to filter, pivot, and chart. Each row is one chat message, with the columns described in the next section.

Inside the export — what fields you get

Each row is one Twitch chat message. You'll find columns for:

  • username — the chatter's login handle.
  • display_name — the case-styled display name (e.g., AdmiralBahroo vs admiralbahroo).
  • message — the chat message body, with emote codes inline.
  • timestamp — seconds offset from the VOD start, so you can jump straight to the moment in the player.
  • posted_at — the absolute UTC timestamp.
  • badges — the badges visible next to the chatter (subscriber/N where N is months, mod, vip, partner, broadcaster).
  • emotes — the emote codes used in the message (e.g., KEKW, OMEGALUL, PogChamp).
  • is_subscriber — Y if the chatter is a current subscriber.
  • sub_tier — the subscription tier (1, 2, or 3) if applicable.
  • is_moderator — Y if the chatter is a channel moderator.
  • is_vip — Y if the chatter has the channel VIP badge.
  • is_partner — Y if the chatter is a Twitch partner themselves.
  • bits — the cheered amount on this message, blank if no cheer.
  • color — the chatter's chosen name color in chat.

Common workflows

  • Highlight-reel curation — bucket the timestamp column into one-minute windows, count emote occurrences per bucket, sort descending, and the top rows are your hype-moment candidates. Use the VOD timestamp to jump straight to each moment in the player. The IRL category drama in 2022 is a textbook case — the chat heatmap told a different story than the broadcast did.
  • Mod-log audit — combine the chat export with the badges column and you can reconstruct who chatted, who moderated, and when, second by second. Useful after any incident the channel needs to review or report on.
  • Sub-only retention — filter is_subscriber=Y and group by username. Subscribers are your repeat audience; their chat behavior is the truer signal for stream-format decisions than overall chat volume.
  • Bits leaderboard — sort by bits descending to find the highest-cheering moments and the top supporters. Cross-reference the timestamp with the VOD to figure out what triggered the cheer.
  • Sponsored-segment sentiment — for each sponsor read, take the 60-second window around the read using the timestamp column, slice the chat, and grade reactions by emote (W/L spam, KEKW for irony, copium for "please buy from the sponsor"). Far more honest than CTR alone.
  • Emote-density heatmap — what AdmiralBahroo's edit pipeline does in practice: rolling-window counts of high-arousal emotes (PogChamp, KEKW, OMEGALUL, Pog) plotted across the VOD timeline. Spikes are clip-worthy by definition.

Plan limits and API access

The Free tier returns up to 100 messages per export, enough to evaluate the format on a short clip. Personal scales to 5,000 results per export, Premium to 50,000, and Business to 250,000 — enough to capture the chat on a multi-hour broadcast in one job. If you'd rather pull VODs on a schedule or trigger exports from your own pipeline (recommended given the 14-day retention window for non-affiliates), the REST API and webhooks handle it. See pricing for the full breakdown and docs.exportcomments.com for endpoints and authentication.

FAQ

  • How long does Twitch keep VOD chat available?
    Non-affiliate VODs retain chat for 14 days. Affiliate and partner VODs hang on longer, but Twitch can prune at any time. Treat the export as time-sensitive and run it within the window — there's no recovery once it's gone.
  • What does the timestamp column actually mean?
    It's the seconds offset from the start of the VOD, not a wall-clock time. That's why it's so useful: append the value to the VOD URL as ?t=Ns and you jump straight to the moment in the player.
  • Can I export the chat from a clip rather than a full VOD?
    Yes. Clip URLs work too. The export contains only the messages from the clipped window, but the column structure is identical.
  • Does it work for live streams?
    The exporter is built for VOD chat replay, not live ingestion. Wait until the broadcast ends and the VOD is up, then run the job. The 14-day retention clock starts as soon as the VOD is published.
  • How do I find the hype moments without watching the full VOD?
    Pivot the timestamp column into one-minute buckets and count emote density per bucket. Spikes in PogChamp, KEKW, OMEGALUL, and Pog are reliable hype markers. Sort descending and the top buckets are your highlight candidates.
  • Will subscriber length come through?
    Yes — the badges column includes the subscriber-N badge where N is the number of months subscribed, so you can rank long-term loyalty alongside current is_subscriber status.