Pricing
from $0.99 / 1,000 results
YouTube Video Detail Scraper
Fetch a YouTube video's metadata β title, channel, views, likes label, description, upload date, keywords, thumbnails. No login.
Pricing
from $0.99 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract rich metadata for any YouTube video in bulk β title, channel, view count, description, thumbnails, keywords, upload date, category, and country availability β in a clean structured JSON output.
Why use this actor
- No account / no login required β just give it a YouTube video ID, watch URL, short URL, or Shorts URL.
- No API key needed and no quota β unlike the YouTube Data API, this actor has no daily request cap and no API key to manage.
- Flexible input β 11-character video IDs, full
youtube.com/watch?v=...URLs,youtu.be/...short links, andyoutube.com/shorts/...Shorts URLs are all accepted in the same list. - Live view count β the
viewCountreflects the count YouTube shows on the page at the moment of scraping, not a cached or aggregated number. - Bulk input β pass a list of videos in one run; one clean dataset row per video.
- Status-aware β private, removed, age-restricted, and members-only videos surface as a structured
_errorenvelope so you can triage failures. - Stable JSON output suitable for pipelines, spreadsheets, and databases β every row carries
_input,_source,_scrapedAtenvelope fields so you can join results back to your input list.
How it works
- You provide a list of YouTube videos as IDs or URLs (any of the supported URL shapes).
- The actor opens each video's public watch page and reads the metadata block the same way the YouTube web app does, then assembles a flat JSON record.
- Unavailable videos (private, removed, age-restricted, region-blocked) return a structured
_errorinstead of crashing the run. - Results stream into your dataset, ready to download as JSON, CSV, or Excel.
You do not need to manage scrapers, browsers, or rotating IPs β all handled internally.
Input
{"videos":["dQw4w9WgXcQ","https://www.youtube.com/watch?v=jNQXAC9IVRw"],"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["DATACENTER"]}}
| Field | Type | Description |
|---|---|---|
videos | array | List of YouTube videos to scrape. Accepts 11-character IDs (dQw4w9WgXcQ), full watch URLs (https://www.youtube.com/watch?v=...), short URLs (https://youtu.be/...), and Shorts URLs (https://www.youtube.com/shorts/...). |
proxyConfiguration | object | Apify Proxy settings. Datacenter proxy is fine for most workloads. |
Output
Input: dQw4w9WgXcQ
{"_input":"dQw4w9WgXcQ","_source":"S1-primary","_scrapedAt":"2026-05-18T10:42:41.835602+00:00","videoId":"dQw4w9WgXcQ","title":"Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","lengthSeconds":"213","viewCount":"1773571537","likesLabel":"","channelId":"UCuAXFkgsw1L7xaCfnd5JJOw","channelTitle":"Rick Astley","channelUrl":"https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw","isLive":false,"isPrivate":false,"shortDescription":"The official video for βNever Gonna Give You Upβ by Rick Astley. \n\nNever: The Autobiography OUT NOW! \nFollow this link to get your copy and listen to Rickβs βNeverβ playlist ... (truncated)","thumbnails":[{"url":"https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=...","width":168,"height":94},{"url":"https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=...","width":336,"height":188},{"url":"https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/maxresdefault.webp","width":1920,"height":1080}],"keywords":["rick astley","Never Gonna Give You Up","rick roll","rickrolled","80s music"],"uploadDate":"2009-10-24T23:57:33-07:00","publishDate":"2009-10-24T23:57:33-07:00","category":"Music","isFamilySafe":true,"availableCountries":["AD","AE","AF","AG","AI","... 240 more"]}
| Field | Type | Description |
|---|---|---|
_input | string | The video ID or URL exactly as you supplied it. Use this to join results back to your input list. |
_source | string | Internal tag for the path used to fetch the record. S1-primary means the fastest, richest path; values starting with S2- indicate a fallback was used. |
_scrapedAt | string | ISO-8601 UTC timestamp when the record was scraped. |
videoId | string | The canonical 11-character YouTube video ID. |
title | string | Video title. |
lengthSeconds | string | Video duration in seconds (numeric string, as returned by YouTube). |
viewCount | string | Total view count at the moment of scraping (numeric string). |
likesLabel | string | Accessibility label for the like button (e.g. "like this video along with 1.2K other people"). Empty string if the video has no public like count. YouTube no longer exposes the raw integer publicly. |
channelId | string | Channel ID (the UC... slug). Stable across channel renames. |
channelTitle | string | Channel display name. |
channelUrl | string | Canonical channel URL (https://www.youtube.com/channel/UC...). |
isLive | boolean | true if the video is or was a live stream. |
isPrivate | boolean | true if the video is private. |
shortDescription | string | Video description text (preserves line breaks). |
thumbnails | array | List of thumbnail variants. Each item has url, width, height. The largest is usually maxresdefault.webp (1920x1080). |
keywords | array | List of video tags / keywords set by the uploader. May be empty. |
uploadDate | string | ISO-8601 timestamp the video was uploaded. |
publishDate | string | ISO-8601 timestamp the video was published (often equal to uploadDate; differs for premiered videos). |
category | string | YouTube category name (e.g. "Music", "Gaming", "Education"). |
isFamilySafe | boolean | true if YouTube classifies the video as family-safe. |
availableCountries | array | ISO 3166-1 alpha-2 country codes where the video is viewable. |
Error envelope
Videos that are private, removed, age-restricted, or otherwise unavailable return a structured error instead of crashing the run:
{"_input":"abc123XYZ45","_source":"S1-primary","_scrapedAt":"2026-05-18T10:42:43.123456+00:00","_error":"login_required","_errorDetail":"Sign in to confirm your age"}
Common _error values: invalid_input, fetch_failed, parse_failed, login_required (age-restricted), unplayable (removed by uploader / copyright), error (private or deleted).
Filter on _error to triage failed rows.
Pricing
This actor is billed per result: $3.50 per 1,000 videos. Each successful video record = 1 result. Errors (not-found, removed, age-restricted) are not billed.
Other Sosmed Actors
| Platform | Actor | Best for |
|---|---|---|
| YouTube | YouTube Channel Scraper | Channel profile, subscriber count, video list |
| YouTube | YouTube Video Comments Scraper | Top-level + replies for any video |
| Twitch | Twitch Video Detail Scraper | VOD / clip metadata + streamer info |
| Bluesky | Bluesky Post Detail Scraper | Single post + author + thread context |
| Instagram Post Detail Scraper | Reel / image post + author + caption | |
| X (Twitter) | X Post Detail Scraper | Tweet + author + engagement counters |
| Reddit Post Detail Scraper | Post + subreddit + score + comment count |
Browse the full catalog at apify.com/xtracto.
Notes
- YouTube removed exact like counts in 2021;
likesLabelreturns the labeled string ("like this video along with 1.2K other people") which you can parse to an approximate integer. It is empty when YouTube does not surface a label for the video. viewCountis the live count at scrape time, not a real-time tick β it lags actual views by seconds to a few minutes.- Age-restricted videos return
_error: "login_required"β they require an authenticated session this actor does not provide. - Private or deleted videos return
_error: "error"with the YouTube-supplied reason in_errorDetail. - Live streams in progress return partial data β view count and duration may not be finalized.
- Region-blocked videos may succeed but with
availableCountriesexcluding your proxy location. Switch proxy region if you need a specific market.
