YouTube data, ready when you are.

Channels, videos and comments from YouTube.

Try in playground From $0.00045 a record · $0.10 free

What you can get.

  • $0.00045per record

    Channels

    Channel cards for up to ten channels, by @handle, UC… id or pasted channel URL. `include.videos` adds each channel's recent videos to the same answer.

    Try it →
  • $0.00045per record

    Videos

    One channel's recent videos with views, likes and comments. Includes the channel card when held. A date floor always fetches fresh.

    Try it →
  • $0.00045per record

    Comments

    Top comments on up to ten VIDEOS, by watch/shorts URL or bare video id. Commenters are free text. Not corpus members.

    Try it →

What the data looks like.

handlenamedescriptioncountryisVerifiedjoinedOnsubscriberstotalVideostotalViewschannelIdavatarUrlbannerUrldetails
@mirapilatesMira PilatesShort pilates classes you can do at home.INtrue2019-03-11412,00031852,100,000495749829https://img.youtube.com/mira-pilates.jpghttps://img.youtube.com/mira-pilates.jpg
  • {}
@northfoldhqNorthfoldFinance, made calmer.GBfalse2020-07-0218,400961,240,0003181161809https://img.youtube.com/northfold.jpghttps://img.youtube.com/northfold.jpg
  • {}
@cookwithkaiCook with KaiWeeknight recipes in under 30 minutes.SGtrue2016-11-20905,000512210,400,0002482421620https://img.youtube.com/cook-with-kai.jpghttps://img.youtube.com/cook-with-kai.jpg
  • {}
13 fields, scroll sideways for all. Example rows: made-up names, real field names. Live calls return real data.

For developers

API reference.

One endpoint, POST /v1/youtube. Open an operation to see its fields.

Read the docs
Channelschannels

Channel cards for up to ten channels, by @handle, UC… id or pasted channel URL. `include.videos` adds each channel's recent videos to the same answer.

FieldTypeMeaning
subjects *list of string · 1-10 items@handles, UC… ids or channel URLs.
includeobject
include.videosobject
include.videos.limitinteger · 1-50Recent videos to fetch per channel, newest first; 1-50.
include.videos.sincestring · YYYY-MM-DDOnly videos published on or after this day (YYYY-MM-DD).

Response fields, each row of data

FieldType
handlestring
channelIdstring
namestring
descriptionstring
avatarUrlstring
bannerUrlstring
countrystring
isVerifiedboolean
joinedOnstring
linkslist of string
subscribersinteger
totalVideosinteger
totalViewsinteger
channelUrlstring
canonicalHandlestring
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · channels
curl -X POST https://apiforagents.dev/v1/youtube \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"channels","subjects":["@mkbhd"]}'

Example response rows

