YouTube Comments Scraper

Every comment on a video,
as a row.

Paste a video id or a watch URL and get the comment section back as a table - who wrote it, their channel id, the text, the likes, the reply count, and whether the row is a reply or a top-level comment. Sort by Top or Newest, and pull replies too if you want them.

one-time 500 free rows$0.002 per row afterone row per commentCSV · JSON · Excel
How it works

A video in,
its comment section out.

There is no page to load and no cookie to supply. You give it a video, and choose how much of the comment section you want.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the YouTube Comments Scraper.
  3. STEP 3Paste the video ids or watch URLs, one per line - or upload a CSV, TXT or XLSX and the first column is read as the list.
  4. STEP 4Set a limit per query, or leave it at 0 to take the whole comment section.
  5. STEP 5Choose the sort - Top or Newest - and tick Extract replies if you want reply rows as well.
  6. STEP 6Pick your format and click Get Data.

The service reads YouTube's own JSON interface rather than parsing the page HTML, so a layout change on YouTube does not silently break the export.

Why teams use it

Built for reading a comment section,
not scrolling it.

Replies are a choice, not a surprise

Top-level comments come back on their own by default. Tick Extract replies and the reply rows arrive too, each one flagged in is_reply so you can separate the conversation from the thread openers without guessing.

Top or Newest, and it matters

The same video sorted by Top and by Newest answers two different questions - what the audience upvoted, and what they are saying now. The sort is a parameter, so you can pull both and compare them.

Take a slice or take everything

The limit applies per query, so one job can take the first hundred comments from each of many videos. Set it to 0 and it takes the comment section as far as it goes.

Data dictionary

Ten columns in the sheet,
eleven in the JSON.

The names below are the header row of the export, exactly as it arrives. One row per comment. The descriptions say what each column is for and how it actually behaves - including the two places where the export will surprise you.

query
The video you submitted, echoed back on every row of that video's comments. It is repeated verbatim, so if you sent a full watch URL that is what you get back, and if you sent a bare video id you get that. Group by this column when a file covers more than one video.
video_id
The id of the video the comment belongs to. This is the normalised form, so it is the safer column to join on than query - the same video submitted two different ways produces the same video_id.
author
The display name shown against the comment.
author_channel
The commenter's channel id. This is the stable identifier for a person - display names change and are not unique, so use this if you are counting distinct commenters or following someone across videos.
comment
The comment text as written.
likes
The like count on the comment. Arrives blank rather than 0 when none are shown, so coalesce before you sum or sort on it.
reply_count
How many replies the comment has. Also blank rather than 0 when there are none. This is the count on the parent comment - it is not affected by whether you asked for reply rows.
published
When the comment was posted, as YouTube phrases it - relative text at whatever unit fits how old the comment is, from "1 day ago" to "2 years ago", with an "(edited)" suffix where the comment was edited. It is not a timestamp and will not parse as one. If you need real dates, record the date of the run and treat this as an offset from it.
is_reply
Whether the row is a reply rather than a top-level comment. The value is the string yes or no, not a boolean - so test for the string.
parent_author
Intended to name the author a reply is answering. It is listed because it is in the schema; do not build on it without checking your own export first.

The JSON export carries one field the spreadsheet does not: position. It is present in the header of every .json we have and absent from every .xlsx. If you are building against this service and want the ordering the comment section came back in, take the JSON - converting the spreadsheet will not give it to you.

Common workflows

Three jobs people
run this for.

Where a comment section is more useful as a spreadsheet than as an infinite scroll.

Audience research

Read what an audience actually said

A comment section is unprompted, unmoderated feedback on a specific thing at a specific time. Pull it for your own videos and for the ones your audience watches instead, sort by likes, and the questions and objections people actually have rise to the top on their own.

Marketing · Product
Creator ops

Find the questions worth answering

Take the comments with a high reply_count and no reply from the channel - those are the threads the audience is already discussing without you. It is a short list, and working it is the cheapest engagement there is.

Creator · Community
Research

Compare Top against Newest

Run the same video twice, once sorted by Top and once by Newest. The gap between what an audience upvoted and what it is saying now is where sentiment has moved - and it is invisible if you only ever look at one ordering.

