YouTube Scraper - Search Results, Channels & Playlists avatar

YouTube Scraper - Search Results, Channels & Playlists

Pricing

from $0.13 / 1,000 videos

Go to Apify Store
YouTube Scraper - Search Results, Channels & Playlists

YouTube Scraper - Search Results, Channels & Playlists

YouTube scraper for search results or a channel's newest uploads. Each row has the videoId, title, watch URL, channel, thumbnail, and the views, age and runtime exactly as YouTube prints them ("4 years ago", "34,811,276 views"). $0.135 per 1,000 videos.

Pricing

from $0.13 / 1,000 videos

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

10

Monthly active users

15 hours ago

Last modified

Security

Limited permissions

Share

YouTube scraper for search results, channel uploads, playlists and past live streams: give it keywords, channels, links, or all three, and you get one flat row per video with the id, title, watch link, channel, views, age, runtime and thumbnail, plus the views and length as numbers.

The part that surprises people on run two: the figures are the ones a results page prints. viewCount is "34,811,276 views" read as a number, which is exact on search rows, but a channel page prints "88M views", so those rows carry YouTube's rounding and say so in viewCountIsApproximate. Dates stay as "4 years ago".

InputKeywords, channel links, @handles, UC ids, playlist links or YouTube search links
OutputOne row per video: id, title, link, channel, views as text and number, age, runtime in seconds, thumbnail, hashtags, channel link and handle; channel rows add subscribers, total views, joined date and country
Ceiling1,000 videos per keyword, per channel and per playlist
Account neededNone
Price$0.135 per 1,000 videos on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 37,000

🔍 What YouTube Scraper does

Three ways in, same row shape. A keyword runs a YouTube search, with any of YouTube's own filters. A channel returns its newest uploads, or its most viewed or oldest, plus its Shorts and past streams if you ask. A link returns that playlist or search. Mix them in one run and the rows come back together, with mode and sourceInput telling you which produced each one.

Results are deduplicated by videoId across the whole run, so a video found twice is returned once and billed once. maxItems is per keyword, per channel and per playlist, not per run.

📋 What data you get from each YouTube video

What you getField
The 11 character video id and the watch linkvideoId, url
Title and hashtagstitle, hashtags
Who uploaded itchannelName, channelId, channelUrl, channelHandle, channelVerified, channelAvatar, collaborators
Views, as printed and as a numberviewCountText, viewCount, viewCountIsApproximate
Age and runtimepublishedTimeText, lengthText, lengthSeconds
What kind of rowtype (video, live, upcoming, short, movie), isLive, isMembersOnly, recordType, mode
Which input produced it, and wheresourceInput, position, channelTab
The largest thumbnail on offerthumbnail
Channel facts (channel rows, or search rows with Add channel facts)channelSubscriberCount, channelVideoCount, channelBanner; channel rows also channelTotalViews, channelJoinedDate, channelCountry, channelDescription, channelLinks
Comment count add-oncommentCountText, commentCount, commentCountIsApproximate, commentsTurnedOff

▶️ How to scrape YouTube videos

  1. Open YouTube Scraper and click Try for free.
  2. Type keywords into Search queries, paste channels into Channel URLs / handles, or links into YouTube links.
  3. Set Max videos per query / channel. Start at 50 while you look at the output.
  4. Pick any filters or extras you want, then click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it over the Apify API.

Give it nothing to read and you get one uncharged row telling you so.

💰 How much does it cost to scrape YouTube videos?

$0.135 per 1,000 videos on the Free plan. Paid plans pay a little less: $0.133 on Starter, $0.131 on Scale and $0.129 on Business. On the free plan, the $5 Apify gives you each month covers about 37,000 videos.

You pay per row delivered; the filters and Add channel facts cost nothing extra. A channel search bills each channel row like a video row. Diagnostic rows, duplicates and rows a filter leaves out are never billed. The comment count and channel profiles are optional add-ons.

📥 What you give it

