YouTube Scraper: Videos, Shorts, Channels & Comments
Pricing
from $1.00 / 1,000 results
YouTube Scraper: Videos, Shorts, Channels & Comments
Fast YouTube scraper with no browser and no API key: keyword search with filters, channel videos and Shorts, channel About data, playlists, video details (exact likes, date, description) and comments with replies. $1.00 per 1,000 results.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
subimpact
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Fast, keyless YouTube scraper built on plain HTTPS calls to YouTube's internal API. No key, no login, no headless browser. Keyword search (with sort and date filters), channel videos and Shorts tabs, playlists, single video details (exact likes, exact publish date, full description, comment count) and comment scraping, all in one run.
Pay per result: $1.00 per 1,000 results. You are charged $0.001 per delivered row and never for empty or failed work. Platform usage (compute, memory) is billed separately by Apify and is small because the actor is a lightweight HTTP client, not a browser.
How this compares
Plain HTTPS calls to YouTube's internal API: no key, no login and no headless browser, so the compute you pay for is small. One run covers keyword search with sort and date filters, channel videos and Shorts tabs, playlists, single video details and comments. At $1.00 per 1,000 results it is below the four most-used alternatives in this lane: streamers/youtube-scraper ($4.00) and streamers/youtube-shorts-scraper ($4.00), streamers/youtube-comments-scraper ($2.00) and streamers/youtube-channel-scraper ($1.30). Transcripts and media downloads are not offered (see the caveats below); pintostudio/youtube-transcript-scraper covers transcripts at $10.00 per 1,000 items.
| Actor | Price per 1,000 results | Platform usage |
|---|---|---|
| subimpact/youtube-scraper | $1.00 | paid by you |
| streamers/youtube-scraper | $4.00 | see listing |
| streamers/youtube-comments-scraper | $2.00 | see listing |
| streamers/youtube-channel-scraper | $1.30 | see listing |
| streamers/youtube-shorts-scraper | $4.00 | see listing |
Prices are Apify Store list prices on the Free plan, checked 24 October 2026. Competitor prices can change; check their listings.
What it scrapes
| Mode | Source | You get |
|---|---|---|
| Keyword search | searchQueries | Videos (and optionally Shorts) with title, duration, views, publish text, channel, thumbnail |
| Channel URL | startUrls (/@handle, /channel/, /c/, /user/) | Videos-tab or Shorts-tab items (or both), plus one channel row with subscribers, lifetime views, About info and external links |
| Playlist URL | startUrls (?list=) | Videos in playlist order |
| Video URL | startUrls (/watch?v=, youtu.be, /shorts/, /live/) | Full video details: exact likes, exact publish date, full description, comment count |
| Comments | scrapeComments | Top or Newest comments with author, like count, reply count, and optionally replies |
Input modes
{"searchQueries": ["python tutorial", "coldplay viva la vida"],"searchSortBy": "views","searchUploadDate": "year","maxResultsPerQuery": 100}
{"startUrls": [{ "url": "https://www.youtube.com/@MrBeast" }],"channelContent": "both","maxVideosPerChannel": 200,"includeChannelInfo": true}
{"startUrls": [{ "url": "https://www.youtube.com/playlist?list=PL4fGSI1pDJn6puJdseH2Rt9sMvt9E2M4i" }],"maxVideosPerChannel": 500}
{"startUrls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }],"scrapeComments": true,"commentsSortBy": "top","maxCommentsPerVideo": 100,"includeReplies": true,"enrichVideoDetails": true}
You can mix modes: searchQueries and startUrls run together in one run.
Output fields
One dataset row per item. itemType is one of video, short, channel, comment (videos and Shorts
are the same shape; a Short always has isShort: true and no duration because YouTube does not show one
in the Shorts grid). Every row also carries source, input, position (rank within its input) and
scrapedAt.
Videos and Shorts:
| Field | Type | Notes |
|---|---|---|
videoId, url, title | string | canonical https://www.youtube.com/watch?v= URL |
description | string/null | full description, only with enrichVideoDetails or a video URL |
durationText, durationSeconds | / integer | 6:15:56 / 22556 |
viewCount, viewCountText | integer / string | 922364, 922,364 views |
likeCount, likeCountText | integer / string | exact 19491363 only with enrichVideoDetails; rounded 19M otherwise when shown |
publishedText, publishedDate | string / ISO date | 4 days ago; exact 2009-10-24 when available |
channelId, channelName, channelHandle, channelUrl | string/null | |
channelSubscriberCount, channelSubscriberCountText | integer / string | only when channel info was fetched |
channelVerified | boolean/null | verification badge |
thumbnailUrl | string | highest-resolution thumbnail YouTube served |
isLive | boolean | true for live streams |
badges | array/null | e.g. ["New", "4K"] |
commentCount, commentCountText | integer / string | only with enrichVideoDetails or video URL |
hashtags | array/null | extracted from the description |
Channels (one row per channel URL when includeChannelInfo):
| Field | Type | Notes |
|---|---|---|
channelId, channelName, channelHandle, channelUrl | string/null | |
channelDescription, avatarUrl | string/null | |
subscriberCount, subscriberCountText | integer / string | 522000000, 522M subscribers |
videoCount, totalViewCount | integer | 1008, lifetime views |
country, joinedDate | string | United States, 2012-02-19 |
links | array/null | [{ "title": "...", "url": "..." }, ...] |
Comments:
| Field | Type |
|---|---|
commentId, videoId, text | string |
author, authorChannelId | string |
authorIsVerified, authorIsCreator | boolean |
likeCount, likeCountText, replyCount | integer |
publishedText | string (e.g. 6 years ago (edited)) |
isReply, parentCommentId | boolean / string |
Comments get author handles exactly as YouTube displays them (e.g. @grustache4569).
Limits and honest caveats
- No transcripts and no timed captions. Those endpoints are blocked from datacenter IPs; the actor does not call them.
- No video or audio download. The
playerendpoint is blocked for anonymous datacenter access, so stream URLs cannot be provided. - Duration for a bare video URL comes from a search lookup (
searchby the video id and an exact-match read) and can benullwhen the video is too new to appear in search. - Counts like "119M views" or "522M subscribers" are YouTube's rounded display figures. Exact view counts are available for videos with details; exact subscriber counts are never exposed without login.
- Exact like counts are only available when the video page itself is fetched (default for video URLs,
optional via
enrichVideoDetailsfor search/channel results; one extra request per video). maxTotalResults(default 1,000) is a hard global stop on all rows so a single run cannot snowball.- Proxies are optional: the scrape works over plain HTTPS from datacenter IPs. Enable Apify Proxy only for very high volumes if you see rate limiting (429s are retried automatically with backoff).
FAQ
Do I need an API key? No.
Is a proxy required? No, but you can enable one: {"proxyConfiguration": {"useApifyProxy": true}}.
What does it cost? $1.00 per 1,000 delivered results ($0.001 each), plus small platform usage. You are never charged for rows that failed to be delivered.
Can I get comments only? Yes: pass a video URL with scrapeComments and the video row (1 result)
plus comment rows.
Can I mix search and URLs? Yes: searchQueries and startUrls are combined in a single run,
processed with up to maxConcurrency inputs at a time.