~ / endpoints / Comment API

YouTube Comment Scraper API

Our YouTube comment scraper tool pulls every public comment from a video as structured JSON: author, text, likes, published time, and reply count. One GET request, cursor paging handled with a page token, no OAuth and no 10,000-unit daily cap. It is free to start: 1,000 requests on the free tier, no credit card, so you can scrape a real comment section before you pay anything.

Get a free API keyAll endpoints
1,000
free requests
2.6s
median response
JSON
threaded output
REST
one endpoint
the problem

Why YouTube Comment data is hard to get

Comments are one of YouTube’s richest signals and one of the hardest to export at scale. The official commentThreads.list method draws on a fixed 10,000-unit daily quota, returns at most 100 threads per call with only partial replies inline, and a video with comments disabled answers 403 commentsDisabled instead of data.

quickstart

The YouTube Comment Scraper API in one request

cURL
curl "https://api.youtubescraperapi.com/api/v1/youtube/comments?video_id=dQw4w9WgXcQ&api_key=$API_KEY"
Python
import requests

API = "https://api.youtubescraperapi.com/api/v1/youtube/comments"
KEY = "YOUR_API_KEY"

def scrape_comments(video_id):
    """Page through every comment on a video using cursor pagination."""
    comments = []
    params = {"video_id": video_id, "api_key": KEY}
    while True:
        data = requests.get(API, params=params).json()
        comments.extend(data["comments"])
        # follow the cursor until has_more is false
        if not data.get("has_more") or not data.get("next_page_token"):
            break
        # pass next_page_token back as page_token to fetch the next page
        params = {"page_token": data["next_page_token"], "api_key": KEY}
    return comments

all_comments = scrape_comments("dQw4w9WgXcQ")
print(f"pulled {len(all_comments)} comments")
for c in all_comments[:5]:
    print(c["likes"], c["author"], "-", c["text"][:80])
parameters

Parameters

ParameterRequiredDefaultNotes
video_idrequired-The video id, the 11-character value after watch?v=. Required unless you pass url.
urloptional-A full watch URL. We extract the video id from it, so use this in place of video_id.
page_tokenoptional-Cursor token returned as next_page_token in the previous response. Pass it back to fetch the next page of comments. The applied sort is carried inside the token.
sortoptionaltopComment order: top or newest. Applies to page 1; later pages inherit the sort from the token.
api_keyrequired-Your API key. Get one free, no credit card.
response

What the YouTube Comment Scraper API returns

200 OK
{
  "video_id": "dQw4w9WgXcQ",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "sort_applied": "top",
  "comment_count": 2300000,
  "comment_count_text": "2.3M",
  "results_count": 20,
  "comments": [
    {
      "author": "@example_viewer",
      "text": "Still a classic in 2026.",
      "likes": 1840,
      "published_time": "3 weeks ago",
      "reply_count": 12
    }
  ],
  "page": 1,
  "next_page_token": "eyJjIjoiRWcwU0MyUlJkelIzT1ZkbldHTlJ...",
  "next_page_url": "/api/v1/youtube/comments?page_token=eyJjIjoiRWcwU0MyUlJkelIzT1ZkbldHTlJ...",
  "has_more": true
}
FieldTypeDescription
video_idstringThe video the comments belong to.
sort_appliedstringThe order the comments were returned in, either top or newest.
comment_countintegerTotal comments on the video, as reported by YouTube. May be null on some videos.
comment_count_textstringThe comment total as YouTube displays it, for example "2.3M".
results_countintegerNumber of comments returned in this page of the response.
commentsarrayThe comments on this page. Each item has author, text, likes, published_time, and reply_count.
comments[].authorstringComment author handle, for example @example_viewer.
comments[].textstringFull comment text.
comments[].likesintegerLike count on the comment.
comments[].published_timestringRelative publish time as shown on YouTube, for example "3 weeks ago".
comments[].reply_countintegerNumber of replies under the comment.
pageintegerThe page number of this response, starting at 1.
next_page_tokenstringCursor token for the next page. Pass it back as page_token. Null when there are no more comments.
next_page_urlstringReady-made path for the next page, /api/v1/youtube/comments?page_token=. Null when there are no more comments.
has_morebooleanTrue while more pages remain, false on the last page.
use cases

What you can build using the API

>

Comment sentiment analysis

Pull every comment and reply on a video and run sentiment scoring to see how an audience reacted. The likes and reply_count fields let you weight loud opinions over one-off replies.
>

Moderation and brand safety

Scan incoming comments for spam, scam links, hate speech, or impersonation across your own channel or competitor videos, and flag the high-engagement threads first.
>

Audience research

Mine comments for recurring questions, feature requests, and the language real viewers use, then feed it into content planning, FAQ pages, and keyword research.
>

Creator analytics

Track comment volume, reply depth, and top-liked comments per video to measure engagement quality alongside view counts, across a creator or a whole niche.
>

Influencer vetting

