YouTube Scraper: Channels, Shorts, Search & Video Details avatar

YouTube Scraper: Channels, Shorts, Search & Video Details

Pricing

from $1.19 / 1,000 videos

Go to Apify Store
YouTube Scraper: Channels, Shorts, Search & Video Details

YouTube Scraper: Channels, Shorts, Search & Video Details

Scrape YouTube channel videos, Shorts, live streams, search results and playlists. Give channel links or @handles, search terms or video URLs; get a row per video: title, views, exact likes, comments, publish time, duration, description, tags, channel stats and subtitles at no extra cost. No login.

Pricing

from $1.19 / 1,000 videos

Rating

0.0

(0)

Developer

DeepMine

DeepMine

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Share

Scrape YouTube channel videos, Shorts and live streams, search results, playlists and single videos: type a channel, a search term or a link and get one row per video with exact likes, exact publish time, duration, description, tags and the channel's About info.

TypeTitleChannelViewsLikesPublished (UTC)Length
videoWhat's Left for Humans? | Esther Perel and Sal KhanTED64,7832002026-10-06 15:00:0800:20:47
videoAm I going to jail for web scraping?Fireship1,280,08142,7432024-07-26 16:47:3400:04:34
shortsIs web scraping legal? ๐Ÿซข๐Ÿ˜ณLuke Barousse709,39718,7722022-11-20 18:38:2100:00:44

$1.99 per 1,000 videos on Free, $1.49 on Starter, $1.29 on Scale and $1.19 on Business. The prefilled run (50 videos: @TED 20 videos + 5 Shorts, and the search "web scraping" 20 videos + 5 Shorts) costs about $0.07 on Starter. Nothing per run, nothing for videos your filters leave out, and subtitles are included at no extra cost when you turn them on.

Also in every row: the video's description and its links, hashtags, tags, category, comments count, and the channel's subscribers, description, links, country, join date, total videos and total views. No login, no YouTube API key, no browser.

What you can scrape

InputExampleWhat you get
A channelhttps://www.youtube.com/@TED or @TEDIts newest videos, Shorts and live streams (set how many of each)
One channel tabhttps://www.youtube.com/@TED/shortsOnly that tab (Videos, Shorts or Live)
Search termsweb scrapingVideos, Shorts and/or live streams YouTube's search returns, with its filters (sort, upload date, length, HD, 4K, subtitles...)
A search linkhttps://www.youtube.com/results?search_query=web+scrapingThe same as typing the words
A playlisthttps://www.youtube.com/playlist?list=PL...Its videos in playlist order
Videos and Shortshttps://www.youtube.com/watch?v=..., https://youtu.be/..., https://www.youtube.com/shorts/...Full details of each

Ready-made examples

Open one and press Try for free: it copies the input to your account, where you change the channel or the words.

Use it from an AI agent or the API

Connect the Apify MCP server at https://mcp.apify.com?tools=deepmine/youtube-scraper (Claude, VS Code or any MCP client), or call the Actor through the Apify API. Give at least one of these:

KeyForExample
startUrlsChannels, @handles, channel tabs, playlists, search links, videos and Shorts[{"url": "https://www.youtube.com/@TED"}]
searchQueriesYouTube search, one term per item["web scraping"]
channelsShorts only, by channel name["MrBeast"]

How many: maxResults (videos), maxResultsShorts and maxResultStreams, each per channel or search term; leave all three out for 50 videos. An input with none of the three keys above fails at once with a message saying so, and costs nothing. Subtitles: "transcriptionAndSubtitle": "ALWAYS_SUBTITLES" with subtitlesLanguage and subtitlesFormat.

How fast is it?

Measured on the Apify platform on 2026-10-07 at the default 1,024 MB, same inputs as the most used YouTube scraper on the Store (it took 10.8 s to its first row and 18.9 s in total for the first input, 18.1 s and 35.3 s for the second):

