YouTube Video Details Scraper — Creator Profile & Links
Pricing
Pay per usage
YouTube Video Details Scraper — Creator Profile & Links
Get complete video insights with the YouTube Video Details Scraper. Extract titles, descriptions, tags, stats, upload dates, and more. Perfect for data analysis, SEO, and content tracking. Fast, accurate, and scalable for single or bulk video URLs.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
YouTube Video Details Scraper — Creator Profile & Links
This YouTube video scraper takes a list of video URLs or IDs and returns full video metadata alongside the complete channel /about profile behind each video — joined date, country, subscriber/view/video counts, and the creator's external links unwrapped out of YouTube's redirect wrapper into clean, platform-labeled destinations. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. No YouTube account, API key, or OAuth consent screen is required to run it. Point it at a batch of video links once, and it comes back with the video and the person or channel behind it.
What is YouTube Video Details Scraper — Creator Profile & Links?
It's an Apify Actor that fetches video metadata for one or more YouTube video URLs or IDs and, for each one, harvests the channel's full /about page — not just the avatar most video scrapers keep. It returns title, description, view/like/comment counts, duration, resolution, tags, hashtags, thumbnails, and (optionally) a timed transcript, joined with the creator's joined date, channel age, country, subscriber/view/video counts, and their external links resolved to real destination URLs with a recognised platform label. No sign-in, cookies, or Google API credentials are read or required — every field comes from what a signed-out visitor can already see.
Query controls exposed in the input:
- 🎥 Batch of video links or IDs — full watch URLs,
youtu.beshort links,/shorts/links, or bare 11-character video IDs, mixed freely in one run - 🔢 A processing cap (
maxVideos) to run a cheap trial against a long list before committing to the full batch - 🧑🎨 Creator profile harvest toggle — full
/aboutpage vs. skip it entirely - 🔗 External link resolution toggle — unwrap YouTube's
redirect?q=wrapper into a clean URL, domain, and platform label - ⚡ Channel lookup de-duplication — fetch each channel's
/aboutpage once per run, not once per video - 📜 Transcript inclusion toggle — pull the caption track with real per-cue timestamps, or skip it for a faster metadata-only run
What data can you get with this Actor?
Four result types come back on every video row: the video's own metadata, the creator's channel profile, the creator's external links, and (optionally) the transcript.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Video metadata | title, description, published_date, duration_seconds, views, likes, comment_count, engagement_rate, resolution, category, language, live_status, upload_type, tags, hashtags, thumbnails | Performance tracking, content research, catalog building |
| Creator / channel profile | creatorName, creatorHandle, creatorChannelId, creatorCountry, creatorJoinedDate, creatorChannelAgeMonths, creatorSubscriberCount, creatorTotalViews, creatorVideoCount, plus the full nested creator object | Influencer vetting, channel due diligence, creator research |
| Creator external links | creatorLinks (array of title, url, domain, platform, redirectUrl), hasChannelLinks, creatorLinkCount | Outreach and contact discovery, cross-platform presence mapping |
| Transcript | transcript (array of start, dur, text cues), transcript_message | Content analysis, captioning, LLM ingestion, compliance review |
Creator Profile & Unwrapped External Links
This is the field set the competing YouTube scrapers reviewed for this README don't document. Instead of stopping at the channel avatar the base video-scraping pass already downloads, this Actor parses the same /about page HTML into a structured creator object — joined date, channel age in months, country, description, banner, verification badge, and subscriber/view/video counts as both sortable integers and YouTube's own display strings ("4.52M subscribers"). Any link the creator published in their channel links section arrives with YouTube's redirect?q= wrapper already unwrapped:
{"title": "Instagram","url": "https://www.instagram.com/officialrickastley/","domain": "instagram.com","platform": "Instagram","redirectUrl": "https://www.youtube.com/redirect?q=https%3A%2F%2Fwww.instagram.com%2F..."}
Coverage is honest about its limit: external links are only present when a creator actually published them — measured at 1 of 2 channels in testing. hasChannelLinks marks the difference; when a channel has none, creatorLinks is [], never a placeholder.
Transcript
When includeTranscript is on, the parser downloads the caption track and returns one cue per caption event with the real start time applied (tOffsetMs honored) — a caption parser that word-shreds every event into single-word rows sharing one timestamp is a documented defect this Actor's parser was built to avoid. Each cue carries start and dur in seconds and the merged text for that event, plus a transcript_message explaining the source track or why no transcript was available.
How does this Actor differ from the official YouTube Data API?
The YouTube Data API v3 (videos.list, channels.list) returns core video and channel statistics through authenticated REST calls, but it stops well short of what this Actor returns. Downloading actual caption text via captions.download requires OAuth authorization and is restricted to users with edit permission on the video — in practice, the video's own owner — so a third party cannot pull captions for someone else's video through the official API at all. Channel /about fields like joined date, country, and creator-published external links are not exposed as queryable API fields either.
| Feature | YouTube Data API v3 | This Actor |
|---|---|---|
| Access requirement | Google Cloud project, API key or OAuth | No account, key, or OAuth |
| Video metadata (views, likes, duration, tags) | Yes, via videos.list | Yes |
| Caption/transcript text for a video you don't own | Blocked — captions.download requires edit permission on the video | Yes, from the public caption track |
| Channel joined date, country, channel age | Not exposed as a field | Yes |
| Creator's external/social links, resolved and labeled | Not exposed | Yes, with domain and platform |
| Usage limits | Governed by a default daily quota Google allocates per project (10,000 units/day combined, per Google's YouTube Data API documentation) | Governed by the proxy configuration and run time you choose |
| Output shape | Separate calls per resource, joined by the caller | One joined JSON row per video |
Use the official API when you own the channel and need authenticated write access or guaranteed-fresh quota-metered statistics inside your own Google Cloud project. Use this Actor when you need the creator's public profile and external links joined to the video in one call, without provisioning API credentials.
How to scrape YouTube video details with this Actor?
- Open the Actor on its Apify Store page and click Try for free (or Run, if you already have it saved).
- Enter your video URLs or IDs in
videoLinks— one per line in the input editor, or as a JSON array. - Set the query controls you need:
maxVideosto cap the batch, and togglecreatorProfile,resolveCreatorLinks,dedupeChannelLookups, andincludeTranscriptfor the fields you actually want. - Start the run from the Apify Console, or trigger it via the API/CLI/schedule.
- Download the results as JSON or CSV once the run finishes, or stream them from the dataset while the run is still going.
{"videoLinks": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "9bZkp7q19f0"],"maxVideos": 2,"creatorProfile": true,"resolveCreatorLinks": true}
Running multiple video URLs in one job: videoLinks accepts an array, so a single run can process any number of URLs or bare video IDs in one job — mix full watch links, youtu.be links, /shorts/ links, and 11-character IDs freely. Videos are processed one at a time within the run; dedupeChannelLookups (default on) means a batch of many videos from the same handful of channels doesn't re-fetch each channel's /about page for every video, only once per unique channel.
⬇️ Input
All parameters are optional — the schema has no required fields — but at least one video URL or ID must resolve from videoLinks (or the legacy startUrls key) or the run fails immediately with a clear error before any request is made.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
videoLinks | No | array (string list) | One or more YouTube video links. Accepts full watch URLs, youtu.be short links, /shorts/ links, or bare 11-character video IDs. Playlist and channel URLs are rejected with a clear error instead of producing a malformed row. | ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "youtu.be/jNQXAC9IVRw"] |
maxVideos | No | integer, min 0, default 0 | Stop after this many videos. 0 processes every URL supplied. | 3 |
creatorProfile | No | boolean, default true | Fetch the full channel /about page — joined date, channel age, country, description, banner, verification, and subscriber/view/video counts as both integers and display strings. | true |
resolveCreatorLinks | No | boolean, default true | Unwrap YouTube's redirect?q= links into clean destination URLs with a domain and recognised platform label. | true |
dedupeChannelLookups | No | boolean, default true | Fetch each channel's /about page once per run and reuse it for every other video from that channel. | true |
includeTranscript | No | boolean, default true | Download the caption track and return timed cues. Turn off for a faster metadata-only run. | true |
proxySettings | No | object (proxy editor), default {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | Apify Proxy configuration. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
The original YouTube Video Details Scraper's startUrls and proxyConfiguration keys are also read and take precedence over videoLinks/proxySettings when both are present, so an existing input JSON built for that Actor runs unchanged here.
{"videoLinks": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://www.youtube.com/watch?v=jNQXAC9IVRw"],"maxVideos": 0,"creatorProfile": true,"resolveCreatorLinks": true,"dedupeChannelLookups": true,"includeTranscript": true,"proxySettings": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
⚠️ Common pitfall: switching proxySettings.useApifyProxy off does not fully disable proxy use — a failed direct attempt automatically escalates to a residential proxy session rather than failing the row, because YouTube reliably bot-walls repeated datacenter/direct requests ("Sign in to confirm you're not a bot"). Measured on an 8-video batch through Apify egress: datacenter succeeded on 1 of 8, residential on 7 of 8. Residential is the default for that reason and is billed by traffic, which is why dedupeChannelLookups exists — it's the main lever for controlling proxy cost on a run with repeat channels.
⬆️ Output
Results are typed, normalized JSON pushed to the Actor's default dataset, one row per input video — downloadable as JSON, CSV, Excel, or any other format the Apify dataset export supports. A successful row carries 42 top-level keys; a failed row carries the same 42 plus one additional error key describing what went wrong, which is why the dataset's default view (also 42 columns) does not surface error — it's specific to failure rows and sits outside the default column set.
Only rows where success is true are billed, under the pay-per-event charge video_result. Rows for videos that fail — private, deleted, unavailable, or an unrecoverable network error after every proxy attempt — are still written to the dataset with success: false and an error message, but are not charged.
Top-level fields:
| Field | Type | Description |
|---|---|---|
type | string | Always "video" |
video_id | string | The 11-character YouTube video ID |
title | string | Video title |
description | string | Full video description |
channel_id | string | The channel's real UC… channel ID |
channel_name | string | Channel display name |
channel_handle | string | Channel's @handle, or "" if none could be resolved |
uploader_id | string | The raw uploader identifier as yt-dlp reports it (kept for backward compatibility with the original Actor, whose channel_id field held this value) |
published_date | string | YYYY-MM-DD, or "" if unavailable |
duration_seconds | number | Video length in seconds |
views | number | View count |
likes | number | Like count |
comment_count | number | Comment count |
engagement_rate | number | (likes + comments) / views, rounded to 4 decimals; 0 when views is 0 |
resolution | string or null | Real maximum resolution read from the video's format list (e.g. "3840x2160"), null if no format carried height data |
category | string | Video category, first entry from yt-dlp's category list |
language | string | Video language code, default "en" |
live_status | string | Live status as reported by yt-dlp, default "none" |
upload_type | string | Always "normal" |
tags | array of strings | Video tags |
hashtags | array of strings | Hashtags parsed out of the description (#tag → tag) |
thumbnails | object | Keys among default, medium, high, standard, maxres, each a thumbnail URL — only sizes actually found are present |
channel | object | See channel object below |
transcript | array | See transcript cues below; [] if disabled or unavailable |
transcript_message | string | Explains the transcript source or why none was found |
creator | object | The full creator profile; see creator object below |
creatorChannelId | string or null | Same as creator.channelId |
creatorHandle | string or null | Same as creator.handle |
creatorName | string or null | Same as creator.name |
creatorCountry | string or null | Same as creator.country |
creatorJoinedDate | string or null | Same as creator.joinedDate (YYYY-MM-DD) |
creatorChannelAgeMonths | number or null | Same as creator.channelAgeMonths |
creatorSubscriberCount | number or null | Same as creator.subscriberCount |
creatorTotalViews | number or null | Same as creator.totalViews |
creatorVideoCount | number or null | Same as creator.videoCount |
creatorLinks | array | Same as creator.links; see creator link objects below |
hasChannelLinks | boolean | true if creatorLinks is non-empty |
creatorLinkCount | number | Length of creatorLinks |
creatorProfileSource | string | "about_page" on the first video from a channel, "cached" on every later video from the same channel, "unavailable" if the profile couldn't be fetched, "disabled" if creatorProfile was off |
success | boolean | true if the video was extracted successfully |
scrapedAt | string | UTC ISO-8601 timestamp of extraction |
inputUrl | string | The exact URL or ID you supplied for this row |
error | string | Failed rows only. Human-readable reason the row failed |
channel object:
| Field | Type | Description |
|---|---|---|
id | string | Channel's UC… ID |
name | string | Channel display name |
handle | string | Channel @handle |
url | string | Channel URL |
subscriberCount | string | Display string, e.g. "4520000 subscribers", "" if unknown |
subscriberCountInt | number or null | Same value as an integer |
logo | string | Avatar URL |
badges | array of strings | ["Verified"] if the video's channel is verified, else [] |
creator object (the full /about profile; all fields are null/empty until a successful fetch populates them — never a fabricated value):
channelId, handle, name, canonicalUrl, aboutUrl, description, country, joinedDateText, joinedDate, channelAgeMonths, channelAgeYears, subscriberCount, subscriberCountText, totalViews, viewCountText, videoCount, videoCountText, averageViewsPerVideo, isVerified, channelBadge, avatarUrl, avatarUrls, bannerUrl, links, linkCount, hasChannelLinks, profileFetched, profileError
isVerified comes from the video's own payload (channel_is_verified), while channelBadge reports what YouTube actually renders on the channel page — an Official Artist Channel carries "Official Artist Channel", not a generic checkmark label.
creatorLinks array items (also nested at creator.links):
| Field | Type | Description |
|---|---|---|
title | string or null | The link's display title on the channel page |
url | string | The resolved destination URL |
domain | string or null | Bare domain (instagram.com) |
platform | string or null | A recognised label (Instagram, X (Twitter), TikTok, Discord, Patreon, Twitch, LinkedIn, GitHub, Spotify, Reddit, Threads, Snapchat, Pinterest, YouTube, Amazon, Substack, Ko-fi, Buy Me a Coffee, Shopify, Merch, Bandcamp, SoundCloud, Apple, Telegram, WhatsApp, Linktree, Beacons, and others); null for an unrecognised domain — the URL is always still returned in full |
redirectUrl | string or null | The original youtube.com/redirect?... URL before unwrapping |
Transcript cues (transcript array items): start (seconds, string), dur (seconds, string), text (the merged caption text for that event).
Example output (3 rows):
[{"type": "video","video_id": "dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video)","channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw","channel_name": "Rick Astley","channel_handle": "@RickAstleyYT","uploader_id": "@RickAstleyYT","published_date": "2009-10-25","duration_seconds": 213,"views": 1794616163,"likes": 18400000,"comment_count": 2400000,"engagement_rate": 0.0116,"resolution": "3840x2160","category": "Music","language": "en","live_status": "none","upload_type": "normal","tags": ["Rick Astley", "Never Gonna Give You Up"],"hashtags": [],"thumbnails": { "default": "https://i.ytimg.com/vi/dQw4w9WgXcQ/default.jpg", "maxres": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" },"channel": {"id": "UCuAXFkgsw1L7xaCfnd5JJOw","name": "Rick Astley","handle": "@RickAstleyYT","url": "https://www.youtube.com/@RickAstleyYT","subscriberCount": "4520000 subscribers","subscriberCountInt": 4520000,"logo": "https://yt3.googleusercontent.com/…","badges": ["Verified"]},"transcript": [{ "start": "0.080", "dur": "3.680", "text": "we're no strangers to love" },{ "start": "3.760", "dur": "3.760", "text": "you know the rules and so do I" },{ "start": "7.520", "dur": "4.000", "text": "a full commitment's what I'm thinking of" }],"transcript_message": "Transcript loaded from subtitles:en","creator": {"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","handle": "@RickAstleyYT","name": "Rick Astley","canonicalUrl": "https://www.youtube.com/@RickAstleyYT","description": "The official YouTube channel for Rick Astley.","country": "United Kingdom","joinedDateText": "Joined Feb 1, 2015","joinedDate": "2015-02-01","channelAgeMonths": 137,"channelAgeYears": 11.4,"subscriberCount": 4520000,"subscriberCountText": "4.52M subscribers","totalViews": 2513258892,"viewCountText": "2,513,258,892 views","videoCount": 431,"videoCountText": "431 videos","averageViewsPerVideo": 5831227,"isVerified": true,"channelBadge": "Official Artist Channel","avatarUrl": "https://yt3.googleusercontent.com/…","bannerUrl": null,"links": [{ "title": "Instagram", "url": "https://www.instagram.com/officialrickastley/", "domain": "instagram.com", "platform": "Instagram", "redirectUrl": "https://www.youtube.com/redirect?q=https%3A%2F%2Fwww.instagram.com%2F..." }],"linkCount": 10,"hasChannelLinks": true,"profileFetched": true,"profileError": null},"creatorChannelId": "UCuAXFkgsw1L7xaCfnd5JJOw","creatorHandle": "@RickAstleyYT","creatorName": "Rick Astley","creatorCountry": "United Kingdom","creatorJoinedDate": "2015-02-01","creatorChannelAgeMonths": 137,"creatorSubscriberCount": 4520000,"creatorTotalViews": 2513258892,"creatorVideoCount": 431,"creatorLinks": [ { "title": "Instagram", "url": "https://www.instagram.com/officialrickastley/", "domain": "instagram.com", "platform": "Instagram", "redirectUrl": "https://www.youtube.com/redirect?q=..." } ],"hasChannelLinks": true,"creatorLinkCount": 10,"creatorProfileSource": "about_page","success": true,"scrapedAt": "2026-07-26T09:00:00Z","inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"},{"type": "video","video_id": "jNQXAC9IVRw","title": "Second video from the same channel","channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw","channel_name": "Rick Astley","creatorName": "Rick Astley","creatorProfileSource": "cached","success": true,"scrapedAt": "2026-07-26T09:00:12Z","inputUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw"},{"type": "video","video_id": "","title": "","channel_id": "","channel_name": "","creator": {},"creatorProfileSource": "unavailable","success": false,"error": "This URL is a channel, not a single video. This Actor accepts video URLs only (watch?v=…, youtu.be/…, /shorts/…, or a video ID).","scrapedAt": "2026-07-26T09:00:20Z","inputUrl": "https://www.youtube.com/@RickAstleyYT/videos"}]
The second row above illustrates creatorProfileSource: "cached" — a second video from a channel already fetched in this run reuses that profile instead of triggering another /about request. The third row illustrates the failed-row shape: success: false, an error message, and every other field at its empty/null default — never a fabricated value standing in for missing data.
How can I use the data extracted with this Actor?
- Influencer marketing and talent teams: vet a creator before outreach using
creatorSubscriberCount,creatorChannelAgeMonths, andcreatorCountry, then pullcreatorLinksto find their published cross-platform presence without leaving the dataset. - AI engineers and LLM developers: an agent issues a batch of video URLs, receives structured JSON back, and passes
transcripttext pluscreatorcontext directly to a model as grounded input — no scraping logic inside the agent itself. - Market and competitive researchers: track a list of channels' representative videos over repeated runs to watch
creatorSubscriberCountandcreatorTotalViewsmove, and compareengagement_rateacross a competitive set. - Content and media research teams: use
transcriptcues for content repurposing, caption generation, or compliance/quote verification, joined with the exact video metadata each quote came from.
📈 How do you track creator growth and video performance over time?
Monitoring here means running the same set of video URLs (or a representative video per channel you track) on a schedule and diffing the numeric fields between runs. What changes between runs is the signal: creatorSubscriberCount, creatorTotalViews, and creatorVideoCount moving between two runs shows channel growth; views, likes, comment_count, and engagement_rate moving on the same video_id shows how a specific upload is performing after publication.
The fields worth diffing run-to-run are creatorSubscriberCount, creatorTotalViews, creatorVideoCount, creatorChannelAgeMonths, views, likes, comment_count, and engagement_rate — all keyed by the stable video_id and creatorChannelId so rows from different runs line up. creatorLinks and hasChannelLinks are worth diffing too, since a creator adding or removing a published link is itself a signal.
A typical workflow: schedule a run across your tracked video list → pull the previous run's dataset → join on video_id → compute the delta on the fields above → alert when a delta crosses a threshold you set (a subscriber jump, a link added, a sudden engagement drop). This Actor has no built-in scheduler of its own; set the run to repeat using the Apify Console's Schedules feature, and pull each run's dataset via the Apify API for the comparison step.
Integrate this Actor and automate your workflow
YouTube Video Details Scraper — Creator Profile & Links works with any language or tool that can call the Apify API, so it fits into whatever pipeline already runs your automation.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("<YOUR_USERNAME>/youtube-video-details-scraper-creator-profile-links").call(run_input={"videoLinks": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"creatorProfile": True,"resolveCreatorLinks": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["creatorSubscriberCount"], item["creatorLinks"])
Scheduled monitoring and delivery
The Actor has no webhook or delivery feature of its own beyond the standard Apify dataset. Use the Apify Console's Schedules to trigger runs on an interval, and Apify's webhooks to fire on run completion — pointing at your own endpoint to pull the finished dataset via client.dataset(...).iterate_items() — instead of polling manually.
Is it legal to scrape YouTube video and creator data?
Yes — this Actor collects data that is already publicly visible to any signed-out visitor to a video page or a channel's /about page, and it does not use or accept any login, session cookie, or credential. Because the creator fields include personal data about an identifiable individual (name, country, joined date, subscriber counts a creator has chosen to make public), storing or repurposing that data in the EU or for California residents falls under GDPR and CCPA respectively, even though the source is public — publicity does not remove personal data from those regimes' scope. Scraping for one-off research carries a different risk profile than scraping at scale for AI training or bulk storage of individuals' data. Consult your legal team for commercial use cases involving bulk data storage or repurposing of creator personal data.
❓ Frequently asked questions
Can I control which transcript language is downloaded?
There's no explicit language parameter in the input. The transcript picker prefers the video's own detected language track from subtitles, falls back to automatic_captions in that same language, then falls back to English auto-captions, then to whatever caption track is available first — in that order.
Can I limit how many videos are processed in one run?
Yes, with maxVideos. Set it to a positive integer to stop after that many URLs from videoLinks — useful for a cheap trial run against a long list. The default, 0, processes every URL supplied.
How does this Actor handle YouTube's anti-bot measures? Every video request goes through a proxy ladder: the proxy you configured first, then up to two residential-proxy retries with fresh sessions if the first attempt fails. YouTube reliably answers repeated datacenter or direct-IP requests with "Sign in to confirm you're not a bot," which is why residential proxy is the schema default and why failed attempts automatically escalate to residential even if you turned proxy use off.
Does this Actor extract the creator's profile and external links?
Yes — the full profile is in the creator object and mirrored at the top level as creatorName, creatorSubscriberCount, creatorChannelAgeMonths, and related fields; external links are in creatorLinks. Links are only present when the creator actually published them on their channel — hasChannelLinks tells you which rows have them, and creatorLinks is [] (never a placeholder) when they don't.
How many results does this Actor return per query?
One dataset row per video URL or ID you supply, up to maxVideos if you set it. This isn't a keyword-search Actor with a results cap to negotiate — you get exactly the videos you asked for, one row each, success or failure.
How do I use this Actor to monitor a channel's growth or a video's performance over time?
Schedule the same video list to run repeatedly using the Apify Console's Schedules feature, then diff creatorSubscriberCount, creatorTotalViews, views, likes, and engagement_rate between runs on the same video_id. See "How do you track creator growth and video performance over time?" above for the field list and workflow.
Does this Actor work with Claude, ChatGPT, and AI agent frameworks? There's no MCP server documented for this Actor. It's callable as a standard HTTP endpoint through the Apify API from any agent framework — an agent can call the Actor with a batch of video URLs, receive the structured JSON dataset back, and ground its answer in the transcript and creator fields it returns.
How does this Actor compare to other YouTube video scrapers?
As observed on their Apify Store listings, checked 2026-07-26: deanter's YouTube Video Details Scraper documents description and subtitle extraction only (Russian by default, English fallback) — no creator or channel data. beyondops' Youtube Metadata Scraper Pro documents metadata extraction with optional cookie-based login for age-restricted videos and CSV/Excel export, but its README doesn't document a channel /about harvest or external-link resolution. memo23's YouTube Transcript Extractor documents multi-source transcript extraction (including an AI fallback and translation) as its main focus; its README doesn't document creator profile or external-link data either. This Actor's differentiator against all three, per their published READMEs, is the joined creator profile and resolved external links on every row.
Can I use this Actor without managing proxies or platform credentials?
Yes. Apify Proxy is configured by default (RESIDENTIAL), and no YouTube account, cookies, or API key are required or accepted — every field comes from a public page. You only need an Apify account to run the Actor itself.
What happens if I pass a playlist or channel URL instead of a single video? The row fails immediately with an explicit error naming the URL as a playlist or channel — it is never silently turned into a malformed video row. Playlist and channel URLs are detected by shape before any request is sent.
What happens if a video is private, deleted, or otherwise unavailable?
The row comes back with success: false and an error field describing what happened, after every proxy attempt in the ladder has been tried. Failed rows are still written to the dataset for visibility but are not charged.
💬 Your feedback
Found a bug, or a field that doesn't match what's actually on the page? Let us know through the Actor's Issues tab on Apify, or contact Scrapier support from the Actor's Store listing — reports like this are how the corrections documented in this README got made.