YouTube YouTube

YouTube Scraper: extract videos, channels, comments and transcripts

Apidojo YouTube Scraper is a no-login YouTube data API that collects videos from channels, playlists, keyword searches, Shorts and trending lists. It costs $0.50 per 1,000 videos, runs at 10 to 19 videos a second, needs no YouTube API key, Google Cloud project or OAuth consent, and exports JSON or CSV.

Free Apify plan: 5 runs a month, 10 items a run. No credit card.

Open record ↵4 queries
$0.50
per 1,000 videos
10–19/s
videos, published range
0 quota
no API key or OAuth
$0.001
per transcript

Transcripts run on YouTube Transcript Scraper, a sibling actor. Everything else is the main scraper. Read on 21 September 2026.

What are the YouTube Scraper specifications?

YouTube Scraper accepts 5 URL types, @handles, keyword searches and a trending switch, shaped by 6 filters. Each video returns metadata, engagement counts, a channel object, thumbnails, streaming formats and the caption track list, exported as JSON or CSV.

YouTube Scraper specificationsapidojo/youtube-scraper
Data surfaces on YouTubeVideos, channels, playlists, Shorts, keyword searches and trending lists
InputsstartUrls, youtubeHandles, keywords, getTrending, includeShorts, maxItems, customMapFunction
Filtersgl (country), hl (language), uploadDate, duration, features, sort
Price$0.50 per 1,000 videos, flat, with no per-query fee
Speed19 videos/sec on search URLs, 16 on channels, 14 on playlists, 10 on keyword searches
Countries and languagesgl and hl take the codes YouTube itself uses; defaults us and en
Date filteruploadDate, Any, Last hour, Today, This week, This month, This year. Keyword searches only
SortRelevance, Rating, Upload date, View count. Keyword searches only
Caption textNot from this scraper. It returns the caption track list. Text comes from YouTube Transcript Scraper
Minimum per input10 videos per keyword, handle or start URL
Inputs per runUp to 5 keywords, handles or URLs in one run, per the README
Export formatsJSON and CSV, per the README. Other Apify export formats are platform features
YouTube API key or OAuthNot required. No Google Cloud project either
Free planDemo mode, 5 runs per month, 10 items per run

What does YouTube Scraper output look like?

YouTube Scraper output is one JSON object per video, carrying the ID, title, URL, duration in seconds, views, likes, publish date, live and family-safe flags, a nested channel object, thumbnails, streaming formats and the caption track list.

Choose an input type to see its output

Runs onapidojo/youtube-scraper

uploadDate and sort only apply here. On a channel or URL run they are ignored.

Input

{
  "keywords": ["machine learning tutorial"],
  "uploadDate": "w",
  "sort": "v",
  "gl": "us",
  "hl": "en",
  "maxItems": 200
}

Output

{
  "type": "video",
  "id": "wwSzpaTHyS8",
  "title": "Did The Future Already Happen?",
  "duration": 755,
  "views": 6501854,
  "likes": 282499
}

Runs onapidojo/youtube-scraper

A handle or channel URL returns that channel’s videos, each with the channel object.

Input

{
  "youtubeHandles": ["@kurzgesagt"],
  "includeShorts": true,
  "maxItems": 300
}

Output

"channel": {
  "id": "UCsXVk37bltHxD1rDPwtNM8Q",
  "name": "Kurzgesagt – In a Nutshell",
  "url": "http://www.youtube.com/@kurzgesagt"
}

Runs onapidojo/youtube-comments-scraper

A sibling actor. Counts arrive as display strings, "3.4K", "5 months ago", so parse before sorting.

Input

{
  "startUrls": [
    "https://www.youtube.com/watch?v=xuCn8ux2gbs",
    "https://www.youtube.com/shorts/vVTa1_hm4n4"
  ],
  "sort": "top",
  "includeReplies": false,
  "maxItems": 1000
}

Output

