Youtube Text & Metadata Scraper
Pricing
from $2.90 / 1,000 results
Youtube Text & Metadata Scraper
Extract YouTube transcripts, subtitles, video metadata, hashtags, thumbnails, views, duration, and release dates from YouTube videos using either a search query or a list of direct YouTube URLs. It helps you turn YouTube search results and specific video links into structured JSON data
Pricing
from $2.90 / 1,000 results
Rating
0.0
(0)
Developer
Fabio Borsotti
Maintained by CommunityActor stats
1
Bookmarked
32
Total users
9
Monthly active users
4.6 hours
Issues response
7 days ago
Last modified
Categories
Share
YouTube Transcript Scraper Actor
Extract YouTube transcripts, subtitles, video metadata, hashtags, thumbnails, views, duration, and release dates from YouTube videos using either a search query or a list of direct YouTube URLs. This YouTube transcript scraper helps you turn YouTube search results and specific video links into structured JSON data for research, SEO, lead generation, monitoring, and content analysis.
What does YouTube Transcript Scraper do?
YouTube Transcript Scraper is an APIFY Actor that can search YouTube videos by keyword, apply a time filter, collect video metadata, and retrieve the first available transcript based on your preferred language order. It can also process direct YouTube video URLs and include those videos in the final output.
This Actor is ideal if you want to:
- train RAG algorithms for AI
- scrape YouTube transcripts
- extract YouTube subtitles
- collect YouTube video metadata
- monitor YouTube search results
- build datasets from YouTube videos
- automate YouTube content research
- extract transcripts from specific YouTube videos
The Actor uses:
pytubefixfor YouTube search and metadata extractionyoutube-transcript-apifor transcript and subtitle retrieval- Scrape.do as a proxy layer
Why use this YouTube scraper?
If you work with YouTube data, transcripts are one of the most valuable sources of structured content. Video transcripts help you analyze what creators actually say, not just what appears in titles and descriptions.
This Actor is useful because it supports two collection modes in the same run:
- search by keyword using
query - direct processing of specific YouTube videos using
direct_url
This makes it practical both for broad monitoring and for targeted transcript extraction from known videos.
Common use cases
- SEO research for YouTube videos and keywords
- competitor monitoring on YouTube
- AI training and text dataset preparation
- content repurposing from video to text
- lead generation from niche YouTube channels
- trend monitoring by date range
- transcript-based topic clustering
- YouTube video catalog enrichment
- transcript extraction from manually selected videos
What data does the Actor extract?
For each processed YouTube video, the Actor can return:
- YouTube video ID
- video title
- video URL
- channel name
- channel URL
- transcript text with timestamps
- available subtitles metadata
- video view count
- video duration in seconds
- release date
- thumbnail URL
- keywords / hashtags
- likes count
- comments count
- video description
- video categories
- live stream indicator
- geographical availability
- video language
- chapters (if available)
- series, season, and episode information
Note: By default, the Actor extracts transcript only and returns empty values for metadata fields. To include video metadata and subtitles, set enableMetadata: true in the input. See the "Metadata Retrieval Strategy" section for details.
Output Fields Reference
| Field | Type | Description | Availability |
|---|---|---|---|
id | string | YouTube video ID | Always |
title | string | Video title (short form) | Always |
url | string | YouTube video watch URL | Always |
autor | string | Channel/creator name (from search) | Always |
text | string | Video transcript with timestamps in format [MM:SS] | Always if available |
channel_name | string | Channel/uploader name | With enableMetadata = true |
channel_url | string | URL to the channel page | With enableMetadata = true |
video_title | string | Full video title | With enableMetadata = true |
video_url | string | YouTube video URL | With enableMetadata = true |
views_count | integer | Total number of video views | With enableMetadata = true |
duration_seconds | integer | Video duration in seconds | With enableMetadata = true |
release_date | string | Video publish date in format YYYY-MM-DD | With enableMetadata = true |
thumbnail_url | string | URL to the video thumbnail image | With enableMetadata = true |
hashtags | array | Hashtags associated with the video | With enableMetadata = true |
like_count | integer | Number of likes on the video | With enableMetadata = true |
comment_count | integer | Number of comments on the video | With enableMetadata = true |
description | string | Full video description text | With enableMetadata = true |
keywords | array | Keywords associated with the video | With enableMetadata = true |
categories | array | Video categories/topics | With enableMetadata = true |
is_live | boolean | Whether the video is a live stream | With enableMetadata = true |
availability | string | Geographical availability status | With enableMetadata = true |
language | string | Primary language code of the video | With enableMetadata = true |
chapters | array | Chapter markers with timestamps (if available) | With enableMetadata = true |
series | string | Series name if video is part of a series | With enableMetadata = true |
season | integer | Season number if video is part of a series | With enableMetadata = true |
episode | integer | Episode number if video is part of a series | With enableMetadata = true |
subtitles | array | Available subtitle/transcript languages with metadata | With enableMetadata = true |
Why this Actor is useful
This YouTube Transcript Scraper is useful when you need structured YouTube data without building and maintaining your own scraping workflow. It is designed for users who want fast access to transcript-rich video data in a reusable JSON format.
Compared with a basic YouTube metadata scraper, this Actor focuses on transcript extraction and subtitle discovery, which makes it especially helpful for:
- content intelligence
- SEO workflows
- machine learning pipelines
- research automation
- enrichment of video datasets
Input
Metadata Retrieval Strategy (enableMetadata flag)
By default, the Actor extracts transcripts only for optimal performance and minimal proxy credit consumption.
However, you can enable comprehensive metadata retrieval by setting enableMetadata: true:
-
enableMetadata: false(default): Fast, low-credit mode- Extracts: transcript text + video URL
- Output fields for metadata are present but empty (
None,[]) - Recommended for large-scale transcript extraction
-
enableMetadata: true: Full metadata mode- Extracts: transcript + video metadata + available subtitles
- Metadata fields populated: channel name/URL, view count, duration, release date, thumbnail, hashtags
- Subtitles field includes full list of available subtitle languages
- Useful for comprehensive video data collection
When enableMetadata: true, the Actor emits a single metadata-enabled event per run to notify external systems.
Example: Enabling metadata
{"query": "apify tutorial","limit": 5,"langs": ["it", "en"],"enableMetadata": true,"file_output": "output.json"}
Supported input fields
direct_url(array of strings, optional): list of direct YouTube video URLs to process. Supported formats includeyoutube.com/watch?v=...,youtu.be/..., andyoutube.com/shorts/...query(string, optional): YouTube search query. Optional ifdirect_urlis providedrange(array of strings): time filter for YouTube search, one ofhour,today,this_week,this_month,this_yearlimit(integer): maximum number of videos to process from search resultslangs(array of strings): preferred language order used when selecting transcripts (see table before)file_output(string): name of the JSON file saved in the key-value storeenableMetadata(boolean, optional): iftrue, fetches video metadata and subtitles; iffalseor omitted, extracts transcript only (default:false)
At least one between query and direct_url must be provided.
Supported languages (iso ISO 639-1)
| Codice | Lingua | Codice | Lingua | Codice | Lingua | Codice | Lingua | Codice | Lingua | Codice | Lingua |
|---|---|---|---|---|---|---|---|---|---|---|---|
| aa | Afar | ab | Abkhaz | ae | Avestan | af | Afrikaans | ak | Akan | am | Amharic |
| ar | Arabic | as | Assamese | av | Avaric | ay | Aymara | az | Azerbaijani | ba | Bashkir |
| be | Belarusian | bg | Bulgarian | bi | Bislama | bm | Bambara | bn | Bengali | bo | Tibetan |
| br | Breton | bs | Bosnian | ca | Catalan | ce | Chechen | ch | Chamorro | co | Corsican |
| cr | Cree | cs | Czech | cu | Church Slavic | cv | Chuvash | cy | Welsh | da | Danish |
| de | German | dv | Divehi | dz | Dzongkha | ee | Ewe | el | Greek | en | English |
| eo | Esperanto | es | Spanish | et | Estonian | eu | Basque | fa | Persian | ff | Fulah |
| fi | Finnish | fj | Fijian | fo | Faroese | fr | French | fy | Western Frisian | ga | Irish |
| gd | Scottish Gaelic | gl | Galician | gn | Guarani | gu | Gujarati | gv | Manx | ha | Hausa |
| he | Hebrew | hi | Hindi | ho | Hiri Motu | hr | Croatian | ht | Haitian | hu | Hungarian |
| hy | Armenian | hz | Herero | ia | Interlingua | id | Indonesian | ie | Interlingue | ig | Igbo |
| ii | Sichuan Yi | ik | Inupiaq | io | Ido | is | Icelandic | it | Italian | iu | Inuktitut |
| ja | Japanese | jv | Javanese | ka | Georgian | kg | Kongo | ki | Kikuyu | kj | Kuanyama |
| kk | Kazakh | kl | Kalaallisut | km | Central Khmer | kn | Kannada | ko | Korean | kr | Kanuri |
| ks | Kashmiri | ku | Kurdish | kv | Komi | kw | Cornish | ky | Kirghiz | la | Latin |
| lb | Luxembourgish | lg | Ganda | li | Limburgan | ln | Lingala | lo | Lao | lt | Lithuanian |
| lu | Luba-Katanga | lv | Latvian | mg | Malagasy | mh | Marshallese | mi | Maori | mk | Macedonian |
| ml | Malayalam | mn | Mongolian | mr | Marathi | ms | Malay | mt | Maltese | my | Burmese |
| na | Nauru | nb | Norwegian Bokmål | nd | North Ndebele | ne | Nepali | ng | Ndonga | nl | Dutch |
| nn | Norwegian Nynorsk | no | Norwegian | nr | South Ndebele | nv | Navajo | ny | Chichewa | oc | Occitan |
| oj | Ojibwa | om | Oromo | or | Oriya | os | Ossetian | pa | Panjabi | pi | Pali |
| pl | Polish | ps | Pashto | pt | Portuguese | qu | Quechua | rm | Romansh | rn | Rundi |
| ro | Romanian | ru | Russian | rw | Kinyarwanda | sa | Sanskrit | sc | Sardinian | sd | Sindhi |
| se | Northern Sami | sg | Sango | sh | Serbo-Croatian | si | Sinhala | sk | Slovak | sl | Slovenian |
| sm | Samoan | sn | Shona | so | Somali | sq | Albanian | sr | Serbian | ss | Swati |
| st | Southern Sotho | su | Sundanese | sv | Swedish | sw | Swahili | ta | Tamil | te | Telugu |
| tg | Tajik | th | Thai | ti | Tigrinya | tk | Turkmen | tl | Tagalog | tn | Tswana |
| to | Tonga | tr | Turkish | ts | Tsonga | tt | Tatar | tw | Twi | ty | Tahitian |
| ug | Uighur | uk | Ukrainian | ur | Urdu | uz | Uzbek | ve | Venda | vi | Vietnamese |
| vo | Volapük | wa | Walloon | wo | Wolof | xh | Xhosa | yi | Yiddish | yo | Yoruba |
| za | Zhuang | zh | Chinese | zu | Zulu |
Example input with direct URLs only
{"direct_url": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/9bZkp7q19f0"],"langs": ["it", "en"],"file_output": "output.json"}
Example input with query and direct URLs
{"direct_url": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"query": "apify tutorial","range": ["this_week"],"limit": 5,"langs": ["it", "en"],"file_output": "output.json"}
Example input with direct URLs only and enableMetadata = true
{"direct_url": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/9bZkp7q19f0"],"langs": ["it", "en"],"enableMetadata": true,"file_output": "output.json"}
Example input with query and direct URLs and enableMetadata = true
{"direct_url": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"query": "apify tutorial","range": ["this_week"],"limit": 5,"langs": ["it", "en"],"enableMetadata": true,"file_output": "output.json"}
When both direct_url and query are provided, all videos listed in direct_url are processed and added to the output together with the search results. When enableMetadata is set to true, the Actor will fetch comprehensive metadata and available subtitles for each video and emit an apify-actor-metadata event upon completion.
Output
Each dataset item contains structured YouTube transcript and metadata fields like these:
{"id": "video_id","title": "Video title","url": "https://www.youtube.com/watch?v=video_id","autor": "Channel name","text": "[00:00] transcript text...","channel_name": "Channel name","channel_url": "https://www.youtube.com/@channel","video_title": "Detailed video title","video_url": "https://www.youtube.com/watch?v=video_id","views_count": 123456,"duration_seconds": 542,"release_date": "2026-04-13","thumbnail_url": "https://i.ytimg.com/vi/video_id/maxresdefault.jpg","hashtags": ["apify", "youtube", "scraping"],"like_count": 5432,"comment_count": 123,"description": "Full video description text here...","keywords": ["youtube", "scraping", "api"],"categories": ["Education", "Technology"],"is_live": false,"availability": "unlisted","language": "en","chapters": [{"title": "Introduction","start_time": 0}],"series": null,"season": null,"episode": null,"subtitles": [{"language_code": "en","language": "English","is_generated": true,"is_translatable": true}]}
The Actor also saves the complete output array into the APIFY key-value store using the file name specified in file_output.
How the YouTube transcript extraction works
The Actor follows this strategy:
- If
direct_urlis provided, process each direct YouTube URL and extract transcript and metadata. - If
queryis provided, search YouTube videos using the selected time filter. - For each video, try to find a manually created transcript in the languages you requested.
- If no manual transcript is available, try an auto-generated transcript.
- If no requested language is available, fall back to the first available transcript.
- Save transcript text and structured metadata in the output dataset.
This makes the Actor practical for multilingual transcript scraping, targeted video extraction, and broad topic monitoring.
Who is this Actor for?
This Actor is a good fit for:
- SEO specialists
- marketers
- data engineers
- content analysts
- AI data learning teams
- researchers
- agencies monitoring YouTube niches
- users who need transcripts from specific YouTube links
Limitations
The actor has the following limitations:
- Public videos only: Private or restricted videos are not supported.
- Transcripts required: The Actor can only extract data from videos that have transcripts enabled.
- Age-gated videos not supported: Videos marked as age-restricted (18+, 14+, etc.) cannot be accessed without YouTube account authentication. The Actor will return empty metadata and transcript for age-gated videos because YouTube blocks unauthenticated access to these videos for protection purposes.
To work with age-gated videos, you would need to implement YouTube account authentication, which is not currently supported by this Actor.
Summary
If you need a YouTube transcript scraper for APIFY that extracts subtitles, transcript text, hashtags, thumbnails, views, duration, and release date from either search results or direct video URLs, this Actor gives you a clean starting point with structured JSON output and proxy support.
