โ–ถ๏ธ YouTube Scraper avatar

โ–ถ๏ธ YouTube Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
โ–ถ๏ธ YouTube Scraper

โ–ถ๏ธ 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

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

11 days ago

Last modified

Categories

Security

Limited permissions

Share

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?

DataFields
๐ŸŽฌ Video basicsid, url, type (video, short or stream), title, description, duration, date, category, keywords, thumbnailUrl
๐Ÿ‘€ EngagementviewCount, likes, commentsCount, commentsTurnedOff, engagementRate
๐Ÿ”ด Live statusisLiveContent, isUpcoming
๐Ÿ“บ Channel linkchannelName, channelId, channelUrl
๐Ÿš€ Outlier scoreoutlierScore with ratio, channelMedianViews and label (viral_outlier, above_average, average or below_average)
๐Ÿข Channel AboutchannelDescription, channelLocation, channelJoinedDate, numberOfSubscribers, channelTotalViews, channelTotalVideos, channelDescriptionLinks, channelEmails
๐Ÿ’ฌ Commentscomments list with commentId, videoId, text, publishedTimeText, authorName, authorChannelId, authorIsChannelOwner, authorIsVerified, likesCountText, replyCount, replyLevel
๐Ÿ“„ Subtitlessubtitles with available, language, kind, format, content (or reason when none is available)
๐Ÿ“ƒ Playlist and hashtag sourcefromPlaylist, playlistTitle, fromHashtag, plus durationText on playlist rows
๐Ÿšง Input problemsurl, 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. outlierScore and the channel About fields appear only for channel links. engagementRate and outlierScore appear only while the Outlier score and engagement rate option is on, and comments and subtitles only when you switch them on. Rows read from a playlist link are shorter: they carry id, url, type, title, durationText, date, viewCount, fromPlaylist and playlistTitle.

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.

  1. Create a free Apify account with your email.
  2. Open YouTube Scraper.
  3. Add one or more links to urls, such as a channel, video, playlist, hashtag or search-results link.
  4. Optionally add search terms to searchQueries and set how many videos you want in maxResults.
  5. Switch on extractComments or downloadSubtitles if you need them.
  6. Click Start and wait for the run to finish.
  7. 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:

PlanPrice per resultPrice 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.

FieldTypeRequiredDefaultDescription
urlsarrayYesnone (prefilled with a channel link)Video, Shorts, channel, playlist, hashtag or search-results links.
searchQueriesarrayNo[]Plain search terms. Each one is searched separately.
maxResultsintegerNo10Regular videos per search term, channel or playlist (0 to 5000).
maxResultsShortsintegerNo0Shorts per search term or channel. 0 means none.
maxResultStreamsintegerNo0Live or upcoming streams per search term or channel. 0 means none.
sortingOrderstringNo""Search order: relevance, rating, date or views.
dateFilterstringNo""Upload window: hour, today, week, month or year.
videoTypestringNo""video or movie.
lengthFilterstringNo""under4, between420 or plus20 (minutes).
isHD, hasSubtitles, hasCC, is3D, isLive, isBought, is4K, is360, isHDR, hasLocation, isVR180booleanNofalseFeature filters for search. Combine as needed.
sortVideosBystringNoNEWESTChannel order: NEWEST, POPULAR or OLDEST.
extractCommentsbooleanNofalseCollect top comments for every video.
maxCommentsintegerNo20Comments per video (0 to 5000).
downloadSubtitlesbooleanNofalseCollect the subtitle track for every video, when available.
subtitlesLanguagestringNoenLanguage code, or any.
subtitlesFormatstringNosrtsrt, vtt, plaintext or json3.
preferAutoGeneratedSubtitlesbooleanNofalsePrefer auto-generated captions over uploaded ones.
computeOutlierScorebooleanNotrueAdd engagementRate and outlierScore.
extractChannelDetailsbooleanNotrueFor channel links, add the About details and emails.
monitorModebooleanNofalseSkip videos collected by an earlier run of this Actor.
proxyConfigurationobjectNo{"useApifyProxy": false}Optional connection settings. Leave the default unless you need your own.
browserFallbackbooleanNotrueAllow an extra retry step for requests that keep failing.
maxConcurrencyintegerNo5Links and search terms processed at the same time (1 to 20).
maxRequestRetriesintegerNo3Attempts per failed request (1 to 10).
maxScannedintegerNo20000Safety cap on search rows examined per query (100 to 200000).

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 urls field is marked required in the form. Add a link there even if you also use searchQueries.

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": 0 when you expect Shorts in the results

Warning: Every saved result is charged. Start with a small maxResults and 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": 50 alone (comments stay off without extractComments)
  • โŒ 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 language value 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_RESULTS and NO_VALID_START_URLS.
  • outlierScore compares a video with the other videos read from the same channel in that run.
  • channelEmails contains 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 maxResults small while testing.
  • Leave extractComments and downloadSubtitles off unless you need them, because they add requests per video.
  • Raise maxConcurrency to process more links and search terms at the same time.
  • Turn off computeOutlierScore or extractChannelDetails if 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 urls field 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 ApifyClient
client = 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

ActorWhat it does
โšก Fast YouTube Channel ScraperCollect videos from YouTube channels quickly.
๐Ÿ’ฌ YouTube Comments ScraperCollect comments from YouTube videos.
๐ŸŽฌ YouTube Transcript ScraperExtract transcripts from YouTube videos.
๐Ÿ”— Best YouTube Transcripts ScraperGet the transcript of any YouTube video, Short, playlist or channel: timestamped captions, SRT, chapters, language choice, video and channel details.
๐Ÿ”— YouTube Channel Email ScraperFind contact emails, social links, channel stats and recent activity for any YouTube channel from links, @handles, channel IDs, video links or...

FAQ

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.