YouTube Scraper: Channel Videos, Search Results, Playlists avatar

YouTube Scraper: Channel Videos, Search Results, Playlists

Pricing

from $3.00 / 1,000 videos

Go to Apify Store
YouTube Scraper: Channel Videos, Search Results, Playlists

YouTube Scraper: Channel Videos, Search Results, Playlists

Scrape YouTube channel videos, Shorts and live streams, search results (with date, duration and sort filters) and playlists. Get title, views, publish time, duration, thumbnail and channel details per video, plus optional channel stats. No login or API key.

Pricing

from $3.00 / 1,000 videos

Rating

0.0

(0)

Developer

Plainsource

Plainsource

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share

This YouTube scraper reads the public pages YouTube itself shows and returns one row per video from three places: the Videos, Shorts or Live tab of any channel, YouTube search results (with upload date, duration and sort filters), and playlists. Each row has the title, link, views, publish time, duration, thumbnail, badges and channel details. Turn on a channel info row to also get subscribers, total videos, total views, description, links, joined date and country. No YouTube login, cookie or API key, and no API quota to run out of.

  • Mix inputs in one run. Channel URLs, @handles or channel IDs, search terms and playlist links can all go in the same input. Each row says which input it came from (input, inputType) and its place in that input (position).
  • Channels: pick the Videos, Shorts or Live tab, and sort by latest, most popular or oldest.
  • Search: filter by upload date (hour, today, week, month, year), duration (under 4, 4 to 20, over 20 minutes), sort (relevance, upload date, views, rating), and switch between video results and channel results.
  • Playlists: videos come in playlist order, private and deleted entries are skipped.

What data you get

FieldWhat it holds
videoId, url, titleThe video and its link (Shorts get a /shorts/ link)
channelName, channelId, channelUrl, channelHandle, channelVerifiedThe channel that published it
viewCount, viewCountTextViews as a number and as YouTube shows them. The number is rounded when YouTube only shows "1.9B views"
publishedTimeText, publishedAtApprox"2 weeks ago" as shown, and an ISO date worked out from it. The date is approximate: it is only as precise as the relative text
durationSeconds, durationTextLength of the video
isShort, isLive, liveViewers, badgesShort or stream flags, people watching a live stream, card badges such as LIVE
thumbnailUrl, descriptionSnippetThumbnail and the start of the description (search results only)
input, inputType, position, scrapedAtWhere the row came from, its rank there and when it was read
playlistId, playlistTitleAdded on playlist rows
Channel rows (rowType: "channel")channelName, channelHandle, subscriberCount, totalVideos, totalViews, description, joinedDate, country, links, avatarUrl

How to use it

  1. Add channels (@MrBeast, a channel URL or a UC... ID), search terms and/or playlist links. At least one is needed; with none, the Actor runs an example (a channel and a search, 20 videos each) so you can see the output.
  2. Set Max results per input. Use a large number to take a whole channel.
  3. Optional: choose the channel tab and sort, the search filters, and Add a channel info row.
  4. Run it and export to JSON, CSV or Excel, or call it from the API, Make, Zapier, n8n or an AI agent through the Apify MCP server.

Example input

{
"channels": ["@MrBeast"],
"searchQueries": ["minecraft speedrun"],
"maxResultsPerInput": 20,
"channelContentType": "videos",
"channelSort": "latest",
"includeChannelInfo": false
}

Example output

A video from a channel (real row from an Apify run, thumbnail link shortened):

{
"rowType": "video",
"videoId": "_c2e1NcI3Sc",
"url": "https://www.youtube.com/watch?v=_c2e1NcI3Sc",
"title": "Beat LeBron In Basketball, Win $100,000",
"channelName": "MrBeast",
"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"channelUrl": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA",
"channelHandle": "@MrBeast",
"channelVerified": true,
"viewCount": 46000000,
"viewCountText": "46M views",
"liveViewers": null,
"publishedTimeText": "1 day ago",
"publishedAtApprox": "2026-11-01T07:49:00.225Z",
"durationSeconds": 1348,
"durationText": "22:28",
"isShort": false,
"isLive": false,
"thumbnailUrl": "https://i.ytimg.com/vi/_c2e1NcI3Sc/hq720.jpg",
"descriptionSnippet": null,
"badges": [],
"input": "@MrBeast",
"inputType": "channel",
"position": 1,
"scrapedAt": "2026-11-02T07:49:00.225Z"
}

A video from a search (it also carries a description snippet):

