Skip to main content
YouTube comments

YouTube Comments Scraper
top comments as data

Send a video or Shorts link and get its first 40 top comments: the text, who wrote it, likes as a number, the reply count, when it was posted, and whether the creator pinned or hearted it. The video's own details come in the same response.

You sendwww.youtube.com/watch?v=aircAruvnKk
40 comments1 credit
You get back (real run, trimmed)
{
"title": "But what is a neural network? | Deep learning chapter 1",
"commentsCount": 9418,
"comments": [
{
"author": {
"name": "[redacted]",
"handle": "[redacted]",
"channelId": "[redacted]",
"avatar": "[redacted]",
"isVerified": false,
"isChannelOwner": false,
"isArtist": false
},
"text": "8 years ago and im learning this nowπŸ˜­πŸ˜­πŸ˜­πŸ˜­πŸ’”πŸ’”",
"likes": 255,
"replyCount": 18,
"publishedText": "1 month ago"
},
"… 39 more"
]
}
40

top comments per video, in YouTube's order

25 credits

for 1,000 comments, 40 at a time

1 credit

per video, with its details and transcript too

$0

for a page that can't be delivered

Which links return comments

Any link to a single video. Spidra works out what kind of link it is.

Videos

The standard watch link returns the first 40 top comments and the video's total comment count.

youtube.com/watch?v=aircAruvnKk

Shorts

Shorts have their own comment panel on YouTube. Spidra reads it the same way, 40 top comments per Short.

youtube.com/shorts/R6yNUnRXZ64

Share and embed links

youtu.be links and embed links resolve to the video and return its comments.

youtu.be/aircAruvnKk

Past live streams

Streams that have ended keep their comments. Streams live right now show a chat instead, which isn't read.

youtube.com/live/49-rK7SAfQk

A link per comment

Every comment comes with its own permalink, which opens the video with that comment highlighted.

watch?v=aircAruvnKk&lc=UgwTjSjSb3QH_WW4EiB4AaABAg

A whole channel

Scrape a channel's Videos tab for about 60 links, then send them in one batch for their comments.

youtube.com/@3blue1brown/videos

One call, every field

Point the scrape call at a YouTube link. With JSON output and no prompt, the data comes back as it is, for 1 credit and no AI cost.

Ask for markdown instead and you get the readable page as text. The structured data still comes back, in its own structuredData field next to the markdown.

import { SpidraClient } from "spidra";
 
const spidra = new SpidraClient({
apiKey: process.env.SPIDRA_API_KEY,
});
 
const result = await spidra.scrape({
urls: [{ url: "https://www.youtube.com/watch?v=aircAruvnKk" }],
output: "json",
});
 
const data = result.content;
for (const c of data.comments) console.log(c.likes, c.replyCount, c.text);
What you get for each comment
Comment
ID, full text and a permalink to the comment
Author
Public name, handle, channel ID and avatar, as YouTube shows them
Author flags
Verified, the video's own creator, or an official artist
Likes
As a number (1600) and as YouTube shows it ("1.6K likes")
Replies
How many replies the comment has
Date
When it was posted, as YouTube shows it ("2 years ago"), and whether it was edited
Creator signals
Whether the creator pinned it or gave it a heart
Video totals
The video's total comment count and the sort used (top)
Note
commentsNote says why a video has no comments, when it has none

What comes back

Real responses from Spidra, trimmed for length. Nothing here is mocked up.

Request
https://www.youtube.com/watch?v=aircAruvnKk

Every video page includes the first 40 top comments.

