SFOLN

Catalogue / Social media data

YouTube Comments Scraper

sfoln/youtube-video-comments · Social media, Videos, Automation On request

Scrape comments from YouTube videos and Shorts, top or newest first: text, date, likes, reply count and author name, handle and channel, one JSON record per comment. $0.30 per 1,000 comments + $0.003 per page of ~20. No YouTube API key or login needed.

About

What it does

YouTube Comments Scraper gets comments from YouTube videos and Shorts, sorted by top or newest, one normalized record per comment: comment ID, text, publish date, likes, reply count, and the author's name, handle, channel ID and verification and creator flags. It's built for audience and sentiment research, community management, product feedback mining, dataset building and AI agents.

Price

Price per delivered record

EventPricePer 1,000Charged for
YouTube comment
youtube-comment
$0.0003$0.30 / 1,000Charged once per comment delivered as a dataset record. Video summary records are never charged.
YouTube comments page
youtube-comments-query
$0.003$3 / 1,000Charged once per page of comments (about 20) that delivered at least one new comment. Covers the per-request upstream fee. Also charged for an empty page the upstream billed (when the budget covers it).

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~youtube-video-comments/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"videos":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"maxCommentsPerVideo":20}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/youtube-video-comments"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~youtube-video-comments/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Get the 100 top comments of https://www.youtube.com/watch?v=dQw4w9WgXcQ and summarize what viewers are saying.

Input

Input fields

Enter YouTube video URLs or IDs. Each video produces one dataset record per comment plus one summary record per video.

FieldTypeDefaultMeaning
videos *arrayrequiredVideo URLs or IDs
youtube.com/watch, youtu.be, /shorts/ or /live/ URLs, or 11-character video IDs. Duplicates are removed. Accounts on the Apify free plan can process up to 10 videos per run.
maxCommentsPerVideointeger50Max comments per video
How many comments to return per video (1–500). Each delivered comment is one charged event, plus one page event per page of about 20. Range 1–500.
orderstring"top"Order
top = YouTube's "Top comments" ranking, newest = most recent first. One of "top", "newest".
maxVideosinteger100Max videos
Safety cap on the number of videos processed in this run. Range 1–1000.
concurrencyinteger4Concurrency
How many videos are fetched in parallel (1–8). Range 1–8.
itemTimeoutSecsinteger600Time limit per input (seconds)
Pagination for one video stops cleanly shortly before this limit (60–3600). Raise it for very large per-input limits. Range 60–3600.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified provider object to each result record.
Example input
{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "maxCommentsPerVideo": 20
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The video URL or ID as provided.
recordTypestringRecord type
comment (one per delivered comment, charged) | video (one summary per video, never charged) e.g. "comment"
positionintegerPosition
1-based position of the comment within its input
videoIdstring | nullVideo ID
videoUrlstring | nullVideo URL
orderstringOrder
Summary records only: top | newest
commentIdstring | nullComment ID
textstring | nullText
publishedAtstring | nullPublished at
ISO 8601, approximate
publishedTimeTextstring | nullPublished (relative)
likesnumber | nullLikes
replyCountnumber | nullReplies
isReplyboolean | nullIs reply
isPinnedboolean | nullPinned
isHeartedboolean | nullHearted by creator
authorNamestring | nullAuthor name
authorHandlestring | nullAuthor handle
authorChannelIdstring | nullAuthor channel ID
authorChannelUrlstring | nullAuthor channel URL
authorIsVerifiedboolean | nullAuthor verified
authorIsCreatorboolean | nullAuthor is the video creator
rowsDeliveredintegerComments delivered
Summary records only.
pagesFetchedintegerPages fetched
Summary records only.
pagesChargedintegerPages charged
Summary records only.
reachedEndbooleanReached end
Summary records only: the upstream reported no further pages.
stopReasonstringStop reason
Summary records only: limit | end | budget | max_pages | deadline | empty_pages | error
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
chargedEventstringCharged event
errorobjectError
warningsarrayWarnings
sourcestringSource
fetchedAtstringFetched at
Example record
{
  "input": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "recordType": "comment",
  "position": 1,
  "videoId": "dQw4w9WgXcQ",
  "videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "commentId": "UgwVfRopfS2F-WB3aF14AaABAg",
  "text": "I love how in the middle he said \"I've been able to work with 2 great coaches...\"",
  "publishedAt": "2025-01-23T23:14:02.948Z",
  "publishedTimeText": "9 days ago",
  "likes": 110,
  "replyCount": 5,
  "isReply": false,
  "isPinned": null,
  "isHearted": null,
  "authorName": "@SimonT80",
  "authorHandle": "SimonT80",
  "authorChannelId": "UC8JC3uSUmmXTCTKl-bgr1DA",
  "authorChannelUrl": "https://youtube.com/@SimonT80",
  "authorIsVerified": false,
  "authorIsCreator": false,
  "status": "ok",
  "charged": true,
  "chargedEvent": "youtube-comment",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents