YouTube Scraper - Videos, Channels, Comments & Subtitles
Pricing
from $0.80 / 1,000 results
YouTube Scraper - Videos, Channels, Comments & Subtitles
YouTube API alternative with no quota or key: channels, videos, Shorts, live streams, playlists, search, hashtags, community posts, comments and replies, subtitles (SRT/VTT/text), chapters and exact upload dates. Drop-in input for popular YouTube scrapers. From $0.80 per 1,000.
Pricing
from $0.80 / 1,000 results
Rating
0.0
(0)
Developer
Alom Dev
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
YouTube Scraper
Scrape YouTube into JSON, CSV or Excel: channel videos, Shorts, live streams, community posts and playlists, hashtag pages, search results (videos, Shorts, channels, playlists), video details, subtitles and comments (with replies). You get titles, views, likes, comment counts, exact upload times, durations, descriptions and their links, chapters, hashtags, tags, related videos, channel subscribers, location and join date, and full comment threads.
✅ No login, no API key, no quota: it reads the same data youtube.com shows logged-out visitors. ✅ One Actor for channels, Shorts, streams, posts, playlists, hashtags, search, subtitles and comments. ✅ YouTube transcripts from captions: a video's subtitles (manual or auto-generated) as plain text, SRT or VTT, in every language the video has captions for. ✅ Drop-in compatible with the most-used YouTube scrapers' input and output field names. ✅ Monitoring mode: return only videos and comments you haven't seen yet, on a schedule. ✅ You never pay for errors: a deleted video or an unknown channel produces no row and no charge.
What can you use YouTube data for?
- Influencer & creator research: subscribers, upload frequency, views and likes per video, country.
- Competitor and brand monitoring: new videos from a list of channels every day, and what viewers say about them.
- Content & trend research: what ranks for a keyword this week, which Shorts take off, which formats get likes.
- Audience research / sentiment analysis: thousands of comments and replies per video.
- AI & research datasets: titles, descriptions, tags and comments at scale.
Switching from another YouTube scraper?
- Keep your input. These fields work the same way as in the most-used YouTube scrapers:
startUrls,searchQueries,maxResults,maxResultsShorts,maxResultStreams,sortingOrder,dateFilter,videoType,lengthFilter,isHD/is4K/isLive/… filters,oldestPostDate,sortVideosBy,channels,sortChannelShortsBy,maxComments,sortCommentsBy,oldestCommentDate, and the subtitle optionstranscriptionAndSubtitle,subtitlesLanguage,subtitlesFormat,preferAutoGeneratedSubtitles,saveSubsToKVS. Also understood:keywords,youtubeHandles,maxItems,uploadDate,duration,features,sort,gl,includeShorts(apidojo-style input). - Change the Actor ID to this one.
- Your pipeline keeps working: rows use the same field names -
id,title,url,viewCount,likes,commentsCount,date,duration,text,hashtags,channelName,channelUrl,channelId,channelUsername,numberOfSubscribers,channelTotalVideos,channelTotalViews,channelJoinedDate,channelLocation,fromYTUrl,fromChannelListPage,descriptionLinks,subtitles,isMembersOnly,isAgeRestricted,order,type(video/shorts); comments usecid,comment,author,videoId,pageUrl,title,voteCount,replyCount,replyToCid,authorIsChannelOwner,hasCreatorHeart.
Differences worth knowing:
- Coming from a comments-only scraper? Add
"commentsOnly": true, otherwise you also get one row per video. dateis always an ISO timestamp. Where YouTube only says "3 weeks ago" it is an estimate anddateIsExactisfalse; the original text is indateText.durationisHH:MM:SS, plusdurationSeconds.- Subtitles: the ones YouTube has (uploaded or automatic). No AI speech-to-text transcription.
- Errors (deleted video, unknown channel, a URL that is not YouTube) are not written as dataset rows, so you are
never charged for them. They are named in the run's status message, the
NOT_FOUNDkey-value record and the log. One bad URL never stops the rest of the run.
What you can scrape
| Input | Example | Output |
|---|---|---|
| Channel | https://www.youtube.com/@MrBeast, /channel/UC…, /c/…, /user/… | its videos (maxResults), Shorts (maxResultsShorts), streams (maxResultStreams), each with channel info |
| Channel tab | …/@MrBeast/shorts, …/@NASA/streams, …/@MrBeast/posts, …/@kurzgesagt/playlists | only that tab |
| Community posts | a channel + maxPosts (or a /posts URL) | post rows: text, images, poll, attached video, exact likes, comment count, date |
| Channel playlists | a channel + maxPlaylists (or a /playlists URL) | playlist rows: title, URL, number of videos |
| Channel info | any channel with all limits set to 0 | one channel row: subscribers, videos, total views, country, joined, links |
| Search | searchQueries: ["lofi hip hop"] or a /results?search_query=… URL | videos, with upload date / length / type / feature filters; Type = Shorts, Channels or Playlists returns those |
| Hashtag | https://www.youtube.com/hashtag/cats or hashtags: ["cats"] | videos (and Shorts with maxResultsShorts) |
| Playlist | https://www.youtube.com/playlist?list=… | its videos in playlist order |
| Video or Short | https://www.youtube.com/watch?v=…, youtu.be/…, /shorts/… | full details: exact views, likes, comment count, exact upload time, duration, tags, category, chapters, description links |
| Subtitles | any videos + downloadSubtitles | SRT / WebVTT / XML / plain text in the chosen language |
| Related videos | any videos + includeRelatedVideos | the ~20 "Up next" videos per video |
| Comments | any of the above + maxComments | comments (Top or Newest), optionally replies |
Output examples
A video (from a channel, with includeVideoDetails):
{"type": "video","id": "v9QtM6qnG50","url": "https://www.youtube.com/watch?v=v9QtM6qnG50","title": "I Built A City To Save Kids From Illegal Labor","text": "Huge thanks to the 1 Billion Followers Summit, …","viewCount": 82636809,"viewCountText": "82,636,809 views","likes": 2032918,"commentsCount": 94000,"commentsTurnedOff": false,"date": "2026-09-19T16:00:01.000Z","dateText": "10 days ago","dateIsExact": true,"duration": "00:19:02","durationSeconds": 1142,"thumbnailUrl": "https://i.ytimg.com/vi/v9QtM6qnG50/hq720_custom_2.jpg?…","hashtags": [],"keywords": [],"category": "Entertainment","descriptionLinks": [{ "url": "https://www.1billionsummit.com/", "text": "https://www.1billionsummit.com/" }],"chapters": [{ "title": "Intro", "startSeconds": 0, "timeText": "0:00" }],"chaptersAutoGenerated": false,"isMembersOnly": false,"isAgeRestricted": false,"isUnlisted": false,"liveStatus": null,"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","channelName": "MrBeast","channelUrl": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA","channelUsername": "MrBeast","numberOfSubscribers": 519000000,"isChannelVerified": true,"channelLocation": "United States","channelJoinedDate": "Feb 19, 2012","channelTotalVideos": 1004,"channelTotalViews": 141227305543,"detailsScraped": true,"subtitles": null,"subtitleLanguages": null,"relatedVideos": null,"fromChannelListPage": "videos","order": 0,"fromYTUrl": "https://www.youtube.com/@MrBeast/videos","input": "https://www.youtube.com/@MrBeast","scrapedAt": "2026-09-30T11:40:00.000Z"}
A comment:
{"type": "comment","cid": "Ugzge340dBgB75hWBm54AaABAg","comment": "can confirm: he never gave us up","author": "@YouTube","authorChannelId": "UCBR8-60-B28hp2BmDPdntcQ","authorIsChannelOwner": false,"authorIsVerified": true,"hasCreatorHeart": true,"isPinned": true,"voteCount": 321000,"replyCount": 963,"date": "2025-09-30T11:38:17.654Z","publishedTimeText": "1 year ago","isReply": false,"replyToCid": null,"videoId": "dQw4w9WgXcQ","pageUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","commentsCount": 2457929}
A community post:
{"type": "post","postId": "UgkxHIfkQ3K2my65-kPq4VkRv9KrBRyN7alx","url": "https://www.youtube.com/post/UgkxHIfkQ3K2my65-kPq4VkRv9KrBRyN7alx","text": "NO MORE WAITING, this Saturday …","date": "2026-09-29T13:58:34.465Z","dateText": "1 day ago","likes": 147168,"commentsCount": 3600,"attachmentType": "image","images": ["https://yt3.ggpht.com/…"],"videoId": null,"poll": null,"isMembersOnly": false,"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","channelName": "MrBeast","channelUsername": "MrBeast","fromYTUrl": "https://www.youtube.com/@MrBeast/posts"}
Shorts rows have "type": "shorts" and a /shorts/ URL; streams have "type": "stream" and liveStatus
(live, upcoming, was_live). Values YouTube doesn't show on a given page are null, never a made-up 0.
How much does it cost?
Proposed pricing (not live yet): pay per result, platform usage (compute and proxy) included. One result = one video, Short, stream, comment or channel row.
| Apify plan | Price per 1,000 results |
|---|---|
| Free | $1.50 |
| Starter (Bronze) | $1.25 |
| Scale (Silver) | $1.00 |
| Business (Gold) and above | $0.80 |
- 1,000 videos from 10 channels: $1.50 on the Free plan, $0.80 on Business.
- 10,000 comments: $15 on Free, $8 on Business - the popular comments scraper charges $9-20.
- Full video details and comments cost the same per row - they only make the run take longer (see below).
Full video details (includeVideoDetails)
Channel, search and playlist pages show YouTube's rounded numbers ("82M views", "3 weeks ago") and no likes. With
Add full video details on, the scraper opens every video (2 extra requests) and adds exact views, likes,
comment count, the exact upload time, duration, full description and its links, chapters, tags (keywords),
category and the members-only / age-restricted flags. This makes runs roughly 5-10x slower (measured: 300 videos in
about 4 minutes) but does not change the price per row. Video URLs you enter directly always get full details.
Subtitles (downloadSubtitles)
Turn on Download subtitles and pick a language (en, de, pt-BR, … or any) and a format (srt, vtt,
xml, plaintext). Each video row gets subtitles: [{ language, languageName, type, format, srt }] (type is
user_generated or auto_generated) and subtitleLanguages - every language the video has. A video without
subtitles in that language gets subtitles: []; if YouTube does not show the list (age-restricted or members-only
videos) it is null. Also save subtitles as files puts each file in the run's key-value store (srtUrl).
There is no AI transcription and no machine translation. The price per row stays the same.
Your own cookies (optional, advanced)
Everything above works without an account. The only thing YouTube hides from logged-out visitors is
age-restricted videos (exact data, subtitles) and their comments. For those, you can paste the cookies of a
logged-in youtube.com browser tab into Your YouTube cookies (a cookie-extension JSON export, a cookies.txt file or
a name=value; … header).
⚠️ Use a secondary Google account, never your main one. Requests are then made as that account from many proxy IPs; YouTube may ask it to verify itself or restrict it for automated use. The field is stored encrypted and the cookies are never logged or written to the dataset. We could not test this mode against a real account - if something looks off, tell us on the Issues tab.
Monitoring (only new videos / comments)
Turn on "Only new videos/comments since my last run", give it a name (e.g. competitors-daily) and schedule the
run. Each run looks at the newest maxResults videos of each channel (and maxComments comments of each video) and
returns only the ones no earlier run with that name returned. Videos you entered as URLs are returned once; their
new comments every run.
{ "channels": ["mkbhd", "veritasium"], "maxResults": 20, "maxComments": 50, "sortCommentsBy": "NEWEST_FIRST", "deltaMode": true, "monitorName": "tech-daily" }
Limitations
- No AI transcripts, summaries or subtitle translation - only the subtitles YouTube has. Getting the subtitle
list needs YouTube's app API, which bot-checks about 2 in 3 datacenter IPs: the scraper rotates IPs and, if you
kept the default proxy, tries once on a residential IP (logged, counted in
STATISTICS). A video it still cannot get hassubtitles: nulland the run says "partial". - Sorting search results by upload date or rating is no longer honoured by YouTube itself (results come back
by relevance). Use the Upload date filter (
dateFilter) for recent videos; View count sorting works. - Shorts tiles have no date or duration. With
oldestPostDatethe scraper checks each Short's exact date automatically; for dates on every Short turn onincludeVideoDetails. - Comment dates are approximate ("3 days ago" is all YouTube shows) and comment like counts are rounded ("321K"). The video's total comment count is exact.
- Search returns at most ~500-700 videos per query (YouTube stops paging). Use several queries or filters for more.
- Exact upload time and duration come from YouTube's player data, which YouTube sometimes withholds from a proxy
IP ("confirm you're not a bot"). The scraper asks the YouTube Music player first (rarely checked), then the web
player, on new IPs; if both fail, the row keeps the day-precise date, views and likes (
dateIsExactstaystruefor the day). - Hashtag pages show logged-out visitors only ~20-30 videos. Beyond that, the scraper tops up from a search for
the hashtag (those rows have the search URL in
fromYTUrl). - Members-only and private videos: flagged (
isMembersOnly) with what YouTube shows publicly; their content and comments need a paying member's login. Trending no longer exists on YouTube (removed in 2025). - Not available logged out: dislikes,
isMonetized, video download links.
FAQ
Do I need a YouTube account or an API key? No. Nothing to configure, and no YouTube API quota.
Is it legal? It collects publicly visible data. You are responsible for how you use it, including data protection rules for personal data (usernames, comments).
Why did my run say "partial"? Some inputs could not be finished (e.g. the run hit its timeout, or YouTube kept refusing one request). Everything that was scraped is in the dataset; the status message says what was missed.
More scrapers from the same developer
- Google Trends API & Scraper: interest over time, regions, related queries and Trending Now, a pytrends alternative
- Threads Scraper: posts, profiles, replies and keyword search on Meta Threads, no login
- Bilibili Scraper: videos, creators, full comment threads and danmaku from B站, no login
- Google Hotels Scraper: hotel prices from every booking site across dates, room rates and reviews
- Google Ads Transparency Scraper: every Google ad a competitor runs, with the real ad copy
- Threads Account Finder: Threads accounts by keyword with followers, bio links and the contacts they list
- Threads Hashtag & Keyword Monitor: only the new posts for your keywords and #hashtags, for scheduled runs
Feedback
Missing a field, found a bug, or need a feature? Open an issue in the Issues tab and I'll take a look. If this Actor saved you time, a short review on the Store page helps other people find it.