Youtube Channel Scraper
Pricing
from $0.45 / 1,000 direct video results
Youtube Channel Scraper
Scrape YouTube channels or keyword searches for video URLs, titles, metrics, transcripts, channel profiles, social links, descriptions and more. Fast, low-cost YouTube data extraction for monitoring, influencer research, SEO, and LLM workflows.
Pricing
from $0.45 / 1,000 direct video results
Rating
4.3
(8)
Developer
Newbs
Maintained by CommunityActor stats
82
Bookmarked
3.1K
Total users
57
Monthly active users
a day ago
Last modified
Categories
Share
Scrape YouTube channels or YouTube search results and export clean video data from Apify. This actor collects video URLs, titles, thumbnails, descriptions, views, likes, comments, publish dates, duration, channel profile data, channel social links, and transcripts when YouTube exposes caption tracks.
It is built for teams that need reliable YouTube data without spending minutes clicking through channels manually.
What You Can Extract
- Latest videos from one or many YouTube channels
- Videos from keyword search results
- Video metadata: title, URL, ID, thumbnail, description, publish date, duration
- Engagement metrics: views, likes, comments
- Channel metadata: handle, subscriber count, profile image, banner image, total videos, total channel views, verification status
- Channel information and clean outbound links from the About section, surfaced as
channelDescription,channelLinks, and table-friendlychannelLinksText - Video transcripts from available YouTube captions, plus
transcriptStatusto explain missing transcripts - Clean JSON output ready for CSV, Excel, API, Make, Zapier, dashboards, or internal enrichment workflows
Common Use Cases
- Monitor competitor YouTube channels
- Build influencer and creator lead lists
- Track brand channels and campaign performance
- Collect video metadata for SEO or content research
- Extract transcripts for summarization, search, classification, or LLM pipelines
- Find creator websites, social profiles, storefronts, and lead/contact pages from channel About links
- Feed YouTube data into CRMs, spreadsheets, BI tools, and automation workflows
Why Use This Actor
- Optimized for speed: channel and video details can run in parallel.
- Balanced proxy use:
proxyMode: "auto"keeps search/list collection and video detail scraping direct first, then uses proxy-backed HTTP only for hard failures or incomplete core metadata. - Detail-only proxy control:
videoDetailProxyStrategy: "proxyFirst"is available for advanced tests when direct video-detail requests are unreliable, while keeping channel/search collection direct. - Better transcript coverage: direct caption extraction is combined with Innertube caption-track discovery, adaptive proxy recovery when batch coverage is poor, and optional aggressive residential fallback for maximum transcript attempts.
- Clear transcript diagnostics:
transcriptStatusdistinguishes recovered transcripts from no exposed caption tracks, caption fetch failures, and detail fetch failures. - More resilient runs: incomplete detail rows are retried directly before proxy fallback, and one bad channel URL no longer stops valid sources from returning results.
- Larger-run safety: completed rows stream to the dataset during the run instead of waiting for all videos to finish.
- Cleaner channel lead data: empty social placeholders are removed, and About links are visible in priority dataset views.
- Integration ready: structured input schema, dataset schema, and output schema make results easier to use through the Apify UI, API, MCP, Make, Zapier, and scheduled runs.
Historical Apify benchmark on build 0.0.302, using 102 normal videos from 6 YouTube channels with standard transcript mode:
- 102/102 rows succeeded.
- 62/102 transcripts were recovered.
- 102/102 rows included
publishedAt, channel About data, and channel links. - 0 Shorts, 0 duplicate URLs, and 0 inflated like-count issues were found.
- Runtime was about 135 seconds, about 45 results/minute.
- Apify platform usage was about $0.17 for the run, about $1.69 per 1,000 results.
Actual runtime and cost depend on number of channels, number of videos, selected proxy mode, transcript availability, and YouTube response speed.
Result-based billing
The Pricing tab shows the currently effective price for your run. Legacy rental runs retain their original billing terms.
For pay-per-event runs, each successful video is charged once, using one of these two events:
| Result | Event | Price per 1,000 |
|---|---|---|
| Direct video extraction | video-result | $0.50 |
| Proxy-assisted video extraction | video-result-proxy | $8.00 |
The proxy-assisted price replaces the direct price; the two prices are never added together for the same video. A video uses the proxy-assisted price when its video requests or the source collection that produced it actually use a proxy. This also covers listing-only results collected through proxy. proxyUsed records the classification, sourceProxyUsed identifies proxy-backed source collection, and proxyRequestCount counts only the per-video proxy attempts. Shared collection requests are not duplicated in that count. Requests include recovery attempts even when no additional fields are recovered.
Use proxyMode: "never" for direct extraction at the lower rate. Auto mode tries direct requests first and can use paid proxy recovery for missing details or captions. Available metadata, channel information, links and captions are included. Captions are best effort: an otherwise successful video remains chargeable when captions are unavailable, including when attempted proxy recovery cannot obtain them. Partial results, failed video rows and Shorts-only guidance are free.
Per-video extraction and all its retries share a 45-second active request budget, 60 HTTP requests and 12 proxy requests. A result retains the data obtained before these limits. Captions are downloaded in one usable format rather than three parallel formats. Default memory is 1,024 MB, with a supported range of 512–1,024 MB.
Collection, detail extraction, and recovery use bounded worker queues and overlap when work is ready. Collection pauses when the detail queue is full. Completed streamed rows are released from memory unless debug diagnostics are enabled. Large watch-page bodies are released before follow-up requests. Deferred caption rows beyond the in-memory buffer use temporary disk storage, preserving their fields and recovery eligibility. Standard-mode recovery uses a bounded early sample and a run-wide retry cap. Transcript-focused recovery starts for every eligible missing transcript as soon as its details are ready.
Results are saved and charged as they complete, including individual adaptive retries; one slow caption retry does not hold back other finished retries. Pay-per-event runs always stream results, including when an older saved input disables streaming. Proxy work is disabled when the remaining event budget cannot cover another proxy-assisted result; the run stops when its remaining budget cannot cover the next result. Set the maximum run charge before starting. All run platform usage is included in pay-per-event pricing, with no separate rental or start fee. Post-run dataset access follows Apify's normal storage pricing.
Basic results and full details
With needVideoDetails: false, the actor collects listing information without fetching each video's details. Use the Basic results dataset view to see the title, URL, thumbnail, channel, and available listing metrics. Each row includes collectionMode: "basic", detailsStatus: "not_requested", and transcriptStatus: "not_requested". Details-only fields remain present as null for compatibility; a null in this mode does not mean detail extraction failed.
With full details enabled, collectionMode is full. detailsStatus is collected, partial, or failed. collected means core video details were recovered; optional metrics and captions can still be unavailable. transcriptStatus explains caption availability independently. Advertising links and sponsored blocks are excluded before counting results. Untitled basic rows are partial and free.
Recovery limits and failure diagnostics
Proxy recovery has a shared allowance across collection, videos, and retries: initially 48 requests and 16 MB of observed transfer. Each saved, billable proxy result adds 12 requests and 0.6 MB. At most two proxy requests run together; an individual response is limited to 8 MB. Eight consecutive unsuccessful proxy items stop further proxy work. Successful direct extraction can continue, and completed results are retained. The run summary records the stop reason. Transfer measurements are application safeguards, not exact Apify billing measurements; in-flight network chunks may arrive before cancellation takes effect.
Full-detail concurrency defaults to a maximum of 20 videos. Lower input values are respected. A memory guard reduces admission under pressure, lets active work finish, and restores concurrency when memory recovers. At 1,024 MB, normal workloads have more headroom to retain full concurrency; 512 MB runs may throttle sooner. The shared proxy limit remains two concurrent requests. Adaptive caption recovery defaults to eight jobs and first tries lightweight player requests. Increasing memory increases compute consumption per second; total cost also depends on runtime and proxy usage.
After a server migration or restart, the Actor reads saved dataset IDs before scraping. Saved videos are skipped during extraction and writing, including partial rows, so they are not charged again. Proxy and caption retry limits are checkpointed periodically and during migration, and restored from the newest saved checkpoint or progress snapshot. Graceful shutdown finishes accepted writes and their charges before restarting. Pagination may be reread to find unfinished videos, but saved videos are not re-extracted. Use a new run for a fresh dataset.
Open Run summary and source diagnostics (OUTPUT) for the last processing stage, memory usage, saved and billed counts, source errors, proxy counters, and sanitized error details. timeToFirstResultSeconds measures extraction start to the first successful dataset write; phaseTimingsMs reports overall pipeline time. pipelineStageTimingsMs reports activity in collection, details, recovery, and saving; these stages overlap, so their times must not be added together. pipeline includes worker/queue limits, peak queue sizes, and retained result counts. These exclude container startup, so Apify's total runtime is longer. Progress is saved approximately every 15 seconds and at stage changes. Unexpected handled failures include a stack trace in the log and summary. A forced process kill cannot save a final exception, but the last progress snapshot remains available.
Input
For most runs, fill in just four fields:
- YouTube channels, videos, or search terms — your sources.
- Videos per channel or search — how many videos to collect from each source.
- What to collect — choose Video details + transcripts or Basic video data.
- Search by keyword — enable only when entries should be searched rather than treated as channels or videos.
Video details + transcripts
Recommended when captions matter. The actor collects full details, tries captions directly, then attempts lightweight residential-proxy recovery for each eligible missing transcript. There is no automatic 80-video cap in this mode. Spending, proxy transfer, repeated unsuccessful recovery, and per-video work limits still apply. Every missing transcript has a readable transcriptMessage.
{"channel": ["https://www.youtube.com/@adidas/videos"],"numberOfResults": 10,"scrapeMode": "transcripts"}
Successful direct results cost $0.50 per 1,000; proxy-assisted results cost $8 per 1,000 instead. Paid-plan rates are $0.45 and $7.50 respectively. A successful video can use the proxy-assisted price even when captions remain unavailable.
Basic video data
Fast listing data with no transcripts, full-detail requests, or proxy. Results include the title, URL, thumbnail, channel, and metrics exposed in the listing. Successful results use the direct price.
{"channel": ["running shoes", "summer fashion campaign"],"keywords": true,"numberOfResults": 25,"scrapeMode": "basic"}
Advanced settings and existing integrations
Search limits, language, and concurrency are in an optional advanced section. The presets manage proxy and transcript options automatically, overriding conflicting older fields. Select Use advanced settings (scrapeMode: "custom") to control them yourself.
Existing saved tasks and API inputs without scrapeMode keep their previous behavior. The recommended preset is prefilled for new form inputs; API inputs that omit it default to custom behavior and retain their existing settings. Legacy JSON fields remain supported, including the hidden compatibility switches.
| Custom setting | Meaning |
|---|---|
needVideoDetails | false collects listing data; true collects full details and available captions. |
proxyMode | auto tries direct first, never disables all proxy work, always proxies collection and details. |
transcriptMode | standard uses limited adaptive recovery; aggressive attempts every eligible missing transcript within safeguards. |
adaptiveTranscriptMaxRetries | Standard-mode retry cap. Omit for automatic behavior, up to 80 retries on large runs; set 0 to disable Standard-mode recovery. It does not cap Aggressive mode. |
videoDetailProxyStrategy | Keep auto unless troubleshooting. proxyFirst starts detail requests through proxy. |
proxyConfiguration | Custom proxy configuration, used in custom mode. |
maxVideosPerChannel | Optional per-channel limit within each keyword search. |
localeHl / localeGl | YouTube language and country hints. |
maxVideoDetailConcurrency | Default 20; temporarily reduced under memory pressure. |
Output
The actor stores results in the default Apify dataset. You can download the data as JSON, CSV, Excel, XML, RSS, or HTML from the Apify Console, or consume it through the Dataset API.
Example output item:
{"title": "Chasing Sub 2: The Journey of Sabastian Sawe's Historic 1:59:30 Marathon","transcript": "Full transcript text when captions are available...","transcriptStatus": "available","transcriptSource": "watch_html","transcriptLanguage": "en","author": "@adidas","videoUrl": "https://www.youtube.com/watch?v=qRr0lmYvp5g","coverImage": "https://i.ytimg.com/vi/qRr0lmYvp5g/hqdefault.jpg","subscriberCount": 2330000,"likeCount": 5400,"description": "Video description text...","viewCount": 103403,"commentCount": 201,"publishedAt": "2026-04-30T00:00:00.000Z","duration": "00:12:30","id": "qRr0lmYvp5g","amountOfVideos": 972,"profilePicture": "https://yt3.googleusercontent.com/...","profileBanner": "https://yt3.googleusercontent.com/...","channelDescription": "Through sport, we have the power to change lives.","channelLinks": {"website": "https://www.adidas.com/","Instagram": "https://instagram.com/adidas"},"channelLinksText": "website: https://www.adidas.com/\nInstagram: https://instagram.com/adidas","channelInfo": {"channelDescription": "Through sport, we have the power to change lives.","link": {"website": "https://www.adidas.com/","Instagram": "https://instagram.com/adidas"},"additionalInfo": {"subscribers": "2.33M subscribers","videos": "972 videos","views": "481,647,084 views"}},"channelTotalViews": 481647084,"isChannelVerified": true,"commentsTurnedOff": false,"scrapingStatus": "success"}
The dataset normally contains video records only. If a channel contains Shorts but no normal videos, the actor returns one actionable guidance row with scrapingStatus: "shorts_only", the original channel URL, and a direct link to the separate YouTube Shorts Scraper. Source errors and pagination warnings are saved in the key-value store OUTPUT record, outside video dataset exports. Failed pagination preserves the videos already collected. If every source fails or every detail result fails, the run fails explicitly; valid empty channels and Shorts-only guidance remain normal outcomes.
Example Shorts-only guidance row:
{"title": "This channel contains Shorts only - use the YouTube Shorts Scraper","description": "No normal YouTube videos were found for this channel. Use https://apify.com/newbs/youtube-shorts to scrape its Shorts.","channelUrl": "https://www.youtube.com/@example","channelLinks": {"YouTube Shorts Scraper": "https://apify.com/newbs/youtube-shorts"},"channelLinksText": "YouTube Shorts Scraper: https://apify.com/newbs/youtube-shorts","scrapingStatus": "shorts_only"}
Channel About Links
When YouTube exposes channel About data, the actor returns the description and outbound links in two easy-to-use top-level fields:
channelDescription: the channel About description.channelLinks: only real links found on the channel, such as websites, Instagram, Facebook, TikTok, X/Twitter, stores, courses, or custom links. Empty placeholders are omitted.channelLinksText: the same links flattened into readablelabel: URLlines so Apify Overview, CSV, and spreadsheet exports show the URLs directly.
The full nested About object is still available as channelInfo for backwards compatibility. The Overview view prioritizes channelDescription and channelLinksText so users can see the useful links immediately. The Channel Profile view keeps both the readable text and the structured channelLinks object.
Transcript Behavior
The recommended Video details + transcripts preset tries direct captions first and then lightweight player requests through residential proxy. A full watch page is a fallback when those requests do not recover captions. Recovery overlaps collection and saves each completed video promptly. Unlike custom Standard mode, this mode does not limit recovery to an 80-video sample.
No scraper can guarantee captions that YouTube does not expose. The actor retains useful video metadata and returns a clear explanation instead of failing the entire run or inventing transcript text.
Use transcriptStatus to understand why:
available: a transcript was recovered.no_caption_tracks: the sources checked on this run did not expose tracks. This does not prove the video has no captions; availability can differ by request route or session.caption_fetch_failed: caption tracks were found, but YouTube did not return usable caption text.detail_fetch_failed: the video detail page itself could not be read.not_requested: full video details/transcripts were disabled.
transcriptMessage gives a readable explanation. transcriptRecoveryStatus gives its machine-readable category:
recovered/not_needed: recovered by adaptive recovery / already available before adaptive recovery.attempted_no_transcript: a retry completed without usable caption text.spending_limit: the remaining customer spending limit cannot cover a proxy-assisted result.proxy_limit,video_limit, orretry_limit: the shared proxy allowance, per-video work allowance, or run retry cap prevented further attempts.no_recovery_yield: eight consecutive completed adaptive retries returned no transcript, so further adaptive attempts stopped.coverage_sufficient/not_selected: no further retry was selected under the coverage and sampling policy.disabled/not_requested: adaptive recovery was disabled / full details were disabled.detail_unavailable: the video details could not be read, so adaptive caption recovery was not attempted.
Completed rows are saved when recovery stops. OUTPUT.transcriptRecovery records available and missing transcript counts, coverage percentage, pending and completed recovery, the first-transcript time, and any recovery stop reason. No mode guarantees every video has retrievable captions. A successful metadata result remains billable even when its transcript is unavailable.
Speed And Cost Tips
- Choose Video details + transcripts when captions matter; set the run's maximum charge before starting.
- Choose Basic video data for fast, low-cost listing results without captions.
- Leave concurrency at its default unless troubleshooting throttling.
- For creator discovery, set Max videos per channel to 1 in advanced search options.
- A missing transcript does not mean a failed run. Read
transcriptMessageto distinguish unavailable captions from a work or spending limit.
Integrations
This actor works with standard Apify platform features:
- Dataset export in JSON, CSV, Excel, XML, RSS, and HTML
- Apify API and API clients
- Scheduled runs for channel monitoring
- Webhooks after every run
- Make, Zapier, and other no-code automation tools
- Actor chaining and MCP/AI-agent workflows through the output schema
FAQ
Can I scrape multiple channels in one run?
Yes. Add multiple handles or URLs to the channel array. The actor processes channels concurrently based on maxChannelConcurrency.
Can I search by keyword instead of channel?
Yes. Put search terms in channel and set keywords to true.
If you leave keywords disabled, clear multi-word phrases such as history documentary are automatically treated as searches. The actor records KEYWORDS_AUTO_DETECTED warnings in the log and OUTPUT.inputWarnings. This also works in a mixed list of search phrases and channel URLs; keyword channel limits apply to the detected searches. For a single-word query such as science, enable keywords explicitly. Use a handle or URL when you want one specific channel. Malformed URLs are not converted into searches, and actual request, extraction, or storage failures still appear as errors.
Why did a channel return zero videos?
This actor returns normal YouTube videos only. If a channel publishes only Shorts, YouTube may redirect its /videos URL to the Home or Shorts tab. The actor returns one guidance row linking directly to the separate YouTube Shorts Scraper, and the final run status also explains why no normal videos were found.
Why is a transcript missing?
Read transcriptMessage first. It distinguishes work or spending limits from attempted recovery without usable captions. YouTube does not expose captions for every video; captions can be disabled or restricted. The actor returns transcript: null instead of fabricating data.
Why are comments sometimes null?
Some videos have comments disabled or hidden. The actor returns commentsTurnedOff when it can detect that state.
What proxy mode should I use?
The two main presets choose proxy behavior for you. Video details + transcripts uses direct-first extraction with residential recovery. Basic video data never uses a proxy. Choose Use advanced settings only when you need a custom configuration.
Related Actors
Responsible Use
This actor extracts publicly available YouTube data. You are responsible for using the data in compliance with applicable laws, YouTube terms, privacy rules, and your own internal policies. Do not use scraped data for spam, harassment, or unlawful profiling.
Local verification
Run npm test for deterministic channel parsing, source recovery, pagination, Actor lifecycle, and billing tests. Run npm run smoke:channels for six bounded live checks using temporary local storage and no proxy: channel IDs and About URLs, full details, 35-video pagination, keyword search, a direct video, and invalid input. The command prints the evidence directory and validates saved dataset rows and the OUTPUT summary.
Channel IDs resolve directly to /channel/UC.../videos. Search recovery requires an exact channel identity match; popularity and similar names cannot substitute another channel. Channel About, Home, and Shorts-tab URLs normalize to regular Videos; /streams remains supported. Direct Shorts URLs belong in the separate Shorts Actor.
maxContinuationPages: 0 disables pagination. adaptiveTranscriptMaxRetries: 0 disables Standard-mode adaptive transcript retries. In custom mode, proxyConfiguration: {"useApifyProxy": false} disables that proxy configuration unless custom proxy URLs are supplied; use proxyMode: "never" to disable all proxy work. Proxy setup happens only when a request needs it.