# YouTube Comments Scraper API – Replies, $0.25/1K, No Login (`k-data-lab/youtube-comments-scraper`) Actor

Scrape YouTube comments and replies from any video or Short, no login or API key. Each row: text, likes, reply count, date, author, pinned, creator heart. Also channels, playlists, search. For sentiment analysis, brand monitoring and AI agents. 1,000 comments free monthly.

- **URL**: https://apify.com/k-data-lab/youtube-comments-scraper.md
- **Developed by:** [K-Data Lab](https://apify.com/k-data-lab) (community)
- **Categories:** Social media, Videos, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 comment or replies

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## YouTube Comments Scraper API: Comments, Replies & Likes, No Login

**Get every public comment and reply of a YouTube video or Short, with no login, no cookies and no API key.** Paste video links, Shorts, a channel, a playlist or a search term. Each row is one comment: full text, likes as a number, reply count, date, author and channel, plus pinned and creator-heart flags. Export it as JSON, CSV or Excel, or call the actor as an API from code, n8n, Make, Zapier or an AI agent.

**Built for:** sentiment analysis of YouTube comments, brand and product monitoring, audience research, finding complaints or questions under a video, and feeding comments to an LLM to summarize.

**Your first 1,000 comments each month are free**, so a first test costs only the $0.005 start fee, which Apify's free $5 monthly credit covers. After that it's **$0.25 per 1,000 comments, and replies cost the same**, with no per-video or per-thread fee. Click Start and the prefilled run returns 20 comments in about 5 seconds. This tool is unofficial and not affiliated with YouTube or Google.

Real rows from `https://www.youtube.com/watch?v=dQw4w9WgXcQ`, Top order, 9 November 2026:

| Author | Comment | Likes | Replies | Posted |
|---|---|---:|---:|---|
| @Oatman69 | Gonna flag this for nudity so I can rick roll the YouTube staff | 570,000 | 733 | 6 years ago |
| @bdr8823 | My algebra teacher said that this was a link to the test answers | 71,000 | 676 | 7 years ago |
| @LK-ht7qz | Let's put the meme aside, this is actually a banging song. | 221,000 | 629 | 6 years ago |

#### 🚀 Pick your starting point

| You want | Paste this input |
|---|---|
| Comments of one video | `{ "startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "maxComments": 500 }` |
| Every comment, with replies | `{ "startUrls": ["<video link>"], "maxComments": 0, "includeReplies": true, "maxRepliesPerComment": 0 }` |
| Comments of a Short | `{ "startUrls": ["https://www.youtube.com/shorts/kPI9Mc35mOg"] }` |
| A channel's latest 10 videos | `{ "startUrls": ["@mkbhd"], "maxVideos": 10, "maxComments": 200 }` |
| What people say about a product | `{ "searchQueries": ["iphone 17 case review"], "maxVideos": 10 }` |
| Sentiment analysis data (most-liked first) | `{ "startUrls": ["<video link>"], "maxComments": 1000, "minLikes": 5 }` |
| Only the last 7 days | `{ "startUrls": ["<video or channel>"], "publishedAfter": "7 days" }` |
| New comments on a schedule | `{ "startUrls": ["@yourchannel"], "monitorName": "my-channel" }` |
| Complaints only | `{ "startUrls": ["<video>"], "keywords": ["broken", "refund", "doesn't work"] }` |

#### 🔍 What does it do?

- **Comments by link.** Accepts watch links, `youtu.be` links, Shorts and live links, and bare 11-character video IDs.
- **Replies.** Turn on `includeReplies` to get the replies under each comment, linked to their parent by `parentCommentId`.
- **Channels, playlists and searches.** Reads the comments of a channel's latest videos, a playlist's first videos, or the top videos for a search term.
- **Top or Newest.** You choose YouTube's own order.
- **Date limit.** With `publishedAfter` set to `2026-10-01` or `7 days`, each video stops at the first older comment, so you don't pay to scan old comments.
- **Monitoring.** Give a scheduled run a `monitorName` and each run returns and charges only comments it hasn't returned before.
- **Free filters.** `keywords` and `minLikes` remove comments before they are charged.

#### 💡 Why choose this actor?

| | This actor | The two most-used YouTube comment scrapers on the Store (checked 9 Nov 2026) |
|---|---|---|
| Price per 1,000 comments (Bronze) | **$0.25** | $0.50 and $1.50 |
| Per-video or per-thread fee | **None** | $0.001 per video, plus per reply thread on one actor |
| Replies | ✅ Same price as comments | Some don't offer replies; one charges per thread |
| Free every month | ✅ 1,000 comments | None; one allows 5 runs of 10 items |
| Likes and replies as numbers | ✅ `570K` becomes `570000` | Often text such as `3.4K` |
| Date | ✅ YouTube's text plus an estimated `publishedAt` date | Text only, or no date field |
| Video title and exact comment total on each row | ✅ | Varies |
| Channel, playlist or search as input | ✅ | Video links only |
| Only new comments | ✅ One field; the memory is kept for you | You track it yourself |

Our test runs: 3,000 rows (2,555 comments and 445 replies) from 2 videos in 59 seconds, with 0 duplicates and 0 refused requests. Each of 3 Shorts returned 700 comments.

#### 💰 Pricing

You pay per event, and only for comments you receive.

| Event | What you get | Free plan | Bronze | Silver | Gold and up |
|---|---|---:|---:|---:|---:|
| `comment` | One comment or reply | $0.30 / 1K | $0.25 / 1K | $0.22 / 1K | $0.20 / 1K |
| `apify-actor-start` | Charged once per run | $0.005 | $0.005 | $0.005 | $0.005 |

**Free every month:** the first 1,000 comments for each user. Comments removed by your filters cost nothing. Set a maximum cost per run and the actor stops cleanly at that limit. In our test, a $0.02 limit returned exactly 60 comments.

#### 📥 Input

| Field | What it does |
|---|---|
| `startUrls` | Video, Shorts, live, channel, @handle or playlist links, or video IDs |
| `searchQueries` | Search terms; reads the top videos for each |
| `maxComments` | Rows per video, counting comments and replies. Default 100; 0 means all |
| `sort` | `top` (default) or `newest` |
| `includeReplies`, `maxRepliesPerComment` | Replies on or off, and how many per comment |
| `publishedAfter` | `2026-10-01` or `7 days`; switches to `newest` |
| `monitorName` | Returns only comments not returned before under this name |
| `keywords`, `minLikes` | Free filters |
| `maxVideos` | Videos per channel, playlist or search. Default 5 |
| `maxResults` | A cap on rows for the whole run |

#### 📤 Output

```json
{
  "type": "comment",
  "commentId": "UgyEnXfdC-umwvTt8JF4AaABAg",
  "text": "Gonna flag this for nudity so I can rick roll the YouTube staff",
  "likeCount": 570000,
  "likeCountText": "570K",
  "replyCount": 733,
  "publishedTimeText": "6 years ago",
  "publishedAt": "2020-11-08",
  "isEdited": false,
  "isPinned": false,
  "isHeartedByCreator": false,
  "author": "@Oatman69",
  "authorChannelId": "UCWf34D_s8K_m2vwBISIDWtg",
  "authorChannelUrl": "https://www.youtube.com/@Oatman69",
  "authorIsVerified": false,
  "authorIsVideoOwner": false,
  "parentCommentId": null,
  "position": 1,
  "commentUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ&lc=UgyEnXfdC-umwvTt8JF4AaABAg",
  "videoId": "dQw4w9WgXcQ",
  "videoTitle": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
  "videoChannelName": "Rick Astley",
  "videoCommentCount": 2461564,
  "sort": "top",
  "inputType": "video",
  "scrapedAt": "2026-11-08T18:13:29Z"
}
```

A reply has `"type": "reply"` and the parent's ID in `parentCommentId`. Rows also carry `authorAvatarUrl`, `authorIsArtist`, `videoUrl`, `videoChannelId` and `input`. The `RUN_SUMMARY` record in the key-value store says what happened to each video: `OK`, `COMMENTS_OFF`, `VIDEO_NOT_FOUND`, `NO_COMMENTS`, `NO_MATCHES` or `NO_NEW_COMMENTS`.

#### ❓ FAQ

**Do I need a YouTube account or API key?** No. You get the comments a logged-out visitor sees, and the YouTube Data API's daily quota doesn't apply.

**Are like counts exact?** Below 1,000 they are exact. Above that, YouTube shows a rounded figure such as `570K`, and we turn it into `570000`. Reply counts and the video's total comment count (`videoCommentCount`) are exact.

**How exact are dates?** YouTube shows dates as text, such as `3 days ago` or `6 years ago`. We keep that text in `publishedTimeText` and estimate a date from it in `publishedAt`. Recent comments are accurate to the day; old ones only to the month or year.

**Can I get every comment of a big video?** Yes. Set `maxComments` to 0. A video with millions of comments takes a long time and costs accordingly, so set a spending limit. YouTube's comment total counts replies, and hides some held or removed comments, so the number of rows can differ from it.

**Why is a comment's `text` empty?** YouTube sends a few comments with no text, usually ones it is holding or has removed. We keep the row so the ID, author and likes aren't lost. In our test this was 58 of 3,000 newest comments.

**Why did a video return nothing?** `RUN_SUMMARY` gives the reason. Comments can be turned off: YouTube does this for all videos made for kids, and some channels turn them off on Shorts. The video may also be private or deleted.

**Does it work for Shorts?** Yes. Shorts comments work like any video's. Live chat messages aren't comments and aren't included.

**How fast is it?** About 50 comments per second for one run. Several videos are read in parallel.

**Is it legal?** It collects public data. You're responsible for how you use it, including YouTube's terms and privacy law. Comments are written by people, so treat author names and text with care, and don't collect more than you need.

#### 🤖 Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/k-data-lab~youtube-comments-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"maxComments":100}'
```

#### 🧠 Use it from AI agents (MCP)

Connect the Apify MCP server to Claude, ChatGPT, Cursor or any other MCP client, then add the actor `k-data-lab/youtube-comments-scraper`. It returns plain JSON and needs no YouTube login, so an agent can call it right away.

| The agent is asked to | Input to send |
|---|---|
| Summarize what viewers think of a video | `{ "startUrls": ["<video link>"], "maxComments": 300 }` |
| Find complaints about a product on YouTube | `{ "searchQueries": ["<product> review"], "maxVideos": 5, "keywords": ["broke", "return"] }` |
| Get this week's comments on a channel | `{ "startUrls": ["@handle"], "publishedAfter": "7 days" }` |
| Read the replies under the top comments | `{ "startUrls": ["<video link>"], "maxComments": 50, "includeReplies": true }` |

| Get comments for sentiment analysis | `{ "startUrls": ["<video link>"], "maxComments": 1000, "sort": "top" }` |
| Comments of a YouTube Short | `{ "startUrls": ["https://www.youtube.com/shorts/<id>"] }` |

You need `startUrls` or `searchQueries`; every other field is optional. Rows are flat JSON with numeric `likeCount` and `replyCount`, so an agent can sort or count them without parsing text. A call for 300 comments costs at most $0.08, and only the $0.005 start fee while the free monthly quota lasts.

#### 🧰 More from K-Data Lab

**Video and social**

- [YouTube Scraper API](https://apify.com/k-data-lab/youtube-scraper): video stats, channels, playlists and search, no login
- [TikTok Scraper API](https://apify.com/k-data-lab/tiktok-scraper): video stats, transcripts and profiles
- [X (Twitter) Tweet Scraper API](https://apify.com/k-data-lab/x-tweet-scraper): likes, replies and media by tweet link
- [Telegram Scraper API](https://apify.com/k-data-lab/telegram-channel-scraper): channels and keyword search

**Reviews**

- [App Store Reviews Scraper API](https://apify.com/k-data-lab/app-store-scraper): iOS app reviews past the 500 cap
- [Google Play Scraper API](https://apify.com/k-data-lab/google-play-scraper): app details and reviews
- [Google Maps Scraper API](https://apify.com/k-data-lab/google-maps-scraper): places, phones and ratings
- [Amazon Seller Central Review Scraper](https://apify.com/k-data-lab/amazon-seller-central-review-scraper): your brand's Amazon reviews
- [Amazon ASIN Rating Scraper](https://apify.com/k-data-lab/amazon-asin-rating-scraper): star ratings and review counts by ASIN

**Ads, travel and more**

- [Google Ad Library Scraper](https://apify.com/k-data-lab/google-ad-library-scraper): Google Ads Transparency ads by advertiser or domain
- [Agoda Scraper](https://apify.com/k-data-lab/agoda-scraper) · [Airline Award Seat Scraper](https://apify.com/k-data-lab/airline-award-seat-scraper) · [Uber Eats & Deliveroo Scraper](https://apify.com/k-data-lab/uber-eats-deliveroo-scraper)
- Korean music charts: [Melon](https://apify.com/k-data-lab/melon-scraper) · [Genie](https://apify.com/k-data-lab/genie-scraper) · [Bugs](https://apify.com/k-data-lab/bugs-scraper) · [FLO](https://apify.com/k-data-lab/flo-scraper) · [VIBE](https://apify.com/k-data-lab/vibe-scraper) · [All charts in one](https://apify.com/k-data-lab/korean-music-chart-scraper)
- Korean real estate: [KB Land](https://apify.com/k-data-lab/kbland-scraper) · [R114](https://apify.com/k-data-lab/r114-scraper)

#### 💬 Feedback

Is a field missing, or does a video not work? Open an issue on the **Issues** tab. We answer the same day.

Tags: youtube comments scraper, youtube comments sentiment analysis, youtube brand monitoring, youtube comment scraper, youtube comments api, youtube comments extractor, youtube comments download, youtube replies scraper, youtube shorts comments, youtube comment monitoring, youtube data api alternative, sentiment analysis data, no login

# Changelog

This Actor's version history is a separate document: https://apify.com/k-data-lab/youtube-comments-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

One per line: video, Shorts or live links, youtu.be links, bare 11-character video IDs, channel links or @handles (reads the channel's latest videos), or playlist links. Fill this field, search terms, or both (at least one is required). Examples: https://www.youtube.com/watch?v=dQw4w9WgXcQ, https://www.youtube.com/shorts/aqz-KE-bpKQ, @mkbhd

## `searchQueries` (type: `array`):

Words to search on YouTube, one per line. Reads the comments of the top videos for each term (see Max videos). Good for brand or product mentions. Example: iphone 17 case review

## `maxComments` (type: `integer`):

Stops each video at this many rows (comments plus replies). 0 = every comment YouTube shows. A very popular video can have millions, so set a number or a spending limit.

## `sort` (type: `string`):

Top = the order YouTube shows by default. Newest = latest first, best for monitoring. A date limit or a monitor name always uses Newest.

## `includeReplies` (type: `boolean`):

Also returns the replies under each comment, as rows with type 'reply' and parentCommentId. Replies cost the same as comments, with no extra per-thread fee.

## `maxRepliesPerComment` (type: `integer`):

Only with Include replies. 0 = all replies.

## `publishedAfter` (type: `string`):

A date (2026-10-01) or an age (24 hours, 7 days, 2 weeks, 3 months). YouTube shows comment dates as '3 days ago', so the cut-off is as exact as that text. Switches the order to Newest and stops each video at the first older comment.

## `monitorName` (type: `string`):

Give a scheduled run a name, such as 'my-channel'. Each run then returns and charges only comments that name hasn't returned before. Uses the Newest order. Memory is kept in your own Apify account.

## `keywords` (type: `array`):

Keep only comments (and replies) that contain any of these words, case-insensitive. Filtered-out comments are free.

## `minLikes` (type: `integer`):

Keep only comments with at least this many likes. Filtered-out comments are free.

## `maxVideos` (type: `integer`):

For channels: the latest N videos. For playlists: the first N. For search terms: the top N videos. Pasted video links are always read.

## `maxResults` (type: `integer`):

Stops the whole run at this many rows. 0 = no total limit (per-video limits and your spending limit still apply).

## `useProxyOnBlock` (type: `boolean`):

Runs start direct. If YouTube starts refusing, the run moves to Apify datacenter proxy sessions. Leave on.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "@mkbhd"
  ],
  "searchQueries": [
    "iphone 17 case review"
  ],
  "maxComments": 500,
  "sort": "top",
  "includeReplies": false,
  "maxRepliesPerComment": 50,
  "publishedAfter": "7 days",
  "monitorName": "brand-watch",
  "keywords": [
    "price",
    "broken"
  ],
  "minLikes": 10,
  "maxVideos": 10,
  "maxResults": 5000,
  "useProxyOnBlock": true
}
```

# Actor output Schema

## `comments` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ],
    "maxComments": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("k-data-lab/youtube-comments-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
    "maxComments": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("k-data-lab/youtube-comments-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "maxComments": 20
}' |
apify call k-data-lab/youtube-comments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,k-data-lab/youtube-comments-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LFe8e0FTLPmsd0K0U/builds/Yk0ljDxeU2OZanRyn/openapi.json
