# YouTube Comments Scraper - No Login, No Limits (`gopalakrishnan/youtube-comments`) Actor

Extract YouTube comments with full pagination, no login or API key needed. Pay only $0.002 per run plus $0.0004 per comment — platform usage included.

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

## Pricing

from $0.40 / 1,000 comments scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What does YouTube Comments Scraper do?

**YouTube Comments Scraper** extracts comments from any public [YouTube](https://www.youtube.com)
video — no login, no API key, no quota limits. Just paste a video URL and it automatically keeps
loading more comments for you, the same way scrolling down on YouTube does, so you get **far
more than the handful of comments YouTube shows you at first**. Try it directly from the Input
tab, or call it through the Apify API, schedule it to run automatically, or wire it into your
existing data pipeline with Apify's integrations (Zapier, Make, webhooks, and more).

### Why use YouTube Comments Scraper?

Comments are one of the richest, most under-used data sources on YouTube — audience sentiment,
product feedback, recurring questions, and community reactions all live there in raw form.
Common use cases:

- **Social listening & sentiment analysis** — track how audiences react to a video, brand
  mention, or campaign.
- **Content research** — see what questions or requests viewers repeat across a creator's videos.
- **Moderation & reputation monitoring** — pull comment threads for review without manually
  scrolling YouTube.
- **NLP / LLM training data** — collect real, natural-language comment threads for analysis or
  fine-tuning.

### How to use YouTube Comments Scraper

1. Open the **Input** tab.
2. Add one or more **Videos** — full YouTube URLs (`https://www.youtube.com/watch?v=...`,
   `https://youtu.be/...`) or bare 11-character video IDs.
3. Optionally set **Max Comments per Video** to cap how many comments are scraped per video
   (useful for controlling run cost on videos with huge comment counts).
4. Optionally configure **Proxy Configuration** — Apify Proxy (datacenter) is enabled by default
   and recommended.
5. Click **Start** and wait for the run to finish. Results appear in the **Output** tab and the
   underlying dataset.

### Input

| Field                | Type             | Description                                                           |
| -------------------- | ---------------- | --------------------------------------------------------------------- |
| `videos`             | array of strings | **Required.** YouTube video URLs or bare video IDs.                   |
| `maxComments`        | integer          | Optional cap on comments scraped per video. Leave empty for no limit. |
| `proxyConfiguration` | object           | Apify Proxy settings. Defaults to Apify Proxy (datacenter).           |

```json
{
    "videos": ["https://www.youtube.com/watch?v=FnKJEZ-Chos"],
    "maxComments": 500,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

### Output

Each scraped comment is saved as a separate record in the dataset. You can download the dataset
in various formats such as JSON, HTML, CSV, or Excel.

```json
{
    "videoId": "FnKJEZ-Chos",
    "author": "@SlasherRacing",
    "commentText": "One pizza owner who just drove his business into the ground. Everyone knows the rules",
    "likeCount": "19K",
    "publishedTime": "2 years ago"
}
```

#### Data table

| Field           | Description                                                                       |
| --------------- | --------------------------------------------------------------------------------- |
| `videoId`       | The YouTube video ID the comment belongs to.                                      |
| `author`        | The commenter's channel handle.                                                   |
| `commentText`   | The full text of the comment.                                                     |
| `likeCount`     | Like count as shown by YouTube (e.g. `"19K"`), if available.                      |
| `publishedTime` | Relative published time as shown by YouTube (e.g. `"2 years ago"`), if available. |

### Pricing

This Actor uses **Pay Per Event** pricing — you only pay for what you use:

- **$0.002** per run (covers platform usage)
- **$0.0004** per comment scraped (**$0.40 per 1,000 comments**)

There's no subscription and no minimum spend. Use `maxComments` to set a predictable cost ceiling
on videos with very large comment counts (viral videos can have hundreds of thousands of
comments). This Actor doesn't use a browser under the hood, so runs are fast in addition to being
cheap.

### Tips & advanced options

- Set `maxComments` on high-volume videos (viral videos can have hundreds of thousands of
  comments) to control run cost and duration.
- This Actor scrapes **top-level comments only** in this version — comment replies are not yet
  included.
- Pair this Actor with [YouTube Transcript](https://apify.com/store) — together they form a
  YouTube data suite: transcripts for what was *said* in the video, comments for what the
  *audience* said back.

### FAQ

**Is this legal?** This Actor only accesses publicly available comments through the same
endpoints YouTube's own web player uses. You are responsible for ensuring your use complies with
YouTube's Terms of Service and applicable laws in your jurisdiction.

**Why did I get zero comments for a video?** Either the video's comments are disabled by the
creator, or the video has no comments yet. Both produce a clean, empty result — not an error.

**Found a bug or have a feature request (e.g. reply support)?** Use the Issues tab on this
Actor's page, or reach out for a custom scraping solution tailored to your needs.

# Actor input Schema

## `videos` (type: `array`):

YouTube video URLs (e.g. https://www.youtube.com/watch?v=VIDEO\_ID, https://youtu.be/VIDEO\_ID) or bare 11-character video IDs.

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

Maximum number of comments to scrape per video. Leave empty for no limit.

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

Apify Proxy configuration. Datacenter proxies are recommended for this Actor.

## Actor input object example

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=FnKJEZ-Chos"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `comments` (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 = {
    "videos": [
        "https://www.youtube.com/watch?v=FnKJEZ-Chos"
    ]
};

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

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

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

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

```

## CLI example

```bash
echo '{
  "videos": [
    "https://www.youtube.com/watch?v=FnKJEZ-Chos"
  ]
}' |
apify call gopalakrishnan/youtube-comments --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=gopalakrishnan/youtube-comments",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Comments Scraper - No Login, No Limits",
        "description": "Extract YouTube comments with full pagination, no login or API key needed. Pay only $0.002 per run plus $0.0004 per comment — platform usage included.",
        "version": "1.0",
        "x-build-id": "oMaq4yf4fdtRQSH5Z"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/gopalakrishnan~youtube-comments/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-gopalakrishnan-youtube-comments",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/gopalakrishnan~youtube-comments/runs": {
            "post": {
                "operationId": "runs-sync-gopalakrishnan-youtube-comments",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/gopalakrishnan~youtube-comments/run-sync": {
            "post": {
                "operationId": "run-sync-gopalakrishnan-youtube-comments",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "videos"
                ],
                "properties": {
                    "videos": {
                        "title": "Videos",
                        "type": "array",
                        "description": "YouTube video URLs (e.g. https://www.youtube.com/watch?v=VIDEO_ID, https://youtu.be/VIDEO_ID) or bare 11-character video IDs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxComments": {
                        "title": "Max Comments per Video",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of comments to scrape per video. Leave empty for no limit."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Datacenter proxies are recommended for this Actor.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
