# YouTube Comments Scraper – Comments & Replies, No API Key (`pulsedata/youtube-comments-scraper`) Actor

Extract all comments and replies from YouTube videos, Shorts or live VODs: text, author, channel, likes, reply count, heart by creator, pinned, timestamps. Top or newest first, thousands of comments per video, plus video title & channel. No YouTube API key or quota. $1 per 1,000 comments.

- **URL**: https://apify.com/pulsedata/youtube-comments-scraper.md
- **Developed by:** [PulseData](https://apify.com/pulsedata) (community)
- **Categories:** Social media, Videos, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 comment scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## YouTube Comments Scraper – Comments & Replies, No API Key

Extract **all comments and replies** from any YouTube video, Short or live-stream VOD – without the YouTube Data API, its quotas or keys. Sort by *Top* or *Newest*, fetch thousands of comments per video, include reply threads, and get clean JSON/CSV with author, channel, likes, reply count, creator hearts, pinned status and timestamps.

**$1 per 1,000 comments** (replies count as comments). Fast, no proxies needed.

### Output

```json
{
  "commentId": "Ugwedfi--9yZVC0eefl4AaABAg",
  "videoId": "aircAruvnKk",
  "videoTitle": "But what is a neural network? | Deep learning chapter 1",
  "channelName": "3Blue1Brown",
  "text": "I study mathematics, physics and architecture. …",
  "author": "@kummer45",
  "authorChannelId": "UCqArZkt3NAOU0tcgIi6xmFQ",
  "authorUrl": "https://www.youtube.com/@kummer45",
  "authorThumbnail": "https://yt3.ggpht.com/…",
  "authorIsVerified": false,
  "authorIsChannelOwner": false,
  "publishedTimeText": "7 years ago (edited)",
  "publishedAt": "2019-08-21T14:03:23.423Z",
  "isEdited": true,
  "likeCount": 13000,
  "replyCount": 166,
  "isHearted": false,
  "isPinned": false,
  "isReply": false,
  "parentCommentId": null,
  "url": "https://www.youtube.com/watch?v=aircAruvnKk&lc=Ugwedfi--9yZVC0eefl4AaABAg"
}
```

`publishedAt` is derived from YouTube's relative time ("2 years ago") and is therefore approximate; `publishedTimeText` is the original.

### Input

| Field | Description |
|---|---|
| `videoUrls` | Video URLs (watch, youtu.be, Shorts, live, embed) or 11-character IDs. |
| `maxCommentsPerVideo` | Top-level comments per video (0 = all). |
| `sortBy` | `top` (YouTube ranking) or `newest`. |
| `includeReplies` | Fetch reply threads too. |
| `maxRepliesPerComment` | Cap per thread (0 = all). |
| `includeVideoInfo` | Add video title and channel to every comment. |
| `concurrency` | Videos in parallel. |
| `proxyConfiguration` | Optional; the actor automatically falls back to Apify residential proxy if YouTube rate-limits. |

### Use cases

- **Sentiment & audience research** – what viewers think about a product, creator, launch or ad.
- **Community management** – export comments for moderation, FAQs, or to find questions to answer.
- **Lead & influencer discovery** – active commenters and creator interactions.
- **AI datasets** – feed comments into LLM summarization, topic clustering or classification.
- **Competitor monitoring** – schedule daily runs with `sortBy: newest`.

### Pricing

**$0.001 per comment** returned (top-level and replies). Videos with comments disabled are free.

### Integrations

Run via API/SDK or on a schedule; export JSON, CSV, Excel; push to Google Sheets, Make, Zapier, n8n; usable as an MCP tool for AI agents.

# Actor input Schema

## `videoUrls` (type: `array`):

Video URLs (watch, youtu.be, Shorts, live, embed) or bare 11-character video IDs – one per line.

## `maxCommentsPerVideo` (type: `integer`):

Top-level comments to collect per video (replies are counted separately). 0 = all.

## `sortBy` (type: `string`):

`top` = YouTube's ranking (default), `newest` = newest first.

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

Also fetch the replies of each comment (one extra request per comment thread that has replies).

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

0 = all replies.

## `includeVideoInfo` (type: `boolean`):

Adds videoTitle and channelName to every comment (one tiny extra request per video).

## `concurrency` (type: `integer`):

Videos processed in parallel.

## `proxyConfiguration` (type: `object`):

Usually not required. Enable Apify Proxy if YouTube starts rate-limiting your runs.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=aircAruvnKk"
  ],
  "maxCommentsPerVideo": 100,
  "sortBy": "top",
  "includeReplies": false,
  "maxRepliesPerComment": 50,
  "includeVideoInfo": true,
  "concurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Comments stored in the default dataset (JSON/CSV/Excel via the dataset API).

# 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 = {
    "videoUrls": [
        "https://www.youtube.com/watch?v=aircAruvnKk"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pulsedata/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 = { "videoUrls": ["https://www.youtube.com/watch?v=aircAruvnKk"] }

# Run the Actor and wait for it to finish
run = client.actor("pulsedata/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 '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=aircAruvnKk"
  ]
}' |
apify call pulsedata/youtube-comments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pulsedata/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/lqdGnvoZXquRmFYG2/builds/exYDNLgvC2wbKRGfG/openapi.json
