YouTube Video Details API — Views, Likes, Tags & Captions avatar

YouTube Video Details API — Views, Likes, Tags & Captions

Pricing

$4.00 / 1,000 videos

Go to Apify Store
YouTube Video Details API — Views, Likes, Tags & Captions

YouTube Video Details API — Views, Likes, Tags & Captions

Title, channel, views, likes, duration, publish date, description, tags, category, chapters, caption languages and thumbnails for any YouTube video link or id. No API key. Unofficial YouTube API.

Pricing

$4.00 / 1,000 videos

Rating

0.0

(0)

Developer

yestrue

yestrue

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

Everything the public watch page knows about a YouTube video as one clean JSON record: title, channel (id, name, handle, subscribers), exact view count, likes, comment count, duration, publish and upload dates, full description, keyword tags, category, chapters, the list of caption languages, thumbnails, hashtags, family-safe and unlisted flags and the number of countries the video is available in. Give it watch links, youtu.be short links, Shorts, embed or live links, or bare video ids. No API key, no quota, no cookies, no downloads — built on YouTube's public watch pages and its public oEmbed endpoint.

Try it in 1 minute:

  1. Press Start — the prefilled input reads two videos: "Never Gonna Give You Up" (a watch link) and "Me at the zoo" (a youtu.be link).
  2. Seconds later the Output tab shows both records with views, likes, comments, duration, dates, tags, chapters, caption languages and thumbnails.
  3. Download JSON, CSV or Excel, or paste your own list — hundreds of links, one per line.

Price: $4.00 per 1,000 videos (one video = one record). Videos that do not exist, age-restricted or private videos, invalid inputs and reduced records (title, channel and thumbnail only) are free.

Use it to:

  • Track views, likes and comments of your own or competitors' videos on a schedule and chart their growth.
  • Enrich a list of video links from a spreadsheet, CRM or content calendar with title, channel, duration, category and tags.
  • Audit which videos have captions (and in which languages) before ordering transcripts or translations.
  • Pull chapters and descriptions to build show notes, timestamps or an index of a channel's catalogue.
  • Feed an AI agent or RAG pipeline with structured video metadata instead of scraping HTML yourself.

How it works

  1. Inputs are parsed and deduplicated: watch?v=, youtu.be/, /shorts/, /embed/, /live/, mobile and music hosts, links with t= or list= parameters, and bare 11-character ids. Anything else gets a free INVALID_INPUT record.
  2. The watch page (youtube.com/watch?v=<id>&hl=en&gl=US, desktop browser headers, no cookies) is fetched through Apify's residential proxies — YouTube withholds the page data from datacenter IPs, so they are the normal route here, not a retry. The page's embedded ytInitialPlayerResponse gives the video details, microformat (dates, category, flags, countries) and the caption track list; ytInitialData gives likes, comment count, chapter markers, hashtags and the channel's subscriber count.
  3. Chapters come from the page's chapter markers; when a page has none, from timestamp lines in the description (0:00 Intro, 1:52 - Bridge), applying YouTube's own rule (first at 0:00, in order, at least three).
  4. When YouTube withholds the page data — the "Sign in to confirm you're not a bot" check, a consent interstitial — the public oEmbed endpoint still gives title, channel and thumbnail: you get a reduced record with status: "REDUCED", source: "oembed" and the reason in warnings — and it is free. No bot check is bypassed and no sign-in is used.
  5. A video that does not exist is a free NOT_FOUND; an age-restricted or private video (sign-in required) is a free FAILED. Phone numbers and e-mail addresses are removed from descriptions. Caption tracks are listed, never downloaded.

Input

FieldWhat it does
videoUrlsVideos to read, one per line: watch link, youtu.be link, Shorts/embed/live link or 11-character id.
includeDescriptionAdd the full description (default on).
includeChaptersAdd chapters [{ title, startSeconds, startTime }] (default on).
includeCaptionsListAdd the caption languages on offer (default on).
includeTagsAdd the uploader's keyword tags (default on).
languageYouTube interface language for the page, hl code (default en).
maxConcurrencyParallel page fetches (default 3).
proxyConfigurationResidential proxies by default (the normal route for this Actor).

Output

One record per video:

FieldWhat it is
videoId, url, titleIdentity and canonical watch URL
channel{ id, name, url, handle, subscribers }
views, likes, commentCountExact views; likes (exact when the page has it); comments as the rounded count YouTube shows, as integers — null when hidden or off
durationSeconds, durationLength in seconds and as M:SS / H:MM:SS
publishedAt, uploadDateISO 8601 dates
description, tags[], category, hashtags[]What the video is about
chapters[]{ title, startSeconds, startTime } from the page's markers or the description
captionLanguages[], hasCaptions{ languageCode, name, isAutoGenerated } per caption track on offer
thumbnails[], thumbnailAll sizes { url, width, height } and the largest URL
isLive, isLiveContent, isFamilySafe, isUnlisted, availableCountriesCountFlags and reach
source, warnings[]watch for a full record, oembed for a reduced one; what could not be read and why
input, status, error, scrapedAtWhat you gave, OK / NOT_FOUND / FAILED / INVALID_INPUT, the reason, and when

Example

{
"input": "https://youtu.be/dQw4w9WgXcQ",
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channel": { "id": "UCuAXFkgsw1L7xaCfnd5JJOw", "name": "Rick Astley", "url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw", "handle": "@RickAstleyYT", "subscribers": 4560000 },
"views": 1703456789,
"likes": 18012345,
"commentCount": 2300000,
"durationSeconds": 213,
"duration": "3:33",
"publishedAt": "2009-10-25T06:57:33.000Z",
"uploadDate": "2009-10-25T06:57:33.000Z",
"description": "The official video for “Never Gonna Give You Up” by Rick Astley, remastered in 4K.\n\nChapters:\n0:00 - Intro\n0:18 - Verse 1\n0:43 - Chorus\n1:52 - Bridge",
"tags": ["rick astley", "Never Gonna Give You Up", "rickroll", "4K", "Pop"],
"category": "Music",
"chapters": [
{ "title": "Intro", "startSeconds": 0, "startTime": "0:00" },
{ "title": "Verse 1", "startSeconds": 18, "startTime": "0:18" },
{ "title": "Chorus", "startSeconds": 43, "startTime": "0:43" },
{ "title": "Bridge", "startSeconds": 112, "startTime": "1:52" }
],
"captionLanguages": [
{ "languageCode": "en", "name": "English", "isAutoGenerated": false },
{ "languageCode": "en", "name": "English (auto-generated)", "isAutoGenerated": true },
{ "languageCode": "es", "name": "Spanish", "isAutoGenerated": false }
],
"hasCaptions": true,
"thumbnails": [
{ "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg", "width": 336, "height": 188 },
{ "url": "https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/maxresdefault.webp", "width": 1920, "height": 1080 }
],
"thumbnail": "https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/maxresdefault.webp",
"isLive": false,
"isLiveContent": false,
"isFamilySafe": true,
"isUnlisted": false,
"hashtags": ["#RickAstley", "#NeverGonnaGiveYouUp", "#4K"],
"availableCountriesCount": 26,
"source": "watch",
"warnings": [],
"status": "OK",
"error": null,
"scrapedAt": "2026-10-19T12:00:00.000Z"
}

FAQ

Is this an official API? No, it's an unofficial API built on public pages — YouTube's watch pages and its public oEmbed endpoint, which need no key and no sign-in. The data is what the watch page itself shows; this Actor only shapes it into stable JSON records. YouTube's official Data API needs a key and has a daily quota; this one does not.

Why is a record source: "oembed" with warnings? YouTube sometimes serves a "Sign in to confirm you're not a bot" check or a cookie-consent page instead of the watch page. Those are not bypassed. The public oEmbed endpoint still answers with title, channel and thumbnail, so you get a free REDUCED record and the reason in warnings; the other fields are null. In our tests roughly one video in four was served that check even through residential proxies; run those videos again later.

Why is a video FAILED or NOT_FOUND? NOT_FOUND: the id does not exist or the video was removed. FAILED with "sign-in required": the video is age-restricted or private — reading it needs a signed-in account, which this Actor never uses. Both are free.

Are likes and comment counts exact? Views are exact. Likes are exact when the page carries the full number (it usually does), otherwise parsed from the rounded button text ("1.2M" → 1200000). The comment count is the rounded number YouTube shows ("2.3M" → 2300000). Hidden likes and disabled comments come back as null.

Can I get transcripts? No. This Actor lists the caption languages on offer (manual and auto-generated) so you know what exists, but never downloads caption tracks or transcripts.

Like it? A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.