Response (real run, October 18, 2026, trimmed)
{
"id": "aircAruvnKk",
"title": "But what is a neural network? | Deep learning chapter 1",
"commentsCount": 9418,
"commentsSort": "top",
"comments": [
{
"id": "Ugxg7Exz-c2PBBDv28p4AaABAg",
"url": "https://www.youtube.com/watch?v=aircAruvnKk&lc=Ugxg7Exz-c2PBBDv28p4AaABAg",
"text": "8 years ago and im learning this nowπŸ˜­πŸ˜­πŸ˜­πŸ˜­πŸ’”πŸ’”",
"author": {
"name": "[redacted]",
"handle": "[redacted]",
"channelId": "[redacted]",
"avatar": "[redacted]",
"isVerified": false,
"isChannelOwner": false,
"isArtist": false
},
"likes": 255,
"likesText": "255 likes",
"replyCount": 18,
"publishedText": "1 month ago",
"isEdited": false,
"isPinned": false,
"isHearted": false
},
{
"id": "Ugwedfi--9yZVC0eefl4AaABAg",
"url": "https://www.youtube.com/watch?v=aircAruvnKk&lc=Ugwedfi--9yZVC0eefl4AaABAg",
"text": "I study mathematics, physics and architecture. By definition this man is an ORACLE in the strict meaning of the word. \n\nWith all honesty I never imagined someone explaining complex topics with the dex…",
"author": {
"name": "[redacted]",
"handle": "[redacted]",
"channelId": "[redacted]",
"avatar": "[redacted]",
"isVerified": false,
"isChannelOwner": false,
"isArtist": false
},
"likes": 13000,
"likesText": "13K likes",
"replyCount": 173,
"publishedText": "7 years ago",
"isEdited": true,
"isPinned": false,
"isHearted": false
},
{
"id": "UgwTjSjSb3QH_WW4EiB4AaABAg",
"url": "https://www.youtube.com/watch?v=aircAruvnKk&lc=UgwTjSjSb3QH_WW4EiB4AaABAg",
"text": "Wait... it's all math?",
"author": {
"name": "[redacted]",
"handle": "[redacted]",
"channelId": "[redacted]",
"avatar": "[redacted]",
"isVerified": false,
"isChannelOwner": false,
"isArtist": false
},
"likes": 1600,
"likesText": "1.6K likes",
"replyCount": 61,
"publishedText": "2 years ago",
"isEdited": false,
"isPinned": false,
"isHearted": false
},
"… 37 more"
]
}

Likes you can sort, links you can open

YouTube shows likes as "1.6K". Spidra returns the number and keeps the text next to it, so you can rank comments, filter out the quiet ones, or chart engagement without parsing.

Every comment also has a permalink. Open it and YouTube shows the video with that comment at the top, which makes a spreadsheet of comments easy to check by hand.

A comment on 3Blue1Brown's video (real run, commenter redacted)
{
"id": "UgwTjSjSb3QH_WW4EiB4AaABAg",
"url": "https://www.youtube.com/watch?v=aircAruvnKk&lc=UgwTjSjSb3QH_WW4EiB4AaABAg",
"text": "Wait... it's all math?",
"author": {
"name": "[redacted]",
"handle": "[redacted]",
"channelId": "[redacted]",
"isVerified": false,
"isChannelOwner": false,
"isArtist": false
},
"likes": 1600,
"likesText": "1.6K likes",
"replyCount": 61,
"publishedText": "2 years ago",
"isEdited": false,
"isPinned": false,
"isHearted": false
}

See what the creator noticed

Creators pin the comments they want people to read first and heart the ones they liked. Spidra returns both as true or false on every comment, and marks comments written by the channel itself with isChannelOwner.

On the sample video, 1 of the 40 top comments carried the creator's heart: a long note from a viewer about learning from the series. Filter on isHearted and isPinned to find the comments a creator chose to highlight.

The hearted comment, text removed (real run, trimmed)
{
"id": "Ugz_PYpSmiZz5JTzlRR4AaABAg",
"author": {
"name": "[redacted]",
"isVerified": false,
"isChannelOwner": false
},
"likes": 8200,
"replyCount": 40,
"publishedText": "9 years ago",
"isEdited": true,
"isPinned": false,
"isHearted": true
}

No comments is an answer, not an error

When a video has no comments, you need to know why. Spidra still returns the video, and commentsNote says what happened, so an empty list never looks like a failed scrape.

  • Comments turned off: commentsCount is 0 and the note says comments are off
  • Live right now: the note says the stream shows a live chat, which isn't read
  • Age-restricted: the video's details come back, and the note says YouTube shows comments only to signed-in viewers

Ask for the columns you want

