YouTube Comment Scraper That Won't Quit
Pricing
from $0.40 / 1,000 results
YouTube Comment Scraper That Won't Quit
Scrape public YouTube comments and replies from video links or IDs. Export text, likes, authors and dates to CSV, Excel or JSON, with question excerpts and phrase search. No YouTube API key required.
Pricing
from $0.40 / 1,000 results
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
1
Bookmarked
18
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Security
Limited permissionsShare
Scrape public YouTube comments and replies from video links or IDs. Export comment text, likes, author details and source dates to CSV, Excel or JSON, with included question excerpts, recurring words and optional phrase search. No YouTube API key, login or customer-supplied cookies are required.
Paste your video links, choose Comments per video, and start. Standard YouTube videos, Shorts links and shortened youtu.be links are supported. Each delivered comment or reply becomes a separate dataset row. Non-empty short reactions and emoji-only comments are retained, even when author details are unavailable.
Built to keep useful results: continue to other videos, preserve collected comments, and retry empty access failures through fresh proxy sessions. Recovery shares the run's page and time limits. The summary shows attempts, delivered counts and stopping reasons.
Why use this YouTube comment scraper?
- Simple inputs: video links and a comment count, with a small ready-to-run example.
- Multiple videos: add several links in one run; repeated links to the same video are collected once.
- Top or newest comments: choose the order that suits your research.
- Optional replies: retain parent comment IDs so you can examine conversations.
- Included question analysis: find question-like comments, recurring words and literal phrase matches in the delivered sample.
- Clear collection status: see which videos returned comments, which failed, and whether a run stopped at a source, time or spending limit.
This Actor collects public comment data. It does not download video or audio, discover every video on a channel, collect live chat, or access private or restricted comments.
Checked with real comment collection
Cloud verification returned 400 top comments, 300 newest comments across three videos, and 200 comments including replies. Each run had unique comment IDs and matching dataset and analysis totals. The runs completed in approximately 8–26 seconds. Results and timing vary with the videos and source availability.
Quick start and input examples
- Open the Actor input form.
- Paste one or more YouTube video links or IDs.
- Choose Comments per video.
- Click Start, then open the dataset to preview and download your comments.
The example uses a public video and requests 5 real comments. It does not contain demonstration comments.
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"maxCommentsPerVideo": 5}
For newest comments and replies, expand Comment options, or send:
{"videoUrls": ["https://youtu.be/dQw4w9WgXcQ"],"maxCommentsPerVideo": 25,"includeReplies": true,"commentSort": "new","analysisQuery": "camera"}
Input options
| Form field | API field | What it does |
|---|---|---|
| YouTube video links or IDs | videoUrls | An array of public video links or 11-character video IDs. Repeated videos are deduplicated. |
| Comments per video | maxCommentsPerVideo | Maximum comments to deliver for each video. Default: 5. Replies count toward this limit. Zero skips collection. |
| Include replies | includeReplies | Include available replies as individual rows. Default: false. |
| Comment order | commentSort | top for YouTube's top-comment order or new for newest first. Default: top. |
| Find a phrase in comments | analysisQuery | Optional literal phrase searched within the comments delivered by this run. |
Expand Comment analysis in the input form to enter a phrase. The phrase search analyzes the returned sample; it does not filter what YouTube returns. For example, camera finds matching comment excerpts in Comment and question analysis.
Existing API clients can also set maxCommentPagesPerVideo to cap source page requests. When omitted, a bounded allowance is selected from the requested comment count. A low page limit can return fewer comments, especially with replies enabled. This technical option is hidden from the simple form.
Comment dataset and output example
Each dataset row from live collection is a comment or reply. Video metadata and collection status are also available in the Run summary output.
| Field | What you get |
|---|---|
record_type | comment for a delivered comment or reply. |
video_id, video_url, video_title | Video identifier, canonical link and title when available. |
comment_id, url | Native comment ID and a YouTube link containing that comment ID. |
text | Full comment text returned by the public source. |
author_name, author_channel_id, author_url, author_handle | Public author details when available. |
like_count, reply_count | Source-provided counts. Unknown counts remain null. |
parent_comment_id, depth | Reply relationship and nesting depth when the parent chain is known. |
published_text, published_at | Source age/date text and an absolute timestamp when available. |
is_pinned, is_hearted, author_is_channel_owner, verified | Source indicators when available. |
channel_id, channel_name, channel_url, view_count | Available video/channel context. |
scraped_at, dataInputSource, sourceVerified | Collection time and whether the source was fetched in this run. |
Relative ages such as “2 months ago” are preserved in published_text. An absolute publication timestamp is left null when only a relative age is available. Missing values remain null; a known zero or false value is retained. Reply totals, edited status and membership indicators are not guaranteed.
Illustrative output shape; these values are not a collected comment:
{"record_type": "comment","video_id": "dQw4w9WgXcQ","video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","comment_id": "example-comment-id","text": "Illustrative question: how was the audio recorded?","author_name": "Example author","like_count": 0,"reply_count": null,"parent_comment_id": null,"depth": 0,"published_text": "2 months ago","published_at": null,"dataInputSource": "web","sourceVerified": true}
Download the dataset in CSV, Excel, JSON or another format supported by Apify. Use the API or Apify integrations to connect the rows to a spreadsheet, database or analysis workflow.
Included comment and question analysis
Open Comment and question analysis in the run outputs to inspect:
- Question-like comments and links to the delivered records.
- Words that recur across multiple comments and repeated text.
- Matches for your optional phrase, with source-linked excerpts.
- Coverage of known numeric fields, including real zeros and missing values.
The report describes only the comments delivered by this run. A question-like excerpt is not a generated answer. This Actor does not infer sentiment, audience demographics, reach or growth, and it does not translate comments. No language model is used. The analysis is a separate run artifact and does not add charged comment rows.
Use cases
| User | Practical use |
|---|---|
| Creators and channel teams | Find audience questions and ideas to investigate in future videos. |
| Brands and marketers | Review product mentions, recurring feedback and questions across selected videos. |
| Researchers | Build structured comment samples for text analysis or external sentiment tools. |
| Community teams | Examine public discussion and reply relationships in a spreadsheet or dashboard. |
Python API example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("thescrapelab/Apify-YouTube-Comment-Scraper-2-0").call(run_input={"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"maxCommentsPerVideo": 25,"includeReplies": False,"commentSort": "top"})for comment in client.dataset(run["defaultDatasetId"]).iterate_items():print(comment["video_id"], comment.get("author_name"), comment["text"])analysis = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("EVIDENCE_ANALYSIS")print(analysis["value"])
APIFY_TOKEN authenticates your Apify account. A YouTube Data API key is not needed. Existing integrations can still supply providedRecords or providedDatasetId to process existing comments. Those fields are hidden in the form and retain their import behavior: supplied records are labeled sourceVerified: false, and the comment limit bounds the imported records scanned across that run.
Pricing and collection limits
Published result pricing starts at $0.40 per 1,000 delivered comments, with rates depending on your Apify plan, plus the Actor start charge. Check Pricing for current applicable rates. Separate video metadata and question analysis do not create additional charged dataset rows.
Start with a small sample. Comment counts are maximums, and a request for a large number is not a guarantee that every comment will fit in one run. Public availability, duplicates, replies, page allowances, YouTube blocking and spending limits can affect delivery. Live collection is bounded to approximately 100 seconds of useful work and 10,000 delivered comments per run, with time reserved to save summaries.
When a later source page fails, already collected comments are preserved and the summary reports a partial result. A video with disabled or unavailable comments produces a clear source status rather than a fabricated dataset row. Other supplied videos can still return results. If no requested video yields public comments, the run fails clearly. Start charges can still apply to failed runs.
FAQ and troubleshooting
Do I need a YouTube API key or account?
No. This workflow reads publicly accessible video comment data without customer-supplied YouTube credentials.
Can I collect comments from Shorts?
Public Shorts links are accepted and normalized to their video ID. Comment availability and source limits still apply.
Can I collect every comment?
Use a suitable maximum and inspect the run summary. The Actor returns a bounded sample and can stop at source, time, record or spending limits. It does not promise complete coverage of very large discussions.
Why are there fewer results than requested?
Comments can be hidden, removed or duplicated, replies may consume the limit, and YouTube may throttle requests. Open Run summary for per-video delivered counts and any source error. Try a smaller sample later if access is temporarily blocked.
What about private videos, age restrictions or disabled comments?
Those targets may fail or have no public comments. This Actor does not log in to access restricted content.
How do I report an issue?
For support, open the Issues tab and include the run ID, a public video link, requested count and expected behavior. Do not include tokens or private account information.
This Actor is independently developed by TheScrapeLab and is not affiliated with YouTube or Google.