{
  "text": "This one hit you in the feels? …",
  "likeCount": "3.4K",
  "replyCount": "8",
  "publishedTime": "5 months ago",
  "author": { "id": "UCa90xqK2odw1KV5wHU9WRhg", "name": "@TheOffice" }
}

Runs onapidojo/youtube-transcript-scraper

Also a sibling actor. Timed lines, and the list of every caption language the video has.

Input

{
  "startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
  "lang": "en"
}

Output

{
  "type": "transcript",
  "id": "dQw4w9WgXcQ",
  "transcript": [
    { "text": "Welcome back to the channel…", "dur": "3.52", "startTime": "0" },
    { "text": "Let's take a closer look…", "dur": "2.87", "startTime": "3.6" }
  ],
  "selected": { "title": "English (auto-generated)", "languageCode": "en" }
}

What the fields are

  • Video metadata

    ID, title, URL, description, duration in seconds, publish and upload dates, live, private and family-safe flags

  • Engagement

    View count and like count

  • Channel

    Channel ID, display name and channel URL on every video

  • Media and captions

    Thumbnails, embed URL, streaming formats, and the caption track list with language codes

Field dictionary22 fields
FieldTypeExample valueGroup
typestringvideoMetadata
idstringwwSzpaTHyS8Metadata
titlestringDid The Future Already Happen?Metadata
urlstringhttps://www.youtube.com/watch?v=wwSzpaTHyS8Metadata
descriptionstringGo to brilliant.org/nutshell to dive deeper…Metadata
durationinteger (seconds)755Metadata
publishDatestringJan 30, 2024Metadata
uploadDatestringJan 30, 2024Metadata
statusstringOKMetadata
viewsinteger6501854Engagement
likesinteger282499Engagement
isLivebooleanfalseFlags
isPrivatebooleanfalseFlags
isFamilySafebooleantrueFlags
channel.idstringUCsXVk37bltHxD1rDPwtNM8QChannel
channel.namestringKurzgesagt – In a NutshellChannel
channel.urlstringhttp://www.youtube.com/@kurzgesagtChannel
thumbnails[]array (url, width, height)1920 × 1080Media
embedUrlstringhttps://www.youtube.com/embed/wwSzpaTHyS8Media
streamingData.formats[]arrayitag 18 · 360p · video/mp4Media
captions.captionTracks[]array (name, language_code)English · enCaptions
captions.translationLanguages[]arrayAfrikaans · afCaptions

Which Apidojo YouTube scraper fits your job?

Apidojo publishes 7 YouTube scrapers. YouTube Scraper collects videos from channels, playlists, searches, Shorts and trending at $0.50 per 1,000, and six single-job scrapers handle transcripts, comments, channel profiles, channel videos, playlists and trending lists, each billing a small fee per query on top of the same per-video rate.

Start here

YouTube Scraper

apidojo/youtube-scraper
30.2K users · 3.3 (22)

The main scraper. Collects videos from channel URLs and @handles, playlists, keyword searches, Shorts and the trending list, with country, language, date, duration, feature and sort filters.

  • Channels, playlists, searches, Shorts, trending
  • Six filters, two of them search-only
  • 10–19 videos per second
  • Caption track list on every video
  • Flat rate, no query fee, no free-item maths
  • Minimum 10 videos per input

$0.50 / 1,000 videosPay per result, no per-run fee

YouTube scrapers for a single job

How much does YouTube Scraper cost?

YouTube Scraper costs $0.50 per 1,000 videos, billed per result with no per-run and no per-query fee. Scraping 100,000 YouTube videos costs $50.00. The six single-job scrapers add a query fee between $0.001 and $0.025, most of them with items included in it.

YouTube Scraper

$0.50per 1,000 videos

  • Flat rate, no query fee, no free-item maths
  • The same price at 1,000 or 1,000,000 videos
  • Minimum 10 videos per input
