YouTube Videos Scraper: Channels, Playlists, Search avatar

YouTube Videos Scraper: Channels, Playlists, Search

Pricing

from $2.16 / 1,000 videos

Go to Apify Store
YouTube Videos Scraper: Channels, Playlists, Search

YouTube Videos Scraper: Channels, Playlists, Search

YouTube videos and Shorts (title, channel, exact date, duration, views, likes, description) from channels, playlists, searches or links; $3.60 per 1,000 videos. Fast listing mode $1.17 per 1,000. No date-filter surcharge, free error rows.

Pricing

from $2.16 / 1,000 videos

Rating

0.0

(0)

Developer

Arcadium Data

Arcadium Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

YouTube Videos Scraper: Channels, Playlists, Search

Give it YouTube channels, playlists, search terms, hashtags or video links and it returns one JSON row per video or Short: title, channel, exact publish date, duration, views, likes, category, Shorts and live flags, tags, hashtags, description, thumbnail and caption languages. Shorts also get comment count and sound. $3.60 per 1,000 videos, or $1.17 in fast listing mode; you pay only for rows you get.

Why this actor

  • No extra charge for date ranges (the leading actor adds $1.30 per 1,000 on the free plan).
  • Input names of the leading YouTube actors are accepted (searchQueries, startUrls, maxResults, oldestPostDate and more).
  • Private, age-restricted, members-only and missing videos come back as free error rows that say why.

Built by Arcadium Data: public data, dated and agent-ready, never personal data.

Use with AI agents

The actor takes plain JSON and returns one flat row per video, so an AI agent or MCP client (for example through mcp.apify.com) can call arcadium/youtube-videos directly. Input example for "The last 10 videos of a channel with views and likes":

{ "urls": ["https://www.youtube.com/@kurzgesagt"], "maxResults": 10 }

"Top 20 search results, cheap and fast":

{ "searchQueries": ["web scraping tutorial"], "maxResults": 20, "listingOnly": true }

"Most viewed search results in Germany this month":

{ "searchQueries": ["e-auto test"], "searchCountry": "DE", "sortingOrder": "views", "dateFilter": "month", "maxResults": 50 }

"Everything a channel published in the last 30 days":

{ "urls": ["@veritasium"], "publishedAfter": "30 days", "maxResults": 500 }

"The newest Shorts of a channel, and Shorts for a hashtag and a search term":

{ "urls": ["https://www.youtube.com/@MrBeast/shorts"], "hashtags": ["#cooking"], "searchQueries": ["life hacks"], "contentType": "shorts", "maxResults": 20 }

Read title, publishDate, viewCount, likeCount and durationSeconds (Shorts also commentCount, soundTitle, soundArtist); position is the search rank or playlist index. 100 videos cost $0.36 ($0.12 in fast mode). A private, age-restricted or members-only video, or an unknown channel, comes back as a free row with rowType: "error", a code (not_found, unavailable, no_match, blocked, invalid_input) and a message, never as a failed run, so an agent can tell "does not exist" from "try again later".

What you get

FieldWhat it holds
videoId, url, titleThe video. Shorts are returned the same way.
channelName, channelId, channelHandle, channelUrlThe channel that published it.
publishDate, publishDateIsApprox, publishedTextExact ISO 8601 date with YouTube's offset (full rows), or a date estimated from "3 months ago" in fast mode.
durationSeconds, viewCount, likeCount, categoryLength and stats at the time of the run.
commentCountExact comment count. Always on Shorts; on regular videos with includeCommentCount.
soundTitle, soundArtistShorts: the sound or song the Short uses, as YouTube's sound link shows it (null when the Short has none).
isShort, isLive, isLiveContent, isUpcoming, isUnlisted, isFamilySafeFormat and status flags.
keywords, hashtags, descriptionTags, the #hashtags of the title and description, and the description (full or short); emails and phone numbers removed.
thumbnailUrl, thumbnailMaxUrl480x360 thumbnail (always), and the largest one when the upload has it.
captionLanguages, hasCaptionsEvery caption track: code, name, isAutoGenerated. Pair it with our YouTube Transcripts actor to get the text.
detailLevelfull or listing (fast mode).
source, sourceType, positionWhich channel tab, playlist, search term or hashtag the video came from, and its place in that list.
scrapedAtWhen the row was read.

Output example:

{
"rowType": "video",
"platform": "youtube",
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channelName": "Rick Astley",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelHandle": "@RickAstleyYT",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"publishDate": "2009-10-24T23:57:33-07:00",
"publishDateIsApprox": false,
"publishedText": null,
"durationSeconds": 213,
"viewCount": 1829080503,
"likeCount": 19491607,
"commentCount": null,
"category": "Music",
"isShort": false,
"isLive": false,
"isLiveContent": false,
"isUpcoming": false,
"isUnlisted": false,
"isFamilySafe": true,
"keywords": ["rick astley", "Never Gonna Give You Up", "nggyu"],
"hashtags": ["rickastley"],
"soundTitle": null,
"soundArtist": null,
"description": "The official video for “Never Gonna Give You Up” by Rick Astley. ...",
"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"thumbnailMaxUrl": "https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/maxresdefault.webp",
"captionLanguages": [
{ "code": "en", "name": "English", "isAutoGenerated": false },
{ "code": "en", "name": "English", "isAutoGenerated": true },
{ "code": "de-DE", "name": "German (Germany)", "isAutoGenerated": false }
],
"hasCaptions": true,
"detailLevel": "full",
"source": null,
"sourceType": "video",
"position": null,
"scrapedAt": "2026-10-22T08:00:00.000Z"
}

Input