{
"searchQueries": ["lofi hip hop"],
"channelUrls": ["https://www.youtube.com/@LofiGirl"],
"startUrls": [{ "url": "https://www.youtube.com/playlist?list=PL6NdkXsPL07Il2hEQGcLI4dg_LTg7xA2L" }],
"maxItems": 50,
"uploadDate": "month",
"channelSort": "popular"
}
FieldDefaultWhat it is
searchQueriesnoneKeywords, one per line. The form opens with lofi hip hop as an example.
channelUrlsnoneChannel links, @handles or bare UC ids. If one will not resolve, pass the full link or the UC id.
startUrlsnonePlaylist links, search results links (their filters apply) or channel links. Upload a text file or a Google Sheet shared with anyone who has the link. Single video links are not read.
maxItems50Per keyword, channel and playlist, 0 to 1,000. Also your spend cap. 0 skips them, for runs that only want Shorts, streams or profiles.
includeChannelFactsfalseSubscriber count, video count, banner and handle on search and playlist rows, one lookup per channel.
includeCommentCountfalseOptional add-on: the comment count as YouTube shows it, and whether comments are off.
channelProfilesOnlyfalseOptional add-on: one row per channel about the channel, no videos.
uploadDateanyhour, today, week, month or year. Searches only.
durationanyshort (under 3 minutes), medium (3 to 20) or long (over 20). Live streams have no length, so they are left out.
featuresnoneAny of hd, 4k, live, subtitles, creativeCommons, 360, vr180, 3d, hdr, location, purchased. All must match.
searchTypevideoschannels gives one row per channel, movies the films YouTube sells or rents.
searchCountry, searchLanguageUS, enWho the search is made for. In another language the numbers worked out from YouTube's text come back empty.
channelSortlatestpopular or oldest, for the Videos tab.
publishedAfternoneA day like 2026-10-01 or 30 days. Channel videos and streams only.
maxStreams, maxShorts0Past live streams and Shorts per channel, each with its own limit.
notionConnector, notionParentIdnoneOptional. Write each video into a Notion database as well.
proxyConfigurationnoneOptional. Leave it empty unless you have your own servers you want the run to go out through.

A filter value the run does not know is refused at the start with one free row, never ignored.

📤 What you get back

A real row from a run on 24 October 2026, with the thumbnail and avatar links trimmed:

{
"ok": true,
"videoId": "CLeZyIID9Bo",
"title": "Chill Lofi Mix [chill lo-fi hip hop beats]",
"url": "https://www.youtube.com/watch?v=CLeZyIID9Bo",
"channelName": "Settle",
"channelId": "UCkKT4qf-TcPFOmpqhTawrGA",
"viewCountText": "35,075,027 views",
"publishedTimeText": "4 years ago",
"lengthText": "1:44:52",
"thumbnail": "https://i.ytimg.com/vi/CLeZyIID9Bo/hq720.jpg?sqp=...",
"mode": "search",
"viewCount": 35075027,
"viewCountIsApproximate": false,
"lengthSeconds": 6292,
"sourceInput": "lofi hip hop",
"position": 4,
"channelUrl": "https://www.youtube.com/channel/UCkKT4qf-TcPFOmpqhTawrGA",
"channelHandle": "@settlefm",
"type": "video",
"isLive": false,
"hashtags": [],
"channelVerified": false,
"channelAvatar": "https://yt3.ggpht.com/89HydDCrVDqoTZbqoX...",
"collaborators": null,
"isMembersOnly": false,
"recordType": "video"
}
FieldHow to read it
viewCountA number. viewCountIsApproximate: true means YouTube printed a rounded figure like 88M views. Null on a live stream, which shows viewers, not views.
positionWhere the video sat in that keyword's results or that channel's list, counting from 1.
channelHandleFilled when the row carries it; search rows from some big channels carry only the UC id unless Add channel facts is on.
collaboratorsSet on a collaboration, whose byline has no single channel. channelId is empty on those rows.
channelSubscriberCountYouTube's own rounding for big channels, as on the page.

🧾 Reading the output

RowHow to spot itBilled
A videook: true, recordType: "video"yes
A channel from a channel searchok: true, recordType: "channel"yes, like a video
A channel profileok: true, recordType: "channelProfile"an add-on
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your data. A failed keyword, channel or link gets its own row and the run carries on.