data · made-up names, real field names
[
  {
    "handle": "@mirapilates",
    "name": "Mira Pilates",
    "description": "Short pilates classes you can do at home.",
    "country": "IN",
    "isVerified": true,
    "joinedOn": "2019-03-11",
    "subscribers": 412000,
    "totalVideos": 318,
    "totalViews": 52100000,
    "channelId": "495749829",
    "avatarUrl": "https://img.youtube.com/mira-pilates.jpg",
    "bannerUrl": "https://img.youtube.com/mira-pilates.jpg",
    "details": {}
  },
  {
    "handle": "@northfoldhq",
    "name": "Northfold",
    "description": "Finance, made calmer.",
    "country": "GB",
    "isVerified": false,
    "joinedOn": "2020-07-02",
    "subscribers": 18400,
    "totalVideos": 96,
    "totalViews": 1240000,
    "channelId": "3181161809",
    "avatarUrl": "https://img.youtube.com/northfold.jpg",
    "bannerUrl": "https://img.youtube.com/northfold.jpg",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try channels in the playground Examples and pricing for channels
Videosvideos

One channel's recent videos with views, likes and comments. Includes the channel card when held. A date floor always fetches fresh.

FieldTypeMeaning
subject *string · ≤400 charsOne @handle, UC… id or channel URL.
limitinteger · 1-50
sincestring · YYYY-MM-DD

Response fields, each row of data

FieldType
videoIdstring
titlestring
descriptionstring
kindstring
publishedAtstring
durationSinteger
categorystring
keywordslist of string
isLiveboolean
thumbnailUrlstring
permalinkstring
viewsinteger
likesinteger
commentsinteger
channelHandlestring
channelNativeIdstring
channelNamestring
channelUrlstring
channelSubscribersstring
channelBadgeslist of string
captionslist of object
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · videos
curl -X POST https://apiforagents.dev/v1/youtube \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"videos","subject":"@mkbhd","limit":10}'

Example response rows

data · made-up names, real field names
[
  {
    "channelHandle": "@cookwithkai",
    "title": "One-pan laksa in 25 minutes",
    "kind": "video",
    "publishedAt": "2026-10-09",
    "durationS": 902,
    "category": "Howto & Style",
    "views": 1210000,
    "likes": 41200,
    "comments": 1830,
    "keywords": [
      "laksa",
      "one pan",
      "weeknight"
    ],
    "videoId": "2831094151",
    "isLive": false,
    "thumbnailUrl": "https://img.youtube.com/one-pan-laksa-in-25-minutes.jpg",
    "permalink": "https://www.youtube.com/one-pan-laksa-in-25-minutes-1000",
    "channelNativeId": "247899388",
    "details": {}
  },
  {
    "channelHandle": "@cookwithkai",
    "title": "Crispy rice, 3 ways",
    "kind": "short",
    "publishedAt": "2026-10-06",
    "durationS": 48,
    "category": "Howto & Style",
    "views": 2830000,
    "likes": 120400,
    "comments": 2210,
    "keywords": [
      "rice",
      "shorts"
    ],
    "videoId": "2788502292",
    "isLive": false,
    "thumbnailUrl": "https://img.youtube.com/crispy-rice-3-ways.jpg",
    "permalink": "https://www.youtube.com/crispy-rice-3-ways-1001",
    "channelNativeId": "3627234726",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try videos in the playground Examples and pricing for videos
Commentscomments

Top comments on up to ten VIDEOS, by watch/shorts URL or bare video id. Commenters are free text. Not corpus members.

FieldTypeMeaning
subjects *list of string · 1-10 itemsWatch/shorts URLs or bare video ids.
limitinteger · 1-100

Response fields, each row of data

FieldType
commentIdstring
authorstring
authorChannelIdstring
bodystring
likesinteger
repliesinteger
postedAtstring
isOwnerboolean
detailsobject

Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

example request · comments
curl -X POST https://apiforagents.dev/v1/youtube \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"comments","subjects":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"limit":50}'

Example response rows

data · made-up names, real field names
[
  {
    "author": "@ravi_k",
    "body": "Made this last night, the whole family loved it.",
    "likes": 812,
    "replies": 14,
    "postedAt": "2026-10-10",
    "isOwner": false,
    "commentId": "2563345527",
    "authorChannelId": "2543720091",
    "details": {}
  },
  {
    "author": "@lena.m",
    "body": "Can I use coconut cream instead of milk?",
    "likes": 236,
    "replies": 3,
    "postedAt": "2026-10-10",
    "isOwner": false,
    "commentId": "1328958082",
    "authorChannelId": "1219906403",
    "details": {}
  }
]

An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.

Try comments in the playground Examples and pricing for comments
Historyhistoryfree

The stored time series. Free, reads only what captures already wrote.

FieldTypeMeaning
subjects *list of string · 1-10 items@handles, UC… ids or channel URLs.
metricenumsubscribers · total_videos · total_views
daysinteger · 1-730
Try history in the playground

Guides and ideas.

Use it from your tools.

More in social.

All platforms