Youtube Transcript Scraper
Pricing
Pay per usage
Youtube Transcript Scraper
Extract YouTube transcripts with timestamps, plus title, channel, views, likes, duration and keywords. Paste video links or IDs and export clean JSON, CSV or Excel.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
BigiByte
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Transcript Scraper: Get Video Transcripts with Timestamps

YouTube Transcript Scraper turns any YouTube video into clean, searchable text. Give it a link or a video ID and it returns the full transcript, a version with timestamps on every line, and the details you usually have to click around for: title, channel, publish date, length, views, likes, tags and thumbnail.
It reads every common link format, including Shorts, youtu.be links, embeds, live links and bare 11-character IDs. If a video has no captions, you still get a result that says so instead of a crashed run.
Use cases
- Repurpose videos into written content: turn a talk, podcast or tutorial into a blog post, newsletter or social thread without typing it out
- Feed AI tools and LLM pipelines: send transcripts to summarizers, chatbots, RAG indexes or training sets
- Keyword and SEO research: see the exact words top channels in your niche use on camera
- Subtitles, translation and accessibility: start from timestamped text instead of a blank file
- Content analysis: extract and analyze what's said in product demos, tutorials, or educational videos
What data does this YouTube transcript extractor return?
The video result includes:
- The transcript three ways: one plain text block, one text block with
[mm:ss]timestamps, and an optional list of lines with start and end times in seconds - Video details: title, description, category, tags, publish date, duration in seconds and as
mm:ss, view count, like count, thumbnail - Channel details: channel name, channel ID and channel URL
- Language info: the caption track used, its language code, and every caption language the video offers
- Handy counts: word count and number of transcript lines
- An
errorfield: null when things worked, a short reason when they did not
Input
| Field | Type | Default | What it does |
|---|---|---|---|
video | string | required | YouTube video URL or ID |
includeSegments | boolean | true | Add the list of timed transcript lines |
includeTimestampedText | boolean | true | Add the transcript as text with [mm:ss] before each line |
requestTimeoutSecs | integer | 60 | Seconds to wait for the request |
proxyConfiguration | object | Apify Proxy (on) | Proxy type and location to use for requests |
Link formats it understands
https://www.youtube.com/watch?v=aiS5qH7UMX4https://youtu.be/aiS5qH7UMX4https://www.youtube.com/shorts/aqz-KE-bpKQhttps://www.youtube.com/embed/aiS5qH7UMX4https://www.youtube.com/live/aiS5qH7UMX4https://m.youtube.com/watch?v=aiS5qH7UMX4aiS5qH7UMX4
Example inputs
Basic: One video, everything included
{"video": "https://www.youtube.com/watch?v=aiS5qH7UMX4"}
Plain text only (smaller output)
Good for AI tools and spreadsheets.
{"video": "https://www.youtube.com/watch?v=aiS5qH7UMX4","includeSegments": false,"includeTimestampedText": false}
Using a bare video ID
{"video": "aiS5qH7UMX4"}
Output
A successful video (trimmed)
{"videoId": "aiS5qH7UMX4","url": "https://www.youtube.com/watch?v=aiS5qH7UMX4","input": "https://www.youtube.com/watch?v=aiS5qH7UMX4","title": "Sell Anywhere (SELL TO ANY CUSTOMER in 2018)","channelName": "Alex Hormozi","channelId": "UCUyDOdBWhC1MCxEjC46d-zw","channelUrl": "http://www.youtube.com/@AlexHormozi","description": "Download your free scaling roadmap here...","category": "People & Blogs","keywords": ["sell anywhere", "sales skills", "gym sales"],"publishedAt": "2018-07-20T12:48:49-07:00","durationSeconds": 83,"durationText": "01:23","viewCount": 457271,"likeCount": 3704,"thumbnailUrl": "https://i.ytimg.com/vi/aiS5qH7UMX4/maxresdefault.jpg","isFamilySafe": true,"isLive": false,"language": "English (auto-generated)","languageCode": "en","availableLanguages": [{ "label": "English (auto-generated)", "languageCode": "en" }],"wordCount": 211,"segmentCount": 30,"fullTranscript": "hey guys I wanted to show you something kind of cool a little bit of a humble brag...","timestampedTranscript": "[00:00] hey guys I wanted to show you something\n[00:01] kind of cool a little bit of a humble\n...","segments": [{ "startSeconds": 0.06, "endSeconds": 3.33, "startTime": "00:00", "text": "hey guys I wanted to show you something" },{ "startSeconds": 1.56, "endSeconds": 5.97, "startTime": "00:01", "text": "kind of cool a little bit of a humble" }],"scrapedAt": "2026-10-11T15:04:04.979314+00:00","error": null}
A video without captions
{"videoId": "zzzzzzzzzzz","url": "https://www.youtube.com/watch?v=zzzzzzzzzzz","title": null,"segmentCount": 0,"fullTranscript": null,"segments": [],"error": "Transcript not available"}
Something that is not a YouTube link
{"videoId": null,"input": "not a url","error": "Not a valid YouTube URL or video ID"}
Output field reference
| Field | Type | Description |
|---|---|---|
videoId | string | 11-character video ID |
url | string | Canonical watch URL |
input | string | What you typed for this video |
title | string | Video title. The JSON row keeps this name. |
videoTitle | string | Same title. This is the Title column on the Output table. |
channelName | string | Channel name |
channelId | string | Channel ID |
channelUrl | string | Link to the channel |
description | string | Full video description. The JSON row keeps this name. |
videoDescription | string | Same description. The Output table can show this column. |
category | string | YouTube category |
keywords | array | Video tags |
publishedAt | string | Publish date and time, ISO 8601 |
durationSeconds | integer | Length in seconds |
durationText | string | Length as mm:ss or hh:mm:ss |
viewCount | integer | Views when scraped |
likeCount | integer | Likes when scraped |
thumbnailUrl | string | Largest available thumbnail |
isFamilySafe | boolean | Family-safe flag |
isLive | boolean | Whether it is a live stream |
language | string | Name of the caption track used |
languageCode | string | Language code of that track |
availableLanguages | array | Every caption track on the video |
wordCount | integer | Words in the transcript |
segmentCount | integer | Lines in the transcript |
fullTranscript | string | The whole transcript. The Output overview shows this as Description. |
timestampedTranscript | string | The transcript with [mm:ss] on each line |
segments | array | Lines with startSeconds, endSeconds, startTime, text |
scrapedAt | string | When the row was collected (UTC) |
error | string | Reason for failure, or null |
Some fields can be null when YouTube does not show them for a video, for example like counts on videos where likes are hidden.
Export the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.
How it works
- The input is cleaned up and turned into a video ID. Invalid input gets an error result right away.
- The video is fetched through Apify Proxy.
- The video data is extracted and structured as a single result, whether it worked or not.
Integrations
Connect YouTube Transcript Scraper to Make, Zapier, n8n, Google Sheets, Slack, Airtable or your own webhook with Apify integrations. Call the actor from Python or JavaScript with the Apify API client to automate transcript extraction.
Need a Custom Scraper?
Building a SaaS or AI tool that needs custom data extraction? We create production-ready scrapers tailored to your needs.
Contact us: bigibyte.com
If you need YouTube transcripts with timestamps and real video data, ready for spreadsheets and AI tools, this actor delivers clean, structured results.
