# YouTube Comments Scraper

> YouTube comments scraper: export comments and replies from up to 50 videos to CSV, Excel or JSON. Top or Newest order. No login or API key needed.

URL: https://cliqtomedia.com/actors/youtube-comments-scraper/

Category: Video, audio & streaming · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/youtube-comments-scraper?fpr=cliqto

Export public comments and replies from YouTube videos. Each reply keeps its parent comment ID. No YouTube login or API key is needed.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://www.youtube.com/watch?v=aqz-KE-bpKQ` in YouTube video URLs or IDs. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

YouTube Comments Scraper gets public comments and replies from YouTube videos. Add video URLs or IDs, choose Top or Newest order, and export one row for each saved comment or reply as JSON, CSV, or Excel. No YouTube login or API key is needed.



### Good for

- Read feedback on a known public video or a small set of videos.
- Export comment text, likes, public author fields, and reply links.
- Match repeated exports by stable comment IDs in your own system.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Stored comment or reply | $0.0008 | Charged once after one unique comment or reply is saved to the Dataset. |
| Start fee | $0.05 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |

- One comment: about $0.05.
- 1,000 comments: about $0.85.
- Every day 100 comments, for 30 days: about $3.90 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/youtube-comments-scraper?fpr=cliqto

## Questions

### Does it work with Shorts?

Yes. Shorts links, watch links and video IDs work.

### Can I get live chat messages?

No. Live video links give comments, not live chat.

### Do I need a Google API key?

No. It does not use the YouTube Data API or any key.

### Is this an official YouTube or Google tool?

No. It is an independent Actor and is not made, approved, or sponsored by YouTube or Google.

### Does it use the official YouTube Data API?

No. It reads the public website's InnerTube comments surface through YouTube.js. That interface is not a public supported API and can change.

### Does this YouTube comment scraper need an API key?

No. It does not accept a Google API key, OAuth token, YouTube account, or cookies. For a separate official API client, Google documents commentThreads.list; that API is not this Actor's source.

### Can I export comments from multiple videos, including Shorts?

Yes. Use up to 50 supported public video URLs or IDs. Duplicate videos are processed once. Live video URLs refer to comments, not live chat.

### Can I download YouTube comments as CSV or Excel?

Yes. Open the results table and choose JSON, CSV, or Excel. Each saved comment or reply is one row. JSON preserves the complete nested shape.

### Can it get every comment or recover deleted comments?

No. It gets the public comments visible during the run and inside your limits. It cannot recover deleted, hidden, held, private, or member-only comments.

### Are replies included?

Only when `includeReplies=true` and `maxRepliesPerComment>0`. Leave room in `maxComments` by choosing a smaller per-video top-level cap. Every saved reply counts toward the total and price.

## Data fields

- `itemType` (string): The result type. This Actor saves comment rows only.
- `id` (string): The comment ID provided by the source.
- `recordKey` (string): A stable key used to prevent duplicate saves and charges in one run.
- `videoId` (string): The 11-character YouTube video ID.
- `videoUrl` (string): The standard YouTube watch URL for the video.
- `threadId` (string): The top-level comment ID that starts this comment thread.
- `isReply` (boolean): True for a reply row.
- `parentCommentId` (string): The parent comment ID for a reply. It is null for a top-level comment.
- `text` (string): The public comment text shown by the source during this run.
- `likeCount` (integer): The like count seen during this run. It is null when the value is not clear.
- `author` (object): Public author details when available. No avatar or added profile data is included.
- `isPinned` (boolean): Whether the comment is pinned. It is null when the source does not make this clear.
- `isHearted` (boolean): Whether the creator hearted the comment. It is null when the source does not make this clear.
- `authorIsCreator` (boolean): Whether the author is the video creator. It is null when this is not clear.
- `isEdited` (boolean): Whether the source shows an edited label. It is null when this is not clear.
- `publishedTimeText` (string): The display time shown by the source, for example 2 hours ago. It may be relative or translated.
- `publishedAt` (null): Always null because the source does not provide a proven exact posting time.
- `sort` (string): The comment order selected for this run.
- `topLevelPosition` (integer): The top-level comment position seen in this run, starting at 1.
- `replyPosition` (integer): The reply position under its parent comment, starting at 1. It is null for a top-level comment.
- `retrievedAt` (string): The UTC time when the Actor saved this result.
- `source` (string): The technical name of the public YouTube website data source used by the Actor.

## Input settings

