Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
YouTube Channel Scraper icon

YouTube Channel Scraper

Scrape videos from any YouTube channel, no login or API key. Rows carry titles, views, dates, duration, thumbnails.

263 runs on Apify $0.0004 per video ($0.4 / 1,000)
Run this in the cloudRun on Apify →

YouTube & Creator Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust channelUrls, maxItems, notionConnector (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0004 per video = $0.4 per 1,000

You are charged forWhenPrice
Video returnedCharged once per video returned. Failed/empty runs are not charged.$0.0004

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-19, and they are what you are actually charged.

Inputs

FieldWhat it doesType
channelUrlsChannel URLs, @handles, or UC ids.array
maxItemsMax videos to collect. Charged per video.integer
notionConnectorOptional. Deliver results to your connected Notion via Apify MCP connectors.string
notionParentIdOptional Notion database/data-source id.string

What you get

A structured dataset — each result includes fields like:

titlechannelNameviewCountTextpublishedTimeTexturl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in YouTube & Creator Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

YouTube Comments Scraper iconYouTube & Creator Tools

YouTube Comments Scraper

Scrape YouTube comments with no login or key. Get text, likes, reply counts, author handle, verified badge and timestamp. $0.40 per 1,000.

Ready to run — no setup

YouTube Playlist Scraper iconYouTube & Creator Tools

YouTube Playlist Scraper

Export every video in a YouTube playlist. Get title, watch URL, views, age, runtime and thumbnail. No API key or OAuth. $0.40 per 1,000 videos.

2 use cases

YouTube Transcript Scraper iconYouTube & Creator Tools

YouTube Transcript Scraper

YouTube transcripts from links or a keyword search: text, timed segments, SRT, VTT and video details. No API key. $0.80 per 1,000.

2 use cases

YouTube Trending Scraper iconYouTube & Creator Tools

YouTube Trending Scraper

Get the most-viewed YouTube videos for any topic, no login or key. Rows carry views, titles, channels, duration, thumbnails. $0.40 per 1,000 videos.

Ready to run — no setup

YouTube Channel Email Scraper iconYouTube & Creator Tools

YouTube Channel Email Scraper

Find the business emails creators publish in their YouTube channel description, plus their linked site's contact pages. $1.50 per 1,000 channels.

Ready to run — no setup

YouTube Scraper iconYouTube & Creator Tools

YouTube Scraper

Search YouTube or scrape a channel: title, channel, views, publish date, length and thumbnail. No API key or quota. $0.135 per 1,000 videos.

18 use cases

See all YouTube & Creator Tools →

YouTube Channel Scraper: a channel's uploads as rows, no API key

A channel answers to three names: an @handle, a channel link and a UC id. All three work here, mixed however they came out of your spreadsheet. Each upload comes back as one flat row with the title, video id, watch link, channel, view count, age, runtime and thumbnail.

The thing to plan around: the counts and dates are the strings YouTube prints on the channel page. You get "90M views" and "8 days ago", never 90,041,233 and never a real timestamp, because the listing itself does not carry them.

InputChannel links, @handles or UC ids
OutputOne row per video
Ceiling2,000 videos per run
Account neededNone from you
Price$0.40 per 1,000 videos, flat on every plan

📺 What YouTube Channel Scraper does

It resolves each channel you pass, opens its Videos tab, and walks the grid newest first until it has collected maxItems videos. No Google API key, no OAuth screen, no Cloud project, and nothing that spends a Data API quota.

maxItems is the budget for the whole run, and it is spent in the order you listed the channels. Three channels at 100 does not give you 100 each. If the first channel has enough uploads it takes the lot, so run one channel at a time when you want a fair split.

Videos are deduplicated by videoId across every channel in the run, so a video that appears twice is returned once and billed once.

📥 What you give it

{
  "channelUrls": ["@MrBeast", "https://www.youtube.com/@mkbhd", "UCX6OQ3DkcsbYNE6H8uQQuVA"],
  "maxItems": 500
}
FieldDefaultWhat it is
channelUrlsnoneChannel links, @handles or bare UC ids, mixed freely. If a handle will not resolve, pass the full link or the UC id.
maxItems50Total videos across the whole run, 1 to 2,000. This is also your spend cap.
notionConnector, notionParentIdnoneOptional. Write each video into a Notion database as well as the dataset.
proxyConfigurationApify defaultLeave it alone unless you have your own servers you want the run to go out through.

Start it with channelUrls empty and the run fails rather than returning a polite row, so send at least one channel.

📤 What you get back

A real row from a real run, with the thumbnail link cut short:

{
  "ok": true,
  "videoId": "gTKS8SAwUzE",
  "title": "I Survived The Most Extreme Places On Earth",
  "url": "https://www.youtube.com/watch?v=gTKS8SAwUzE",
  "channelName": "MrBeast",
  "channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
  "viewCountText": "90M views",
  "publishedTimeText": "8 days ago",
  "lengthText": "23:28",
  "thumbnail": "https://i.ytimg.com/vi/gTKS8SAwUzE/hq720_custom_2.jpg?sqp=...",
  "mode": "channel"
}
FieldWhat it is
videoId, urlThe 11 character id and the canonical watch link. Use videoId as your key across runs.
channelName, channelIdThe channel's title and its stable UC id. Join on channelId.
viewCountText"90M views" as the page renders it. Rounded by YouTube, not by us.
publishedTimeText"8 days ago". Relative, and relative to when the run read the page.
lengthText"23:28". Empty on a live stream or a premiere, which has no duration yet.
thumbnailThe largest one YouTube offers for that video.
modeAlways channel here, so rows merge cleanly with the other YouTube scrapers.

🧾 Reading the output

Two kinds of row land in your dataset.

RowHow to spot itBilled
A videook: trueyes
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your data. BAD_INPUT and NOT_FOUND mean that channel could not be resolved, BLOCKED and RATE_LIMITED mean YouTube pushed back on the request, SERVER_ERROR is a 5xx, NETWORK means it could not be reached, and a run-level NO_RESULTS row appears when the whole run found nothing. None of them are charged, and the run moves on to the next channel.

One quirk of the Overview table: it shows the video columns only, so a diagnostic row reads as a blank line there. Open the row or download the JSON to see the errorCode.

▶️ How to run it

1. Open YouTube Channel Scraper and click Try for free. 2. Paste channels into Channels, one per line. 3. Set Max videos. Start at 50 while you look at the shape. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or read it over the Apify API.

💰 How much does it cost?

$0.40 per 1,000 videos. Flat on every Apify plan, no volume tiers.

You pay per video row delivered. Diagnostic rows and duplicates inside a run are never billed, so pointing it at a dead handle delivers no charged rows. A full 2,000 video run is 80 cents.

💡 What people use it for

  • Building a channel's back catalogue as rows, then enriching only the videos worth the extra call.
  • Checking how often a competitor actually ships, by reading publishedTimeText down the list.
  • Collecting video ids to feed the comments or transcript actors, which want ids rather than names.
  • Keeping a weekly snapshot of a channel and diffing the view-count strings between runs.

🚧 What it does not do

  • No exact view counts and no real dates. "90M views" cannot be turned back into the real

figure. Parsing it into an approximate number is a one-liner; recovering the exact one is not possible from this page.

  • The Videos tab only. Shorts and live streams that the channel files elsewhere are not read

here. There is a Shorts actor below for that.

  • No descriptions, likes, comments, transcripts or subscriber counts. Those are separate actors.
  • Newest first, with no resume. There is no offset, so a channel with 10,000 uploads gives you

its latest maxItems every run, not the next page.

  • The budget is spent in input order. A busy first channel can leave nothing for the last one.
  • A channel it could not read looks like a channel with no uploads. Both give you zero rows and

no per channel diagnostic, so check the run log if a channel you expected comes back empty.

  • An empty channelUrls fails the run rather than returning an explanatory row.

🧭 Which YouTube scraper do you need?

If you wantUse
A channel's uploads, up to 2,000 per runThis one
Keyword search results as well as channelsYouTube Scraper
That channel's Shorts, with exact view and like countsYouTube Shorts Scraper
Only the new uploads since last timeYouTube Upload Monitor
Every video in a playlistYouTube Playlist Scraper

❓ Questions people ask

Do I need a YouTube or Google account? No. Nothing here is signed in, and there is no quota.

Is maxItems per channel? No, per run, and it is spent in the order you listed them. One channel per run is the clean way to get a fixed number from each.

Can I page through a channel's whole history? Not past 2,000 in one run, and there is no offset to resume from. You always get the newest maxItems.

How do I spot Shorts in the results? lengthText is the practical signal, though the Videos tab normally holds no Shorts at all.

Is scraping YouTube legal? This reads public channel pages, nothing signed in. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

Can I run it on a schedule? Yes. Apify's scheduler, or start it from the API and read the dataset when it finishes.

🆘 If something breaks

Open the Issues tab on the actor page. Include the channel you used and the run ID, and the log is enough for us to see what happened.