Youtube Scraper avatar

Youtube Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Youtube Scraper

Youtube Scraper

🎥 YouTube Scraper extracts structured data from videos, channels & playlists — titles, tags, views, likes, comments, captions, thumbnails & publish dates. 🔎 Perfect for SEO, competitor analysis, research & reporting. 🚀 Export-ready for CSV/JSON pipelines.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

6

Monthly active users

4 days ago

Last modified

Share

YouTube Video Scraper — Extract Views, Likes and Transcripts

The Scraper-Engine YouTube Scraper extracts video title, view count, like count, channel subscriber count, publish date, and full transcripts from YouTube search results, channels, playlists, and direct video URLs — without the official YouTube Data API or an API key. Every run returns structured JSON with a consistent field set across videos, Shorts, and live streams, ready to load straight into a database or LLM pipeline. Run it now on Apify to start pulling YouTube video data.

What is YouTube Scraper?

YouTube Scraper is an Apify Actor that scrapes YouTube video, Shorts, and live-stream data from keyword search, direct video URLs, channel URLs, playlist URLs, and YouTube results-page URLs, returning one structured JSON row per video. No YouTube account, Google login, or API key is required — every request runs as an anonymous, logged-out browser session. It's built for developers, content marketers, and AI engineers who need YouTube video metadata, engagement metrics, and transcripts without maintaining their own scraper or a Data API quota.

What YouTube video data is publicly available to scrape?

Anyone who opens youtube.com logged out can see a video's title, view count, likes, duration, description, channel name, and subscriber count — YouTube Scraper reads that same surface.

Data CategoryPublicly AvailableRestricted behind YouTube login
Title, description, duration, publish dateYes
View count, likes, comment countYes
Channel name, subscribers, channel IDYesStudio analytics — account login
Captions/subtitles (if published)Yes
Creative Commons license flagYes
Age-restricted videosNoSigned-in Google account
Private/unlisted videosNoOwner/invite access
Purchased content detailsRarely exposedPurchase + login

YouTube Scraper only returns what a logged-out visitor sees — nothing behind a sign-in wall.

What data can I extract with YouTube Scraper?

YouTube Scraper returns video metadata, engagement metrics, channel identity, and optional transcripts in every dataset row.

Field NameDescription
titleVideo title
typevideo or shorts
idYouTube video ID
urlCanonical watch/Shorts URL
thumbnailUrlBest available thumbnail image URL
datePublish date (ISO 8601)
durationVideo length as HH:MM:SS
textFull video description
hashtagsHashtags extracted from the title and description
descriptionLinksURLs and hashtag links found in the description
orderPosition within this run's results
fromYTUrlThe search URL or direct URL this row was scraped from

Engagement & audience metrics

Field NameDescription
viewCountView count
likesLike count
commentsCountApproximate comment count, parsed from the video's comment panel header
commentsTurnedOfftrue when YouTube's own "Comments are turned off" state was detected

Channel, technical & transcript fields

Field NameDescription
channelNameChannel display name
channelUrlChannel URL
channelUsernameChannel handle — populated for search-result rows, null for direct-URL/channel/playlist rows
channelIdChannel ID (UC...)
numberOfSubscribersChannel subscriber count
locationLocation metadata, only when the uploader attached one (rare)
isCreativeCommonsWhether the video is Creative Commons licensed
isPurchasedBest-effort flag for purchased/paid content (low coverage; YouTube rarely exposes this)
subtitlesList of available caption language codes
transcriptFull transcript text/SRT/JSON — only present when downloadSubtitles is on
transcriptLanguageLanguage code of the downloaded transcript
transcriptFormatsrt, text, or timestamp

🤖 Add-on: Need additional YouTube data?

Pair this actor with ../youtube-channel-finder to discover channels by keyword or URL before you scrape their videos, ../youtube-comments-scraper-ai-sentiment-analytics to pull comment text with sentiment and spam scoring that this video-level actor doesn't collect, or ../youtube-transcript-scraper-merged-transcript-export for bulk, channel-wide transcript exports in a single run.

How does YouTube Scraper differ from the official YouTube API?

YouTube Data API v3 requires a registered Google Cloud project and an API key, and it runs against a default daily quota (commonly 10,000 units, where a single search.list call costs 100 units), while YouTube Scraper runs on Apify with no key and no per-call unit accounting.

FeatureYouTube Data API v3YouTube Scraper
SetupGoogle Cloud project + API key/OAuthRun directly on Apify, no key
Daily quotaDefault 10,000 units/day; search.list costs 100 unitsNo API-style unit quota; bounded by your maxVideos/maxShorts/maxStreams input
Engagement + channel data in one callSeparate videos.list / channels.list calls neededA single row returns view count, likes, comments, and channel info together
Transcriptscaptions.download needs the video owner's OAuth for most videosdownloadSubtitles fetches public captions directly, no ownership required
Channel/playlist bulk pullManual pagination across channels.list/playlistItems.listA channel or playlist URL in startUrls auto-expands to member videos
UI-style search filters (HD, 4K, HDR, 360°, Creative Commons, etc.)Not exposed as API parametersNative boolean filters matching YouTube's own search UI

Use the official API when you need access under Google's own terms and already have quota to spare. Use YouTube Scraper when you need channel/playlist bulk pulls, transcripts, or UI-style filters the API doesn't expose in one call.

How to use YouTube Scraper

YouTube Scraper runs on Apify Console like any other Actor — no separate signup or YouTube credentials needed.

  1. Open YouTube Scraper on Apify Console (or call it via the Apify API or CLI).
  2. Add one or more searchTerms keywords, or paste video, channel, playlist, or results-page URLs into startUrls — leave both empty and the Actor falls back to a default "Crawlee" search.
  3. Set maxVideos, maxShorts, and maxStreams, and toggle any filters (date, length, HD/4K/HDR, Creative Commons, etc.) you need.
  4. Turn on downloadSubtitles if you want transcripts, and pick a language and format.
  5. Start the run and open the Dataset tab to view, filter, and export results as JSON, CSV, Excel, or XML.

How to scale to bulk YouTube video extraction

searchTerms and startUrls are both arrays, so one run can process many keywords and many direct URLs together — each is handled independently and pushed to the same dataset. A single channel or playlist URL in startUrls also expands automatically to up to maxVideos + maxShorts member videos within that same run, so bulk channel or playlist extraction doesn't require looping separate runs per channel.

What can you do with YouTube video data?

  • A content strategist researching a niche uses viewCount and likes across search results for a keyword to identify which video angles are already performing well.
  • A channel-growth analyst uses numberOfSubscribers and date from repeated runs against the same channel URL to track upload cadence and audience growth over time.
  • A competitive researcher uses hashtags and descriptionLinks to see how competitor videos structure metadata and where they drive outbound traffic.
  • An accessibility or localization team uses subtitles and transcript (with downloadSubtitles on) to audit caption coverage and language availability across a channel.
  • An AI engineer builds a YouTube research assistant that indexes transcript and text into a vector store, then uses title, channelName, and date as retrieval metadata so a RAG agent can answer questions and cite the source video.

How does YouTube Scraper handle rate limits and blocking?

Every request starts with no proxy and automatically escalates to Apify datacenter proxy, then residential proxy, if YouTube responds with a block (HTTP 403/429) — the Actor retries up to 3 times on residential before giving up, and once a tier works it stays on that tier for the rest of the run. Separately, if a video page loads with HTTP 200 but YouTube served a "thin" player response (missing view count or duration — a known degraded-response pattern), the Actor retries that single video fetch over a fresh residential connection. Parsing failures are isolated per item: one malformed search result doesn't drop the videos already collected on that page, and an error on one search term or one direct URL is logged and skipped without stopping the rest of the run. Search pagination is capped at 50 pages per query as a safety limit against infinite loops.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
searchTermsNoarrayYouTube search keywords; the Actor runs a full scrape for each term.["Crawlee"]
maxVideosNointegerMax regular (non-Shorts, non-live) videos to scrape per search term. 0 skips long-form videos.10
maxShortsNointegerMax YouTube Shorts to collect per keyword. 0 skips Shorts.0
maxStreamsNointegerMax live/upcoming streams to scrape per search term. 0 ignores live content.0
startUrlsNoarrayDirect video/Shorts, channel, playlist, or results?search_query= URLs; channels/playlists expand to member videos.[]
downloadSubtitlesNobooleanDownload video subtitles/transcripts when available.false
saveSubtitlesToKvsNobooleanAlso store each transcript in the key-value store under transcript-<videoId>.false
subtitlesLanguageNostringPreferred caption/transcript language code."en"
preferAutoGeneratedNobooleanPrefer auto-generated captions over manually uploaded ones.false
subtitlesFormatNostringTranscript output format: srt, text, or timestamp."srt"
sortingOrderNostringSort the final dataset by relevance, date, viewCount, or rating (post-processing).""
dateFilterNostringYouTube's "Upload date" filter: hour, today, week, month, year.""
videoTypeFilterNostringvideo restricts search results to standard long-form videos only.""
lengthFilterNostringYouTube's length preset: short (<4 min), medium (4–20 min), long (>20 min).""
isHDNobooleanOnly include HD videos (720p or higher).false
hasCCNobooleanOnly include videos with at least one proper closed-caption track.false
isCreativeCommonsNobooleanOnly include videos marked Creative Commons licensed.false
is3DNobooleanOnly include stereoscopic 3D videos.false
isLiveNobooleanRestrict results to live or live-style content.false
isPurchasedNobooleanBest-effort filter for purchased/paid content.false
is4KNobooleanOnly include videos with at least one 2160p (4K) stream.false
is360NobooleanOnly include immersive 360° videos.false
hasLocationNobooleanOnly include videos with explicit location metadata.false
isHDRNobooleanOnly include High Dynamic Range (HDR) videos.false
isVR180NobooleanOnly include VR180 immersive videos.false
publishedAfterNostringOnly include videos published after this absolute date (YYYY-MM-DD).""
sortByNostringPost-processing sort field: date, viewCount, or likes.""
proxyConfigurationNoobjectStarting proxy setup; the Actor auto-escalates to datacenter then residential proxy on blocks.{"useApifyProxy": false}

