YouTube Video and Shorts Details Scraper
Pricing
from $3.00 / 1,000 youtube video or short details
YouTube Video and Shorts Details Scraper
Get YouTube video and Shorts details from URLs or IDs: titles, descriptions, thumbnails, views, likes, comment counts, dates, duration, tags, chapters, and basic channel data when available. Export JSON or CSV for reporting and automation. No YouTube API key required. Unofficial.
Pricing
from $3.00 / 1,000 youtube video or short details
Rating
0.0
(0)
Developer
ArjunAI Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 days ago
Last modified
Categories
Security
Limited permissionsShare
YouTube video and Shorts metadata from URLs or IDs
Turn a list of known YouTube video or Shorts URLs or IDs into structured metadata for reports, content catalogs, and automation. Get titles, descriptions, thumbnails, views, likes, comment counts, dates, duration, tags, chapters, and basic channel data when YouTube exposes them.
Use one input field and export the results as JSON, CSV, Excel, XML, or JSONL. No YouTube Data API key is required. This Actor looks up content you already know; it does not search for keywords or list an entire channel.
What you can do
- Enrich an existing video list: add public metadata to links stored in a spreadsheet, database, or content catalog.
- Track selected content: schedule lookups to refresh public engagement metrics for videos and Shorts you follow.
- Build automated workflows: use the Apify API, webhooks, or integrations to pass the records into reports and downstream tools.
Each resolved item includes one thumbnail URL and a compact channel profile, without media-format or thumbnail arrays. Shorts are identified from YouTube metadata rather than a duration guess. Processed inputs that cannot be resolved receive lookup-status records; an aborted or timed-out run can leave some inputs unprocessed.
Quick start
- Keep the two prefilled IDs for a small first run, or replace them with your own public YouTube URLs or IDs.
- Add up to 50 entries to Video or Shorts URLs / IDs.
- Click Start.
- Review Results in the Output tab. Use Content details for descriptions, tags, chapters, and channel fields, or Lookup status for explanations of unsuccessful lookups.
- Export the Dataset, or retrieve it through the Apify API.
Example input matching the complete output examples below:
{"videos": ["b093aqAZiPU","g2I5SaGTn4w"]}
Both bare IDs and URLs work for standard videos and Shorts. The input format does not force the output type.
Accepted input formats
| Format | Example |
|---|---|
| Video or Shorts ID | b093aqAZiPU or g2I5SaGTn4w |
| Watch URL | https://www.youtube.com/watch?v=b093aqAZiPU |
| Shorts URL | https://www.youtube.com/shorts/g2I5SaGTn4w |
| Short link | https://youtu.be/b093aqAZiPU |
| Embed URL | https://www.youtube.com/embed/b093aqAZiPU |
| Live URL | https://www.youtube.com/live/VIDEO_ID |
Input parameter
| Parameter | Type | Default | Meaning |
|---|---|---|---|
videos | Array of strings | The two example IDs above | One supported URL or 11-character ID per entry. Submit 1β50 entries per run, including any duplicates. |
The 50-entry limit applies before deduplication. Repeated entries and different URL forms for the same content ID are accepted and processed once. IDs are case-sensitive: changing the case of a letter refers to a different ID.
Channel URLs, channel handles, playlist URLs, and keyword searches are not supported by this Actor. Malformed inputs that pass the platform's input schema receive lookup-status records; an empty input list or more than 50 entries can be rejected by input validation before a run starts.
Output examples
These are complete, unedited records from real Apify cloud requests using build 0.1.22 on October 19, 2026. The input IDs match the example above. Metrics and channel details are snapshots and can change.
The standard video demonstrates populated tags and chapters. The Short has no chapter markers in the returned metadata. In both records, live-only and other unavailable fields remain null; they are not filled with invented values.
Standard video
{"recordType": "video","status": "complete","inputValue": "b093aqAZiPU","inputType": "videoId","videoId": "b093aqAZiPU","url": "https://www.youtube.com/watch?v=b093aqAZiPU","title": "π©βπ» Python for Beginners Tutorial","description": "In this step-by-step Python for beginner's tutorial, learn how you can get started programming in Python. In this video, I assume that you are completely new to programming. We'll walk through how to get Python, how to run your first code, and how to get an IDE (Integrated Development Environment) to help you code faster. You'll also learn about variables and how to set them. We'll look at functions, if statements, while and for loops, and we'll import libraries. At the end, we'll also look at how you can troubleshoot your code, for instance, when you run into syntax, semantic, or runtime errors. By the end, you'll know how to run code and you'll also understand the basic concepts of programming. My name is Kevin Stratvert and I'll be your guide to Python. I previously worked at Microsoft for 14 years.\n\nπ RESOURCES\n- Get Python: https://www.python.org\n- Get Microsoft Visual Studio Code: https://code.visualstudio.com\n\nβ TIMESTAMPS\n0:00:00 Introduction\n0:01:25 Why program?\n0:02:18 Why Python?\n0:04:33 Get Python\n0:06:43 Run code in Python terminal\n0:09:13 Write code in a text editor like Notepad\n0:11:59 Get an IDE like Visual Studio Code for free\n0:14:20 Set up VS Code\n0:16:34 Run code in VS Code\n0:18:12 Work with numbers & operators\n0:22:24 Work with text / strings\n0:24:03 Comments\n0:25:37 Variables\n0:32:01 Conditional logic\n0:34:55 If, elif, & else statements\n0:41:14 Functions\n0:54:39 While & for loops\n0:59:00 Import libraries\n1:00:02 Troubleshooting code. \n1:02:28 Wrap up\n \nπΊ RELATED VIDEOS\n- Playlist with all my videos on Python: https://youtube.com/playlist?list=PLlKpQrBME6xKNfcbz2nHyY_anC8BpXRnp\n\nπ SUPPORT THE CHANNEL\n- Hit the THANKS button in any video!\n- Amazon affiliate link: https://amzn.to/3kCP2yz (Purchasing through this link gives me a small commission to support videos on this channel -- the price to you is the same)\n\nπ½ CONNECT WITH ME\n- Official web site: http://www.kevinstratvert.com\n- LinkedIn: https://www.linkedin.com/in/kevinstratvert/\n- Discord: https://discord.gg/kHuujY2pZf\n- Twitter: https://twitter.com/kevstrat\n- Facebook: https://www.facebook.com/Kevin-Stratvert-101912218227818\n- TikTok: https://www.tiktok.com/@kevinstratvert\n- Instagram: https://www.instagram.com/kevinstratvert/\n\nπ TOOLS AND DISCOUNTS\nβ ποΈ Voicemod AI Voice Changer | 5% off | https://link.xsolla.com/KZBi89AY\nβ π Squarespace Websites | https://squarespace.syuh.net/XYaqYM\nβ π Grammarly | https://grammarly.go2cloud.org/SH3nL\nβ ποΈ Shopify | https://shopify.pxf.io/XY9rPa\nβ π Notion | https://affiliate.notion.so/rffva4tr71ax\nβ πΌοΈ Figma | https://psxid.figma.com/lqjg97licpry\nβ π€ ElevenLabs Text-to-Speech | https://try.elevenlabs.io/taqepq60mptr\n\nπ MY COURSES\n- Excel for Beginners in under 2 hours: https://kevinstratvert.thinkific.com/\n\nπ REQUEST VIDEOS\nhttps://forms.gle/BDrTNUoxheEoMLGt5\n\nπ SUBSCRIBE ON YOUTUBE\nhttps://www.youtube.com/user/kevlers?sub_confirmation=1\n\nβ DISCLOSURE\nSome links are affiliate links. Purchasing through these links gives me a small commission to support videos on this channel. The price to you is the same.\n\n#stratvert #python #pythonprogramming","thumbnailUrl": "https://i.ytimg.com/vi/b093aqAZiPU/maxresdefault.jpg","durationSeconds": 3801,"durationText": "1:03:21","uploadDate": "2021-03-25","publishedAt": "2021-03-25T10:00:08Z","viewCount": 4643513,"likeCount": 99327,"commentCount": 3392,"concurrentViewCount": null,"liveStatus": "not_live","availability": "public","ageLimit": 0,"videoLanguage": "en-US","license": null,"location": null,"playableInEmbed": true,"tags": ["kevin stratvert","python","python for beginners","python tutorial","tutorial","how to","learn python","python programming","programming","code","coding","if","elif","else","troubleshoot","troubleshooting","language","programming language","variables","variable","define","function","functions","conditional logic","logic","condition","terminal","visual studio","visual studio code","vs code","microsoft","notepad","text editor","ide","integrated development environment","white","for","loop","loops","library","comments","strings","string","text","operator","test"],"categories": ["Science & Technology"],"chapters": [{"title": "Introduction","startSeconds": 0,"endSeconds": 85},{"title": "Why program?","startSeconds": 85,"endSeconds": 138},{"title": "Why Python?","startSeconds": 138,"endSeconds": 273},{"title": "Get Python","startSeconds": 273,"endSeconds": 403},{"title": "Run code in Python terminal","startSeconds": 403,"endSeconds": 553},{"title": "Write code in a text editor like Notepad","startSeconds": 553,"endSeconds": 719},{"title": "Get an IDE like Visual Studio Code for free","startSeconds": 719,"endSeconds": 860},{"title": "Set up VS Code","startSeconds": 860,"endSeconds": 994},{"title": "Run code in VS Code","startSeconds": 994,"endSeconds": 1092},{"title": "Work with numbers & operators","startSeconds": 1092,"endSeconds": 1344},{"title": "Work with text / strings","startSeconds": 1344,"endSeconds": 1443},{"title": "Comments","startSeconds": 1443,"endSeconds": 1537},{"title": "Variables","startSeconds": 1537,"endSeconds": 1921},{"title": "Conditional logic","startSeconds": 1921,"endSeconds": 2095},{"title": "If, elif, & else statements","startSeconds": 2095,"endSeconds": 2474},{"title": "Functions","startSeconds": 2474,"endSeconds": 3279},{"title": "While & for loops","startSeconds": 3279,"endSeconds": 3540},{"title": "Import libraries","startSeconds": 3540,"endSeconds": 3602},{"title": "Troubleshooting code.","startSeconds": 3602,"endSeconds": 3748},{"title": "Wrap up","startSeconds": 3748,"endSeconds": 3801}],"channelProfile": {"channelId": "UCfJT_eYDTmDE-ovKaxVE1ig","channelName": "Kevin Stratvert","channelHandle": "@KevinStratvert","channelUrl": "https://www.youtube.com/channel/UCfJT_eYDTmDE-ovKaxVE1ig","subscriberCount": 4470000,"isVerified": true},"scrapedAt": "2026-10-19T11:05:53.130127Z"}
Native Short
{"recordType": "short","status": "complete","inputValue": "g2I5SaGTn4w","inputType": "videoId","videoId": "g2I5SaGTn4w","url": "https://www.youtube.com/shorts/g2I5SaGTn4w","title": "2000+ Free n8n Workflows on GitHub π¨βπ» | Boost Your Productivity Instantly! #shorts","description": "This GitHub repo has 2000+ free n8n automation workflowsβfrom solo founders to enterprise setups! π»\n\nβ 100% Free\nβ No Signups\nβ Real-world examples (business, finance, WhatsApp, Google Sheets & more)\n\nπ Want the GitHub link?\nJust comment βlinkβ and Iβll send it to you right away!\n\nSubscribe for more dev tools, AI hacks, and productivity boosters π¨βπ»\n\n#n8n #automation #indiandevelopers #githubtools #nocode #freetools","thumbnailUrl": "https://i.ytimg.com/vi/g2I5SaGTn4w/maxresdefault.jpg?sqp=-oaymwEoCIAKENAF8quKqQMcGADwAQH4AbYIgAKAD4oCDAgAEAEYVCBlKF0wDw==&rs=AOn4CLAa59i9X08vyeX1gmee9ir1fgEYyw","durationSeconds": 11,"durationText": "0:11","uploadDate": "2025-07-06","publishedAt": "2025-07-06T10:49:31Z","viewCount": 470976,"likeCount": 8831,"commentCount": 7428,"concurrentViewCount": null,"liveStatus": "not_live","availability": "public","ageLimit": 0,"videoLanguage": "en-US","license": null,"location": null,"playableInEmbed": true,"tags": ["n8n","automation","nocode","ai","chatbot","chatbot tutorial","workflow","tech","programming","low code","productivity hacks","coding","automation tools","tech tutorial","automate","build in public","ai tools","workflow automation","how to","business automation","productivity tips","tech guide","n8n workflow automation","n8n tutorial","n8n setup","budget workflow automation","zapier alternative","ai automation","automate tasks","automation for beginners","api automation","open-source automation","automation tribe"],"categories": ["Education"],"chapters": [],"channelProfile": {"channelId": "UC7PvLOIXedRy-1IrwJu7jAg","channelName": "LenscodeIO","channelHandle": "@lenscode","channelUrl": "https://www.youtube.com/channel/UC7PvLOIXedRy-1IrwJu7jAg","subscriberCount": 4030,"isVerified": false},"scrapedAt": "2026-10-19T11:07:13.265020Z"}
Lookup-status record
An unsuccessful processed lookup produces a compact record instead of a fabricated content result. This is a real not-found result from the same build and date:
{"recordType": "contentLookupError","status": "notFound","inputValue": "aaaaaaaaaaa","errorCode": "CONTENT_NOT_FOUND","errorMessage": "This video is unavailable","suggestion": "Check the 11-character ID or provide a complete YouTube URL.","scrapedAt": "2026-10-19T11:05:49.937112Z","inputType": "videoId","videoId": "aaaaaaaaaaa"}
| Status | Meaning |
|---|---|
invalidInput | The submitted value could not be recognized as a supported YouTube URL or ID. |
notFound | The content could not be found. Check the ID or URL. |
private | YouTube identified the content as private. |
unavailable | The response identified a login, age, region, or other availability restriction. |
requestBlocked | YouTube challenged or rate-limited the request. This does not prove the content is unavailable. |
failed | A network, timeout, or other extraction failure prevented a detail result. |
chargeLimitReached | The remaining run budget could not cover another successful detail result. |
Lookup-status records do not trigger the successful-detail billing event. An Actor-start charge can still apply.
Output fields
Successful video and Shorts records share 29 top-level keys, including channelProfile with 6 child fields. Status records use a smaller structure and do not repeat empty content fields.
| Group | Fields |
|---|---|
| Lookup context | recordType, status, inputValue, inputType, scrapedAt |
| Content identity | videoId, url, title, description, thumbnailUrl |
| Time | durationSeconds, durationText, uploadDate, publishedAt |
| Engagement | viewCount, likeCount, commentCount, concurrentViewCount |
| Availability | liveStatus, availability, ageLimit, playableInEmbed |
| Classification | videoLanguage, license, location, tags, categories, chapters |
| Basic channel profile | channelProfile.channelId, channelProfile.channelName, channelProfile.channelHandle, channelProfile.channelUrl, channelProfile.subscriberCount, channelProfile.isVerified |
| Lookup-status explanation | errorCode, errorMessage, suggestion on status records only |
How to interpret the fields
| Field | Interpretation |
|---|---|
recordType | video or short for resolved content; contentLookupError for a lookup-status record. Live content uses video with liveStatus. |
status: "complete" | The metadata extraction succeeded. It does not promise a value for every optional field. |
durationText | Duration formatted as M:SS or H:MM:SS; durationSeconds is the numeric value. |
uploadDate | The date YouTube exposes as the upload date, normalized to YYYY-MM-DD. |
publishedAt | The available publication timestamp, or broadcast-start fallback, normalized to UTC ISO 8601. It can differ from the upload date. |
videoLanguage | The audio language identified by the page, not the interface language or a manually translated subtitle language. |
| Counts | Publicly exposed values, not private creator analytics. Values parsed from abbreviated display text, including subscriber totals, can be approximate. |
chapters | Each item contains title, startSeconds, and endSeconds. The final end time uses the content duration when available. |
ageLimit | A numeric marker derived from the page's family-safe metadata, not an independent check of all playback restrictions. |
location | A location-labelled metadata value, not hashtags displayed above a title. |
scrapedAt | The UTC ISO 8601 time when the record was created. |
Missing and optional values
YouTube does not expose every field for every item. Tags and chapters can be absent, public metrics may be unavailable, and live-only fields normally do not apply to uploads and Shorts. Missing values remain null or empty arrays. A genuinely empty description can be an empty string. Missing counts are not converted to zero.
The Actor reads public Watch metadata without resolving downloadable media formats or running player JavaScript. Supporting metadata requests are made only when needed, for example to read a lazily loaded comment-count header. It does not fetch the channel About page.
It does not return video or audio files, media download URLs, transcripts, subtitle files, comment text, or a full channel profile.
Dataset views and run summary
- Results: a compact overview with metrics, dates, channel name, URL, and lookup status.
- Content details: all successful detail fields, including descriptions, tags, chapters, and channel metadata.
- Lookup status: the input, status code, message, and suggested action. Successful rows have no error message.
These views organize the display; they do not delete fields from stored records. Raw Dataset exports retain the complete records unless you explicitly select fields or a view.
When a run finishes normally, the default Key-Value Store record named OUTPUT also contains run totals and per-input statuses. If a run is forcibly aborted or times out, previously saved Dataset records remain available, but remaining inputs and the final summary may be missing.
Run through the Apify API
Use your Apify API token to authenticate the request. A YouTube Data API key is not needed.
curl -X POST \"https://api.apify.com/v2/acts/arjun_code~youtube-video-details-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"videos": ["b093aqAZiPU","g2I5SaGTn4w"]}'
The synchronous endpoint is convenient for small lookups. For larger batches, start an asynchronous run, wait for it to finish, and retrieve items from its default Dataset. The Actor's API tab provides request examples.
Pricing
The current pay-per-event pricing is:
- Successful video or Shorts detail: $3 per 1,000 results, or $0.003 per saved result.
- Actor start: $0.00005 per run at the Actor's current 512 MB memory setting.
- Invalid, missing, private, unavailable, blocked, failed, and charge-limited status records are not charged as successful details.
- Network requests and recovery attempts do not trigger additional detail events.
- Platform usage is included in the current customer pricing shown on the Pricing tab.
| Successful saved details in one run | Approximate charge |
|---|---|
| 1 | $0.00305 |
| 10 | $0.03005 |
| 50 | $0.15005 |
When the remaining event-charge budget cannot cover another detail result, waiting lookups and new recovery attempts do not start. Requests already in progress may finish, but additional billable results are not saved beyond the limit. Status records are not billed as details; the Actor-start charge can still apply.
The Actor's Pricing tab is the source of truth if prices change.
FAQ and troubleshooting
How can I identify a Short from an 11-character ID?
The ID format alone does not identify a Short. The Actor resolves the content and returns short only when YouTube metadata identifies it as one; otherwise it returns video. A /shorts/ input URL does not force the classification.
Why did I receive requestBlocked?
YouTube challenged or rate-limited the requests within the bounded attempts. Retry the public input later. A blocked network request is not proof that a video is private or deleted. If it repeats, open an issue with the run ID.
Why can a lookup take longer?
Each input has at most three bounded route attempts: 12 seconds for the initial attempt and, only after a transient failure, up to two 25-second recovery attempts. Success or a definitive private, missing, or unavailable response does not trigger another attempt.
Up to four content lookups run concurrently. Attempt budgets do not include container startup or waiting for a lookup slot. There is no fixed completion-time or 100% success guarantee.
Why does a complete record contain null?
complete describes the successful extraction workflow, not universal field availability. See Missing and optional values above. A null comment count does not establish that the video has no comments.
Why did duplicate links produce fewer records?
Different supported URL forms for the same case-sensitive content ID are processed once. Successful duplicates are not charged as separate details.
Does channelProfile contain the full channel About profile?
No. It contains basic channel fields available during the content lookup. Use the channel-details Actor below for a full public profile.
Ready-to-run examples
Choose another YouTube Actor
| Goal | Actor |
|---|---|
| Discover videos, Shorts, or channels by keyword | YouTube Search Scraper |
| Export public comments and replies | YouTube Comments Scraper |
| Get full public profiles for known channels | YouTube Channel Details Scraper |
| List a channel's videos, Shorts, and streams | YouTube Channel Content Scraper |
Support
Open the Actor's Issues tab and include the run ID, a public example input, the expected behavior, and the relevant status or log message. Do not post API tokens, private URLs, or account credentials.
Legal notice
This Actor extracts publicly available metadata. Users are responsible for following applicable laws, YouTube's terms, and data-protection requirements. It is unofficial and is not affiliated with, endorsed by, or sponsored by YouTube or Google.