Run your first query
Query fees on the single-job scrapers
ScraperQuery feePer item
YouTube Transcript Scraper$0.001 per transcript, the whole priceno item fee
YouTube Comments Scraper$0.001 per video (around 20 comments free)$0.50 / 1K
YouTube Channel Info Scraper$0.005 per URL or handle · $0.001 per keyword search$0.50 / 1K
YouTube Channel Videos Scraper$0.015 per channel (around 30 videos free) · $0.005 per search$0.50 / 1K
YouTube Playlist Scraper$0.025 per playlist (around 100 videos free) · $0.005 per search$0.50 / 1K
YouTube Trending Scraper$0.025 per query (around 50 videos free)$0.50 / 1K
What a real job costsArithmetic shown
JobScraperCalculationCost
100,000 videos from a keyword searchYouTube Scraper100,000 × $0.0005$50.00
1 channel, 200 videosYouTube Scraper200 × $0.0005$0.10
100 channels, 1,000 videos eachYouTube Scraper100,000 × $0.0005$50.00
1,000 transcriptsTranscript Scraper1,000 × $0.001$1.00
1 video, 1,000 commentsComments Scraper$0.001 + 980 × $0.0005$0.49
US trending list, daily for 30 daysTrending Scraper30 × $0.025$0.75

Prices apply to Apify paid plans. The free plan runs YouTube Scraper in demo mode, 5 runs a month, 10 items a run, no credit card.

How does YouTube Scraper compare with the YouTube Data API?

The YouTube Data API is free but capped. A Google Cloud project gets 10,000 quota units a day for most endpoints plus a separate bucket of 100 search.list calls, both reset at midnight Pacific Time, and every caption endpoint requires OAuth authorization. YouTube Scraper has no quota, no key and no OAuth step.

Side by sidePer 1,000 items
What you getApidojo YouTube ScraperYouTube Data API v3
SetupAn Apify accountGoogle Account, Google Cloud project, API enabled; OAuth 2.0 for user-authorised calls
Daily ceilingSet by your Apify plan10,000 units a day for most endpoints, reset at midnight PT
Keyword searches per dayUnlimited, at $0.50 per 1,000 videos returned100 search.list calls, in their own quota bucket
Each extra results page$0.0005 per videoCharged again at the method’s quota cost
Caption track listOn every video, includedcaptions.list, 50 units, and requires OAuth authorization
Transcript textYouTube Transcript Scraper, $0.001 per videocaptions.download, requires OAuth authorization
Raising the limitChange your Apify planRequest a quota extension from Google
Cost$0.50 per 1,000 videosNo charge within quota
Upload, comment, updateNo, read-onlyYes

Quota figures from Google’s own "Determine quota cost" page, read on the snapshot date, which states that search.list and videos.insert have their own quota buckets with a default daily limit of 100 each, separate from the 10,000 units shared by every other endpoint. That is the number worth knowing: a project can burn its entire search allowance in 100 calls while 10,000 units sit unused.

How to scrape YouTube with Apidojo in 4 steps

Scraping YouTube with Apidojo takes 4 steps: open the scraper, add URLs, handles or keywords, set the filters, then run and export. No YouTube API key, Google Cloud project or OAuth consent screen is involved.

  1. 01

    Open YouTube Scraper on Apify

    Sign in with a free Apify account. No credit card is needed to run it in demo mode.

  2. 02

    Add URLs, handles or keywords

    Paste a channel, playlist, Shorts or search URL, type an @handle, or enter search keywords.

  3. 03

    Set the filters

    Pick country and language, upload date, duration, features and sort; turn on Shorts or trending. Cap the run with maxItems.

  4. 04

    Run and export the dataset

    Download JSON or CSV, or read the results straight through the Apify API.

Which query types and filters it accepts