Example input

{
"searchTerms": ["Crawlee", "web scraping tutorial"],
"maxVideos": 15,
"maxShorts": 5,
"maxStreams": 0,
"startUrls": ["https://www.youtube.com/@Crawlee"],
"downloadSubtitles": true,
"saveSubtitlesToKvs": false,
"subtitlesLanguage": "en",
"preferAutoGenerated": false,
"subtitlesFormat": "srt",
"sortingOrder": "viewCount",
"dateFilter": "month",
"videoTypeFilter": "",
"lengthFilter": "medium",
"isHD": true,
"hasCC": false,
"isCreativeCommons": false,
"is3D": false,
"isLive": false,
"isPurchased": false,
"is4K": false,
"is360": false,
"hasLocation": false,
"isHDR": false,
"isVR180": false,
"publishedAfter": "2025-01-01",
"sortBy": "viewCount",
"proxyConfiguration": { "useApifyProxy": false }
}

⬆️ Output

Each video, Short, or stream is pushed as one typed JSON row to the Apify dataset, with a consistent schema across runs. The default dataset view shows 24 summary columns, but every pushed row can carry up to 28 fields — including location and the three transcript fields — depending on your input. Results export as JSON, CSV, Excel, or XML from the Dataset tab or the Apify API. Billing uses Apify's Pay Per Event model: each row pushed to the dataset charges one row_result event, with no separate unbilled accounting rows mixed into the dataset.

Example output

{
"title": "Crawlee Tutorial: Build Your First Web Scraper in Node.js",
"type": "video",
"id": "aBcDeFgHiJk",
"url": "https://www.youtube.com/watch?v=aBcDeFgHiJk",
"thumbnailUrl": "https://i.ytimg.com/vi/aBcDeFgHiJk/hq720.jpg",
"viewCount": 48213,
"date": "2025-03-14T09:00:00.000Z",
"likes": 1872,
"location": null,
"channelName": "Crawlee",
"channelUrl": "https://www.youtube.com/channel/UCRK2h2WV5NgHmoO2HXsxSww",
"channelUsername": "Crawlee",
"channelId": "UCRK2h2WV5NgHmoO2HXsxSww",
"numberOfSubscribers": 12400,
"duration": "00:14:22",
"commentsCount": 96,
"commentsTurnedOff": false,
"text": "Learn how to build your first web scraper with Crawlee in this step-by-step tutorial...",
"descriptionLinks": [{ "url": "https://crawlee.dev", "text": "https://crawlee.dev" }],
"subtitles": ["en", "es"],
"order": 0,
"fromYTUrl": "https://www.youtube.com/results?search_query=Crawlee",
"hashtags": ["#webscraping", "#nodejs"],
"isCreativeCommons": false,
"isPurchased": false,
"transcript": "1\n00:00:00,000 --> 00:00:03,500\nWelcome back to another tutorial...",
"transcriptLanguage": "en",
"transcriptFormat": "srt"
}

How does it work?

YouTube Scraper sends requests through the impit HTTP client, which mimics real Chrome browser traffic instead of calling YouTube's official Data API. For search, it calls YouTube's own internal youtubei/v1/search endpoint and paginates through continuation tokens; for channels and playlists, it calls the internal /v1/browse endpoint; for per-video enrichment, it parses the public watch page's ytInitialData and ytInitialPlayerResponse payloads for likes, comments, subscriber counts, and captions. If YouTube blocks or degrades a response, requests automatically escalate through no proxy, then Apify datacenter proxy, then residential proxy. Only publicly reachable YouTube pages and endpoints are read — nothing requires sign-in. The output schema stays fixed regardless of changes to YouTube's page layout or internal payload structure.

Integrations

YouTube Scraper runs on Apify, so it works anywhere you can call an HTTP API or an Apify client library — no proprietary SDK required.