- `startUrls` (array, required): Add 1–50 public videos. Use an 11-character video ID or a supported HTTPS watch, youtu.be, Shorts, or live video URL. Duplicate videos are processed once.
- `sort` (string): Choose the order shown by YouTube. A pinned comment can appear before other comments in either order.
- `maxComments` (integer): The most comments and replies to save across all videos in this run. Both types count toward this number and the price. The Actor automatically selects safe request, time, concurrency, and connection settings for this limit. Runs requesting 4,000–10,000 results use Residential US proxy; smaller runs use a direct connection.
- `maxTopLevelCommentsPerVideo` (integer): Top-level comments to save for each video. Replies load after these rows. For replies, set this lower than maxComments so the total limit has room for them. The API default is 10,000.
- `includeReplies` (boolean): Load replies after top-level comments. Set maxTopLevelCommentsPerVideo lower than maxComments to leave room for replies. Every saved reply counts toward maxComments and the price.
- `maxRepliesPerComment` (integer): The most replies to save for one top-level comment. Set 0 to save no replies.
- `maxRequestsPerVideo` (integer): Managed safety ceiling for one video. The visual Input form keeps the release-tested value automatically.
- `maxTotalRequests` (integer): Managed safety ceiling for the whole run. The visual Input form keeps the release-tested value automatically.
- `concurrency` (integer): Managed concurrency. The Actor processes one video at a time for predictable pagination and proxy use.
- `maxRunSeconds` (integer): Managed run-time ceiling. The Actor keeps the release-tested 1,800-second limit and reserves time to save its report.
- `proxyConfiguration` (object): Managed automatically from Maximum total results. Runs below 4,000 use direct access; runs from 4,000 through 10,000 use the release-tested Residential US route. This hidden legacy field remains accepted for API compatibility.

## Step by step on Apify

1. Open Input. A new form suggests a public Blender video in `startUrls`.
2. Keep that example or add your public video URL or ID.
3. Keep `sort=TOP`, `maxComments=100`, and `includeReplies=false` for a first run.
4. Click Start. Set a maximum charge in Run options when needed.
5. Open Comments and replies. Check `videoId`, `text`, and `isReply`.
6. Open Run summary to check the result and stop reason for each video.

## Use cases

| Task | Input choice | Key fields | Next step |
|---|---|---|---|
| Read feedback | One video, `TOP`, small `maxComments` | `text`, `likeCount`, `videoId` | Export a table for review |
| Read recent comments | `sort=NEWEST` | `publishedTimeText`, `topLevelPosition` | Check the displayed source order |
| Study a discussion | Replies on, smaller top-level cap | `isReply`, `parentCommentId`, `threadId` | Group rows by parent |
| Match repeat exports | Same video in later runs | `id`, `recordKey`, `retrievedAt` | Deduplicate in your own system |

## Tips

- Choose Newest order to read fresh comments first.
- Set a total row limit to control cost.
- Use comment IDs to remove duplicates between exports.

## Sample result

```json
{
  "itemType": "comment",
  "videoId": "aqz-KE-bpKQ",
  "videoUrl": "https://www.youtube.com/watch?v=aqz-KE-bpKQ",
  "isReply": false,
  "parentCommentId": null,
  "likeCount": 1900,
  "publishedAt": null,
  "sort": "TOP",
  "topLevelPosition": 1,
  "replyPosition": null,
  "retrievedAt": "2026-10-08T09:17:19.761Z",
  "source": "youtube-innertube"
}
```

## Use it from code

Actor ID: `cliqtomedia/youtube-comments-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/youtube-comments-scraper").call(run_input={
    "startUrls": [
        "https://www.youtube.com/watch?v=aqz-KE-bpKQ"
    ],
    "sort": "TOP"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~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=aqz-KE-bpKQ"], "sort": "TOP"}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/youtube-comments-scraper")
result = tool.invoke({"run_input": {"startUrls": ["https://www.youtube.com/watch?v=aqz-KE-bpKQ"], "sort": "TOP"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Hear what people say about you](https://cliqtomedia.com/actors/use-cases/social-listening/): Find what people say about your brand and your topic on Bluesky, Hacker News, YouTube and more.
- [Find the right creators, fast](https://cliqtomedia.com/actors/use-cases/creator-outreach/): Find podcasts, YouTube channels and newsletters in your niche, with public contact details.

## Similar tools

- [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/)
- [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/)
- [Audio & Podcast Transcriber (Speech to Text)](https://cliqtomedia.com/actors/audio-video-transcriber/)
- [Social Video Downloader: TikTok, Instagram, X - No Login](https://cliqtomedia.com/actors/social-video-downloader/)
- [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/)
- [Kick Live Streams & Viewer Count (Official API), No Login](https://cliqtomedia.com/actors/kick-channels/)
