YouTube Scraper avatar

YouTube Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
YouTube Scraper

YouTube Scraper

Get YouTube video titles, views, likes, comment counts, upload dates, durations, descriptions and channel stats from search terms, channel URLs (videos, Shorts, live) or video URLs. Export as JSON, CSV or Excel.

Pricing

from $5.00 / 1,000 results

Rating

5.0

(2)

Developer

Muhammad Noman Riaz

Muhammad Noman Riaz

Maintained by Community

Actor stats

4

Bookmarked

28

Total users

3

Monthly active users

5 days ago

Last modified

Share

What does YouTube Scraper do?

YouTube Scraper collects public video data from YouTube without the YouTube Data API and its quotas. You give it search terms, channel URLs or video URLs, and it returns one dataset row per video. Each row has the video title, ID, URL, thumbnail, view count, like count, comment count, upload date, duration, description, hashtags and links found in the description. Every row also carries the channel's name, ID, handle, subscriber count, total views, video count, join date, avatar, banner and verified status. From a channel URL it can read the Videos tab, the Shorts tab and the Live tab, each with its own limit. Search results can be narrowed with YouTube's own filters, such as upload date, length, HD, 4K, live or Creative Commons. Results can be downloaded as JSON, CSV, Excel or HTML, or read through the Apify API. It suits content research, competitor tracking and building video lists for analysis.

What data can you get from YouTube?

VideoChannel
Title, video ID, URL, thumbnailChannel name, ID, URL, handle
Views, likes, comment countSubscribers, total views, video count
Upload date, durationJoin date, description, links
Description, hashtags, description linksAvatar and banner image URLs
Type: video, short or streamVerified badge
Location and collaborators when shown

How to scrape YouTube

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Add search terms, or paste video and channel URLs into Direct URLs.
  3. Set Maximum videos, and for channels optionally Maximum Shorts per channel and Maximum live streams per channel.
  4. Click Start and download the dataset when the run finishes.

Input

FieldTypeDefaultWhat it does
searchQueriesarray of stringsnoneKeywords to search on YouTube.
startUrlsarray of URLs[]Video URLs (youtube.com/watch?v=..., youtu.be/...) and channel URLs (/@handle, /channel/ID, /c/name, /user/name). Other URLs are skipped.
maxResultsinteger10Videos per search term and per channel Videos tab. 0 skips them.
maxResultsShortsinteger0Shorts per channel URL.
maxResultStreamsinteger0Past, live or upcoming streams per channel URL.
dateFilterhour, today, week, month, yearnoneSearch only: upload date.
videoTypevideo, movienoneSearch only: result type.
lengthFilterunder4, between420, plus20noneSearch only: video length.
isHD, is4K, isHDR, is3D, is360, isVR180, isLive, hasSubtitles, hasCC, hasLocation, isBoughtbooleanfalseSearch only: YouTube feature filters. They can be combined.
proxyConfigurationobject{"useApifyProxy": false}Proxy for requests to YouTube.

Input example

