YouTube Scraper
Pricing
Pay per event
YouTube Scraper
Pricing
Pay per event
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Scraper - extract videos, channels, and search results without an API key
This YouTube scraper pulls structured video data straight from YouTube's InnerTube web API, so there is no API key, no OAuth, and no daily quota to burn through. Feed it a mix of search terms, video URLs, and channel handles, and get back one clean row per video with titles, view counts, likes, comment counts, subscriber numbers, and exact publish dates.
What you get
Every result is one video, flattened into fields you can drop straight into a sheet or database:
- Core identity:
video_id,url,title,description, and a shortdescription_snippetfor previews. - Channel context:
channel_name,channel_id,channel_url, andchannel_subscribersso you know how big the uploader is. - Timing:
published_text("3 weeks ago"), a normalizedpublished_date, and the exactupload_datewhen full details are enabled. - Engagement:
view_countplus the rawview_count_text,like_count, andcomment_count. - Media details:
duration_seconds,duration_text,category,keywords,thumbnail_url, and anis_liveflag for streams. - Provenance:
source(search / video / channel), the originalinputthat produced the row, andfetched_in_secondsfor timing.
Why scrape YouTube
The official YouTube Data API v3 runs on a quota system. Every project gets 10,000 units per day by default, and a single search.list call costs 100 units. That means roughly 100 searches a day before you are locked out until midnight Pacific time. Pulling video statistics, comment counts, and channel details each cost extra units on top, so a real research job burns the daily allowance in minutes.
Raising that quota means filling out a Google audit form and waiting for approval that often never comes. Even when it does, you are rate limited, key managed, and one policy change away from losing access.
This scraper skips that entirely. It talks to the same InnerTube endpoints the YouTube website itself uses, so there is no key to register, no quota meter, and no audit. You can pull thousands of videos in a single run, filter by upload date, sort by views, and enrich each row with the exact engagement numbers the Data API charges quota to return.
Input
Provide a queries list and tune the rest. Only queries is required.
| Field | Type | Default | Description |
|---|---|---|---|
queries | array | (required) | Mixed list: search keywords, video URLs (watch?v=, youtu.be/), channel URLs, or @handles. One entry per line. |
max_results | integer | 20 | Maximum videos per search term or channel, from 1 to 500. |
sort_by | string | relevance | Ordering for search inputs: relevance, date, views, or rating. |
upload_date | string | any | Upload window for search inputs: any, hour, today, week, month, or year. |
fetch_details | boolean | true | Enrich each video with likes, subscribers, comment count, full description, exact publish date, and category (2 extra requests per video). |
country | string | US | Two-letter country code for region-specific results (the gl parameter). |
language | string | en | Two-letter interface language code (the hl parameter) for localized text. |
Output
Each dataset item is a single video. With fetch_details on, a row looks like this:
{"video_id": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Full web scraping tutorial for beginners","description": "In this video we cover selectors, pagination, and proxies...","description_snippet": "In this video we cover selectors, pagination, and...","channel_name": "Dev Tutorials","channel_id": "UC1a2b3c4d5e6f7g8h9","channel_url": "https://www.youtube.com/channel/UC1a2b3c4d5e6f7g8h9","channel_subscribers": 482000,"published_text": "3 weeks ago","published_date": "2026-06-21","upload_date": "2026-06-21","view_count": 154302,"view_count_text": "154K views","like_count": 8120,"comment_count": 412,"duration_seconds": 1284,"duration_text": "21:24","category": "Education","keywords": ["web scraping", "python", "tutorial"],"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg","is_live": false,"source": "search","input": "web scraping tutorial","fetched_in_seconds": 1.83}
Turn fetch_details off and you still get the core fields (title, channel, view count, duration, thumbnail) at roughly a third of the requests, with the enrichment fields left empty.
Use cases
Market researchers use it to size demand around a topic. Run a batch of search terms with upload_date set to month, sort by views, and you get a ranked snapshot of what is actually being watched right now, complete with view_count and channel_subscribers so you can separate genuine traction from noise. Because there is no quota ceiling, you can widen the keyword set as far as the research needs to go.
Content strategists mine the data for format and timing signals. Pull a competitor's channel URL, collect the last few hundred uploads, and compare duration_seconds, category, and keywords against view_count and like_count to see which lengths and topics land. The published_date field lets you map posting cadence against engagement, so you can spend more time making the videos that work.
Competitor analysts track rivals over time. Schedule a run against a list of channel handles and store the dataset each week. Movements in channel_subscribers, view_count, and comment_count become a time series you can chart, and the is_live flag flags when a competitor is running streams. No manual checking, no logging into anything.
Data teams treat it as a clean ingestion source. The flat schema (one row per video, consistent field names, numeric counts already parsed out of their display text) drops straight into a warehouse or a pandas frame. The source and input fields keep every row traceable back to the query that produced it, which matters when you are joining several batches into one table.
How it compares
| This scraper | streamers/youtube-scraper | apidojo/youtube-scraper | |
|---|---|---|---|
| Price per 1,000 videos | $3.20 | $4.00 | $0.50 |
| Date-filter add-on fee | none | $0.0013 per video | n/a |
| Comment count | yes | yes | no |
| Exact publish date | yes | yes | no |
| Channel subscribers | yes | yes | no |
| No API key required | yes | yes | yes |
We undercut streamers by 20 percent on the base rate and charge nothing extra for date filtering, where streamers adds $0.0013 per video for the same feature. apidojo is cheaper per thousand, but the rows come back thinner: no comment count, no exact publish date, and no subscriber count. If those three numbers matter to your analysis, this scraper returns all of them at the base price.
Pricing
Pay-per-event, so you only pay for the results you actually receive:
- $0.0032 per video ($3.20 per 1,000 videos).
- $0.002 per-run actor-start fee.
There are no separate charges for date filtering, sorting, or detail enrichment. The per-video rate covers the full row.
Limits and gotchas
sort_byandupload_dateonly apply to search-term inputs. A video URL returns that one video, and a channel URL returns that channel's uploads in YouTube's native order, so the sort and date filters are ignored for both.fetch_detailsadds 2 requests per video (the watch page plus a detail call). Leaving it on is what fills inlike_count,comment_count,channel_subscribers,upload_date, andcategory. Turn it off for faster, lighter runs when you only need core fields.- Region is set with the
countrycode (gl). Search results, availability, and localized text shift by region, so set it to match the market you care about. language(hl) changes localized strings likeview_count_textandpublished_text, not the underlying numbers.- Free-tier Apify users are capped at 10 results per run. Paid users have no cap and can pull up to
max_results(500) per query or channel. - Very large channels return uploads in pages. Set
max_resultsto how deep you want to go; higher values mean more pagination requests and longer runs. comment_countandlike_countcan be hidden by the uploader. When YouTube does not expose them, those fields come back empty rather than guessed.
FAQ
Can I scrape YouTube without an API key? Yes. This actor uses YouTube's internal InnerTube web API, the same one the site loads in your browser, so there is no Google Cloud project, no API key, no OAuth, and no daily quota. You just give it search terms or URLs and run it.
How do I scrape all videos from a channel? Put the channel URL or its @handle in the queries list and set max_results to how many videos you want (up to 500). The actor walks the channel's uploads and returns one row per video. The sort_by and upload_date filters do not apply to channel inputs, so you get the channel's native ordering.
Does it get comment counts? Yes, as long as fetch_details is enabled (it is on by default). Each video row includes comment_count, plus like_count and channel_subscribers. If the uploader has hidden a count, that field is returned empty instead of estimated.
Can I mix search terms, video links, and channels in one run? Yes. The queries list accepts all three at once. Each entry is detected automatically, and the source field on every result tells you whether it came from a search, a single video, or a channel.
How do I get only recent videos? For search inputs, set upload_date to hour, today, week, month, or year, and optionally set sort_by to date to get the newest first. These filters apply to search terms only, not to specific video or channel URLs.
Related Actors
- Youtube Shorts Scraper - Scrape YouTube Shorts from any channel with full engagement data.
- Youtube Comments - Scrape all comments from any YouTube video.
- Free Youtube Transcript - Get the full transcript of any YouTube video.