YouTube Channel Scraper avatar

YouTube Channel Scraper

Pricing

from $2.70 / 1,000 video/short/posts

Go to Apify Store
YouTube Channel Scraper

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

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

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

PropertyValue
Sourceyoutube.com (public channels)
Record unitOne content item — a regular video, a Short, or a community post
Input methodsYouTube channel URLs (channelUrls)
Main identifiersid, url
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML, HTML (Apify dataset exports)
Update modelFresh 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/name forms). Trailing tab paths such as /videos, /shorts, or /community are accepted and normalized.
  • Content types: maxVideos controls how many regular videos are collected from the Videos tab, maxShorts controls Shorts, and maxPosts controls community posts. Setting a value to 0 skips 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 maxItems applies a hard cap across all channels and content types (0 means 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.

FieldTypeNullableDescriptionExample
idstringNoContent item identifier; best stable deduplication keysmJQdhS-FJU
urlstringNoWatch URLhttps://www.youtube.com/watch?v=smJQdhS-FJU
titlestringNoContent titleIf you think everyone is starting to sound like ChatGPT...
descriptionstringYesVideo/post description textAlgorithms and AI don't just show us reality...
contentTypestringNoItem type: video, short, or postshort
channelNamestringNoChannel nameTED
channelIdstringYesChannel identifierUCAuUUnT6oDeKwE6v1NGQxug
channelUrlstringYesCanonical channel URLhttps://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug
sourceChannelUrlstringNoThe channel URL the run was givenhttps://www.youtube.com/@TED
durationSecondsintegerYesDuration in seconds99
durationStringstringYesDuration as rendered1:39
viewCountintegerYesView count20061
likeCountintegerYesLike count629
commentCountintegerYesComment count18
publishedAtstringYesPublish date (YYYY-MM-DD)2026-08-06
uploadDatestringYesUpload date (YYYYMMDD)20260806
thumbnailUrlstringYesThumbnail image URLhttps://i.ytimg.com/vi/smJQdhS-FJU/maxresdefault.jpg
tagsstring[]YesTag list["TEDTalk", "TED Talks", ...]
categoriesstring[]YesCategory list["People & Blogs"]
isLivebooleanNoWhether the item is currently livefalse
wasLivebooleanNoWhether the item was a live streamfalse
liveStatusstringYesLive statusnot_live
availabilitystringYesAvailability statuspublic
ageLimitintegerYesAge restriction limit0
playableInEmbedbooleanYesWhether the item can be embeddedtrue
languagestringYesPrimary language codeen
subtitleLanguagesstring[]YesAvailable subtitle language codes["ab", "aa", "af", ...]
webpageUrlstringYesResolved watch URLhttps://www.youtube.com/watch?v=smJQdhS-FJU
originalUrlstringYesOriginal URL form that produced the recordhttps://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

InputTypeRequiredDefaultAccepted valuesDescription
channelUrlsarray (stringList)Yes@handle, /channel/ID, /c/name, or /user/nameOne or more channel URLs; tab paths are normalized
maxVideosintegerNo500 or any positive integerMaximum regular videos per channel; 0 skips videos
maxShortsintegerNo00 or any positive integerMaximum Shorts per channel; 0 skips Shorts
maxPostsintegerNo00 or any positive integerMaximum community posts per channel; 0 skips posts
maxItemsintegerNo00 or any positive integerHard cap on total records across all channels and content types; 0 = unlimited
maxConcurrencyintegerNo3110Parallel metadata fetches
proxyConfigurationobjectNoApify proxy, RESIDENTIAL groupApify proxy groups or custom proxiesResidential 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.

  1. Start the Actor with a JSON input (console or API).
  2. Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
  3. Retrieve items from the run's default dataset.
  4. Paginate or export the dataset.

Python example:

from apify_client import ApifyClient
client = 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, and url.
  • 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 id as 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

DestinationRecommended methodTypical use
PostgreSQL / SupabaseDataset API poll or webhook consumerStore channel content alongside engagement tables
Google SheetsApify Google Sheets integrationShare video shortlists with teams
Data warehouse (BigQuery, Snowflake)Scheduled export via Apify integrationChannel and content performance analysis
S3 / cloud storageScheduled export via Apify scheduler + integrationArchival of channel snapshots

Pricing and cost examples

The Actor uses pay-per-event pricing with one chargeable result event, billed per content item:

EventTriggerRate (per 1,000 items)
Item resultEvery video, Short, or post record pushed to the dataset$3.00

Example costs:

RecordsEstimated 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).

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.