YouTube Video Scraper - Transcript & Comments
Pricing
from $5.00 / 1,000 video scrapeds
YouTube Video Scraper - Transcript & Comments
Scrape any YouTube link for full metadata, transcript with timestamps, comments with replies and channel data, all in one call. Need a whole channel? Use the Channel Scraper. Need keyword rankings? Use the Search Scraper.
Pricing
from $5.00 / 1,000 video scrapeds
Rating
0.0
(0)
Developer
Tubelens
Maintained by CommunityActor stats
0
Bookmarked
41
Total users
11
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube video scraper - metadata, transcripts, comments & channel data
Paste any YouTube link and get the whole picture back in one record: full video metadata, the transcript with timestamps, comments with their replies, and the channel behind it.
From $5 per 1,000 videos. No per-run fee. No API key, no login.
Accepts watch links, youtu.be links, Shorts, embeds, and bare video IDs.
Why this scraper?
- 🎯 Four data types, one record: no stitching results from separate scrapers together.
- 🎚️ Pay for what you switch on: turn off transcripts, comments or channel data and the cost drops with them.
- ⚡ Fast: 3 to 5 seconds per video bundle, roughly 60 videos a minute on default memory.
- 🈯 Transcripts in any published language, falling back to auto-generated English when your pick isn't available.
- 💬 Comments include reply threads, sorted by top or newest, up to 5,000 per video.
- 🚫 Broken videos don't bill you: private, deleted, age-gated and unplayable links come back with an
errorfield and no charge.
What data can you extract from a YouTube video?
| Field | Type | Description |
|---|---|---|
videoId, url, title, description | string | Core identifiers and text |
viewCount, likeCount, commentCount | number | Public engagement counters |
durationSeconds, publishedAt, uploadDate | number, ISO date | Duration and publish timestamps |
category, tags, thumbnails | string, string[], object[] | YouTube category, creator tags, full-resolution thumbnail URLs |
isLive, isAgeRestricted, isPrivate | boolean | Video status flags |
transcript.text, transcript.segments | string, object[] | Full transcript plus per-segment startMs, durationMs, text |
transcript.language, transcript.isAutoGenerated | string, boolean | Caption language, and auto vs manual captions |
comments[].text, comments[].author, comments[].likeCount | string, string, number | Comment body, author handle, like count |
comments[].replies[] | object[] | Nested replies, same shape as top-level comments |
channel.name, channel.handle, channel.subscriberCount | string, string, number | Channel name, @handle, subscriber count |
channel.country, channel.joinedDate, channel.totalViews | string, string, number | Country, join date, lifetime views |
channel.videoCount, channel.keywords | number, string | Public video count and channel keywords |
channel.externalLinks[] | object[] | Creator's external URLs, with the real destination already resolved |
Extract YouTube transcripts with timestamps
Set includeTranscript: true to return the full transcript plus per-segment timestamps in milliseconds. Each segment carries startMs, durationMs and text, which makes the output ready for video chaptering, subtitle rebuilds, LLM training data, or full-text search inside video content.
The scraper tries your transcriptLanguage first (en, es, pt, and so on), then auto-generated English, then the first available track. Manual and auto-generated captions both work. Videos with captions disabled, live streams mid-broadcast, and unaired premieres return transcript: null at no charge: expect roughly 10 to 15% of arbitrary videos to have no transcript available.
Transcript is a separate billable event at $0.005 per video, so switch it off on runs that only need metadata.
Scrape YouTube comments and replies
Set includeComments: true to pull top-level comments and their nested replies. Control volume with maxCommentsPerVideo (default 100, up to 5,000) and ordering with commentSort: "top" or commentSort: "newest".
Each comment returns text, author, authorHandle, authorChannelId, likeCount, publishedTimeText, replyCount, isPinned, isHearted, isCreator, plus a replies[] array with the same shape. No YouTube Data API quota applies, so comment volume is limited only by your Apify budget.
Comments bill at $0.0005 each, replies included. A video with 100 comments costs $0.05 in comment fees.
Get YouTube channel data
Set includeChannel: true to attach channel metadata to every video record: id, name, handle, url, subscriberCount, videoCount, description, country, joinedDate, totalViews, keywords, and an externalLinks[] array carrying each link's title and its real destination URL.
Channel is a separate billable event at $0.003, charged once per video where the channel block is returned.
How to scrape YouTube videos, transcripts, comments and channel data
- Create a free Apify account. Takes 30 seconds, no card needed.
- Open YouTube Video Scraper in the Apify Console.
- Paste the video URLs you want into the input, any format, one per line.
- Switch off any part you don't need (transcript, comments, channel) to cut cost.
- Click Start. Runs finish in 3 to 5 seconds per video bundle.
- Export as JSON, CSV or Excel, or pull the dataset over the Apify API.
Or drive it from the command line:
curl -X POST "https://api.apify.com/v2/acts/tubelens~youtube-video-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'
From Python, with pip install apify-client:
from apify_client import ApifyClientclient = ApifyClient("APIFY_TOKEN")run = client.actor("tubelens/youtube-video-scraper").call(run_input={"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"includeTranscript": True,"maxCommentsPerVideo": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["viewCount"])
Input
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/9bZkp7q19f0","dQw4w9WgXcQ"],"includeMetadata": true,"includeChannel": true,"includeTranscript": true,"transcriptLanguage": "en","includeComments": true,"maxCommentsPerVideo": 100,"commentSort": "top"}
Set maxCommentsPerVideo to 0 to skip comments, or switch off any include flag to trim the bill.
Output
One record per video. Each block appears only when you asked for it.
{"videoId": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","publishedAt": "2009-10-24T23:57:33-07:00","uploadDate": "2009-10-25","durationSeconds": 213,"viewCount": 1796657717,"likeCount": 19278321,"category": "Music","tags": ["rick astley", "never gonna give you up", "official video"],"thumbnails": [{ "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", "width": 1280, "height": 720 }],"isLive": false,"isAgeRestricted": false,"isPrivate": false,"channel": {"id": "UCuAXFkgsw1L7xaCfnd5JJOw","name": "Rick Astley","handle": "@RickAstleyYT","url": "https://www.youtube.com/@RickAstleyYT","subscriberCount": 4520000,"videoCount": 408,"country": "United Kingdom","joinedDate": "Joined Feb 1, 2015","totalViews": 2459513931,"externalLinks": [{ "title": "Website", "url": "https://www.rickastley.co.uk/" }]},"transcript": {"language": "English","isAutoGenerated": false,"text": "We're no strangers to love. You know the rules and so do I...","segments": [{ "startMs": 18640, "durationMs": 4000, "text": "We're no strangers to love" }]},"comments": [{"id": "UgxXXX","text": "can confirm: he never gave us up","author": "@YouTube","authorHandle": "@YouTube","authorChannelId": "UCvC4D8onUfXzvjTOM-dBfEA","likeCount": 227,"publishedTimeText": "2 weeks ago","replyCount": 962,"isPinned": false,"isHearted": true,"isCreator": false,"replies": []}],"commentCount": 100,"scrapedAt": "2026-07-26T03:45:00.000Z","error": null}
Videos that can't be read return the same shape with error set and the data blocks empty.
How much does YouTube Video Scraper cost?
Pay-per-event, so you're billed for the pieces you actually pulled.
| Event | Price |
|---|---|
| Video (metadata) | $0.005 |
| Transcript | $0.005 |
| Channel | $0.003 |
| Comment or reply | $0.0005 |
That's $5 per 1,000 videos for metadata only, with no per-run fee. The Apify free plan ($5 of monthly credit) covers about 1,000 metadata-only videos, or 79 full bundles with 100 comments each. Starter ($29) covers about 5,800 or 460.
Typical per-video cost:
- Metadata only: $0.005
- Metadata + channel: $0.008
- Metadata + transcript + channel: $0.013
- Full bundle, 100 comments: $0.063
- Full bundle, 500 comments: $0.263
YouTube Video Scraper vs the YouTube Data API
| Feature | YouTube Data API v3 | YouTube Video Scraper |
|---|---|---|
| Transcripts with timestamps | Not available | Returned, with startMs per segment |
| Comments | 100 per call, then paginate | Up to 5,000 per video in one run |
| Comment replies | Separate endpoint, extra quota | Nested replies[] in the same record |
| Channel metadata | Separate call | Included per video |
| Daily quota | 10,000 units, roughly 100 full video fetches | None |
| Auth | OAuth or API key, Google Cloud project | Apify token, no Google account |
| Cost for 1,000 full bundles | Needs multiple projects to lift the quota | $13 for metadata + transcript + channel |
| When you hit limits | Requests start failing on quota | Handled automatically, with backoff |
If you need a handful of videos a day and no transcripts, the official API is free and fine. Past that, quota is the problem this solves.
Limitations
- Comments cap at 5,000 per video. Enough for nearly every video, but a viral one with hundreds of thousands of comments will be truncated.
- Transcripts only exist if the video has captions. Auto-generated captions count; a video with captions disabled returns
transcript: null. - Members-only, private and deleted videos can't be read. They return with
errorset, and you aren't charged for them. - Live streams still running return metadata but no complete transcript until the stream ends.
- It scrapes the videos you point it at. It doesn't crawl a channel's back catalog or search YouTube for you.
Other scrapers you might like
FAQ
Do I need a YouTube API key? No. There's no key, no login and no quota to manage. Paste links and run.
Do I need to configure a proxy? No. It handles blocks automatically and the defaults are fine for normal use.
Can I run this on a schedule? Yes. Apify Schedules can run it hourly, daily or weekly, and each run appends to a dataset you can pull over the API.
What video links does it accept?
Watch URLs, youtu.be short links, Shorts, embeds, and bare 11-character video IDs. Mix them freely in one run.
What happens if a video is private or deleted?
You get a record with error set and no charge for it. The rest of your list still runs.
Your feedback Found a bug or need a field that isn't here? Open an issue at console.apify.com/actors/gjIgee5mp98ukI5JM/issues and it goes straight to a human.