Describe the answer as a prompt, a JSON schema or both, and it comes back in that shape. The AI reads a compact copy of the data Spidra already read, not the whole page.

Request
const result = await spidra.scrape({
urls: [{ url: "https://www.youtube.com/watch?v=aircAruvnKk" }],
prompt: "From the comments, give the overall sentiment and the 3 most common themes.",
schema: {
type: "object",
properties: {
sentiment: {
type: "string"
},
themes: {
type: "array",
items: {
type: "string"
}
}
}
},
});
What came back (real run)
{
"sentiment": "positive",
"themes": [
"clear and intuitive explanations of complex topics",
"high-quality animations and visual aids",
"appreciation for educational value and teaching style"
]
}

This request cost 7 credits on October 18, 2026: 1 for the page plus the AI tokens. For the data as it is, use JSON output with no prompt for 1 credit.

What teams build with it

Comments are what an audience says in its own words.

Audience research

Read what viewers ask, praise and complain about on your videos or a competitor's, and find topics for the next one.

Sentiment and feedback

Track reactions to a launch, a trailer or a brand video, and send the comments to a model for themes and sentiment.

See the use case

Creator vetting

Before a sponsorship, check how much real conversation a creator's recent videos get, next to their views and likes.

How Spidra compares

Dedicated comment scrapers are cheap per comment and can export every comment on a video. Here is how they differ.

YouTube Data APIApify comments actorSerpApiSpidra
1,000 commentsFree within 10,000 quota units a dayFrom $0.90About 20 per search, at $25 down to $1.96 per 1,000 searches25 credits (40 per page): $0.10 down to $0.05
Per videoComment threads and repliesSet a maximum, sort and oldest dateOne page per call, with tokens for moreFirst 40 top comments
RepliesYesYes, linked to the parent commentThrough reply tokensReply count only
Same callSeparate calls for video detailsComments only; videos in a separate actorVideo details and related videos in the video engineVideo details, transcript and related videos in the same response

Choose Apify or the API if

You need every comment on a video, the reply threads, or the newest comments rather than the top ones.

Choose Spidra if

You want the top of the conversation for many videos, cheaply, with exact likes and creator signals, next to each video's details and transcript.

Competitor prices and features are as published on their own pages on October 18, 2026 and may have changed. Spidra prices use 1 credit per page on each plan. Sources: YouTube Data API, Apify, SerpApi.

What to know before you build

We would rather you hear the limits from us than find them in production.

  • Each video returns its first 40 top comments, in YouTube's Top order. Paging past 40 and the Newest sort aren't available.
  • Replies come back as a count. The reply text isn't returned.
  • Dates are what YouTube shows, such as "2 years ago", not exact timestamps.
  • Spidra reads YouTube as a visitor who isn't signed in. Age-restricted videos return their details but no comments, and live chat isn't read.
  • Comments include the commenter's public name, handle, channel ID and avatar, as YouTube shows them. Handle personal data according to the privacy laws that apply to you.

What it costs

1 credit per page. Pages that can't be delivered are free. Work out your monthly volume below.

Monthly credits
7,500
Fits the Builder plan ($79/mo)

Example: 250 videos a day is 10,000 comments and about 7,500 credits a month. Plain JSON output uses no AI tokens.

PlanPriceYouTube pages a month
Free$0up to 300 (one time)
Starter$19/moup to 5,000
BuilderPopular$79/moup to 25,000
Pro$249/moup to 125,000

Credits are shared across everything Spidra does, so the same plan covers YouTube and any other site.

Related scrapers

Same API key, same credits. See every scraper.

FAQ

Questions, answered

YouTube

The first 40 top comments, in the order YouTube shows them under Top, plus the video's total comment count. That costs 1 credit, and the video's details and transcript come in the same response.

Send a video link and read its comments as data.

Get 300 free credits, no card, and pull your first comments from the dashboard or the API.

Spidra is not affiliated with, endorsed by, or sponsored by YouTube or Google. YouTube is a trademark of Google LLC. Check YouTube's terms of service and the laws that apply to you before you collect data, and use the data responsibly.