YouTube Channel Scraper avatar

YouTube Channel Scraper

Pricing

from $0.99 / 1,000 results

Go to Apify Store
YouTube Channel Scraper

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

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 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, _scrapedAt envelope fields so you can join results back to your input list.

How it works

  1. You provide a list of YouTube channels — handles, channel IDs, or URLs.
  2. 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.
  3. 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"]
}
}
FieldTypeDescription
channelsarrayList of YouTube channels to scrape. Accepts handles (@veritasium), channel IDs (UCHnyfMqiRRG1u-2MsSQLbXA), full URLs, and legacy /c/ / /user/ paths.
proxyConfigurationobjectApify 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
}
FieldTypeDescription
_inputstringThe channel identifier exactly as you supplied it. Use this to join results back to your input list.
_sourcestringInternal 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.
_scrapedAtstringISO-8601 UTC timestamp when the record was scraped.
channelIdstringYouTube's canonical channel ID (UC...). Stable across handle and rename changes.
titlestringChannel display name (e.g. "Veritasium").
descriptionstringChannel "About" text. Empty string if not set.
vanityChannelUrlstringPublic vanity URL (e.g. http://www.youtube.com/@veritasium).
isFamilySafebooleantrue if the channel is marked family-safe by YouTube.
availableCountryCodesarrayISO country codes where the channel is viewable.
avatarstringURL of the channel profile picture (highest-res variant).
bannerstringURL 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.
subscriberCountTextstringHuman-readable subscriber count (e.g. "3.2M subscribers"). Empty string when YouTube hides the count.
videoCountTextstringHuman-readable video count (e.g. "426 videos"). Empty when not exposed.
tagsstringChannel keywords as a single string, as set by the channel owner.
ownerUrlsarrayURLs the channel owner has linked from their page (vanity URL, external links).
rssUrlstringRSS feed URL for the channel's uploads.
urlstringCanonical channel URL on youtube.com.
isVerifiedbooleantrue 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 valueMeaning
not_foundChannel was deactivated, terminated, or never existed.
handle_resolve_failedA @handle could not be resolved to a channel ID.
invalid_inputThe input string did not look like a handle, channel ID, or YouTube URL.
fetch_failedTransient 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

PlatformActorBest for
YouTubeYouTube Video Detail ScraperFull metadata for any video URL or ID
YouTubeYouTube Playlist ScraperItems + metadata for any playlist
TwitchTwitch Channel ScraperStreamer profile, follower count, status
InstagramInstagram Account ScraperBio, followers, post count
X / TwitterX Account ScraperProfile + tweet counts for any handle
BlueskyBluesky Account Scraperatproto profile + counters
ThreadsThreads Account ScraperProfile data for a Threads handle

Browse the full catalog at apify.com/xtracto.

Notes

  • subscriberCountText is 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.
  • videoCountText is 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 return banner: null.
  • The channelId (UC...) is the most reliable identifier — handles and vanity URLs can change, but channelId does 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.