InputFirst rowWhole run
@TED: 8 videos + 2 Shorts4.0-5.7 s5.3-8.1 s
Search "Crawlee": 10 videos4.3-6.8 s5.5-8.0 s
@TED: 300 videos5.3 s39 s
@TED: 60 videos with subtitles (SRT)4.3-6.7 s13-32 s
@mkbhd: 60 videos with subtitles (WebVTT, video's own language)6.7-7.8 s36-38 s
Search "recetas de cocina": 40 videos with Spanish subtitles (XML)5.5-6.7 s13-35 s
Search "python tutorial": 60 videos with subtitles, many of them 5-16 hours long6.8-18 s31-42 s

Times are from pressing Start to the first row in the dataset, and to the end of the run. Subtitle runs vary most: every video needs one call that only some proxy IPs get through (a run finds 2-5 of them), so the same input took 12 s one time and 30 s another.

How much does it cost?

You pay per video saved, nothing per run. Each video is charged once per run, even if two of your inputs list it.

Apify planPrice per 1,000 videos
Free$1.99
Starter$1.49
Scale$1.29
Business$1.19

Videos that the "Published after" filter leaves out are not charged.

Subtitles are included at no extra cost: a video saved with its subtitles costs the same as one without, on every plan.

Input

{
"startUrls": [{"url": "https://www.youtube.com/@TED"}],
"searchQueries": ["web scraping"],
"maxResults": 20,
"maxResultsShorts": 5,
"maxResultStreams": 0
}
  • YouTube links: channels, @handles, channel tabs, playlists, search links, videos and Shorts.
  • Search terms: one per line.
  • Max videos / Shorts / live streams: per channel or search term. 0 = none of that kind. If you leave all three out, you get 50 videos; if you set only Shorts or live streams (an API call with just maxResultsShorts), you get only those, and no regular videos are charged.
  • Published after: a date (2026-09-01) or a period (30 days). A channel tab sorted newest first stops at the first older video.
  • Channel: sort videos by: Newest first (default), Most popular first or Oldest first, as the buttons above a channel's video list. One extra call per channel tab. With "Published after" on, a Popular or Oldest tab is read until 150 videos in a row are older than your date.
  • Subtitles (no extra cost): off by default. Turn on "Download subtitles", then pick the language (a code such as en, es, pt-BR, or any for the video's own language) and the format (SRT, WebVTT, XML as YouTube writes it, or plain text without times). A person-made track is taken before an automatic one. Videos in other languages than the one you pick are saved without subtitles.
  • Search filters: sort by (relevance, upload date, views, rating), upload date (hour, today, week, month, year), length, and features (Live, 4K, HD, Subtitles/CC, Creative Commons, 360ยฐ, VR180, 3D, HDR, Location, Purchased).

Inputs written for streamers/youtube-scraper work as they are, every key of theirs is accepted: startUrls, searchQueries, maxResults, maxResultsShorts, maxResultStreams, sortVideosBy, sortingOrder, dateFilter, videoType, lengthFilter, the checkboxes isHD, is4K... oldestPostDate, and for subtitles transcriptionAndSubtitle, subtitlesLanguage, subtitlesFormat, preferAutoGeneratedSubtitles, saveSubsToKVS. Speech-to-text transcription and AI video descriptions or summaries are not offered: TRANSCRIPTION_AS_FALLBACK saves the videos' own subtitles only, ALWAYS_TRANSCRIBE saves no subtitles, aiVideoDescription and aiVideoSummary are ignored, and the run's status message says so.

Output

One row per video (shortened):

{
"title": "Crawlee, the web scraping and browser automation library",
"type": "video",
"id": "g1Ll9OlFwEQ",
"url": "https://www.youtube.com/watch?v=g1Ll9OlFwEQ",
"thumbnailUrl": "https://i.ytimg.com/vi/g1Ll9OlFwEQ/maxresdefault.jpg",
"viewCount": 13385,
"likes": 167,
"commentsCount": 15,
"date": "2022-08-22T15:26:13Z",
"duration": "00:03:14",
"durationSeconds": 194,
"text": "Crawlee helps you build reliable scrapers. Fast. ...",
"descriptionLinks": [{"url": "https://crawlee.dev/", "text": "https://crawlee.dev/"}],
"hashtags": ["#webscraping", "#crawlee"],
"keywords": ["web scraping platform", "web automation", "scrapers", "Apify"],
"category": "Science & Technology",
"isAgeRestricted": false,
"isMembersOnly": false,
"commentsTurnedOff": false,
"channelName": "Apify",
"channelUrl": "https://www.youtube.com/channel/UCTgwcoeGGKmZ3zzCXN2qo_A",
"channelUsername": "Apify",
"numberOfSubscribers": 31300,
"channelLocation": "Czechia",
"channelJoinedDate": "Jan 4, 2017",
"channelTotalVideos": 293,
"channelTotalViews": 2325654,
"channelDescriptionLinks": [{"text": "Browse tools", "url": "https://apify.com/store"}],
"input": "Crawlee",
"searchQuery": "Crawlee",
"order": 0
}

With subtitles on, each row also has subtitles and subtitlesStatus:

"subtitles": [{"type": "user_generated", "language": "en", "srt": "1\n00:00:00,000 --> 00:00:04,240\nWhat worries me is that we are more and\n\n2\n...", "srtUrl": null}],
"subtitlesStatus": "ok"

type is user_generated (a person made the track) or auto_generated; the text sits under the format's name (srt, vtt, xml or plaintext). subtitlesStatus says why a row has none: noCaptions (the video has no subtitles), noMatchingLanguage (none in your language), emptyCaptions, captionFileFailed, tooLarge (over 8 MB of text), timeout or blocked (YouTube refused every connection this run could use), or what YouTube says about the video (private, ageRestricted, liveNotReady...).

Also in every row: dateText, location, isPaidContent, isUnlisted, isLiveNow, liveStartedAt, liveEndedAt, isChannelVerified, channelAvatarUrl, channelBannerUrl (channel inputs), channelDescription, collaborators (videos made by several channels), soundTitle, musicTitle and musicArtist (Shorts: the sound, e.g. "Original Sound", and the song YouTube identified in it), inputChannelUrl, fromYTUrl, fromChannelListPage and scrapedAt. For rows to line up with streamers/youtube-scraper output, every row also has aboutChannelInfo (the channel fields above again, in one object) and the keys translatedTitle, translatedText, transcriptionUrl, aiVideoDescription, aiVideoSummary and isMonetized, which are always null here (no translation, AI text or speech-to-text); subtitles is null unless you turn subtitles on, and srtUrl is always null (the text is in the row).

The dataset has four views: Videos, Video details, Channels and Subtitles. Download as JSON, CSV, Excel or HTML, or read it through the Apify API.

Good to know

  • Likes are exact (1,414, not "1.4K"). Comment counts are exact on Shorts. Subscribers, and comment counts over 1,000 on other videos, are as YouTube shows them (27.9M, 13K).
  • The publish time is exact (to the second, UTC). It comes from a proxy IP that passes YouTube's bot check, from the channel's feed, or, for the few rows neither covers in time, from one small call through residential proxy (at our cost, not yours). 300 of 300 rows had it in four test runs (two channels of 60 videos, TED 100 videos + 20 Shorts, a search of 60).
  • Subtitles reach almost every video that has them. In nine test runs at the default memory, 466 of the 468 videos with subtitles in the chosen language had them in their row; the other two timed out. Of the videos without, 5 had no subtitles at all and 22 had other languages only.
  • The run log's OUTPUT record lists every input with how many videos it found and why one failed, if one did.

FAQ

Do I need a YouTube account or API key? No. The Actor reads what YouTube shows anyone who isn't logged in.

Can I scrape a whole channel? Yes: set Max videos to the number you want (up to 10,000 per channel tab).

Does it get comments or transcripts? Subtitles, yes, at no extra cost. Comments: use our YouTube Comments Scraper. For transcripts in many languages and translations, use our YouTube Transcript API.

Can I sort a channel by most popular? Yes: "Channel: sort videos by" = Most popular first (or Oldest first).

Are long videos a problem for subtitles? No: a 16-hour stream's subtitles take a minute or two, and the row waits for them. A row waits up to 20 seconds plus one second per ten minutes of video (at most two minutes); after that it is saved without subtitles.

Did it help?

A short review on the Actor's page helps other people find it and tells us what to improve: https://apify.com/deepmine/youtube-scraper/reviews. Something missing or wrong? Write to us through the Actor's Issues tab.