YouTube Scraper
Scrape YouTube videos by keyword or channel without the API. Get titles, views, publish dates, watch URLs and channel data. No key or cookies needed.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,channelUrls,maxItems(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | Keywords to search YouTube for, one per line (e.g. "lofi hip hop", "python tutorial"). Each query returns up to Max videos. Leave empty if you only want channel videos. Empty results usually mean the query genuinely has no matches, or that geo-blocking / anti-bot triggered for the run IP — try again with the residential proxy enabled. | array |
channelUrls | YouTube channels to pull videos from, one per line. Accepts full channel URLs (e.g. https://www.youtube.com/@LofiGirl, https://www.youtube.com/c/ChannelName, https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Ow), @handles (e.g. @LofiGirl), or raw UC channel ids (e.g. UCSJ4gkVC6NrvII8umztf0Ow). Each channel returns up to Max of its newest videos. | array |
maxItems | Maximum number of videos to return per search query and per channel. Pagination via continuation tokens is used to reach this number. Values up to a few hundred are realistic; very large values (toward 1000) require many paginated requests and raise the chance of YouTube rate-limiting or blocking the run IP — keep a residential proxy enabled for high values. | integer |
notionConnector | Optional. Write each video as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default) — results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
What you get
A structured dataset — each result includes fields like:
channelIdchannelNamelengthTextmodepublishedTimeTextthumbnailtitleurlvideoIdviewCountTextExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
18 ready-to-run use cases
YouTube Content Gap Finder: Search Results Scraper
YouTube keyword research for creators: scrape the top-ranking videos for any search term with views and channel size to spot low-competition content gaps.
YouTube Title Scraper: Top Video Titles by Keyword
Reverse-engineer high-CTR YouTube titles. This scraper returns the top-performing video titles and view counts for any keyword so you can copy what works.
YouTube Channel Scraper for RAG Transcript Corpus
Scrape every video URL and title from an expert YouTube channel to build a domain-specific transcript corpus for RAG pipelines and LLM grounding.
Scrape YouTube Channel Videos to Repurpose to Blogs
Export a YouTube channel's videos with views and metadata, then repurpose the top performers into blog posts, newsletters, and Shorts scripts.
YouTube Comment Scraper for Video Idea Research
Scrape a YouTube channel's videos and mine the comments for recurring viewer questions and requests that point straight to your next video ideas.
YouTube Brand Mention Tracker for Social Listening
Social listening on YouTube: search a brand or product name to collect every video, view count, and channel discussing it for sentiment and PR monitoring.
YouTube Influencer Finder by Niche for Outreach
Search any niche on YouTube and collect candidate creator channels with subscriber counts and engagement to vet for influencer marketing and sponsorships.
Find Low-Competition High-RPM YouTube Niches
Niche validation for new channels: search high-RPM topics like finance, AI, and B2B to see who ranks, their channel size, and views before you commit.
YouTube Shorts Scraper for Dropshipping Research
Spot winning products early. Search viral product and gadget queries on YouTube to collect high-view Shorts and videos for dropshipping and ecommerce research.
Scrape Multiple YouTube News Channels for Research
Build a YouTube news dataset for media research: pull recent videos across many news outlet channels with titles, dates, and views for diffusion analysis.
Benchmark Competitor YouTube Channels Side by Side
Competitor analysis on YouTube: scrape rival channels to compare upload frequency, format mix, and view performance, then shape your own content strategy.
Find Sponsor-Ready YouTube Creators in Your Niche
Find YouTube creators already making review and unboxing videos in your category, with channels and views, to target the best sponsorship-fit accounts.
YouTube Podcast Scraper: Full Episode List for AI
Index a podcast channel's full episode catalog from YouTube to power a searchable transcript archive, episode index, or Q&A bot over the back catalog.
Discover Rising YouTube Channels in a New Niche
Search an emerging topic on YouTube to surface rising creators and fast-growing videos as an early signal before the niche gets saturated.
Scrape a YouTube Channel's Videos by @handle
Enter a YouTube @handle like @LofiGirl to pull the channel's full video list with views, titles, publish dates, and watch URLs as a clean dataset.
Monitor a YouTube Channel's Latest Uploads
Watch any channel like MrBeast for its newest videos, view counts, and publish times on a schedule, so you catch every new upload as it lands.
Scrape Multiple YouTube Channels at Once
Bulk YouTube channel scraping: pull recent videos from several channels like MKBHD and Linus Tech Tips together to compare output side by side as a dataset.
Search YouTube for Product Review Videos
See which 'AirPods Pro 2 review' videos rank on YouTube, who made them, and how many views each pulled, all exported as a clean dataset.
YouTube Scraper
Scrape YouTube videos by search keyword or by channel (URL, @handle, or UC… id) using YouTube's internal InnerTube (youtubei/v1) JSON API. No API key, no cookies, no login. Auto-paginates via continuation tokens to reach your requested item count.
For every video it returns: videoId, title, watch url, channelName, channelId, viewCountText, publishedTimeText, lengthText, and the largest thumbnail.
What it does
- Search mode — give one or more keywords; each query returns up to
maxItemsmatching videos. - Channel mode — give one or more channels; each returns up to
maxItemsof its newest videos.
You can use either mode or both in a single run. Results are de-duplicated by videoId across all queries and channels, so you never pay for the same video twice in one run.
Input
| Field | Type | Description |
|---|---|---|
searchQueries | string[] | Keywords to search, one per line. Optional if you supply channelUrls. |
channelUrls | string[] | Channel URLs, @handles, or raw UC… ids. Optional if you supply searchQueries. |
maxItems | integer | Max videos per query and per channel (1–1000, default 50). |
proxyConfiguration | object | Proxy for all requests. Residential Apify Proxy is strongly recommended — YouTube blocks datacenter/cloud IPs aggressively. |
You must provide at least one of searchQueries or channelUrls. If both are empty the actor pushes an uncharged BAD_INPUT diagnostic row (it does not crash).
Example input
{
"searchQueries": ["lofi hip hop", "python tutorial"],
"channelUrls": ["https://www.youtube.com/@LofiGirl", "UCSJ4gkVC6NrvII8umztf0Ow"],
"maxItems": 50,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
Output
Each successful video is one dataset row with ok: true:
{
"ok": true,
"videoId": "n61ULEU7CO0",
"title": "lofi hip hop radio - beats to relax/study to",
"url": "https://www.youtube.com/watch?v=n61ULEU7CO0",
"channelName": "Lofi Girl",
"channelId": "UCSJ4gkVC6NrvII8umztf0Ow",
"viewCountText": "123,456 views",
"publishedTimeText": "2 years ago",
"lengthText": "1:02:33",
"thumbnail": "https://i.ytimg.com/vi/n61ULEU7CO0/hqdefault.jpg",
"mode": "search"
}
Nullable / empty fields
YouTube's modern channel grid uses a different layout than search results, so a few fields can come back as an empty string "" depending on which layout a video uses:
channelId— may be empty for some channel-grid videos (the grid layout does not always carry the id).viewCountText,publishedTimeText,lengthText— may be empty for live streams, premieres, or radio-style "videos" that have no view count or fixed duration.thumbnail— falls back tohttps://i.ytimg.com/vi/<videoId>/hqdefault.jpgif no source URL is present, so it is rarely empty.
videoId, title, and url are always present on ok: true rows.
Pricing
This actor charges per returned video (pay-per-result). You are charged only for genuine ok: true video rows.
- Blocked, rate-limited, network-error, and empty (
NO_RESULTS) runs are never charged. When something goes wrong the actor pushes anok: falsediagnostic row with anerrorCodeinstead of charging you.
Diagnostics
On any failure the actor pushes a diagnostic row (ok: false) carrying a clear errorCode rather than silently returning nothing:
errorCode | Meaning |
|---|---|
BAD_INPUT | No searchQueries or channelUrls were provided. |
BLOCKED | YouTube blocked the request (anti-bot / 403). Use a residential proxy. |
RATE_LIMITED | Hit a 429. The actor backed off and retried; lower volume or add a proxy. |
SERVER_ERROR | YouTube returned a 5xx. Usually transient — retry later. |
NO_RESULTS | The request succeeded but matched no videos for your input. |
NETWORK | A network error reaching YouTube. |
Troubleshooting
- Got
NO_RESULTSorBLOCKEDfor a channel you know has videos? YouTube blocks cloud/datacenter IPs aggressively. Enable Apify Proxy with theRESIDENTIALgroup and re-run — this resolves the large majority of empty/blocked results. RATE_LIMITEDon large runs? A highmaxItems(toward 1000) requires many paginated requests. LowermaxItems, run fewer queries per run, or keep the residential proxy on.- Channel won't resolve (
BAD_INPUT: could not resolve channel)? Double-check the handle/URL, or pass the rawUC…channel id directly.