{
"searchQueries": ["crawlee web scraping"],
"startUrls": [
"https://www.youtube.com/@NASA",
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"maxResults": 15,
"maxResultsShorts": 2,
"maxResultStreams": 2,
"dateFilter": "year",
"proxyConfiguration": { "useApifyProxy": true }
}

Output example

One real row from a local test run on the NASA channel (long text fields shortened here):

{
"title": "Planetary Defenders: This Is Not an Exercise",
"translatedTitle": null,
"type": "video",
"id": "5b3n-u_0QAI",
"url": "https://www.youtube.com/watch?v=5b3n-u_0QAI",
"thumbnailUrl": "https://i.ytimg.com/vi/5b3n-u_0QAI/maxresdefault.jpg",
"viewCount": 512650,
"date": "2026-10-14T15:05:17.000Z",
"likes": 9612,
"location": null,
"channelName": "NASA",
"channelUrl": "https://www.youtube.com/channel/UCLA_DiR1FfKNvjuUpBHmylQ",
"channelUsername": "NASA",
"collaborators": null,
"channelId": "UCLA_DiR1FfKNvjuUpBHmylQ",
"channelDescription": "NASA's mission is to pioneer the future in space exploration, scientific discove...",
"channelJoinedDate": "Jun 3, 2008",
"channelDescriptionLinks": [{ "text": "nasa.gov", "url": "https://nasa.gov" }],
"channelLocation": "",
"channelAvatarUrl": "https://yt3.googleusercontent.com/eIf5fNPcIcj9ig-wZBeq4stFy1lgjWTW1nLT5dYlFkHZprZ03QBiMcbpwNMB6XSBjrSFGtAGQg=s160-c-k-c0x00ffffff-no-rj",
"channelBannerUrl": "https://yt3.googleusercontent.com/y8Srh-oCcilLvBO8jAPI546m1bn0puA5DIvQiBZ1cSxc_rZfKxKSFlTCtoCQCtB6viUf1NGsaQ=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
"channelTotalVideos": 6100,
"channelTotalViews": 1129592359,
"numberOfSubscribers": 15100000,
"isChannelVerified": true,
"inputChannelUrl": "https://www.youtube.com/@NASA",
"isAgeRestricted": false,
"aboutChannelInfo": { "...": "the channel fields above, repeated" },
"duration": "00:20:15",
"commentsCount": 0,
"text": "When a newly discovered asteroid posed a potential risk to Earth, a global planetary defense system was put to the test ...",
"translatedText": null,
"descriptionLinks": [{ "url": "https://www.youtube.com/redirect?...", "text": "https://science.nasa.gov/planetary-de..." }],
"subtitles": null,
"order": 1,
"commentsTurnedOff": false,
"fromYTUrl": "https://www.youtube.com/@NASA/videos",
"isMonetized": false,
"hashtags": [],
"formats": [],
"isMembersOnly": false,
"input": "https://www.youtube.com/@NASA",
"fromChannelListPage": "videos"
}

fromChannelListPage tells you where a row came from: videos, shorts, streams, search or direct.

FAQ

Can I scrape a whole YouTube channel?

Yes, up to your limits. Paste the channel URL and set Maximum videos to the number of videos you want. The scraper pages through the Videos tab until it reaches that number or the end of the channel. Shorts and live streams have their own limits.

Does it need a YouTube API key?

No. It reads the same public pages a browser loads, so there is no API key and no daily quota.

Can it scrape YouTube comments or transcripts?

No. It returns the comment count only. For comment text use YouTube Comments Scraper. For transcripts and subtitles use YouTube Video Transcript Scraper.

Can I combine search filters?

Yes. Upload date, type, length and the feature filters are sent to YouTube together as one filter set.

Do I need a proxy?

Small runs often work without one. For larger runs on the Apify platform, turn on Apify Proxy so YouTube is less likely to block or rate limit the run.

The scraper only reads publicly visible data. You are responsible for how you use it, including YouTube's terms and privacy laws such as the GDPR when data relates to people.

Known limits

  • Playlist, hashtag and search result page URLs are not supported in Direct URLs. Use Search terms for searches.
  • Search reads the first results page only (typically around 20 videos), so a search term never returns more than that.
  • Search results come in YouTube's relevance order. There is no sort option.
  • Shorts are read from the first page of the Shorts tab only, which is about 40 items.
  • Every video is loaded from its own watch page, so large runs take time.
  • translatedTitle, translatedText, subtitles, formats, isMembersOnly, isAgeRestricted and commentsTurnedOff are kept for format compatibility and always hold their empty or false value.
  • isMonetized is a rough guess from the page HTML and should not be relied on.
  • commentsCount is 0 when YouTube does not show a count on the watch page. Upcoming streams have a viewCount of 0.
  • channelTotalVideos and numberOfSubscribers come from YouTube's rounded display values, such as 6.1K.
  • If YouTube answers with HTTP 429 (rate limit), the run saves what it has and stops.
  • A video found twice in one run is saved once.