Which query types and filters it accepts13 entries
InputWhat it doesExample
Channel URL or @handleVideos published by a channelyoutube.com/@MrBeast
Playlist URLEvery video in a playlistyoutube.com/playlist?list=PLrAXtmErZgOeiKm4…
Search URLResults for a query stringyoutube.com/results?search_query=AI
Shorts URLA Shorts video, or a channel’s Shorts pageyoutube.com/@MrBeast/shorts
Video URLAccepted in startUrls, but see the 10-video minimumyoutube.com/watch?v=dQw4w9WgXcQ
keywordsSearches YouTube for terms instead of URLs["machine learning tutorial"]
getTrendingReturns the trending list for the gl countrytrue
includeShortsAdds Shorts to a channel or keyword runtrue
uploadDateKeyword searches onlyl last hour · t today · w this week · m this month · y this year
sortKeyword searches onlyr relevance · ra rating · u upload date · v view count
durationSearch resultsall any · s short · l long
featuresSearch resultshd HD · s subtitles · c CC · li live · 4 4K · 3 360
gl · hlCountry and language for search resultsus · gb · de · en · de · tr
  • The single-letter codes

    uploadDate: "w" and features: "4" are undiscoverable without reading the input schema, YouTube’s own URL parameters, passed straight through. Printed as a code table they let you or an agent write a correct input on the first try, which is the main reason this section exists.

  • Why sort is ignored on a channel

    uploadDate and sort are YouTube search parameters, and a channel or playlist page is not a search. On those runs they are silently ignored rather than rejected. To sort a channel by views, search its name as a keyword instead of pasting its URL.

How do you call the YouTube Scraper API?

YouTube Scraper is the actor apidojo/youtube-scraper, called through the Apify REST API or the official Python and JavaScript clients. The input is the same JSON the web form produces, so a run built in the form copies straight into code.

Choose a language
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

# This week's most-viewed videos for a topic, US results in English
run = client.actor("apidojo/youtube-scraper").call(run_input={
    "keywords": ["machine learning tutorial"],
    "uploadDate": "w",
    "sort": "v",
    "gl": "us",
    "hl": "en",
    "maxItems": 200,
})

for v in client.dataset(run.default_dataset_id).iterate_items():
    print(v["views"], v["duration"], v["title"], v["url"])
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

