Skip to main content
youtube collects the videos, Shorts and live streams of YouTube channels, or the videos of a playlist. One result is one row; most rows are videos.

Run it

Inputs

Send channel or playlist links in channelUrls. channelHandles, directUrls, startUrls and urls are accepted too, and everything you send is merged.
limit: 50 on a channel with 50 or more long-form videos returns no Shorts and no streams: set maxResultsShorts and maxResultStreams to keep room for them. limit: 0 skips the Videos tab, so {"limit": 0, "maxResultsShorts": 100} collects Shorts only. On a job with a date filter within the last 29 days, maxResultsShorts and maxResultStreams are capped at 200.
A link to one video (watch?v=, /shorts/<id>, /live/ or youtu.be/) is refused with 400 naming the field: send its channel instead. Search isn’t supported either: a job with only searchQueries is refused with 400. downloadSubtitles, subtitlesFormat and subtitlesLanguage are accepted and have no effect: subtitles are not collected. downloadSubtitles: true, or a format other than srt or a language other than en, adds a warning to the job’s log. A date filter within the last 29 days makes the job a recent crawl, which is billed at its own rate; see Billing.

Output

A real row from a job for @NobelPrize:

Other rows

These rows stay in the results but cost nothing: items_scraped counts video rows only, so it can be lower than the total of /results/. On a daily job over many channels, every channel with nothing new returns one DATE_FILTER_TOO_STRICT row, free. A daily job where nothing new was posted reports items_scraped: 0 and costs $0.

What logged-out means here

You get: public videos, Shorts and streams with their titles, descriptions, counts and channel fields. Not available:
  • An exact publish date for every video. YouTube withholds it from signed-out visitors for some videos. On a job with a date filter within the last 29 days, such videos are left out unless their listing date places them in the range; on other jobs they come back with date: null or dateIsApproximate: true.
  • Subtitles, monetisation and dislike counts.
  • Private and deleted videos in a playlist; they are skipped.

Completeness

scraper_metadata is null unless something you sent failed. Then it holds targets_failed: one entry per channel, playlist or link, with target, reason (not_found, extraction_failed or unknown), detail (for reading, not parsing) and retriable. A channel whose videos were found but none could be read is listed with reason: "extraction_failed" and retriable: true. A job where some channels fail and others deliver still completes.