20 % off all paid plans with code

Video · YouTube

YouTube Comment Scraper API

The YouTube Comment Scraper API gets you live YouTube data the moment you ask, as clean, structured data – ready for your own app, a spreadsheet or an AI assistant. No scraping, nothing to maintain.

100 free requests every month · no credit card · one API key for all platforms

Key facts

Updated

Comments are where a video's audience actually talks back, and a video like Despacito has more than four million of them. The everydata.io YouTube Comments API is a comment scraper for any public video: it reads the comment section – by ID or URL – and returns it as structured JSON: the comment text, who wrote it and whether that author is verified or the creator, how many likes and replies it has, whether the creator hearted or pinned it, and a cursor to pull the replies underneath. Paging is cursor-based like YouTube's own infinite scroll, so you can download a video's comments page by page, and no Google credentials or quota units are required.

Platform
YouTube
Quota per call
1 request
Free plan
100 req / monththen from €30 / month
What you get

YouTube data, ready to use

GET /ytb/youtube-video-comments returns videoId plus a comments[] array. Each entry carries commentId, text, publishedTimeText (YouTube's relative label such as "2 days ago" or "4 months ago"), authorName in @handle form, authorChannelId, authorThumbnail, the booleans authorIsVerified and authorIsCreator, likeCount as an integer with likeCountText for the rounded label, replyCount, isHearted, isPinned and replyLevel (0 for a top-level comment, 1 for a reply).

Threads are handled through cursors. The top-level response contains a cursor string for the next page of comments; each comment with replies also carries its own repliesCursor. Pass either value as the cursor parameter on a follow-up call to walk deeper – the same id, a different cursor. Because the section is fetched from the public page, ordering follows what YouTube shows by default (Top comments), with pinned comments first.

  • commentId, text and publishedTimeText for every comment
  • authorName, authorChannelId, authorThumbnail plus authorIsVerified and authorIsCreator flags
  • likeCount and replyCount as integers; likeCountText for display
  • isHearted and isPinned to detect creator engagement and pinned announcements
  • replyLevel and per-comment repliesCursor to expand reply threads
  • Top-level cursor for continuous paging through the full comment section
  • Video ID or any YouTube URL accepted; languageCode and countryCode for localised rendering
Use cases

What teams build with this

Sentiment and topic analysis

Pull the top comments for a product launch video or ad, run them through a classifier and report sentiment shifts over time – replies included via repliesCursor.

Creator community insights

Agencies collect isHearted, isPinned and authorIsCreator to measure how actively a creator engages with their audience compared with peers.

Brand-safety and moderation checks

Before placing sponsorships, scan recent comments for toxicity or spam patterns and check whether the creator moderates (pinned notices, hearted replies).

Audience research

Extract the authorChannelId set from comments across a niche to estimate overlap between channels' active audiences.

How it works

Example request and response

Call the endpoint with the video id and no cursor for the first page. Two identifiers you may already have – the videoId from the video-details endpoint or from a search result – work directly. The example below shows the first two comments on Despacito; note the verified @YouTube account replying to the 9-billion-views milestone.

GET /ytb/youtube-video-comments

curl "https://api.everydata.io/ytb/youtube-video-comments?id=kJQP7kiw5Fk&languageCode=en&countryCode=US" \
  -H "x-api-key: YOUR_API_KEY"

Response (shortened)

200 OK · application/json
{
  "responseStatus": "PAGE_FOUND",
  "responseMessage": "Page successfully found!",
  "videoId": "kJQP7kiw5Fk",
  "comments": [
    {
      "commentId": "UgzKrZFVw83H4eLGQWR4AaABAg",
      "text": "17 september despacito ? 😂😂😂",
      "publishedTimeText": "2 days ago",
      "authorName": "@IRAQ2025_iraqia",
      "authorChannelId": "UCk9iiXHQBA6oC0WsAmaOsIg",
      "authorIsVerified": false,
      "authorIsCreator": false,
      "likeCount": 979,
      "likeCountText": "979",
      "replyCount": 67,
      "isHearted": false,
      "isPinned": false,
      "replyLevel": 0,
      "repliesCursor": "Eg0SC2tKUVA3a2l3NUZrGAYygwEaUBIaVWd6S3JaRlZ3ODNINGVMR1FXUjRBYUFCQWciAggAKhhVQ0xw…"
    },
    {
      "commentId": "UgzZfEnq23bUSeNQLX54AaABAg",
      "text": "who's here after 9 billion??",
      "publishedTimeText": "4 months ago",
      "authorName": "@YouTube",
      "authorChannelId": "UCBR8-60-B28hp2BmDPdntcQ",
      "authorIsVerified": true,
      "authorIsCreator": false,
      "likeCount": 83000,
      "likeCountText": "83K",
      "replyCount": 973,
      "isHearted": false,
      "isPinned": false,
      "replyLevel": 0,
      "repliesCursor": "Eg0SC2tKUVA3a2l3NUZrGAYygwEaUBIaVWd6WmZFbnEyM2JVU2VOUUxYNTRBYUFCQWciAggAKhhVQ0xw…"
    }
  ],
  "cursor": "Eg0SC2tKUVA3a2l3NUZrGAYylAMK1wJnZXRfcmFua2VkX3N0cmVhbXMtLUNxWUJDSUFFRlJlMzBUZ2Ftd0VLbGdFSTJGOFFnQVFZQnlLTEFYdEVnQ3FZVmZxMUJJajhxRDlySm9XX1lxb19IaU5YbWJNZGxDZHJ5c1VIaHJBU2s2UUlnV2xVdTMxdzhTaVpxaG1ZblF…"
}

Paging works on two axes. The top-level cursor advances through the comment section – send it back as ?id=kJQP7kiw5Fk&cursor=… to receive the next batch, and stop when the response has no cursor. A comment's repliesCursor opens its thread: pass it as the cursor parameter and the returned comments[] contain the replies with replyLevel 1. Cursors are opaque tokens tied to the video; store them only for the duration of a crawl.

publishedTimeText is a relative label, because that is all YouTube prints in the comment section. If you need absolute dates, record the time of your request and convert "2 days ago" on your side. likeCount is exact for small numbers; for large counts YouTube shows a rounded figure (83K) and likeCount reflects that rounding, as you can see in the second example comment.

Videos with comments disabled return an empty comments[] array with PAGE_FOUND, not an error. Private or removed videos return 404. Expect roughly 20 comments per page; a full crawl of a video with 4.3 million comments is therefore not something to do casually – most analyses sample the first few hundred top comments plus the replies of the most-liked ones.

Related endpoints

GET/ytb/youtube-video-comments

Video comments. Paged comments.

GET/ytb/youtube-video-details

Video details. Metadata for a video id or URL.

GET/ytb/youtube-search-videos

Search videos. Keyword search with cursor paging.

Full API reference
Pricing

Pay per request, every platform included

Each page of comments – top-level or replies – is one request. Sampling the first five pages of 200 videos costs 1,000 requests, well inside the Starter plan (5,000 requests, €30). Larger studies fit Production (50,000, €80) with 100 requests per minute, so a 50-page crawl of one video takes under a minute. Failed upstream fetches are not billed.

Free
100 req / month
Starter
5,000 req · €30
Production
50,000 req · €80
Business
300,000 req · €300

YouTube Comment Scraper API: frequently asked questions

How do I fetch replies to a specific comment?

Take that comment's repliesCursor and call the same endpoint with id and cursor set to it. The returned comments[] contain the replies with replyLevel 1 and, if the thread is long, a further cursor.

Can I sort comments by newest instead of top?

The endpoint returns the order YouTube renders publicly by default – Top comments, pinned first. A newest-first sort is not exposed as a parameter.

Are exact timestamps available for comments?

No. YouTube only shows relative labels in the comment section (publishedTimeText such as "2 days ago"). Record the fetch time and derive an approximate absolute date if you need one.

What happens when comments are turned off?

You receive responseStatus PAGE_FOUND with an empty comments[] array and no cursor. That is the reliable signal that the creator has disabled comments for the video.

Is scraping YouTube comments allowed?

everydata.io returns only publicly visible comments without signing in or bypassing any restriction. Comment text and author names are personal data in many jurisdictions, so aggregate and anonymise for analytics rather than republishing threads.

Read your first comment thread

Sign up for free, call GET /ytb/youtube-video-comments?id=kJQP7kiw5Fk and page through replies with the cursor – no Google credentials required.