YouTube comments data API
One comment, or reply, posted on a YouTube video. To get these records, set mode to comments, which reads videoUrls, channelUrls, includeReplies, and commentSort.
- Record type
comment- Fields
- 23
- From
- $1.80 per 1,000 records
- Billed as
comment
Example request and record
The request below is the one this record answers, taken from a real run. The names, usernames, photos and contact details of people in it are fictional.
{ "source": "youtube", "type": "comment", "commentId": "Ugzroga5yT3Eivz5FIN4AaABAg", "url": "https://www.youtube.com/watch?v=9bZkp7q19f0&lc=Ugzroga5yT3Eivz5FIN4AaAB… "videoId": "9bZkp7q19f0", "parentCommentId": null, "isReply": false, "text": "6 billion views btw.", "publishedTimeText": "2 minutes ago", "publishedAt": "2026-09-20T19:37:34.604Z", "isEdited": false, "likeCount": 1, "replyCount": 0, "isPinned": false, "isHearted": false, "heartedBy": null, "authorName": "@example_user_1", "authorChannelId": "UCexample100000000000000", "authorUrl": "https://www.youtube.com/@example_user_1", "authorAvatar": "https://example.com/avatars/1.jpg", "authorIsVerified": false, "authorIsCreator": false, "authorIsArtist": false, "translateable": true, "videoTitle": "PSY - GANGNAM STYLE(강남스타일) M/V", "totalCommentCount": 5464835, "id": "Ugzroga5yT3Eivz5FIN4AaABAg", "event": "comment", "collectedAt": "2026-09-20T19:39:34.604Z"}Each field name links to its row in the field table. Long values are shortened.
| Field | Type | What it holds |
|---|---|---|
videoId | string | ID of the video this comment belongs to. |
likeCount | integer | Like count as an integer, null when unavailable. |
commentId | string | Comment's ID. |
parentCommentId | null | ID of the comment this one replies to, or null for a top-level comment. |
isReply | boolean | True when the comment is a reply to another comment rather than a top-level comment. |
text | string | Comment body text, or null. |
publishedTimeText | string | Publish time as YouTube's own relative display text, for example "3 weeks ago (edited)". |
publishedAt | string | Best-effort ISO 8601 timestamp derived from the relative publish label; null when the label can't be parsed. |
isEdited | boolean | True when the comment text carries a "(edited)" marker. |
replyCount | integer | Number of replies to this comment, as an integer; 0 when there are none. |
isPinned | boolean | True when the comment is pinned to the top of its thread. |
isHearted | boolean | True when the video owner hearted the comment. |
heartedBy | null | string | Channel handle of whoever hearted the comment, usually the video owner; null when not hearted. |
authorName | string | Commenter's display name, or null. |
authorChannelId | string | Commenter's channel ID, or null. |
authorUrl | string | https URL of the commenter's channel, or null. |
authorAvatar | string | URL of the commenter's avatar image, or null. |
authorIsVerified | boolean | True when the commenter's channel has YouTube's verified badge. |
authorIsCreator | boolean | True when the commenter is the video's own uploader. |
authorIsArtist | boolean | True when the commenter is tagged as the video's artist. |
translateable | boolean | True when YouTube offers a translate button for this comment. |
videoTitle | string | Title of the video this comment belongs to. |
totalCommentCount | integer | Total comment count for the video this comment belongs to, as an integer, or null. |
Fields
Every field of comment records, read from real YouTube records. Where a field does not apply to an item it is null or an empty list, not left out. Each record starts with the envelope: source, type, event, id, url, collectedAt.
| Field | Type | What it holds | Present on |
|---|---|---|---|
videoId | string | ID of the video this comment belongs to. | All |
likeCount | integer | Like count as an integer, null when unavailable. | All |
commentId | string | Comment's ID. | All |
parentCommentId | null | ID of the comment this one replies to, or null for a top-level comment. | All |
isReply | boolean | True when the comment is a reply to another comment rather than a top-level comment. | All |
text | string | Comment body text, or null. | All |
publishedTimeText | string | Publish time as YouTube's own relative display text, for example "3 weeks ago (edited)". | All |
publishedAt | string | Best-effort ISO 8601 timestamp derived from the relative publish label; null when the label can't be parsed. | All |
isEdited | boolean | True when the comment text carries a "(edited)" marker. | All |
replyCount | integer | Number of replies to this comment, as an integer; 0 when there are none. | All |
isPinned | boolean | True when the comment is pinned to the top of its thread. | All |
isHearted | boolean | True when the video owner hearted the comment. | All |
heartedBy | null | string | Channel handle of whoever hearted the comment, usually the video owner; null when not hearted. | All |
authorName | string | Commenter's display name, or null. | All |
authorChannelId | string | Commenter's channel ID, or null. | All |
authorUrl | string | https URL of the commenter's channel, or null. | All |
authorAvatar | string | URL of the commenter's avatar image, or null. | All |
authorIsVerified | boolean | True when the commenter's channel has YouTube's verified badge. | All |
authorIsCreator | boolean | True when the commenter is the video's own uploader. | All |
authorIsArtist | boolean | True when the commenter is tagged as the video's artist. | All |
translateable | boolean | True when YouTube offers a translate button for this comment. | All |
videoTitle | string | Title of the video this comment belongs to. | All |
totalCommentCount | integer | Total comment count for the video this comment belongs to, as an integer, or null. | All |
Options
These inputs and switches change what comes back. Every request also takes maxItems and maxItemsPerInput.
| Option | Type | Default | What it does |
|---|---|---|---|
videoUrls | array | none | watch?v=, youtu.be, /shorts/ URLs or bare 11-char ids. Batch as many as you like. |
channelUrls | array | none | e.g. @example_channel, https://www.youtube.com/@example_channel, UCexample000000000000000. In video / comments / transcript mode every video of the channel is processed (up to Max results per input). |
includeReplies | boolean | false | In comments mode, also fetch the reply threads under each top-level comment. |
commentSort | string | "top" | In comments mode, how to order the comments: top or newest first. |
maxItemsPerInput | integer | 500 | Maximum results per input: videos per channel/playlist, comments per video, or results per query. |
YouTube comments pricing
You pay once for each record you receive, at the price of the event it carries. A request that returns nothing costs nothing.
| Event | Per 1,000 records | Per record |
|---|---|---|
comment | $1.80 | $0.00180 |
Edge cases
- A video with comments turned off returns no record and costs nothing.
- With
includeReplies: true, the replies under each comment come back too, each billed as its owncommentrecord. maxItemsPerInputcaps the comments per video, 500 unless you set it.