CodeWhat it means
BAD_INPUTAn input or link could not be used, a single video link was given, or the input named nothing.
NOT_FOUNDYouTube has no channel at that address.
NO_RESULTS, NO_VIDEOSA search, playlist or channel gave nothing, or nothing matched your filters.
SORT_NOT_AVAILABLE, SORT_NOT_APPLIEDThe channel order you asked for was not offered or not applied, so that channel's Videos tab gave no rows.
FILTER_UNCHECKEDA pasted search link carried a filter the run cannot check.
RATE_LIMITED, SERVER_ERROR, NETWORKThat target would not answer this run. Re-running usually clears it.
NOT_SERVEDThis video was not served this run. Re-run it later. Runs before 13 October 2026 wrote BLOCKED here, and runs from 13 to 17 October wrote NETWORK.
TIME_LIMITThe run got close to its time limit and stopped on its own. The videos delivered before that are in the dataset and charged as usual. Give the run more time, or ask for fewer videos, to get the rest.

A run still ends as succeeded, with an amber status message, even when the time limit stopped it before any video came back. The Overview table shows video columns only, so a diagnostic row reads as a blank line there.

💡 What people use it for

  • Watching what ranks for a keyword this week, with position saved next to each video.
  • Pulling a channel's most viewed videos, or everything since a date, for a pitch or a review.
  • Turning a list of playlists into one table of videos with their channels.
  • Finding the channels behind a topic, with their subscriber counts, through a channel search.

From a keyword to what is said and what viewers say back, in three runs:

  1. Search a keyword here and copy the url column of the videos you care about.
  2. Paste those links into the Video URLs or IDs box of YouTube Transcript Scraper to get what each video says.
  3. Paste the same links into the Video URLs box of YouTube Comments Scraper to read the replies.

🚧 What it does not do

  • No exact view counts on channel rows, no likes and no real dates. A channel page prints "88M views" and "4 years ago", and that is what comes back.
  • No single video links. It reads searches, channels and playlists.
  • Search skips Shorts and playlists that appear between ordinary results; Shorts come from a channel's Shorts tab.
  • No comment text, transcripts or subtitles. Those live in the actors in the table below.
  • Comment counts are rounded. Signed out, YouTube shows 4.1K, not the exact figure.
  • No search order. Results come in YouTube's relevance order.
  • Very large limits come back short. 1,000 is the most, and a big number often stops before it.
  • It is not an official YouTube tool. Dami's Studio is independent and is not affiliated with or endorsed by YouTube or Google, or by any other company named on this page.

🧭 Which YouTube scraper do you need?

If you wantUse
Keyword search results, a channel's videos, Shorts and streamsThis one
A channel's uploads, with a higher ceiling per runYouTube Channel Scraper
Shorts from a keyword, with exact view and like countsYouTube Shorts Scraper
Videos in a playlistYouTube Playlist Scraper
The most-viewed videos for a topicYouTube Trending Scraper
Comments under a videoYouTube Comments Scraper
What a video says, as text, SRT and VTTYouTube Transcript Scraper
The video, its audio or its subtitles as a fileYouTube Downloader Pro

❓ Questions people ask

Do I need a YouTube or Google account?

No. Nothing here is signed in.

Is maxItems per run?

No, per keyword, per channel and per playlist. Three targets at 50 is up to 150 rows.

Can I get exact YouTube view counts?

On search rows viewCount is already the exact figure the results page prints. Channel and playlist pages print rounded figures. YouTube Shorts Scraper returns exact view and like counts for Shorts.

Why is channelId empty on some rows?

Search rows whose byline is a collaboration carry no single channel. collaborators lists the channels instead.

Can I call it from code or connect it to an AI assistant?

The API tab has code for Python, JavaScript and the CLI. MCP clients like Claude and ChatGPT use https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/youtube-scraper; coding assistants can load our skill file. All three bill your Apify account at the same price.

This reads public search results, public channel pages and public playlists, nothing signed in. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. YouTube's own terms still apply to what you do with it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

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