{
"urls": [
"https://www.youtube.com/@kurzgesagt",
"https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH",
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"searchQueries": ["iphone 17 review"],
"maxResults": 10
}
FieldWhat it does
urlsChannel links (/@handle, @handle, /channel/UC..., /c/..., /user/...; add /shorts or /streams for those tabs), playlist links, video links (watch?v=, youtu.be, /shorts/, /live/), bare video IDs, hashtag pages (/hashtag/cooking, /hashtag/cooking/shorts) and search page URLs.
searchQueriesSearch terms; each gives up to maxResults videos in YouTube's order.
hashtagsHashtags (#cooking or cooking); each gives up to maxResults videos from the hashtag page.
contentTypevideos (default) or shorts: with shorts, search terms return Shorts only and hashtags read their Shorts tab.
maxResultsVideos per channel videos tab, playlist or search term (default 50, up to 10,000).
maxResultsShorts, maxResultStreamsAlso read each channel's Shorts and Live tabs, up to this many (default 0 = skip).
maxItemsStop after this many videos in total. A cost cap.
publishedAfter, publishedBeforeDate range, YYYY-MM-DD or relative ("30 days"). Skipped videos are free; a channel listed newest first stops at the first older videos.
sortVideosByChannel order: NEWEST (default), POPULAR, OLDEST.
listingOnlyFast mode: listing data only, no per-video request, lower price (see below).
includeCaptionLanguagesCaption track list per video (on by default).
includeCommentCountComment count for regular videos too (Shorts always have it). One more small request per video.
descriptionfull (default), short or none.
sortingOrder, dateFilter, lengthFilter, isHD, hasSubtitles, hasCC, isLive, is4KYouTube's own search filters.
searchCountryTwo-letter country YouTube ranks search results for, e.g. DE (default US).
includeErrorRowsA free row for every input or video without data (on by default).

Input names of the most used YouTube scrapers are accepted as they are (startUrls with { "url": ... } objects, channelUrls, youtubeHandles, channelHandle, channelId, videoUrls, keywords, oldestPostDate, sortOrder, maxVideos, maxVideosPerChannel, maxTotalResults, start_date, end_date, hashtag, onlyShorts, videoType, the Shorts scraper's channels and sortChannelShortsBy, and the search actors' q, query, order, sortBy, videoDuration, duration, uploadDate, type, regionCode and geo), so an existing input can be pasted in.

Full rows and fast mode

A full row reads the video's own page data: exact publish date, exact views, likes, category, tags, description and caption languages (one or two small requests per video; Shorts one more for the comment count and the sound). Fast mode (listingOnly: true) returns what the channel, playlist or search page already shows, about 30 videos per request: title, rounded views ("3.5M"), duration, channel and a date estimated from "3 months ago". With a date range, fast mode still checks the exact date of videos close to the range edge, so the range stays exact.

Use it from code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("arcadium/youtube-videos").call(run_input={
"urls": ["https://www.youtube.com/@kurzgesagt"],
"maxResults": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["rowType"] == "video":
print(item["publishDate"][:10], item["viewCount"], item["title"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('arcadium/youtube-videos').call({
searchQueries: ['formula 1 highlights'],
maxResults: 50,
listingOnly: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.rowType === 'video').length, 'videos');

Pricing

You pay per video or Short delivered, at the price of your Apify plan. Error rows, repeats and videos outside your date range are free.

Apify planPer 1,000 videosPer 1,000 ShortsPer 1,000 videos or Shorts in fast mode
Free$3.60$3.60$1.17
Starter (Bronze)$2.70$2.70$0.90
Scale (Silver)$2.34$2.34$0.72
Business (Gold)$2.16$2.16$0.45
Platinum$1.35$1.35$0.27
Diamond$0.90$0.72$0.18

Plus a one-off $0.001 per GB of memory when a run starts. No extra fee for date filters.

Set a maximum cost per run in the Apify run options and the actor stops before it goes over.

Use cases

  • Channel tracking: every new video of your competitors' channels each day, with views and likes.
  • Influencer research: recent output, average views and posting rhythm of a list of channels.
  • Search monitoring: who ranks for your keywords on YouTube (position), and how that changes.
  • Content analytics: categories, lengths, Shorts versus long videos, live streams.
  • Shorts trends: which Shorts take off for a hashtag or a search term, and which sounds they use.
  • Agents: "list the last N videos" before picking which ones to summarise (then use our YouTube Transcripts actor).

Limitations

  • Public videos only. Private, age-restricted and members-only videos need a signed-in account and are skipped (free error row).
  • Views and likes are read at run time; YouTube updates them with some delay. Likes are null when the creator hides them.
  • Fast-mode dates are estimates ("2 years ago" can be off by up to a year); full rows have the exact date.
  • YouTube's search filters (upload date, sort by date) are loose; use publishedAfter for an exact range.
  • Fast mode on a hashtag's Shorts tab gives only the video id and rounded views (YouTube shows no title there); full rows have everything.
  • The sound is what YouTube's sound link shows ("Song · Artist"); Shorts with their original audio and no sound link have soundTitle null.
  • Comment counts only, no comment text; no video or audio download, no subscriber lists.

Privacy

Public data only, read the way an anonymous visitor's browser and the YouTube app read it. No login, no cookies, no account. Comments and viewer data are never collected. Emails and phone numbers in titles and descriptions are replaced with [email] and [phone]. The channel name is the publisher of the video.

FAQ

Why are some dates marked approximate? In fast mode the listing only says "3 weeks ago". Turn fast mode off (the default) for exact ISO dates.

A channel returned nothing. Why? Look at its error row: not_found means the handle or playlist does not exist; a date range that matches no video gives no_match. These rows are free.

How fast is it? Full rows: about 2 to 4 videos per second. Fast mode: about 30 videos per request, a few hundred videos in under 10 seconds.

Something looks wrong in the output. Who do I tell? Open an issue on the actor page with the run link. We read them all.