YouTube Channel and Video List Scraper
Last updated November 10, 2026
Scrape YouTube channels, playlists, and search results as flat rows, with no login. Video rows carry title, views, date, and length. Channel rows carry subscribers, total views, joined date, and links. Each source reports whether its list was read to the end.
Features
- Video rows from channels, playlists, and search, read past the first page.
- Channel rows with subscribers, total views, joined date, and links.
- Videos, Shorts, or streams tab per channel.
- Each source reports whether its list was read to the end.
- Pay per event: Video row at $0.0012.
Input
urlsarrayoptionalChannel, @handle, playlist, or search result addresses, or a bare channel ID or @handle. Up to 200 sources a run, counted with search terms. A single video address returns one free row: this actor does not open video pages. Clay users: wrap a column in a one item list.
search_termsarrayoptionalTerms to search on YouTube. Each term returns videos in YouTube's order, for a logged out US visitor. Clay users: wrap a column in a one item list.
max_videos_per_sourcestringoptionalPer channel, playlist, or search term. Default 30, maximum 5000. Set 0 on a channel to get only its channel row.
include_channel_rowstringoptionalyes (default) adds one row per channel source with subscribers, total views, video count, joined date, country, and links. no skips it.
channel_tabstringoptionalWhich channel list to read: videos (default), shorts, or streams.
max_charge_usdstringoptionalOptional. The run stops before a charge that would pass this amount. Reports are always delivered.
Output schema
{
"row_type": "string",
"source_input": "string",
"source_type": "string",
"video_id": "string",
"video_url": "string",
"title": "string",
"channel_name": "string",
"channel_id": "string",
"channel_handle": "string",
"channel_url": "string",
"view_count": "integer",
"published_text": "string",
"duration_seconds": "integer",
"duration_text": "string",
"description": "string",
"keywords": "array",
"is_short": "boolean",
"is_family_safe": "boolean",
"thumbnail_url": "string",
"subscriber_count": "integer",
"channel_video_count": "integer",
"channel_view_count": "integer",
"joined_date": "string",
"country": "string",
"links": "array",
"rows_returned": "integer",
"list_complete": "boolean",
"reached_row_cap": "boolean",
"declared_videos": "integer",
"row_status": "string",
"error_reason": "string",
"billable_events_json": "string",
"scraped_at": "string"
}Pricing
| Event | Free plan price |
|---|---|
| Video row | $0.0012 |
| Channel row | $0.001 |
| Actor Start | $0.0025 |
Pay per event on the Apify platform. Paid Apify plans pay less per event. No subscription, no seat license.
On the Apify free plan the actor stops at $1.50 of charges a month, about 1,250 video rows. Any paid Apify plan removes the cap.
Limits
- This actor does not open single video pages. In a test on 2026-11-06, YouTube answered 22 of 40 video page reads with "Sign in to confirm you're not a bot", and 8 of 20 videos changed answer between reads. So there are no likes, comment counts, exact views, full dates, video descriptions, tags, transcripts, or comments. A single video address returns a free row. If you need those fields, this actor is not the one.
- Views are rounded the way YouTube shows them on a list page, for example 1.2M, and dates are relative, for example 2 weeks ago.
- Shorts rows carry title, views, and thumbnail, with no date or length. The Shorts tab served one page in testing, so its report reads list_complete false. Shorts shelves in search results are left out.
- list_complete true means YouTube offered no further page. On a search that is YouTube's own limit, not every matching video: one search ended at 53 rows. An empty next page reads false, with a note. A playlist's declared count includes hidden videos that never list.
- Results are what a logged out US visitor sees, in English. They are not personalized, and search order can change between runs.
- subscriber_count is rounded by YouTube. country is empty when the owner set none. No email addresses are read.
- List pages were not refused in testing (8 of 8 channel lists, 300 rows on one channel), but YouTube can change that at any time.
- YouTube's Terms of Service bar automated access without its written permission, and restrict collecting information that identifies a person, such as usernames. Its robots.txt disallows /results and /youtubei/, which search and paging use. Check that your use fits them.