Pricing
from $0.99 / 1,000 results
YouTube Channel Scraper
Get YouTube channel metadata: subscriber count, video count, banner, avatar, description, tags, verified status. HTTP-only, no login.
Pricing
from $0.99 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract public channel metadata from any YouTube channel in bulk โ title, description, subscriber count, video count, banner, avatar, owner URLs, keywords, RSS feed, and canonical channel URL โ in a clean structured JSON output.
Why use this actor
- No account / no login required โ just give it a YouTube handle, channel ID, or channel URL.
- No API key needed โ no YouTube Data API quota; this actor returns the same data the YouTube site shows.
- Flexible identifier โ handles (
@veritasium), channel IDs (UCHnyfMqiRRG1u-2MsSQLbXA), full URLs (https://www.youtube.com/@veritasium), and legacy/c///user/paths all resolved automatically. - Rich detail โ title, description, avatar, banner, owner URLs, channel keywords, family-safe flag, country availability, vanity URL, and the RSS feed link in one clean record.
- Bulk input โ pass hundreds of channels in one run; one dataset row per channel.
- Automatic retries โ transient failures retry with exponential backoff; channels that genuinely don't exist surface as
_error: "not_found"so you can triage failures. - Stable JSON output suitable for pipelines, spreadsheets, and databases โ every row carries
_input,_source,_scrapedAtenvelope fields so you can join results back to your input list.
How it works
- You provide a list of YouTube channels โ handles, channel IDs, or URLs.
- The actor resolves each input to its canonical channel and fetches the channel record the same way YouTube's web app does, then assembles a flat JSON record.
- Results stream into your dataset, ready to download as JSON, CSV, or Excel.
You do not need to manage scrapers, browsers, or rotating IPs โ all handled internally.
Input
{"channels":["@veritasium","@mkbhd"],"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["DATACENTER"]}}
| Field | Type | Description |
|---|---|---|
channels | array | List of YouTube channels to scrape. Accepts handles (@veritasium), channel IDs (UCHnyfMqiRRG1u-2MsSQLbXA), full URLs, and legacy /c/ / /user/ paths. |
proxyConfiguration | object | Apify Proxy settings. Datacenter proxy works for most cases. |
Output
Input: @veritasium
{"_input":"@veritasium","_source":"S1-primary","_scrapedAt":"2026-05-18T10:43:06.849335+00:00","channelId":"UCHnyfMqiRRG1u-2MsSQLbXA","title":"Veritasium","description":"An element of truth - videos about science, education, and anything else we find interesting.","vanityChannelUrl":"http://www.youtube.com/@veritasium","isFamilySafe":true,"availableCountryCodes":["IQ","TV","ES","PM","CK","MZ","CL","WF","IL","MP","... 240 more"],"avatar":"https://yt3.googleusercontent.com/7vCbvtCqtjQ3YLgsJt7Y952MQV1sBvhllSCSxHP8_sVZdcPCBrITfhkN2RdyCuwPnsByq-1GoA=s900-c-k-c0x00ffffff-no-rj","banner":null,"subscriberCountText":"","videoCountText":"","tags":"\"science videos\" science \"science education\" \"science literacy\" veritasium misconceptions physics education astronomy chemistry biology teaching learning math","ownerUrls":["http://www.youtube.com/@veritasium"],"rssUrl":"https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA","url":"https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA","isVerified":false}
| Field | Type | Description |
|---|---|---|
_input | string | The channel identifier exactly as you supplied it. Use this to join results back to your input list. |
_source | string | Internal tag for the path used to fetch the record. S1-primary means the fastest, richest path; values starting with S2- indicate a fallback was used. |
_scrapedAt | string | ISO-8601 UTC timestamp when the record was scraped. |
channelId | string | YouTube's canonical channel ID (UC...). Stable across handle and rename changes. |
title | string | Channel display name (e.g. "Veritasium"). |
description | string | Channel "About" text. Empty string if not set. |
vanityChannelUrl | string | Public vanity URL (e.g. http://www.youtube.com/@veritasium). |
isFamilySafe | boolean | true if the channel is marked family-safe by YouTube. |
availableCountryCodes | array | ISO country codes where the channel is viewable. |
avatar | string | URL of the channel profile picture (highest-res variant). |
banner | string | URL of the channel banner image. null if no banner is set. The URL is resolution-suffixed; swap the =w... segment to request a different size. |
subscriberCountText | string | Human-readable subscriber count (e.g. "3.2M subscribers"). Empty string when YouTube hides the count. |
videoCountText | string | Human-readable video count (e.g. "426 videos"). Empty when not exposed. |
tags | string | Channel keywords as a single string, as set by the channel owner. |
ownerUrls | array | URLs the channel owner has linked from their page (vanity URL, external links). |
rssUrl | string | RSS feed URL for the channel's uploads. |
url | string | Canonical channel URL on youtube.com. |
isVerified | boolean | true if YouTube displays the verified badge for this channel. |
Error envelope
Channels that don't exist or fail to fetch return a structured error instead of crashing the run:
{"_input":"@this-channel-does-not-exist-xyz","_error":"not_found","_errorDetail":"channel not found","_source":"S1-primary","_scrapedAt":"2026-05-18T10:43:09.012345+00:00"}
_error value | Meaning |
|---|---|
not_found | Channel was deactivated, terminated, or never existed. |
handle_resolve_failed | A @handle could not be resolved to a channel ID. |
invalid_input | The input string did not look like a handle, channel ID, or YouTube URL. |
fetch_failed | Transient fetch failure after retries; safe to re-run that input. |
Filter on _error to triage failed rows.
Pricing
This actor is billed per result: $3.50 per 1,000 channels. Each successful channel = 1 result. Errors (not-found, terminated) are not billed.
Other Sosmed Actors
| Platform | Actor | Best for |
|---|---|---|
| YouTube | YouTube Video Detail Scraper | Full metadata for any video URL or ID |
| YouTube | YouTube Playlist Scraper | Items + metadata for any playlist |
| Twitch | Twitch Channel Scraper | Streamer profile, follower count, status |
| Instagram Account Scraper | Bio, followers, post count | |
| X / Twitter | X Account Scraper | Profile + tweet counts for any handle |
| Bluesky | Bluesky Account Scraper | atproto profile + counters |
| Threads | Threads Account Scraper | Profile data for a Threads handle |
Browse the full catalog at apify.com/xtracto.
Notes
subscriberCountTextis a rounded human-readable string (e.g."3.2M subscribers") โ YouTube hides exact counts publicly. Parse the prefix if you need a numeric value. Channels under 1,000 subscribers, and channels that have opted to hide their counter, return an empty string.videoCountTextis similarly text-based and may be empty for channels that hide their uploads tab.- Banner URLs are resolution-suffixed; replace the
=w1060-...segment to get the size you want. Channels with no banner returnbanner: null. - The
channelId(UC...) is the most reliable identifier โ handles and vanity URLs can change, butchannelIddoes not. - Deactivated, terminated, or never-existed channels return
{"_error": "not_found", "_input": "..."}. Handle changes are usually reflected within minutes. - For large jobs (>500 channels), Apify Proxy is recommended to keep throughput stable.