Research · Strategy
Pricing

Pay only for the rows
you actually pull.

No subscription, no minimum, no per-seat licence. Your first 500 rows are on us - after that it is pay-as-you-go.

Free tier

500 free rows - $0

For every new account, one time. No credit card. All scrapers unlocked. One row is one comment, so the free tier covers a real comment section rather than a token sample.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

Roughly $2 per 1,000 comments. Because the limit is per query, the cost of a job is something you set rather than something you discover - cap it while you are exploring, lift it once you know the video is worth taking in full.

Most popular
Enterprise

Custom - scheduled monitoring

Volume pricing, SLAs, dedicated workers and tailored onboarding for teams tracking comments across many videos on a repeating schedule. Tell us your numbers and we will quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

Comments are one part
of a video.

What was said underneath, what was said in it, and who published it - three different questions.

The legal bit

Is it legal to collect
YouTube comments?

Short answer: yes, when you only collect what is publicly visible under the video - and that is all this service reads.

A comment section is public. Anyone can read it without an account, and collecting publicly visible information for research is long-settled practice. As long as the data is publicly available and the process does not disrupt the service, there are no federal laws against it.

Be aware of what this data is, though, because it is not like a price or a listing. A comment is written by a person, and author and author_channel identify them. Publicly visible is not the same as free of obligation - if you store it, you are handling personal data, and the GDPR and similar regimes apply to you regardless of where you got it. Collect what you need, keep it as long as you need it, and do not republish individuals' comments alongside their channel ids without thinking about it first.

YouTube's terms restrict automated access, so this remains a question of terms. We touch nothing behind a login, read only what an ordinary viewer sees, run no third-party trackers on the data layer, and your exports self-delete after 30 days.

livescraper.app · principles
Publicly visible comments only
No logins, no paywalls
Comments are personal data - handle them as such!
GDPR-aligned by default
Exports self-delete (30 days)
The same text any viewer sees under the video.
Common questions

Things people ask before signing up.

The questions we hear most. Something else? Talk to us - humans write the answers, not bots.

What columns will the export contain?+
Ten in the spreadsheet: query, video_id, author, author_channel, comment, likes, reply_count, published, is_reply and parent_author. One row per comment. The JSON export carries an eleventh field, position, which the spreadsheet does not.
What do I submit - a URL or a video id?+
Either. Paste video ids or full watch URLs, one per line, or upload a CSV, TXT or XLSX and the first column is read as the list. Whatever you send is echoed back in the query column, and the normalised id appears in video_id.
Do I get replies as well as top-level comments?+
Only if you ask for them. Extract replies is a toggle and it is off by default, so a plain run returns top-level comments. Switch it on and reply rows arrive too, each marked in the is_reply column with the string yes or no.
Why is the published column not a date?+
Because YouTube does not show one. The column carries the relative text the site displays, at whatever unit fits how old the comment is - "1 day ago", "12 days ago", "2 years ago" - with an "(edited)" suffix where the comment has been edited. It will not parse as a timestamp. Record the date you ran the job and treat the column as an offset from that.
Why are likes and reply_count sometimes empty?+
They arrive blank rather than zero when nothing is shown. Coalesce blank to zero before you sum, sort or average on either column, or your totals will be wrong in a way that is easy to miss.
What is in the parent_author column?+
Nothing, in our experience. It is in the schema and it is meant to name the author a reply is answering, but it came back empty on every row of every run we made - including the reply rows, which is the only place it could be filled. Check your own export before you build anything on it.
Can I control how many comments I get?+
Yes. The limit applies per query, so one job can take the first hundred comments from each of many videos. Set it to 0 to take the comment section as far as it goes, and choose Top or Newest to decide which end you take it from.
What does it cost?+
The first 500 rows on a new account are free and one-time; after that it is $0.002 per row - about $2 per 1,000 comments - pay-as-you-go with no subscription. Credits do not expire and there is no monthly reset.

Read the comment section
as a spreadsheet.

Hand it a video id or a watch URL and take the comments away as rows - author, channel id, text, likes and reply count. Your first 500 rows are free.

Activates instantly · no card required

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.