{
"rowType": "video",
"videoId": "pyV68KvUwlw",
"url": "https://www.youtube.com/watch?v=pyV68KvUwlw",
"title": "Minecraft Beaten In 53 Seconds [FWR]",
"channelName": "HanabiYaki",
"channelId": "UCBTvGJlfKvqrPkEReXO0TrA",
"channelUrl": "https://www.youtube.com/channel/UCBTvGJlfKvqrPkEReXO0TrA",
"channelHandle": "@HanabiYaki",
"channelVerified": true,
"viewCount": 5213373,
"viewCountText": "5,213,373 views",
"liveViewers": null,
"publishedTimeText": "2 years ago",
"publishedAtApprox": "2024-11-02T07:49:00.877Z",
"durationSeconds": 89,
"durationText": "1:29",
"isShort": false,
"isLive": false,
"thumbnailUrl": "https://i.ytimg.com/vi/pyV68KvUwlw/hq720.jpg",
"descriptionSnippet": "Working smarter not harder. This is getting beaten in a few days isn't it... HUGE HUGE thanks to @Curcuit for teaching me on how ...",
"badges": [],
"input": "minecraft speedrun",
"inputType": "search",
"position": 1,
"scrapedAt": "2026-11-02T07:49:00.877Z"
}

A channel info row (with Add a channel info row, description and links shortened):

{
"rowType": "channel",
"channelId": "UCLA_DiR1FfKNvjuUpBHmylQ",
"channelName": "NASA",
"channelHandle": "@NASA",
"channelUrl": "https://www.youtube.com/channel/UCLA_DiR1FfKNvjuUpBHmylQ",
"channelVerified": true,
"subscriberCountText": "15.1M subscribers",
"subscriberCount": 15100000,
"totalVideosText": "6,195 videos",
"totalVideos": 6195,
"totalViewsText": "1,133,490,449 views",
"totalViews": 1133490449,
"description": "NASA's mission is to pioneer the future in space exploration, scientific discovery, and aeronautics research. ...",
"joinedDateText": "Joined Jun 3, 2008",
"joinedDate": "2008-06-03",
"country": null,
"links": [
{
"title": "nasa.gov",
"url": "https://www.nasa.gov"
},
{
"title": "X",
"url": "https://x.com/nasa"
}
],
"avatarUrl": "https://yt3.googleusercontent.com/eIf5fNPcIcj9ig-wZBeq4stFy1lgjWTW1nLT5dYlFkHZprZ03QBiMcbpwNMB6XSBjrSFGtAGQg=s200-c-k-c0x00ffffff-no-rj",
"input": "@NASA",
"inputType": "channel",
"position": null
}

How much does it cost?

You pay per row saved: $0.003 per video, Short or stream, plus $0.0005 once per run. A channel info row or a channel search result counts as one row. Inputs that fail or find nothing cost nothing and are listed in the SUMMARY record of the run's key-value store.

1,000 rows cost about $3.00. Apify's free plan credit of $5 a month covers about 1,600 rows. A run of 40 rows takes a few seconds and uses well under 256 MB.

Use cases

  • Competitor and creator tracking: pull a channel's latest uploads on a schedule and watch views, upload rhythm and Shorts against long videos.
  • Topic research: search a keyword with the last-month and over-20-minutes filters, sorted by views, to see what is working right now.
  • Lead lists: search for channels on a topic and collect handle, subscribers and description for outreach (pair it with the contact extractor below).
  • Datasets and playlists: export a playlist or a whole channel catalogue as a spreadsheet.

FAQ

Does it need a YouTube API key or login? No. It reads the same public data your browser loads. There is no daily quota.

Why do Shorts rows have no date or duration? YouTube's channel Shorts tab shows only the title and view count. Those fields are empty (null) for Shorts taken from a channel, and Shorts inside search results show the same limited card.

How exact is the publish date? publishedTimeText is what YouTube shows ("3 weeks ago"). publishedAtApprox is that text turned into a date, so it can be off by days for "weeks ago" and by months for "years ago". YouTube does not show the exact date on these lists.

How exact are the view counts? Search results show full numbers. Channel and playlist lists show abbreviations such as "46M views", so viewCount is rounded there. viewCountText always has YouTube's own wording.

Can it get transcripts or comments? Not here. This Actor lists videos. For subtitles use the YouTube Transcript Scraper linked below.

How many results can I get? A whole channel or playlist, until YouTube stops listing. Searches end where YouTube ends the results, often a few hundred. Tested up to 102 rows per input on Apify for a channel, a search and a playlist, and 197 playlist videos in a local run.

What if YouTube blocks the request? In testing on Apify, requests worked both without a proxy and with the default Apify Proxy. If YouTube answers with a refusal (HTTP 403 or 429) the Actor does not try to get around it: it stops, says so in the log and in SUMMARY, and you can pick another proxy in the Proxy field and run again. Rows already saved stay in the dataset.

Why is a channel's Live tab empty? Only channels that have streamed have a Live tab. The run notes it in SUMMARY and moves on.

Which language and region? Text is read in English with a US region, so counts and dates come as "46M views" and "2 weeks ago".

Duplicates? A video is listed once per input. If you give a channel and a search that both contain it, it appears once for each, with a different input.

Is this legal? It only reads what YouTube shows publicly. You are responsible for how you use the data and for following YouTube's terms and laws like GDPR when it includes personal data.

Other Actors by this developer