// A channel's long-form videos plus its Shorts, split by duration
const run = await client.actor('apidojo/youtube-scraper').call({
  youtubeHandles: ['@kurzgesagt'],
  includeShorts: true,
  maxItems: 300,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const shorts = items.filter((v) => v.duration <= 60);
console.log(shorts.length, 'Shorts of', items.length, 'videos');
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":["https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"],"maxItems":100}'
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

# Transcripts are a separate actor, the main scraper returns the track list
run = client.actor("apidojo/youtube-transcript-scraper").call(run_input={
    "startUrls": ["https://www.youtube.com/watch?v=_AbFXuGDRTs"],
    "lang": "en",
})

for item in client.dataset(run.default_dataset_id).iterate_items():
    for line in item["transcript"]:
        print(line["startTime"], line["text"])
  • n8n

    A daily trending run feeding a market digest.

  • Make and Zapier

    New channel video into a review queue.

  • Warehouse

    JSONL into BigQuery or Snowflake.

  • Webhooks

    POST to any URL on run success.

How fast is YouTube Scraper?

YouTube Scraper returns 19 videos a second on search URLs, 16 on channels, 14 on playlists and 10 on keyword searches, all from its own published benchmark. At the channel rate a 10,000-video export finishes in about ten minutes.

Search URL19 videos/sec
Channel URL16 videos/sec
Playlist URL14 videos/sec
Keyword search10 videos/sec
How long a run takes
ScraperPublished speed1,000 items
YouTube Scraper10–19 videos/sec≈ 53 s – 1 min 40 s
YouTube Comments Scraper251 comments/sec · 267 on Shorts≈ 4 s
YouTube Channel Info Scraper166 channels/sec≈ 6 s
YouTube Trending Scraper14 videos/sec≈ 1 min 11 s
YouTube Channel Videos Scraper13 videos/sec≈ 1 min 17 s
YouTube Playlist Scraper13 videos/sec≈ 1 min 17 s
YouTube Transcript ScraperNot stated in its READMENone

Every rate is the figure its own listing publishes, and the transcript row says so rather than borrowing a neighbour’s number. The bars compare the four query types of one actor, because those share a unit; the table mixes videos, comments and channels, which do not. Real throughput moves with query type, region, time of day and how many deleted or private videos get skipped.

30.2K
users on YouTube Scraper
6.5M
YouTube Scraper runs, all time
4.4 / 5
across 63 reviews, seven scrapers
99.6%
run success, 30 days

The 4.4 is weighted by review count across all seven, which pulls it down rather than up: YouTube Scraper’s own rating is 3.3 over 22 reviews, the lowest in the catalogue, while the six single-job scrapers sit between 4.8 and 5.0. Publishing the blend rather than the siblings’ average is the point, the rating you see includes the scraper this page leads with.

What can you build with YouTube Scraper data?

YouTube Scraper data powers 6 workflows: timestamped transcript search, launch-video comment mining, creator shortlisting, per-country trending reports, Shorts-versus-long-form analysis and course audits. Four of the six chain two scrapers together.

  • 01

    Timestamped transcript search

    keywords → video URLs → Transcript Scraper

    Fields
    transcript[].text, startTime, url
    Lands in
    A RAG index that cites the exact second a claim was made
  • 02

    Launch-video comment mining

    Comments Scraper · sort Latest · includeReplies

    Fields
    text, likeCount, replyCount
    Lands in
    Clustered questions and complaints for product teams
  • 03

    Creator shortlisting

    Channel Info Scraper · keywords · gl

    Fields
    subscriberCount, videosCount, availableCountries, tags
    Lands in
    A sponsorship shortlist by niche and market
  • 04

    Per-country trending reports

    Trending Scraper · one run per gl, daily

    Fields
    title, views, channel
    Lands in
    A daily market snapshot at $0.75 a month per country
  • 05

    Shorts versus long-form

    YouTube Scraper · @handle · includeShorts

    Fields
    duration, views, publishDate
    Lands in
    Views per format for the same channel
  • 06

    Course and series audits

    Playlist Scraper · playlist URL

    Fields
    duration, views, likes per video
    Lands in
    Total runtime and viewer drop-off across a series

What are the limits of YouTube Scraper?

YouTube Scraper operates under 6 documented limits. Each one below states what triggers it and how to work within it.

  • At least 10 videos per input

    Each keyword, handle or start URL must fetch 10 videos or more. Smaller requests are too costly to serve and can trip the rate limiter.

    Set maxItems to 10 or more and group small inputs into one run.

  • Single video URLs are not supported

    The README states this directly, and it follows from the 10-video minimum. The input schema still accepts the watch-URL format, so a single-video run fails rather than being rejected up front.

    Batch at least ten videos, or use Comments Scraper or Transcript Scraper, both of which take one watch URL.

  • Five inputs per run, one run at a time

    The README asks for no more than 5 keywords, handles or URLs in a run, at most one concurrent run, and a couple of minutes between runs.

    Queue runs on a schedule rather than firing them in parallel.

  • uploadDate and sort are search-only

    Both are YouTube search parameters, so they are ignored on channel, playlist and URL runs.

    Search the channel name as a keyword, or filter on publishDate after the run.

  • No caption text, and no comment counts

    This scraper returns the caption track list, not the transcript, and its output carries no comment count. Both come from sibling actors.

    Transcript Scraper for the text at $0.001 a video; Comments Scraper for comments at $0.001 a video.

  • Private, member-only and restricted videos

    Private, member-only and deleted videos are not returned at all. Age-restricted videos usually come back without streamingData, and geo-blocked videos depend on where the run executes.

    Open the URL in a logged-out browser first, and plan for empty media fields on restricted content.

YouTube Scraper frequently asked questions

FAQ

Everything else people ask

Fifteen questions about this scraper and its family. Anything about the wider catalogue is answered on the scrapers hub.

All 26 scrapers

Using it

Does YouTube Scraper need a YouTube API key?

It needs no YouTube API key, Google Cloud project or OAuth consent screen. An Apify account is the only requirement.

Can YouTube Scraper get video transcripts?

YouTube Scraper returns each video’s caption track list, not the words. The transcript text comes from YouTube Transcript Scraper at $0.001 a video, as timed lines with startTime and dur.

Does YouTube Scraper scrape YouTube Shorts?

Yes. Paste a Shorts URL or a channel’s /shorts page, or switch includeShorts on for a channel or keyword run.

Can I filter YouTube search results by upload date?

Set uploadDate on a keyword search: l last hour, t today, w this week, m this month, y this year. It is ignored on channel, playlist and URL runs.

Can I scrape YouTube results for another country or language?

Yes. gl sets the country and hl the language, using the codes YouTube itself uses. The defaults are us and en.

How do I get YouTube trending videos for a country?

Switch getTrending on and set gl to the country, or run YouTube Trending Scraper, which costs $0.025 a query with around 50 videos included.

Limits and results

How is this different from the YouTube Data API quota?

The Data API gives a project 10,000 units a day for most endpoints and a separate bucket of 100 search.list calls. YouTube Scraper has no daily quota, you pay $0.50 per 1,000 videos returned.

Can YouTube Scraper scrape one specific video?

Not on its own: each input has to fetch at least 10 videos, and the README says single video URLs are not supported. For one video, use Comments Scraper or Transcript Scraper, both of which take a single watch URL.

Does YouTube Scraper return subscriber counts?

Its channel object carries the channel ID, name and URL. Subscriber and video counts come from YouTube Channel Info Scraper, which returns them as display strings such as "244M subscribers".

Can I scrape YouTube comments with replies?

YouTube Comments Scraper returns replies when includeReplies is on. Each reply thread is billed as its own query on top of the $0.001 per video.

Can YouTube Scraper access private or member-only videos?

No. Private, member-only and deleted videos are never returned. Age-restricted videos usually come back without streamingData, and geo-blocked videos depend on where the run executes.

Why did my YouTube run return no videos?

Empty runs usually come from an input asking for fewer than 10 videos, a single video URL, or a private or deleted page. Test the URL logged out, then retry with a known public channel.

Plans and integrations

How much does it cost to scrape 100,000 YouTube videos?

It costs $50.00 at $0.50 per 1,000 videos, with no query fee on top.

Is there a free YouTube Scraper plan?

Yes. The free Apify plan runs it in demo mode: 5 runs a month, 10 items per run, no credit card.

Does YouTube Scraper work with n8n and AI agents?

Yes. It runs in n8n, Make and Zapier through the Apify app, and in Claude, Cursor and other MCP clients through the Apify MCP server.

Other Apidojo scrapers

YouTube is one of six sources in the catalogue. Every scraper publishes its inputs, its output fields and its price the same way this one does.

Browse all 26 scrapers

Run YouTube Scraper on your first channel

Type an @handle or paste a channel, playlist or search URL. The free Apify plan runs it in demo mode with no credit card, and the output shape is the one documented on this page.

Run your first channel

Somewhere to start

  • youtubeHandles: ["@kurzgesagt"] · includeShortsA channel’s long-form videos and Shorts in one run
  • keywords: ["machine learning tutorial"] · this week · by viewsWhat the topic published this week, best first
  • getTrending: true · gl: "gb"One country’s trending list, for $0.025 a day

All three run on YouTube Scraper at $0.50 per 1,000 videos.

Apidojo is not affiliated with YouTube or Google LLC.