YouTube Channel Scraper
Pricing
from $2.70 / 1,000 video/short/posts
YouTube Channel Scraper
Scrape video, Shorts, and community post metadata from YouTube channels. Supports multiple channel URLs with per-channel limits — no video downloads.
Pricing
from $2.70 / 1,000 video/short/posts
Rating
0.0
(0)
Developer
Farhan Ali
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Channel Scraper creates a structured dataset of channel content items — regular videos, Shorts, and community posts — collected from public YouTube channels. Each dataset item represents one content item and can include its title, description, URL, view, like and comment counts, publish date, thumbnail, tags, categories, language, and availability status. Query the source by pasting one or more channel URLs, set per-channel limits for videos, Shorts, and posts, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, or another supported format.
Dataset at a glance
| Property | Value |
|---|---|
| Source | youtube.com (public channels) |
| Record unit | One content item — a regular video, a Short, or a community post |
| Input methods | YouTube channel URLs (channelUrls) |
| Main identifiers | id, url |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML, HTML (Apify dataset exports) |
| Update model | Fresh records per Actor run |
| Pricing | $3.00 per 1,000 items |
Coverage and available records
The Actor collects content items from public YouTube channels using a URL entry point:
- URL-based: Pass one or more channel URLs in
channelUrls(@handle,/channel/ID,/c/name, or/user/nameforms). Trailing tab paths such as/videos,/shorts, or/communityare accepted and normalized. - Content types:
maxVideoscontrols how many regular videos are collected from the Videos tab,maxShortscontrols Shorts, andmaxPostscontrols community posts. Setting a value to0skips that content type.
Record types and limits:
- Item records are collected per content item with metadata: title, description, URL, counts, publish date, thumbnail, tags, categories, and availability.
- Result caps: each content type has its own per-channel limit, and
maxItemsapplies a hard cap across all channels and content types (0means unlimited).
Known exclusions: video and audio downloads, transcripts, and comment text are not collected; channel-level subscriber counts are not collected; content not public is not collected; each run captures page state at run time (no historical snapshots).
Data dictionary
Field names below match dataset record JSON properties exactly. Fields marked nullable may be absent or null when the source does not provide them.
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
id | string | No | Content item identifier; best stable deduplication key | smJQdhS-FJU |
url | string | No | Watch URL | https://www.youtube.com/watch?v=smJQdhS-FJU |
title | string | No | Content title | If you think everyone is starting to sound like ChatGPT... |
description | string | Yes | Video/post description text | Algorithms and AI don't just show us reality... |
contentType | string | No | Item type: video, short, or post | short |
channelName | string | No | Channel name | TED |
channelId | string | Yes | Channel identifier | UCAuUUnT6oDeKwE6v1NGQxug |
channelUrl | string | Yes | Canonical channel URL | https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug |
sourceChannelUrl | string | No | The channel URL the run was given | https://www.youtube.com/@TED |
durationSeconds | integer | Yes | Duration in seconds | 99 |
durationString | string | Yes | Duration as rendered | 1:39 |
viewCount | integer | Yes | View count | 20061 |
likeCount | integer | Yes | Like count | 629 |
commentCount | integer | Yes | Comment count | 18 |
publishedAt | string | Yes | Publish date (YYYY-MM-DD) | 2026-08-06 |
uploadDate | string | Yes | Upload date (YYYYMMDD) | 20260806 |
thumbnailUrl | string | Yes | Thumbnail image URL | https://i.ytimg.com/vi/smJQdhS-FJU/maxresdefault.jpg |
tags | string[] | Yes | Tag list | ["TEDTalk", "TED Talks", ...] |
categories | string[] | Yes | Category list | ["People & Blogs"] |
isLive | boolean | No | Whether the item is currently live | false |
wasLive | boolean | No | Whether the item was a live stream | false |
liveStatus | string | Yes | Live status | not_live |
availability | string | Yes | Availability status | public |
ageLimit | integer | Yes | Age restriction limit | 0 |
playableInEmbed | boolean | Yes | Whether the item can be embedded | true |
language | string | Yes | Primary language code | en |
subtitleLanguages | string[] | Yes | Available subtitle language codes | ["ab", "aa", "af", ...] |
webpageUrl | string | Yes | Resolved watch URL | https://www.youtube.com/watch?v=smJQdhS-FJU |
originalUrl | string | Yes | Original URL form that produced the record | https://www.youtube.com/shorts/smJQdhS-FJU |
Example dataset record
Real record produced with the input below (channelUrls: ["https://www.youtube.com/@TED"], maxVideos: 10, maxShorts: 5). The tags and subtitleLanguages arrays are truncated for readability.
{"id": "smJQdhS-FJU","url": "https://www.youtube.com/watch?v=smJQdhS-FJU","title": "If you think everyone is starting to sound like ChatGPT, you're not wrong #TEDTalks","description": "Algorithms and AI don't just show us reality...","contentType": "short","channelName": "TED","channelId": "UCAuUUnT6oDeKwE6v1NGQxug","channelUrl": "https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug","sourceChannelUrl": "https://www.youtube.com/@TED","durationSeconds": 99,"durationString": "1:39","viewCount": 20061,"likeCount": 629,"commentCount": 18,"publishedAt": "2026-08-06","uploadDate": "20260806","thumbnailUrl": "https://i.ytimg.com/vi/smJQdhS-FJU/maxresdefault.jpg","tags": ["TEDTalk", "TED Talks", "TED"],"categories": ["People & Blogs"],"isLive": false,"wasLive": false,"liveStatus": "not_live","availability": "public","ageLimit": 0,"playableInEmbed": true,"language": "en","subtitleLanguages": ["en", "es"],"webpageUrl": "https://www.youtube.com/watch?v=smJQdhS-FJU","originalUrl": "https://www.youtube.com/shorts/smJQdhS-FJU"}
The record above was produced with this input:
{"channelUrls": ["https://www.youtube.com/@TED"],"maxVideos": 10,"maxShorts": 5,"maxPosts": 0,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
channelUrls | array (stringList) | Yes | — | @handle, /channel/ID, /c/name, or /user/name | One or more channel URLs; tab paths are normalized |
maxVideos | integer | No | 50 | 0 or any positive integer | Maximum regular videos per channel; 0 skips videos |
maxShorts | integer | No | 0 | 0 or any positive integer | Maximum Shorts per channel; 0 skips Shorts |
maxPosts | integer | No | 0 | 0 or any positive integer | Maximum community posts per channel; 0 skips posts |
maxItems | integer | No | 0 | 0 or any positive integer | Hard cap on total records across all channels and content types; 0 = unlimited |
maxConcurrency | integer | No | 3 | 1–10 | Parallel metadata fetches |
proxyConfiguration | object | No | Apify proxy, RESIDENTIAL group | Apify proxy groups or custom proxies | Residential proxies are recommended |
Minimal request:
{ "channelUrls": ["https://www.youtube.com/@TED"] }
Advanced request with per-type limits:
{"channelUrls": ["https://www.youtube.com/@TED", "https://www.youtube.com/@kurzgesagt"],"maxVideos": 100,"maxShorts": 20,"maxPosts": 10,"maxItems": 1000,"maxConcurrency": 5,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Retrieve the data through the API
The Actor runs on the Apify platform, so there is no server to host and no crawling infrastructure to maintain.
- Start the Actor with a JSON input (console or API).
- Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
- Retrieve items from the run's default dataset.
- Paginate or export the dataset.
Python example:
from apify_client import ApifyClientclient = ApifyClient("YOUR-APIFY-TOKEN")run_input = {"channelUrls": ["https://www.youtube.com/@TED"],"maxVideos": 20,"maxShorts": 10,}run = client.actor("datascrapers/youtube-channel-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["id"], item["contentType"], item["title"])
Apify generates ready-to-run Python, JavaScript, and cURL examples on the Actor's API tab. Do not put a real API token in shared code or URLs.
Data quality and record handling
- Conditional fields: count, date, and metadata fields are present only when the source publishes them; older or deleted items may return partial metadata.
- Community posts: a post may resolve to its full video record or, when no details are available, a minimal record with
id,title, andurl. - Source changes: YouTube page structure and values can change; unreadable fields are returned as null rather than fabricated.
- Deduplication: the Actor deduplicates items within a run using the content type and identifier. Use
idas the stable key and filter repeated runs against previously stored IDs. - Failures: per-item failures are skipped rather than failing the whole run.
Export and pipeline examples
| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL / Supabase | Dataset API poll or webhook consumer | Store channel content alongside engagement tables |
| Google Sheets | Apify Google Sheets integration | Share video shortlists with teams |
| Data warehouse (BigQuery, Snowflake) | Scheduled export via Apify integration | Channel and content performance analysis |
| S3 / cloud storage | Scheduled export via Apify scheduler + integration | Archival of channel snapshots |
Pricing and cost examples
The Actor uses pay-per-event pricing with one chargeable result event, billed per content item:
| Event | Trigger | Rate (per 1,000 items) |
|---|---|---|
| Item result | Every video, Short, or post record pushed to the dataset | $3.00 |
Example costs:
| Records | Estimated base cost |
|---|---|
| 1,000 | $3.00 |
| 10,000 | $30.00 |
Apify paid plans reduce the per-1,000 rate. Compute units consumed by the run are billed by your Apify plan. Estimates depend on the verified pricing model and the options selected for the run.
Limitations and responsible data use
- The Actor collects publicly accessible metadata from YouTube channels only; it does not download videos or audio, and it does not collect transcripts or comment text.
- Channel-level subscriber statistics are not collected.
- Community posts may resolve to a video record or produce a minimal record when details are unavailable.
- Field availability depends on what YouTube renders at run time; some values can be null or missing, and site changes can alter fields.
- The Actor does not provide historical snapshots unless you store them yourself.
- You are responsible for compliance with YouTube's terms of service, applicable privacy law, and any contractual obligations before using the data.
Dataset questions
What does one dataset item represent?
One content item from a YouTube channel — a regular video, a Short, or a community post — with its metadata.
Which field should I use as a unique identifier?
id is the stable content identifier and is the recommended deduplication key. The url is a reasonable secondary key.
Are fields nullable or conditional?
Yes. Count, date, and metadata fields are present only when the source publishes them; older or deleted items may return partial metadata. durationSeconds, viewCount, and similar fields are null when unavailable.
Can I retrieve the records as CSV or JSON?
Yes. The dataset can be exported as JSON, CSV, Excel, XML, or HTML from the Apify Console, and queried through the Dataset API.
Does the Actor return historical data?
No. Each run captures the state of the channels at run time. To track view or like growth, schedule repeated runs and store the outputs yourself.
What counts as a billable result?
One pay-per-event charge applies for every content item record pushed to the dataset ($3.00 per 1,000 items).
Related datasets from Data Scrapers
- Instagram Post Scraper — Public Instagram posts for cross-platform social media research.
- Twitter X Profile Scraper — Public profile posts for social media monitoring alongside YouTube data.
- TripAdvisor Reviews Scraper — Review data that can be joined with channel research for audience analysis.
Data Scrapers support
Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.