Scrape YouTube comments into structured rows
A YouTube comment section is one of the few places where an audience says what it thinks without being asked. It is also built for scrolling rather than reading: there is no way to sort it your way, no way to filter it, and no way to compare one video against another. This service turns it into a table - one row per comment, with the author, their channel id, the comment text, the like count, the reply count and a flag for whether the row is a reply, exported as CSV, JSON or Excel.
Driving it is deliberately plain. Paste video ids or full watch URLs, one per line, or upload a CSV, TXT or XLSX and the first column is read as your list. A limit applies per query, so a single job can take the first hundred comments from each of many videos, or take a whole comment section when you set it to zero. The sort is yours - Top or Newest - and replies are a separate toggle that is off unless you ask for them. The service reads YouTube's own JSON interface rather than parsing page HTML, so a layout change on the site does not quietly break your export.
Two things about the data are worth knowing before you build on it. The published column is not a date: it carries the relative text YouTube itself displays, at whatever unit fits how old the comment is - "1 day ago" on a fresh comment, "2 years ago" on an old one - with an "(edited)" suffix where it was edited, so it will not parse as a timestamp and is only meaningful next to the date you ran the job. And likes and reply_count arrive blank rather than zero when nothing is shown, which will quietly distort a sum or an average unless you coalesce first. The is_reply column is the string yes or no rather than a boolean, so test for the string.
One honest note about the schema. The spreadsheet export has ten columns and the JSON has eleven - the JSON adds position, the ordering the comment section came back in, and converting the spreadsheet will not recover it. And parent_author, which is meant to name the author a reply is answering, came back empty on every row of every run we made, including the reply rows where it is the only field that could be populated. It is documented because it is part of the declared schema, not because we have seen it work; check your own export before you depend on it. Start free: your first 500 rows cost nothing and need no credit card. See pricing for current rates.