YouTube Channel Scraper
Pricing
from $3.00 / 1,000 channel or video results
YouTube Channel Scraper
Scrape YouTube channel metadata and recent videos from channel / about / videos pages via ytInitialData. Ideal for content research, affiliate research, and AI training datasets.
Pricing
from $3.00 / 1,000 channel or video results
Rating
0.0
(0)
Developer
Harsh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Scrape YouTube channel metadata and recent videos for content research, affiliate research, competitor analysis, and AI training datasets. Built with TypeScript and Crawlee CheerioCrawler (HTTP-first, no browser) by parsing embedded ytInitialData JSON from channel About and Videos pages.
Run it on the Apify platform for scheduling, API access, proxy rotation, monitoring, and dataset exports (JSON, CSV, Excel).
Legal / ToS notice: This Actor is intended for publicly available data only. Respect YouTube Terms of Service, robots rules, and applicable privacy laws (GDPR/CCPA). Do not use this tool to bypass authentication, scrape private content, or violate platform policies. You are responsible for how you use the data.
What does YouTube Channel Scraper do?
Given one or more channel URLs (@handle, /channel/UC…, /c/, /user/), this Actor:
- Normalizes and deduplicates channel URLs
- Optionally loads each channel About tab for metadata (title, description, subscribers, total views, video count, country)
- Loads the Videos tab and extracts recent video listings up to
maxVideos - Parses
window["ytInitialData"]/var ytInitialDataembedded in the HTML - Handles consent walls, captchas / unusual traffic, and not-found pages gracefully (dataset row with
error) - Pushes structured dataset items (
type: "channel"andtype: "video") - Writes SUMMARY.md to the key-value store
Why use YouTube Channel Scraper?
- Content research — discover what top channels post and how often
- Affiliate / niche research — collect public stats before outreach
- AI / ML datasets — bulk channel + video metadata for training or ranking features
- Competitor monitoring — track public channel growth signals and new uploads
- Automation-ready — JSON dataset + Apify API, webhooks, and schedules
How to scrape YouTube channels
- Open the Actor in Apify Console
- Paste channel URLs (e.g.
https://www.youtube.com/@MrBeast) - Set max videos per channel (e.g.
20) - Keep include channel info enabled if you need About-tab stats
- Enable Apify Proxy if you hit consent or rate-limit pages
- Click Start
- Download results from the Dataset tab (JSON / CSV / Excel) or read
SUMMARY.mdfrom the key-value store
Input
| Field | Type | Default | Description |
|---|---|---|---|
channelUrls | string[] | MrBeast + Google Developers | YouTube channel URLs |
maxVideos | integer | 20 | Max recent videos per channel (0 = channel info only) |
includeChannelInfo | boolean | true | Scrape About-tab channel metadata |
maxConcurrency | integer | 3 | Concurrent HTTP requests |
maxRequestRetries | integer | 3 | Retries on failure / soft blocks |
requestDelayMs | integer | 1000 | Used for max requests/minute rate limiting |
proxyConfiguration | object | Apify Proxy on | Proxy settings |
Example:
{"channelUrls": ["https://www.youtube.com/@MrBeast","https://www.youtube.com/@GoogleDevelopers"],"maxVideos": 10,"includeChannelInfo": true,"maxConcurrency": 3,"maxRequestRetries": 3,"requestDelayMs": 1000,"proxyConfiguration": {"useApifyProxy": true}}
See examples/input.json.
Output
Channel record
{"type": "channel","channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","title": "MrBeast","description": "SUBSCRIBE FOR A COOKIE! …","subscriberCount": 391000000,"videoCount": 841,"viewCount": 80123456789,"channelUrl": "https://www.youtube.com/@MrBeast","country": "United States","scrapedAt": "2026-07-18T12:00:00.000Z","error": null}
Video record
{"type": "video","videoId": "dQw4w9WgXcQ","title": "I Spent 50 Hours Buried Alive","description": "I spent 50 hours buried alive...","viewCount": 312456789,"likeCount": null,"publishedAt": "2 years ago","duration": "15:42","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","channelTitle": "MrBeast","thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg","channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","channelUrl": "https://www.youtube.com/@MrBeast","scrapedAt": "2026-07-18T12:00:00.000Z","error": null}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data fields
| Field | Channel | Video | Description |
|---|---|---|---|
type | yes | yes | "channel" or "video" |
channelId | yes | yes* | UC… channel id |
title | yes | yes | Channel or video title |
description | yes | yes | About text / snippet |
subscriberCount | yes | — | Subscribers |
videoCount | yes | — | Total videos on channel |
viewCount | yes | yes | Lifetime channel views or video views |
channelUrl | yes | yes* | Canonical channel URL |
country | yes | — | Country when present on About |
videoId | — | yes | 11-char video id |
likeCount | — | yes | Often null on list pages |
publishedAt | — | yes | Relative time (e.g. "2 years ago") |
duration | — | yes | e.g. 15:42 |
url | — | yes | Watch URL |
channelTitle | — | yes | Owning channel name |
thumbnail | — | yes | Thumbnail image URL |
scrapedAt | yes | yes | ISO scrape time |
error | yes | yes | Set on failures / blocks |
* optional enrichment on video rows when channel context is known.
How it works (technical)
- CheerioCrawler fetches About and Videos HTML over HTTP
- ytInitialData is extracted via regex + brace-balanced JSON parse
- Channel stats come from
channelMetadataRenderer,c4TabbedHeaderRenderer,aboutChannelViewModel, andchannelAboutFullMetadataRenderer - Videos come from
videoRenderer/gridVideoRenderer/richItemRenderertrees - Fallbacks: Open Graph meta tags, DOM subscriber text, and
a[href*="watch?v="]anchors - Graceful handling for consent walls, captchas, 403/429, and missing channels
Pricing / cost estimation
This Actor uses Pay-per-event (PPE) pricing at about $0.003 per dataset result (channel or video row), plus a tiny actor-start fee. How much does it cost to scrape YouTube channels?
| Scenario | Approx. results | Est. cost |
|---|---|---|
| 10 channels, info only | ~10 | ~$0.03 |
| 10 channels × 20 videos + info | ~210 | ~$0.63 |
| 100 channels × 10 videos + info | ~1,100 | ~$3.30 |
Platform free-tier and compute unit usage still apply when running on Apify. Enable proxy only when needed to control proxy costs.
Tips
- Prefer Apify Proxy (residential if you see consent / unusual traffic pages)
- Keep
maxConcurrencyat 2–5 for stable extractions - Set
maxVideosonly as high as you need — list pages return first-screen results without infinite scroll pagination in this HTTP version likeCountis often null on Videos-tab listings (YouTube does not always embed likes there)- Use
@handleURLs for stability when custom/c/paths change
FAQ, disclaimers, and support
Is scraping YouTube legal?
Scraping publicly available pages for legitimate research is a gray area that depends on jurisdiction, purpose, and ToS. This tool does not bypass logins or access private data. Consult legal counsel for your use case.
Why do I get consent or empty results?
Some regions show a cookie consent wall without ytInitialData. Use proxies (often US residential) and retries.
Does this use the official YouTube Data API?
No. It parses public HTML / embedded JSON. For API-quota-based access, use Google’s YouTube Data API instead.
Need a custom solution?
Open an issue on the Actor’s Issues tab in Apify Console, or request a custom scraper for deeper pagination, Shorts-only mode, or comment extraction.
Output example file
See examples/output.json for a full sample payload.