apihq/youtube-channel-scraper · YouTube

YouTube Channel Scraper

Export a YouTube channel's videos to JSON from a URL, @handle, or channel ID. One record per video with title, views, duration, and thumbnail.

$0.0005/video · failed items $0.0000 — on your existing Apify account, a one-item first run costs under a cent.

What does YouTube Channel Scraper do?

Export a YouTube channel's long-form videos to JSON by URL, @handle, or channel ID. No YouTube Data API key or quota. One record per video with views, date, duration, and thumbnail. Pay-per-video: a channel that can't be resolved returns a success:false row and is not charged.

Best for

Use it to build creator databases, watch competitor channels, enrich content pipelines, or collect video IDs to feed transcript and comment jobs. The billing matters most when the extraction runs unattended inside a larger pipeline.

Use something else when

It reads the Videos tab, so long-form uploads only. Use the YouTube Shorts Scraper for Shorts.

Price
$0.50 per 1,000 videos · failed items $0
Usage on Apify
2,200+ videos delivered

Example run

input
{ "channelUrls": ["@MrBeast", "@totally-wrong-handle"], "maxResults": 5 }

outcome

  • 5 success: true video rows from @MrBeast — billed
  • 1 success: false row, code: CHANNEL_NOT_FOUND, for the bad handle — not billed
  • Run status: SUCCEEDED
  • Charged: 5 videos = $0.0025

Good input returns billed rows. Bad input returns free error rows in the same dataset, and the run still succeeds.


Why pipelines pick it

A bad channel never breaks the batch

Misspell a handle or paste a video URL by mistake and you get a success:false row back. The rest of the batch keeps going.

You pay only for videos

The charge fires per video delivered, not per dataset write. There is no start fee, so a run that hits ten dead handles and returns nothing costs $0.

Every failure is machine-readable

Stable codes like CHANNEL_NOT_FOUND and NO_VIDEOS let your pipeline branch on the error type instead of parsing error text.

No YouTube Data API key or quota

The official Data API needs a Google key and rations daily quota. This actor reads public data from a plain channel URL, @handle, or UC… ID.

Best for: Use it to build creator databases, watch competitor channels, enrich content pipelines, or collect video IDs to feed transcript and comment jobs. The billing matters most when the extraction runs unattended inside a larger pipeline.


Input & output

input example
{
  "channelUrls": [
    "https://www.youtube.com/@MrBeast",
    "@mkbhd",
    "UCX6OQ3DkcsbYNE6H8uQQuVA"
  ],
  "maxResults": 100
}
output — success (billed)
{
  "success": true,
  "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
  "channel_title": "MrBeast",
  "video_id": "iYlODtkyw_I",
  "title": "Spend 30 Days Handcuffed To A Stranger",
  "url": "https://www.youtube.com/watch?v=iYlODtkyw_I",
  "published": "2 weeks ago",
  "view_count": "55M views",
  "duration": 2105,
  "thumbnail_url": "https://i.ytimg.com/vi/iYlODtkyw_I/hqdefault.jpg",
  "author": "MrBeast"
}
output — failure (free, same dataset)
{
  "success": false,
  "channel_url": "@totally-wrong-handle",
  "code": "CHANNEL_NOT_FOUND",
  "error": "Could not resolve YouTube channel: @totally-wrong-handle",
  "request_id": "req_911f37d2e55644ff9d9e4a3f",
  "status_code": 404
}

Branch on the success field to split hits from misses. Quote the request_id in any support issue and we can trace the exact request.

output fields

fieldtypewhat it is
successbooleantrue for a video (billed), false for a channel that could not be listed (free).
channel_idstringThe UC… channel ID the video belongs to. Copied onto every row so each row stands alone.
channel_titlestringThe channel's display name.
video_idstringThe 11-character YouTube video ID.
titlestringVideo title.
urlstringCanonical watch URL.
publishedstringRelative publish string YouTube shows (e.g. "2 weeks ago").
view_countstringView count as a display string.
durationintegerVideo length in seconds. Absent for live streams and unparseable lengths.
thumbnail_urlstringURL of the largest available thumbnail.
authorstringChannel author name.

Error codes, stable across releases

Every failure record carries one of these machine-readable codes. None of them are ever charged.

codebilledmeaning
CHANNEL_NOT_FOUND$0.0000The URL, @handle, or ID could not be resolved to a channel.
NO_VIDEOS$0.0000The channel exists but has no long-form uploads.
VALIDATION_FAILED$0.0000The input was not a valid channel URL, @handle, or UC… ID.
RESOLVE_TIMEOUT$0.0000Resolving the channel identity timed out.
CHANNEL_VIDEOS_TIMEOUT$0.0000Listing the channel's videos timed out.
DEADLINE_EXCEEDED$0.0000The per-channel deadline was hit. No charge.

Every error code across the eight APIs, in one reference →


What a run costs

per video$0.0005
per 1,000 videos$0.50
per failed item$0.0000
per-run start fee$0.0000

The charge fires only when a result is delivered, and platform compute is included in the per-result price. To cap the spend of a run, set a limit in Apify's Run Limits panel. The actor stops at the cap and reports how far it got.

How pay-per-result billing works →


What this actor doesn't do

  • It reads the Videos tab, so long-form uploads only. Use the YouTube Shorts Scraper for Shorts.
  • It returns videos newest first. There is no sort by popularity or oldest.
  • It returns the channel's id and name, not channel statistics. Subscriber counts and lifetime views are out of scope.

Frequently asked questions

What input formats are accepted?
A full channel URL, an @handle, or a UC… channel ID, mixed freely in the same batch. channelUrl and channelUrls are merged and de-duplicated; up to 50 unique channels run per job.
How many videos does it return per channel?
Each channel is walked newest-first up to maxResults videos (default 50). Set maxResults higher to walk deeper.
Do I need a YouTube Data API key?
No. The Actor reads YouTube's public data directly. You don't provision a Google key and there is no daily Data API quota to ration.
What does a misspelled handle cost?
$0. You get one success:false row with code CHANNEL_NOT_FOUND and the run continues. There is no start fee, so an empty run costs nothing.
Can I cap the spend of a run?
Yes. Set a limit in Apify's Run Limits panel. The Actor stops cleanly at the cap and reports how far it got.

Automation templates


Pairs with

Run it on the Apify account you already have

Paste one input into the actor's console and check the dataset it returns. A one-item first run costs under a cent — no new subscription, pay only for delivered results.

List a channel's videos