Calling YouTube Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("scraper-engine/youtube-scraper").call(run_input={
"searchTerms": ["Crawlee"],
"maxVideos": 15,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["viewCount"])

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

MCP integration for AI agents

YouTube Scraper is reachable through Apify's Actors MCP Server, which exposes Actors on Apify Store as callable tools for MCP-compatible clients such as Claude Desktop and Claude Code. Register it by connecting from this Actor's page in Apify Console, or by running npx @apify/actors-mcp-server configured with this Actor's store ID.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node (or the community Apify node) pointed at this Actor's run endpoint, with your Apify API token in the Authorization header. In Make, use the Apify app's "Run Actor and get dataset items" module and map searchTerms or startUrls from earlier scenario steps. In LangChain, call the same Apify API endpoint from a custom Tool, or load results with the community Apify dataset loader, so an agent can pull YouTube video data mid-conversation.

Scraping publicly available YouTube video and channel metadata is generally legal — it's the same data any logged-out visitor can view on youtube.com. YouTube Scraper returns only publicly visible data: no private videos, no sign-in-only content, and no individual comment text or commenter identities. Video and channel metadata here is largely business/content data (titles, view counts, channel names, descriptions), though a channel name or handle can identify an individual creator, so treat channel-identifying fields with the same care you would any personal data if you store them in bulk. This is not legal advice — consult legal counsel if your use case involves bulk storage of personal data or falls under YouTube's Terms of Service.

Frequently asked questions

What YouTube video fields does YouTube Scraper return?

title, viewCount, likes, duration, channelName, and numberOfSubscribers are among the 25+ fields returned per video — see What data can I extract with YouTube Scraper? above for the full list.

Does YouTube Scraper require a YouTube account or login?

No. Every request runs as an anonymous, logged-out session, so no YouTube account, cookies, or API key are needed to run this Actor.

How many videos can I extract in one run?

There's no fixed dataset cap — maxVideos, maxShorts, and maxStreams each accept up to 9999 per search term or URL, and you can combine multiple search terms and direct URLs in a single run.

What happens if a video is private, deleted, or age-restricted?

The Actor skips it rather than fabricating data. If the video page can't be fetched at all, that URL is logged as failed and produces no row; if the page loads but YouTube's own player data is thin or missing (common for restricted videos), the row falls back to whatever partial metadata is available and unavailable fields are left null.

Can I scrape multiple YouTube videos, channels, or playlists at once?

Yes. searchTerms and startUrls are both arrays — mix keyword searches with direct video, channel, playlist, and results-page URLs in the same run, and every match is pushed to the same dataset.

Does YouTube Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes. It's callable as a plain HTTP endpoint through the Apify API from any agent framework, and it's reachable through Apify's Actors MCP Server for MCP-compatible clients like Claude Desktop and Claude Code.

How does YouTube Scraper compare to building your own YouTube scraper?

It already handles the parts a self-built scraper has to maintain: proxy escalation when YouTube blocks a request, retrying degraded "thin" responses, and parsing YouTube's internal search and browse payloads, which change without notice. Building and maintaining that yourself means tracking YouTube's endpoint and payload changes on an ongoing basis instead of consuming a stable JSON schema.

Does YouTube Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across every run — no HTML to parse, no CSS selectors to write. Pass it directly into an LLM prompt, index it into a vector store, or feed it to an agent tool.

What happens when YouTube changes its layout or anti-bot system?

The Actor is maintained against YouTube's current search, browse, and watch-page payloads, and the output schema stays stable even when YouTube changes its internal structure, so downstream integrations don't need to change when the scrape logic is updated.

Can I use YouTube Scraper without managing proxies or browser infrastructure?

Yes. The Actor starts with no proxy and automatically escalates to Apify datacenter proxy and then residential proxy (with up to 3 retries) if YouTube blocks the request, so you don't need to configure or rotate proxies yourself unless you want to supply your own proxyConfiguration.

Which YouTube video fields work best for AI training data and RAG indexing?

For RAG, index transcript and text (the full description) as retrievable content, with title, channelName, and date as metadata for citations and filtering. For training or analytics data, viewCount, likes, commentsCount, and duration are typed numeric fields with consistent structure across every record.

ScraperWhat it extracts
YouTube Channel FinderChannel name, handle, ID, subscriber count, and description from a keyword or channel URL
YouTube Comments Scraper: AI Sentiment AnalyticsComment text with optional AI sentiment/toxicity scoring and spam heuristics
YouTube Transcript Scraper: Merged Transcript ExportBulk transcript discovery and export across a channel, playlist, or search
TikTok Trending Videos Scraper With Author ProfileTrending TikTok videos with author profile data
Instagram Reels ScraperInstagram Reels video metadata and engagement

Your feedback

Found a bug or missing a field in YouTube Scraper? Let us know through the Issues tab on this Actor's Apify Console page. Reports like this are what keep the field mappings accurate as YouTube's site changes.