โถ๏ธ YouTube Scraper
Pricing
from $2.00 / 1,000 results
โถ๏ธ YouTube Scraper
Scrape YouTube videos, Shorts, channels, playlists, comments, and search results, no API key or quota limit. Extract subtitles, transcripts, channel emails, and a computed virality score for creator research and content analysis.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Data Minds
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
11 days ago
Last modified
Categories
Security
Limited permissionsShare
What is YouTube Scraper?
YouTube Scraper extracts public data from YouTube videos, Shorts, live streams, channels, playlists, hashtags and search results. Paste links or search terms and get one dataset row per video: title, views, likes, comment count, channel details, engagement rate and an outlier score. Comments and subtitles are optional. Pay per result: $0.003 on the Free plan, down to $2.00 per 1,000 results on the Gold plan, with platform usage billed in addition.
Just add a YouTube link or a search term and click Start. No coding and no YouTube API key needed.
- YouTube competitor analysis: compare views, likes, engagement rate and upload dates across rival channels.
- YouTube influencer research: find creators by search term or hashtag, then read their subscribers, country and listed links.
- YouTube channel email finder for lead generation: collect the emails creators publish in their channel description, like a YouTube email scraper.
- YouTube keyword research and trend research: see which titles, tags and categories lead the results for a topic.
- Export YouTube comments and subtitles: gather top comments and caption text for content research and sentiment analysis.
- Monitor new YouTube uploads: run on a schedule with monitor mode and collect only videos you have not seen before.
Because YouTube Scraper runs on Apify, you also get API access, scheduling, webhooks, integrations and downloads in JSON, CSV, Excel, XML and HTML.
What can YouTube Scraper do?
- ๐ฌ Scrape YouTube videos, Shorts and streams from video, channel, playlist, hashtag and search-result links in one run
- ๐ Scrape YouTube search results by plain search terms, with sort order, upload date, content type, length and feature filters such as HD, 4K and Creative Commons
- ๐ Calculate an engagement rate and an outlier score that compares each video with the channel's recent median views
- ๐ง Read channel details such as description, country, join date, totals, external links and emails found in the description
- ๐ฌ Export top comments and subtitles per video, in the language and format you choose
- ๐ Skip videos from earlier runs with monitor mode, so a daily or weekly schedule reports only new uploads
- ๐ฑ Run YouTube Shorts analytics and Shorts research by setting
maxResultsShorts - ๐ Export YouTube channel statistics such as subscribers, total views and total videos
- ๐ฆ Export YouTube data to JSON, CSV, Excel, XML or HTML, or fetch it through the API
What data can YouTube Scraper extract?
| Data | Fields |
|---|---|
| ๐ฌ Video basics | id, url, type (video, short or stream), title, description, duration, date, category, keywords, thumbnailUrl |
| ๐ Engagement | viewCount, likes, commentsCount, commentsTurnedOff, engagementRate |
| ๐ด Live status | isLiveContent, isUpcoming |
| ๐บ Channel link | channelName, channelId, channelUrl |
| ๐ Outlier score | outlierScore with ratio, channelMedianViews and label (viral_outlier, above_average, average or below_average) |
| ๐ข Channel About | channelDescription, channelLocation, channelJoinedDate, numberOfSubscribers, channelTotalViews, channelTotalVideos, channelDescriptionLinks, channelEmails |
| ๐ฌ Comments | comments list with commentId, videoId, text, publishedTimeText, authorName, authorChannelId, authorIsChannelOwner, authorIsVerified, likesCountText, replyCount, replyLevel |
| ๐ Subtitles | subtitles with available, language, kind, format, content (or reason when none is available) |
| ๐ Playlist and hashtag source | fromPlaylist, playlistTitle, fromHashtag, plus durationText on playlist rows |
| ๐ง Input problems | url, input, error, note on rows that describe an input that could not be processed |
As a YouTube metadata scraper, it returns video titles, tags and thumbnail links in bulk. As a YouTube analytics scraper, it adds views, likes, engagement rate and an outlier score.
Note: Fields are empty when YouTube does not show them for a video, for example hidden likes or disabled comments.
outlierScoreand the channel About fields appear only for channel links.engagementRateandoutlierScoreappear only while the Outlier score and engagement rate option is on, andcommentsandsubtitlesonly when you switch them on. Rows read from a playlist link are shorter: they carryid,url,type,title,durationText,date,viewCount,fromPlaylistandplaylistTitle.
What data can't YouTube Scraper extract?
- Private, deleted or region-blocked videos. They come back as an error row.
- Replies below top comments and anything behind a login.
- Video files and audio files. The Actor collects data about videos, not the media itself.
For transcripts only, try YouTube Transcript Scraper.
How to scrape YouTube data
As a YouTube data extractor for video pages, YouTube Scraper is designed for an easy start, even if you have never extracted data from the web before.
- Create a free Apify account with your email.
- Open YouTube Scraper.
- Add one or more links to
urls, such as a channel, video, playlist, hashtag or search-results link. - Optionally add search terms to
searchQueriesand set how many videos you want inmaxResults. - Switch on
extractCommentsordownloadSubtitlesif you need them. - Click Start and wait for the run to finish.
- Download your data in JSON, CSV, Excel, XML or HTML from the Output tab.
How much does it cost to scrape YouTube?
YouTube Scraper uses a pay-per-event model: you pay for each result saved to the dataset, plus a small start event. Platform usage is billed in addition. The price per result depends on your Apify plan:
| Plan | Price per result | Price per 1,000 results |
|---|---|---|
| Free | $0.003 | $3.00 |
| Bronze | $0.0027 | $2.70 |
| Silver | $0.0024 | $2.40 |
| Gold | $0.002 | $2.00 |
Each run also charges a start event of $0.00005 per GB of memory, with a minimum of one event. The default memory is 1 GB (1,024 MB), so each run starts with 1 event, which is $0.00005.
For example, scraping 1,000 results on the Gold plan costs $2.00 for results, plus the start event and platform usage. The default input of 10 results on the Free plan costs $0.03 for results, plus the start event and platform usage.
Rows that only describe an input problem are saved without the result charge. If you set a maximum cost per run, the run stops when it is reached and keeps everything saved so far. See the pricing tab for all events.
Is scraping YouTube free?
Yes, you can start for free. The Apify Free plan includes $5 in monthly credit. At the Free price of $0.003 per result, that credit covers about 1,666 results before platform usage and the start event. Paid plans lower the price per result.
Input
YouTube Scraper needs only one YouTube link in urls. Everything else has a default. Set the input in the Actor form or send it as JSON through the API.
This example reads the 10 latest videos of a channel:
{"urls": [{"url": "https://www.youtube.com/@YouTube"}],"maxResults": 10,"proxyConfiguration": {"useApifyProxy": false}}
See the input tab for the full description of every field.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
urls | array | Yes | none (prefilled with a channel link) | Video, Shorts, channel, playlist, hashtag or search-results links. |
searchQueries | array | No | [] | Plain search terms. Each one is searched separately. |
maxResults | integer | No | 10 | Regular videos per search term, channel or playlist (0 to 5000). |
maxResultsShorts | integer | No | 0 | Shorts per search term or channel. 0 means none. |
maxResultStreams | integer | No | 0 | Live or upcoming streams per search term or channel. 0 means none. |
sortingOrder | string | No | "" | Search order: relevance, rating, date or views. |
dateFilter | string | No | "" | Upload window: hour, today, week, month or year. |
videoType | string | No | "" | video or movie. |
lengthFilter | string | No | "" | under4, between420 or plus20 (minutes). |
isHD, hasSubtitles, hasCC, is3D, isLive, isBought, is4K, is360, isHDR, hasLocation, isVR180 | boolean | No | false | Feature filters for search. Combine as needed. |
sortVideosBy | string | No | NEWEST | Channel order: NEWEST, POPULAR or OLDEST. |
extractComments | boolean | No | false | Collect top comments for every video. |
maxComments | integer | No | 20 | Comments per video (0 to 5000). |
downloadSubtitles | boolean | No | false | Collect the subtitle track for every video, when available. |
subtitlesLanguage | string | No | en | Language code, or any. |
subtitlesFormat | string | No | srt | srt, vtt, plaintext or json3. |
preferAutoGeneratedSubtitles | boolean | No | false | Prefer auto-generated captions over uploaded ones. |
computeOutlierScore | boolean | No | true | Add engagementRate and outlierScore. |
extractChannelDetails | boolean | No | true | For channel links, add the About details and emails. |
monitorMode | boolean | No | false | Skip videos collected by an earlier run of this Actor. |
proxyConfiguration | object | No | {"useApifyProxy": false} | Optional connection settings. Leave the default unless you need your own. |
browserFallback | boolean | No | true | Allow an extra retry step for requests that keep failing. |
maxConcurrency | integer | No | 5 | Links and search terms processed at the same time (1 to 20). |
maxRequestRetries | integer | No | 3 | Attempts per failed request (1 to 10). |
maxScanned | integer | No | 20000 | Safety cap on search rows examined per query (100 to 200000). |
Links in urls
Use full YouTube links. Channel links can use the @handle, /channel/ or /c/ form.
- โ
Good:
https://www.youtube.com/@YouTube - โ
Good:
https://www.youtube.com/playlist?list=PL_EXAMPLE - โ
Good:
https://www.youtube.com/results?search_query=react+tutorial - โ Bad:
https://www.youtube.com/YouTube(not a recognised link type, so you get an error row)
Warning: The
urlsfield is marked required in the form. Add a link there even if you also usesearchQueries.
Videos, Shorts and streams per source
maxResults counts regular videos, maxResultsShorts counts Shorts and maxResultStreams counts streams. The Shorts and streams limits default to 0, so they are off.
- โ
Good:
"maxResults": 20, "maxResultsShorts": 10 - โ Bad:
"maxResultsShorts": 0when you expect Shorts in the results
Warning: Every saved result is charged. Start with a small
maxResultsand raise it after a test run.
Comments and subtitles
Both are opt-in and add extra requests per video, so runs take longer.
- โ
Good:
"extractComments": true, "maxComments": 50 - โ
Good:
"downloadSubtitles": true, "subtitlesLanguage": "es" - โ Bad:
"maxComments": 50alone (comments stay off withoutextractComments) - โ Bad:
"subtitlesLanguage": "Spanish"(use the language code)
Warning: If the requested subtitle language is missing for a video, another available track is used. Check the
languagevalue in the result.
Search filters
sortingOrder, dateFilter, videoType, lengthFilter and the feature switches apply to search terms and search-result links only. Leave them blank to skip a filter.
Output
Results are saved to a dataset, which you can open in the Output or Storage tab. View them as a table or JSON, choose only the fields you need, and download them in JSON, CSV, Excel, XML or HTML. The dataset has separate views for overview, insights, channel and emails, comments, media, source and errors. Each result is saved as soon as it is collected.
JSON example
Results for the input example above (one item, shortened):
{"id": "EXAMPLE_ID","url": "https://www.youtube.com/watch?v=EXAMPLE_ID","type": "video","title": "Example video title","description": "Example description text.","duration": 312,"channelName": "Example Channel","channelId": "UCexampleChannelId000000","channelUrl": "https://www.youtube.com/@example","date": "2026-01-15","viewCount": 1250000,"likes": 48000,"commentsCount": 2300,"commentsTurnedOff": false,"category": "Entertainment","thumbnailUrl": "https://example.com/thumbnail.jpg","isLiveContent": false,"isUpcoming": false,"keywords": ["example", "demo"],"outlierScore": {"ratio": 1.8,"channelMedianViews": 694000,"label": "above_average"},"engagementRate": 3.9,"channelDescription": "Example channel description. Contact: contact@example.com","channelLocation": "United States","channelJoinedDate": "Joined Jan 1, 2010","channelTotalViews": 90000000000,"numberOfSubscribers": 35000000,"channelTotalVideos": 1200,"channelDescriptionLinks": [{"title": "Website","displayText": "example.com","url": "https://example.com"}],"channelEmails": ["contact@example.com"]}
With extractComments on, each result also has a comments list. With downloadSubtitles on, it has a subtitles object:
{"comments": [{"commentId": "EXAMPLE_COMMENT_ID","videoId": "EXAMPLE_ID","text": "Example comment text.","publishedTimeText": "2 days ago","authorName": "@example-viewer","authorChannelId": "UCexampleViewerId0000000","authorIsChannelOwner": false,"authorIsVerified": false,"likesCountText": "12","replyCount": 1,"replyLevel": 0}],"subtitles": {"available": true,"language": "en","kind": "asr","format": "srt","content": "1\n00:00:00,000 --> 00:00:02,000\nExample caption line.\n"}}
A playlist link produces shorter rows:
{"id": "EXAMPLE_ID","url": "https://www.youtube.com/watch?v=EXAMPLE_ID","type": "video","title": "Example playlist video","durationText": "5:12","date": "1 year ago","viewCount": 15000,"fromPlaylist": "PL_EXAMPLE","playlistTitle": "Example playlist"}
An input that cannot be processed produces an error row:
{"url": "https://www.youtube.com/YouTube","input": "https://www.youtube.com/YouTube","error": "NOT_FOUND","note": "Page was not found"}
At the end of each run, a run-summary record is saved in the key-value store with source, scrapedAt, totalResults, videos, shorts, streams, errors, sources, resultsWithChannelEmails, resultsWithComments, resultsWithSubtitles, requestsMade and durationSeconds.
Notes and limitations
- Only public data is collected. Fields YouTube hides stay empty.
- Error codes you may see:
CHANNEL_DOES_NOT_EXIST,VIDEO_UNAVAILABLE,NOT_FOUND,CHANNEL_HAS_NO_VIDEOS,NO_RESULTSandNO_VALID_START_URLS. outlierScorecompares a video with the other videos read from the same channel in that run.channelEmailscontains only emails written in the channel description.
Tips and advanced usage
How many results can you scrape with YouTube Scraper?
Each source can return up to 5000 videos per type, set with maxResults, maxResultsShorts and maxResultStreams. The real number depends on how many videos a channel or search has and on the filters you apply. The best way to know for your use case is a quick test run with a small limit.
How to get faster or cheaper results
- Keep
maxResultssmall while testing. - Leave
extractCommentsanddownloadSubtitlesoff unless you need them, because they add requests per video. - Raise
maxConcurrencyto process more links and search terms at the same time. - Turn off
computeOutlierScoreorextractChannelDetailsif you do not need those fields.
How to monitor new YouTube uploads
Switch on monitorMode and put the run on a schedule. YouTube Scraper remembers the videos it collected for your account and skips them next time, so each scheduled run reports only new uploads.
Known issues
- The
urlsfield is required by the form, so add a link even for search-only runs. - If results look incomplete, run again later.
Integrations and API
Can I use YouTube Scraper as an API?
Yes. The Apify API gives you programmatic access to YouTube Scraper: start runs, schedule them and fetch results. Use the apify-client package for Node.js or Python. See the API tab for ready-to-use code.
How to scrape YouTube with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("data_minds/youtube-scraper").call(run_input={"urls": [{"url": "https://www.youtube.com/@YouTube"}],"maxResults": 10,"proxyConfiguration": {"useApifyProxy": False},})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Can I integrate YouTube Scraper with other apps?
Yes. Connect YouTube Scraper with cloud services through Apify integrations such as Make, Zapier, Google Sheets and Slack. Use webhooks to trigger actions when a run finishes, and schedules to repeat runs daily or weekly.
Can I use YouTube Scraper with AI agents (MCP)?
Yes. Connect YouTube Scraper to Claude and other AI assistants through the Apify MCP server. Open the MCP tab for setup steps.
Other YouTube scrapers
| Actor | What it does |
|---|---|
| โก Fast YouTube Channel Scraper | Collect videos from YouTube channels quickly. |
| ๐ฌ YouTube Comments Scraper | Collect comments from YouTube videos. |
| ๐ฌ YouTube Transcript Scraper | Extract transcripts from YouTube videos. |
| ๐ Best YouTube Transcripts Scraper | Get the transcript of any YouTube video, Short, playlist or channel: timestamped captions, SRT, chapters, language choice, video and channel details. |
| ๐ YouTube Channel Email Scraper | Find contact emails, social links, channel stats and recent activity for any YouTube channel from links, @handles, channel IDs, video links or... |
FAQ
Is it legal to scrape YouTube?
Scraping publicly available data is generally legal, but the rules depend on your country and on what you do with the data. Respect personal data, copyright and the platform terms of YouTube. See Is web scraping legal?. This is not legal advice.
How does YouTube Scraper work?
YouTube Scraper takes the YouTube links and search terms you provide, collects the public data for each matching video, and saves one row per video to your dataset as it goes. You choose how many videos, Shorts and streams to collect, and whether to add comments, subtitles, channel details and scores. The run ends with a summary record.
Why scrape YouTube data?
Scraping YouTube data turns scattered pages into a table you can sort and analyse. Teams use it for competitor analysis, influencer research, topic and trend research, tracking views and engagement over time, building channel lists for outreach, and gathering comments or subtitles for content and sentiment studies. Scheduled runs keep that table current without manual copying.
Can I scrape YouTube without an API key?
Yes. YouTube Scraper does not ask for a YouTube API key or a login. You only need an Apify account. Add your links or search terms, press Start, and download the results. Everything it returns is publicly visible data, so private videos and hidden counts are not included in the output.
How do I get a YouTube channel email list for influencer outreach?
Add channel links to urls and keep extractChannelDetails on. For each video, the channelEmails field lists emails that creators wrote in their channel description. Export the dataset to CSV or Excel to build your list. Channels that do not publish an email return an empty list.
Can I export YouTube comments and subtitles?
Yes. Turn on extractComments to get top comments with author, text, likes and reply counts, and downloadSubtitles to get captions as SRT, VTT, plain text or JSON3. Set maxComments and subtitlesLanguage to control the size. Both options add requests, so runs take longer and the dataset grows.
Why am I getting fewer results than expected?
First check the limits: maxResults is 10 by default, and maxResultsShorts and maxResultStreams are 0. Filters on search terms reduce matches, and monitor mode skips videos seen in earlier runs. Private or removed videos appear as error rows. If results still look incomplete, run again later.
YouTube Scraper not working?
Open the run log and the Errors view of the dataset first, because they show which input failed and why. Check that each link is a full YouTube link and that filters are not too narrow. If the problem remains, report it on the Issues tab with your run link.
Support and feedback
Found a bug or have a feature request? Please create an issue on the Issues tab.
Need a custom solution or more data? Contact us at hello.dataminds@gmail.com.
Built and maintained by the data_minds team on Apify.
YouTube Scraper is an independent tool and is not affiliated with, endorsed by or sponsored by YouTube or Google. You are responsible for using the data in line with applicable laws and platform terms.