Check whether a creator's comment section is genuine engagement or bot filler before a sponsorship by sampling authors, like distribution, and reply patterns.
>

Trend and product feedback

Watch comments on review and unboxing videos to catch product complaints, pricing reactions, and emerging trends ahead of formal survey data.
why youtubescraperapi.com

Why teams choose our YouTube Comment Scraper API

Our YouTube comment scraper runs on our infrastructure: one API key, rotating datacenter-to-premium proxies, rendering, and auto-retry, so transient blocks never surface as failures. The median end-to-end response is 2.6 seconds and you only pay for successful requests.

*

Free to start, no credit card

The free tier covers 1,000 requests with no credit card, so this works as a free YouTube comment scraper tool for a one-off export or a quick test before any paid plan. One key, one GET request, comments back as JSON.
*

Threaded comments, no extra calls

Each comment comes back with its reply_count attached, so you see thread depth without a second request per parent the way the official API forces.
*

Built-in paging

Each page returns a next_page_token and a ready-made next_page_url; follow it until has_more is false to walk an entire comment section. No internal ytInitialData token parsing on your side.
*

No OAuth, no daily quota

Authenticate with one api_key query parameter, so this works as an online YouTube comment scraper from any script or server. There is no 10,000-unit budget to ration and no audit to request more.
*

Anti-bot and proxy rotation

Datacenter, residential, and premium proxy tiers with automatic retries keep large comment pulls running without manual IP management.
*

Validated JSON

Output is parity-checked against live YouTube pages and regression-tested per change, so the comment fields stay stable as the site shifts.
comparison

YouTube Comment Scraper API vs the official YouTube API

Our comment APIDIY (requests + headless)YouTube Data API v3
AuthOne api_key in the query stringNone, but you manage proxies and headersOAuth or API key plus a Google Cloud project
Daily limitPay per successful request, no unit capBounded only by your proxy pool10,000 units per day, audit needed to raise
Comments per callA full page, plus a next_page_token cursorWhatever you scroll and parseUp to 100 threads, default 20, then paginate
Repliesreply_count on every commentParse each reply thread yourselfPartial inline, separate comments.list calls for the rest
Comments disabledReturns what is publicly visibleReturns what is publicly visible403 commentsDisabled error, no data
Blocks and proxiesHandled for you, auto-retryYou build rotation and retry logicNot applicable, but quota is the wall
OutputClean threaded JSONRaw HTML you parseJSON you assemble across paged calls
pricing

Start free, scale when ready

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

Is there a free YouTube comment scraper?

Yes. This is a free YouTube comment scraper tool to start: the free tier gives you 1,000 requests with no credit card, which is enough to pull a real comment section or run a one-off export end to end. After that it continues on usage-based pricing, and you only pay for successful requests. There is no software to install and nothing to host, so you can be scraping comments from one GET request in a few minutes.

Is this a tool or an API?

Both, depending on how you use it. It is a hosted YouTube comment scraper tool, so there is no extension to install, no headless browser to run, and no proxies to manage. Under the hood it is a plain REST API: send a GET request with a video_id and your api_key, get threaded comments back as JSON. That makes it easy enough for a quick manual pull and stable enough to wire into a script or pipeline.

Do I need a YouTube API key or OAuth to scrape comments?

No. Our YouTube comment scraper uses a single api_key query parameter on your account. There is no Google Cloud project, no OAuth consent screen, and no YouTube Data API quota to manage. You send a video_id and get threaded comments back as JSON.

How is this different from the YouTube Data API commentThreads.list method?

The official commentThreads.list method costs 1 unit per call but draws from a fixed 10,000-unit daily budget, returns at most 100 threads per call, and only includes a partial set of replies inline. Our endpoint returns a full page of threaded comments with a reply_count on each comment and a next_page_token cursor (plus a ready-made next_page_url) for the next page, with no daily unit cap.

Can it scrape replies as well as top-level comments?

Every comment in the response carries a reply_count field showing how many replies it has, so you can identify and prioritize the deepest threads. The official API requires a separate comments.list call per parent comment to retrieve all replies, which our threaded output and paging are designed to avoid.

How do I get all comments from a video with many thousands of comments?

Each response includes a next_page_token and a next_page_url. Pass the token back as the page_token parameter (or just follow next_page_url) to fetch the following page, and repeat while has_more is true. The Python sample on this page loops through every page automatically.

What happens if comments are disabled on a video?

If a channel owner turns comments off, there is nothing public to return. The YouTube Data API responds with a 403 commentsDisabled error in that case. Our scraper returns whatever is publicly visible on the watch page, which is what a logged-out viewer would see.

Is scraping YouTube comments legal?

Collecting publicly visible YouTube comments for research, sentiment analysis, or moderation is generally treated as legal, provided you respect YouTube's Terms of Service and avoid gathering private or personal data. You are responsible for how you store and use the data, especially under privacy rules like the GDPR. This is general information and does not constitute legal advice.

Get comment api as JSON
Free plan, 1,000 requests. No credit card required.
Get a free API key All endpoints