YouTube Scraper
Pricing
from $5.00 / 1,000 search requests
YouTube Scraper
All-in-one YouTube scraper: search, channels, playlists, video URLs, and transcripts in a single run. Powered by TranscriptAPI.
Pricing
from $5.00 / 1,000 search requests
Rating
0.0
(0)
Developer
Andrej Šimunaj
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
$5/1K Requests — YouTube Scraper: Search, Channels, Playlists & Transcripts in One Run
Scrape YouTube at scale: search results, full channels, entire playlists, direct video URLs, and transcripts — all from a single actor. Pay per API call ($0.005), not per result. No YouTube API key, no actor-start fee, errors are free.
| ⚡ Sub-500 ms typical | 📊 15 M+ requests / month | 🛡️ Doesn't break when YouTube changes things | 🔌 Powered by TranscriptAPI.com |
|---|
A production-grade, multi-mode YouTube scraper for content research, AI/LLM training datasets, RAG pipelines, brand monitoring, SEO, market analysis, and any workflow that needs YouTube data + transcripts as clean structured JSON.
🚀 Why this YouTube scraper?
- 🎛️ All-in-one — search, channel uploads, playlists, direct video URLs, and transcripts in one actor. Mix any combination of inputs in a single run.
- 💸 Per-API-call pricing — pay $0.005 per backend request, not per result. A single search returns up to 20 results for one charge. A channel page returns up to 100 videos for one charge. Compare that to per-item billing elsewhere.
- ⚡ Sub-500 ms typical — backed by TranscriptAPI.com with median 49 ms latency, plus a small Apify networking hop.
- 📊 15 M+ requests / month — battle-tested in real production traffic, not a side project.
- 🛡️ Doesn't break when YouTube changes things — we ship through every YouTube backend change without dropping requests.
- 💸 No actor-start fee — we absorb the run cost.
- 🆓 Errors are free — failed transcripts, bad URLs, and unreachable channels never bill.
- 🔑 No YouTube API key required — bring a URL or a search query, we bring the data.
- 📦 Bulk-friendly — paste 1 query or 1,000 URLs. Results land in an Apify Dataset, ready for JSON, CSV, Excel, or your warehouse.
- 🧹 Clean structured output — unified per-item schema across every input mode, so downstream parsing stays simple.
- 📝 Transcripts as a first-class feature — JSON segments, plain text, SRT, or WebVTT. Toggle on/off per run.
- 🔌 Plug-and-play — runnable from Python, Node.js, REST API, n8n, Make, Zapier, MCP, LangChain, LlamaIndex, or any webhook.
💰 Pricing
| Event | Price |
|---|---|
search | $0.005 (per search request — returns up to ~20 results per call; paginates if you ask for more) |
videos-page | $0.005 (per page when listing videos from a channel or playlist — returns up to ~100 videos per call) |
transcript-fetched | $0.005 (per successfully retrieved transcript) |
| Actor start | Free (we absorb it) |
| Errors / failed videos | Free |
How much does a typical run cost? A search for 100 videos = 5×
searchevents ≈ $0.025. Pulling 300 videos from one channel = 3×videos-pageevents ≈ $0.015. Adding transcripts to all 300 = +$1.50. Discovery without transcripts is intentionally cheap.
Per-API-call pricing. No subscription, no monthly minimum, no hidden fees. Failed requests never bill.
⚡ Quick Start
- Click Try for free at the top of this page.
- Drop YouTube search terms into
searchQueries, paste channel / playlist / video URLs intostartUrls, or both. - Set
downloadSubtitles: trueif you also want transcripts. - Run. Results land in the actor's default Dataset — export to JSON, CSV, Excel, XML, or HTML.
{"searchQueries": ["ai productivity tips", "vibe coding"],"startUrls": ["https://www.youtube.com/@TED","https://www.youtube.com/playlist?list=PLOU2XLYxmsILqUKy5sN-2NjjkUtX_kxnu","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"searchType": "video","maxResults": 50,"downloadSubtitles": true,"subtitlesFormat": "json","includeTimestamps": true}
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | [] | Free-text YouTube searches. Each query is fetched separately and capped by maxResults. |
startUrls | string[] | [] | Mix of video URLs, channel URLs (/channel/UC…, /@handle, /c/…, /user/…), or playlist URLs (?list=…). Auto-detected. |
searchType | "video" | "channel" | "video" | What searchQueries should return. |
maxResults | integer | 20 | Per-search-query, per-channel, per-playlist cap. |
downloadSubtitles | boolean | false | When true, fetches a transcript for every video discovered and merges it onto the same item. |
subtitlesFormat | "json" | "text" | "srt" | "vtt" | "json" | Transcript output format. |
includeTimestamps | boolean | true | Per-segment timestamps on json / text transcripts. |
subtitlesLanguage | string | "en" | Caption language preference. |
includeVideoMetadata | boolean | true | Include title / channel / thumbnail on transcript items. |
saveSubsToKVS | boolean | false | Also write each transcript to the default Key-Value Store as transcript-<videoId>. |
At least one of searchQueries or startUrls must be provided.
📤 Output — unified per-item shape
Each result is one row in the default Dataset. The source field tells you where it came from: search, channel, channelLatest, playlist, or directUrl.
Video result (from search):
{"source": "search","input": "claude code tutorial","order": 0,"type": "video","videoId": "ujHXnlSVheI","title": "Claude Code Tutorial: Beginner to Advanced in 20 Minutes","url": "https://www.youtube.com/watch?v=ujHXnlSVheI","channelId": "UC3i3qKQ5aR_guegQj5bhOMw","channelTitle": "Zinho Automates","channelHandle": "@zinhoautomates","channelUrl": "https://www.youtube.com/channel/UC3i3qKQ5aR_guegQj5bhOMw","lengthText": "19:24","viewCountText": "48,427 views","publishedTimeText": "5 days ago","hasCaptions": true,"thumbnails": [{ "url": "https://i.ytimg.com/...", "width": 1280, "height": 720 }]}
Video result with transcript attached (downloadSubtitles: true):
{"source": "channel","input": "https://www.youtube.com/@TED","order": 0,"type": "video","videoId": "aDGaUWkioqk","title": "...","channelTitle": "TED","channelUrl": "https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug","lengthText": "1:32","transcript": [{ "text": "What does a warming planet mean for the foods you love?", "start": 0.12, "duration": 3.4 },{ "text": "...", "start": 3.6, "duration": 2.9 }],"transcriptLanguage": "en"}
Channel result (searchType: "channel"):
{"source": "search","input": "TED","order": 0,"type": "channel","channelId": "UCAuUUnT6oDeKwE6v1NGQxug","title": "TED","handle": "@TED","url": "https://www.youtube.com/@TED","description": "The TED Talks channel features the best talks and performances from the TED Conference...","subscriberCount": "27.4M subscribers","verified": true,"rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCAuUUnT6oDeKwE6v1NGQxug","thumbnails": [{ "url": "...", "width": 88, "height": 88 }]}
Transcript failure attached to its video (free of charge):
{"source": "channel","input": "https://www.youtube.com/@SomeChannel","order": 4,"type": "video","videoId": "BADID000000","title": "...","transcript_error": { "status": 404, "detail": "No transcript available" }}
Discovery-layer failures (bad URL, unreachable channel, dead playlist) land in a separate errors dataset — never billed.
🎯 Use Cases
- AI / LLM training data — bulk-collect transcripts from any niche.
- RAG knowledge bases — index educational channels, lectures, podcasts.
- Content research & SEO — extract topics, keywords, and themes from competitor channels.
- Brand monitoring — pipe transcripts into sentiment / NLP analysis.
- Market & competitive analysis — track entire channels or topics over time.
- Podcast & lecture transcription — turn long-form video libraries into searchable text.
- Repurpose video into content — blog posts, newsletters, X/LinkedIn threads, Shorts captions, summaries.
- Academic research — corpus building for linguistic, media, or political analysis.
- Accessibility — generate plain-text alternatives for video content.
🌐 Supported Input Formats
| Mode | Examples |
|---|---|
| Video URL | https://www.youtube.com/watch?v=dQw4w9WgXcQhttps://youtu.be/dQw4w9WgXcQhttps://www.youtube.com/shorts/dQw4w9WgXcQhttps://www.youtube.com/embed/dQw4w9WgXcQdQw4w9WgXcQ |
| Channel URL | https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxughttps://www.youtube.com/@TEDhttps://www.youtube.com/c/TEDhttps://www.youtube.com/user/TEDtalksDirector |
| Playlist URL | https://www.youtube.com/playlist?list=PL…Any URL containing ?list=…Bare playlist IDs starting with PL, UU, LL, FL, OL, RD |
| Search query | Any free-text string in searchQueries |
🔌 Integrations
Run from anywhere via Apify's native integrations:
- 🐍 Python —
apify-clientSDK - 🟢 Node.js / JavaScript —
apify-clientSDK - 🔗 REST API — POST to
/v2/acts/.../runsand read the Dataset - 🧩 n8n — official Apify nodes
- ⚙️ Make (Integromat) — official Apify modules
- ⚡ Zapier — official Apify Zap actions
- 🪝 Webhooks — fire on run finish, success, or failure
- 🤖 MCP / Claude Desktop / Cursor — expose this actor as a tool to your AI agents via the Apify MCP server
- 🧱 LangChain / LlamaIndex — drop the Dataset directly into a RAG pipeline
❓ FAQ
Can I mix search queries with channel and playlist URLs in one run?
Yes — that's the whole point. Drop any combination into searchQueries and startUrls; we auto-detect each URL and dispatch it correctly.
How does pricing work?
Three pay-per-event meters, all priced at $0.005: search (per search request — returns up to ~20 results per call), videos-page (per page when listing videos from a channel or playlist — up to ~100 videos per call), and transcript-fetched (per successful transcript). Failed requests and bad URLs are free. No actor-start fee, no subscription, no monthly minimum. See the Pricing section for typical run costs.
Do I need a YouTube API key? No. Bring URLs or search terms; we handle everything.
How fast is it? Median upstream latency 49 ms (TranscriptAPI.com), so end-to-end you typically see results in well under 500 ms per call. Long channels and playlists are paginated automatically.
Which transcript formats are supported?
JSON (timed segments), plain text, SRT, and WebVTT. Pick via subtitlesFormat.
What if a video has no captions?
The transcript fetch attaches a transcript_error field to the same item — the discovery data is still delivered, and the failed transcript is not billed.
Can I scrape only the latest N videos from a channel?
Yes. Set maxResults to your cap. When maxResults ≤ 15, we use a richer endpoint that gives exact publish dates and full descriptions.
Can I run an unattended schedule? Yes — combine this actor with Apify's built-in schedules and webhooks. Many users poll new uploads daily.
Is this legal? This actor only reads metadata and captions that YouTube makes public to any visitor. It does not bypass age gates, scrape signed-in surfaces, or collect personal user data. Use the output in compliance with copyright law, YouTube ToS for your jurisdiction, GDPR / CCPA, and any licensing your downstream product requires.
Where do results go?
Default Apify Dataset. Discovery failures go to a separate errors named dataset. Both export to JSON, CSV, Excel, XML, HTML, or RSS.
What if I need higher volume / parallelism? Run the actor multiple times in parallel — Apify schedules and bills each run independently. Reach out via the Issues tab for specific scale needs.
🛡️ Legal & Ethical Scraping
This actor only accesses metadata and captions that YouTube makes public to any visitor of a video, channel, or playlist page. It does not:
- bypass age restrictions, private uploads, or unlisted-link gates,
- collect personally identifiable user data,
- scrape comments, watch history, or any signed-in surface.
You are responsible for using the output in compliance with copyright law, YouTube's Terms of Service for your jurisdiction, GDPR / CCPA, and any platform-specific licensing your downstream product requires.
🐛 Support
- 🐞 Issues / feature requests — use the Issues tab at the top of this page.
- 📬 Response time — within 1 business day.
- 💬 Need a custom contract? Reach out via the Issues tab.