# YouTube Metadata Scraper (`scrapemesh/youtube-metadata-scraper`) Actor

- **URL**: https://apify.com/scrapemesh/youtube-metadata-scraper.md
- **Developed by:** [ScrapeMesh](https://apify.com/scrapemesh) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

Want to analyze YouTube videos like a pro? 💡 The YouTube Metadata Scraper lets you extract detailed information from any YouTube video — titles, descriptions, subtitles, tags, uploader info, view counts, and more — in just seconds!

Whether you’re a developer using YouTube scraper Python, a marketer studying engagement metrics, or a researcher exploring YouTube metadata API alternatives, this tool gives you full access to publicly available YouTube data in an organized format.

Perfect for anyone searching for YouTube metadata scraper free, YouTube metadata generator, or Apify YouTube scraper — this actor is your go-to solution for fast, reliable, and structured metadata extraction ⚡

* * *

### 🎯 What Does YouTube Metadata Scraper Do?

The YouTube Metadata Scraper extracts metadata and insights from any public YouTube video URL — giving you a complete dataset of what makes each video successful 📊

With a single click, you can retrieve:

*   🧾 Video titles, descriptions, and tags  
      
    
*   👤 Uploader details and channel stats  
      
    
*   👁️ Views, likes, and comments  
      
    
*   ⏱️ Durations, upload dates, and categories  
      
    
*   🗣️ Subtitles and transcript segments  
      
    

It’s a perfect alternative to MattW IO YouTube Metadata, YouTube DataViewer, and YouTube Meta Tag Scraper — but far more flexible and automation-ready through Apify or Python SDKs.

* * *

### 📦 What You Can Extract Using YouTube Metadata Scraper

Here’s an overview of the data fields you can retrieve ⬇️

| 🧩 Data Field | 📖 Description |
| --- | --- |
| Video Title | The main title of the YouTube video |
| Video ID | Unique video identifier (e.g., “3GwQdrhp__k”) |
| Description | The full video description text |
| Tags | All video tags and keywords |
| Uploader Name | The YouTube channel name |
| Uploader URL | Direct link to the creator’s channel |
| Channel Subscribers | Approximate follower count |
| View Count | Total number of views |
| Like Count | Number of likes |
| Comment Count | Total comments visible |
| Upload Date | Date the video was published |
| Duration | Total length of the video |
| Language | Detected video language |
| Thumbnail | URL to the video thumbnail image |

💡 Ideal for data analysis, video ranking research, and content optimization using YouTube metadata generator tools.

* * *

#### ⚙️ Key Features of “YouTube Metadata Scraper”

*   🎞️ Comprehensive Metadata Extraction: Fetch every available field — titles, tags, views, likes, uploader details, and more.  
      
    
*   🔗 Transcript & Subtitle Capture: Extract raw or timestamped transcripts in multiple languages.  
      
    
*   🧠 Multi-Video Scraping: Input up to 1,000 YouTube URLs in one run.  
      
    
*   ⚡ Developer Ready: Integrate directly with Apify YouTube Scraper or YouTube scraper Python scripts.  
      
    
*   📊 Export in Any Format: Download results in JSON, CSV, or Excel.  
      
    
*   🕵️ Channel-Level Insights: Perfect for those exploring YouTube channel scraper GitHub projects.  
      
    
*   🌍 Language Support: Extract multilingual subtitles automatically.  
      
    
*   💾 Free to Start: Try the YouTube metadata scraper free on Apify’s starter plan.  
      
    

This tool is perfect for creators, analysts, and brands who want to monitor competitors, study engagement, or build datasets without coding.

* * *

### 🧭 How to Use YouTube Metadata Scraper (Step-by-Step)

Using the YouTube Metadata Scraper is simple and intuitive — even for beginners! 🪄

1.  🔐 Sign up on Apify – Create a free account or log in.  
      
    
2.  🔍 Find the Actor – Search for “YouTube Metadata Scraper” in the Apify Store.  
      
    
3.  📥 Enter YouTube URLs – Add one or more video links (supports both videos and Shorts).  
      
    
4.  ⚙️ Choose Options – Enable transcripts, select formats, or include subtitles.  
      
    
5.  ▶️ Run the Scraper – Click “Start” and let the tool extract full metadata.  
      
    
6.  💾 Download Data – Export your results in JSON, CSV, or Excel.  
      
    

That’s it — your complete YouTube video dataset will be ready in minutes! 🕒

* * *

### 💡 Use Cases – How You Can Use YouTube Metadata Scraper

Here are some real-world ways to leverage this scraper effectively 👇

*   📊 Competitor Analysis: Monitor channel performance, tags, and audience engagement.  
      
    
*   🧠 Content Strategy: Identify trends and keywords driving traffic.  
      
    
*   📈 SEO Optimization: Extract metadata for video SEO audits.  
      
    
*   🧾 Market Research: Build datasets for analytics and AI training.  
      
    
*   🎬 Channel Archiving: Use with YouTube subscriptions exporter for full video catalogs.  
      
    
*   🧰 Automation Projects: Integrate via YouTube metadata API or Apify SDK.  
      
    

Perfect for data scientists, marketers, and developers exploring how to scrape YouTube data at scale.

* * *

### 💎 Why Choose Our YouTube Metadata Scraper?

*   ⚡ All-in-One Scraping Tool: Extract titles, stats, tags, and subtitles from any video.  
      
    
*   🧠 No Coding Required: Easy to use for beginners.  
      
    
*   🧩 Compatible with Apify Platform: Works with Apify YouTube scraper automation.  
      
    
*   🛠️ Supports Python Integration: Seamlessly connect via YouTube scraper Python libraries.  
      
    
*   🔒 Safe & Secure: Complies with YouTube’s data access policies — no private data scraping.  
      
    
*   🌍 Free Trial Available: Try the YouTube metadata scraper free to test capabilities.  
      
    

Compared to MattW IO YouTube Metadata, our tool offers bulk scraping, transcripts, and structured exports — all in one place!

* * *

### 🚀 How Many Results Can You Scrape?

The YouTube Metadata Scraper is highly scalable, built on Apify’s cloud infrastructure.

*   🧮 Extract data from hundreds to thousands of YouTube videos per run.  
      
    
*   ⚙️ Supports batch processing for large URL lists.  
      
    
*   💡 Use proxy groups (RESIDENTIAL or DATACENTER) for stable performance.  
      
    
*   🔁 Schedule recurring tasks for continuous video data tracking.  
      
    

Perfect for users running machine learning, trend analysis, or YouTube tag search by link studies.

* * *

### ⚖️ Is It Legal to Scrape YouTube?

✅ Yes — as long as you scrape publicly available data and respect YouTube’s Terms of Service.

This scraper:

*   🚫 Does not collect private or copyrighted content.  
      
    
*   📜 Extracts only public metadata accessible to all users.  
      
    
*   ⚖️ Is suitable for research, analytics, and automation purposes.  
      
    

Keep in mind:

YouTube may remove or modify metadata, and yes — YouTube sometimes strips metadata (like EXIF or geotags) when uploading videos.

So always use the tool responsibly and within compliance guidelines.

* * *

### 🧾 Input Parameters

Example JSON Input:
```json
{
  "include_english_auto": false,
  "include_non_english": false,
  "include_transcripts": true,
  "urls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "max_comments": 20,
  "transcript_format": "text",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

### 📤 Output Format

Example JSON Output:

```json
  {
    "id": "dQw4w9WgXcQ",
    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
    "description": "The official video for “Never Gonna Give You Up” by Rick Astley. \n\nNever: The Autobiography 📚 OUT NOW! \nFollow this link to get your copy and listen to Rick’s ‘Never’ playlist ❤️ #RickAstleyNever\nhttps://linktr.ee/rickastleynever\n\n“Never Gonna Give You Up” was a global smash on its release in July 1987, topping the charts in 25 countries including Rick’s native UK and the US Billboard Hot 100.  It also won the Brit Award for Best single in 1988. Stock Aitken and Waterman wrote and produced the track which was the lead-off single and lead track from Rick’s debut LP “Whenever You Need Somebody”.  The album was itself a UK number one and would go on to sell over 15 million copies worldwide.\n\nThe legendary video was directed by Simon West – who later went on to make Hollywood blockbusters such as Con Air, Lara Croft – Tomb Raider and The Expendables 2.  The video passed the 1bn YouTube views milestone on 28 July 2021.\n\nSubscribe to the official Rick Astley YouTube channel: https://RickAstley.lnk.to/YTSubID\n\nFollow Rick Astley:\nFacebook: https://RickAstley.lnk.to/FBFollowID \nTwitter: https://RickAstley.lnk.to/TwitterID \nInstagram: https://RickAstley.lnk.to/InstagramID \nWebsite: https://RickAstley.lnk.to/storeID \nTikTok: https://RickAstley.lnk.to/TikTokID\n\nListen to Rick Astley:\nSpotify: https://RickAstley.lnk.to/SpotifyID \nApple Music: https://RickAstley.lnk.to/AppleMusicID \nAmazon Music: https://RickAstley.lnk.to/AmazonMusicID \nDeezer: https://RickAstley.lnk.to/DeezerID \n\nLyrics:\nWe’re no strangers to love\nYou know the rules and so do I\nA full commitment’s what I’m thinking of\nYou wouldn’t get this from any other guy\n\nI just wanna tell you how I’m feeling\nGotta make you understand\n\nNever gonna give you up\nNever gonna let you down\nNever gonna run around and desert you\nNever gonna make you cry\nNever gonna say goodbye\nNever gonna tell a lie and hurt you\n\nWe’ve known each other for so long\nYour heart’s been aching but you’re too shy to say it\nInside we both know what’s been going on\nWe know the game and we’re gonna play it\n\nAnd if you ask me how I’m feeling\nDon’t tell me you’re too blind to see\n\nNever gonna give you up\nNever gonna let you down\nNever gonna run around and desert you\nNever gonna make you cry\nNever gonna say goodbye\nNever gonna tell a lie and hurt you\n\n#RickAstley #NeverGonnaGiveYouUp #WheneverYouNeedSomebody #OfficialMusicVideo",
    "lengthInSeconds": 213,
    "uploadDatetime": "2009-10-24T23:57:33-07:00",
    "publish_date_since": "16 years ago",
    "category": "Music",
    "tags": [
      "rick astley",
      "Never Gonna Give You Up",
      "nggyu",
      "never gonna give you up lyrics",
      "rick rolled",
      "Rick Roll",
      "rick astley official",
      "rickrolled",
      "Fortnite song",
      "Fortnite event",
      "Fortnite dance",
      "fortnite never gonna give you up",
      "rick roll",
      "rickrolling",
      "rick rolling",
      "never gonna give you up",
      "80s music",
      "rick astley new",
      "animated video",
      "rickroll",
      "meme songs",
      "never gonna give u up lyrics",
      "Rick Astley 2022",
      "never gonna let you down",
      "animated",
      "rick rolls 2022",
      "never gonna give you up karaoke"
    ],
    "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
    "thumbnails_urls": [
      "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDd2KtelLHaNSXrI9_5K-NvTscKNw",
      "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBUpEOOWUXWkNyijQuZ4UPzp2BE-w",
      "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBCyhr8AqpJ1SxKVU6SyK5ODJ_IpA",
      "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB_p0PncTtkrhaNDZtntrE3gKkoYw",
      "https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/maxresdefault.webp"
    ],
    "channelID": "UCuAXFkgsw1L7xaCfnd5JJOw",
    "channelURL": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
    "channelUsername": "rickastley",
    "channelDisplayName": "Rick Astley",
    "channelSubscribers": "4.44M",
    "author_avatar_url": "https://yt3.ggpht.com/vewxKdtll-rntHAMDPY_Qa6hPac3-J2sCFFUwvGSSR0i7hB4g5rNfF39lCEcjGvsYI0RWx7V1A=s176-c-k-c0x00ffffff-no-rj",
    "is_verified": true,
    "viewCount": 1726805028,
    "likeCount": 18702878,
    "commentCount": 2400000,
    "is_live_now": false,
    "description_links": [
      "https://linktr.ee/rickastleynever",
      "https://RickAstley.lnk.to/YTSubID",
      "https://RickAstley.lnk.to/FBFollowID",
      "https://RickAstley.lnk.to/TwitterID",
      "https://RickAstley.lnk.to/InstagramID",
      "https://RickAstley.lnk.to/storeID",
      "https://RickAstley.lnk.to/TikTokID",
      "https://RickAstley.lnk.to/SpotifyID",
      "https://RickAstley.lnk.to/AppleMusicID",
      "https://RickAstley.lnk.to/AmazonMusicID",
      "https://RickAstley.lnk.to/DeezerID"
    ],
    "is_comments_off": false,
    "is_members_only": false,
    "is_paid_content": false,
    "transcripts": [
      {
        "language": "EN",
        "content": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules\nand so do I ♪ ♪ A full commitment's\nwhat I'm thinking of ♪ ♪ You wouldn't get this\nfrom any other guy ♪ ♪ I just wanna tell you\nhow I'm feeling ♪ ♪ Gotta make you understand ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let you down ♪ ♪ Never gonna run around\nand desert you ♪ ♪ Never gonna make you cry ♪ ♪ Never gonna say goodbye ♪ ♪ Never gonna tell a lie\nand hurt you ♪ ♪ We've known each other\nfor so long ♪ ♪ Your heart's been aching\nbut you're too shy to say it ♪ ♪ Inside we both know\nwhat's been going ♪ ♪ We know the game\nand we're gonna play it ♪ ♪ And if you ask me\nhow I'm feeling ♪ ♪ Don't tell me\nyou're too blind to see ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let you down ♪ ♪ Never gonna run around\nand desert you ♪ ♪ Never gonna make you cry ♪ ♪ Never gonna say goodbye ♪ ♪ Never gonna tell a lie\nand hurt you ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let you down ♪ ♪ Never gonna run around\nand desert you ♪ ♪ Never gonna make you cry ♪ ♪ Never gonna say goodbye ♪ ♪ Never gonna tell a lie\nand hurt you ♪ ♪ (Ooh, give you up) ♪ ♪ (Ooh, give you up) ♪ ♪ Never gonna give,\nnever gonna give ♪ ♪ (Give you up) ♪ ♪ Never gonna give,\nnever gonna give ♪ ♪ (Give you up) ♪ ♪ We've known each other\nfor so long ♪ ♪ Your heart's been aching\nbut you're too shy to say it ♪ ♪ Inside we both know\nwhat's been going ♪ ♪ We know the game\nand we're gonna play it ♪ ♪ I just wanna tell you\nhow I'm feeling ♪ ♪ Gotta make you understand ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let you down ♪ ♪ Never gonna run around\nand desert you ♪ ♪ Never gonna make you cry ♪ ♪ Never gonna say goodbye ♪ ♪ Never gonna tell a lie\nand hurt you ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let you down ♪ ♪ Never gonna run around\nand desert you ♪ ♪ Never gonna make you cry ♪ ♪ Never gonna say goodbye ♪ ♪ Never gonna tell a lie\nand hurt you ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let you down ♪ ♪ Never gonna run around\nand desert you ♪ ♪ Never gonna make you cry ♪ ♪ Never gonna say goodbye ♪ ♪ Never gonna tell a lie\nand hurt you ♪"
      }
    ],
    "comments": [
      {
        "id": "Ugzge340dBgB75hWBm54AaABAg",
        "text": "can confirm: he never gave us up",
        "author": "@YouTube",
        "authorChannelId": "UCBR8-60-B28hp2BmDPdntcQ",
        "likeCount": 153000,
        "publishedTime": "8 months ago",
        "replyCount": 960
      },
      {
        "id": "UgyzbmEV2aayB4nC7gx4AaABAg",
        "text": "Just got rolled by a random QR code in a mobile game. Rick indeed will never give up.",
        "author": "@tropicalstarburst7364",
        "authorChannelId": "UCEHjZMEqgV93SpSr_klorLA",
        "likeCount": 635,
        "publishedTime": "1 day ago",
        "replyCount": 53
      },
      {
        "id": "UgyEnXfdC-umwvTt8JF4AaABAg",
        "text": "Gonna flag this for nudity so I can rick roll the YouTube staff",
        "author": "@Oatman69",
        "authorChannelId": "UCWf34D_s8K_m2vwBISIDWtg",
        "likeCount": 538000,
        "publishedTime": "6 years ago",
        "replyCount": 492
      },
      {
        "id": "UgzNF6YV0mlS2GWceOZ4AaABAg",
        "text": "I didn't get rickrolled today, I just really enjoy this song",
        "author": "@CinematicCaptures",
        "authorChannelId": "UCA1oEnRYKBmFDAcoKso2pAA",
        "likeCount": 355000,
        "publishedTime": "4 years ago",
        "replyCount": 902
      },
      {
        "id": "UgwHvAgHD0wRbFkyVWJ4AaABAg",
        "text": "Is no one talking about how this is the qr code in Elmwood trail?",
        "author": "@wipozinc",
        "authorChannelId": "UCdjBf9u0Xj5wFhBurjVGvug",
        "likeCount": 82,
        "publishedTime": "1 day ago",
        "replyCount": 3
      },
      {
        "id": "UgyyEqaBXOKgoi4cf7l4AaABAg",
        "text": "Ok let’s be honest here\nRick rolling is the one meme that will never die",
        "author": "@JetpackGamer456",
        "authorChannelId": "UCNRtoaGfHCLksAz2ofEAfgA",
        "likeCount": 418000,
        "publishedTime": "6 years ago (edited)",
        "replyCount": 580
      },
      {
        "id": "Ugw10bSluCDSZMIxUSB4AaABAg",
        "text": "Let’s put the meme aside, this is actually a banging song.",
        "author": "@LK-ht7qz",
        "authorChannelId": "UCHpvHTRSILoOFKWX5oFCYDA",
        "likeCount": 205000,
        "publishedTime": "6 years ago",
        "replyCount": 476
      },
      {
        "id": "UgzH1AYZTHMMZ8is2Rd4AaABAg",
        "text": "Petition to make this the national anthem of the internet",
        "author": "@SonimodGT",
        "authorChannelId": "UC22XFsGtRW-YuwyzgoF53ZA",
        "likeCount": 124000,
        "publishedTime": "6 years ago",
        "replyCount": 836
      },
      {
        "id": "UgyutkgSpzb1uEJQcJ14AaABAg",
        "text": "My ass just got Rick rolled by a game",
        "author": "@KJ_15396",
        "authorChannelId": "UCpGE0vTB0_O0adgbI1fy_kw",
        "likeCount": 46,
        "publishedTime": "3 days ago",
        "replyCount": 3
      },
      {
        "id": "UgyaEE4RK3LmE06FeJp4AaABAg",
        "text": "My professor sent us this link as the \"final exam key\"........",
        "author": "@hengchuanzhang9299",
        "authorChannelId": "UC8Gqkqhw4HbrmQB411SxMDg",
        "likeCount": 401000,
        "publishedTime": "6 years ago",
        "replyCount": 806
      },
      {
        "id": "Ugxusz1e9j7BnOXgP-t4AaABAg",
        "text": "My 69 year old grandma sent me this link\n\n\n\nDamn",
        "author": "@quinnuknow3680",
        "authorChannelId": "UCKRgqXR3iyWKF36CxupUZ9A",
        "likeCount": 265000,
        "publishedTime": "6 years ago (edited)",
        "replyCount": 468
      },
      {
        "id": "Ugzemy2nvw_7EyaIWj54AaABAg",
        "text": "There's a reason this has over 600M views...",
        "author": "@Timeworks",
        "authorChannelId": "UCv5mo0iXze8aKFjvdp51Fjg",
        "likeCount": 1000000,
        "publishedTime": "6 years ago",
        "replyCount": 964
      },
      {
        "id": "UgyfzAQTm5T4Uk1SkUp4AaABAg",
        "text": "I'll still be here on Christmas Day 2025!!!❤❤❤❤",
        "author": "@bannamgiauten7344",
        "authorChannelId": "UCX-rN0exuoVkxuzTwW_xnOQ",
        "likeCount": 71,
        "publishedTime": "4 days ago",
        "replyCount": 0
      },
      {
        "id": "UgzWOscntJ3Pe2ZkBDR4AaABAg",
        "text": "Nobody can fool me anymore with this, I now remember every letter and number of the link",
        "author": "@SilentMemer",
        "authorChannelId": "UCKgW3A5HpQiPVfpyfuD6w1w",
        "likeCount": 125000,
        "publishedTime": "5 years ago (edited)",
        "replyCount": 804
      },
      {
        "id": "UgxYVFtRf3Y8hBDcvfh4AaABAg",
        "text": "this isn't over until all 7 billion people in the world are rick rolled - 1/7th there ❤️",
        "author": "@schmoyoho",
        "authorChannelId": "UCNYrK4tc5i1-eL8TXesH2pg",
        "likeCount": 81000,
        "publishedTime": "4 years ago",
        "replyCount": 703
      },
      {
        "id": "UgwnXz0vJESXwxLUMet4AaABAg",
        "text": "1B people have been Rick Rolled, what an achievement",
        "author": "@Zenic.",
        "authorChannelId": "UCRKqb7N0kLSVYmFjLjvwkIg",
        "likeCount": 80000,
        "publishedTime": "4 years ago",
        "replyCount": 554
      },
      {
        "id": "Ugz4kWIyoszWGP9dJy94AaABAg",
        "text": "27 december 2025 anyone?😅",
        "author": "@PiotrPiotr13",
        "authorChannelId": "UCxM0_JEB4M1SqF7MZEnDe4g",
        "likeCount": 300,
        "publishedTime": "2 days ago",
        "replyCount": 78
      },
      {
        "id": "UgyVM59MDTt3TPWtk7d4AaABAg",
        "text": "11 years and almost at 1billion views, the meme that never gives up and never says goodbye indeed",
        "author": "@hephzibahsadim2005",
        "authorChannelId": "UC8IBfMTOm3iEXe6YCrGkx1w",
        "likeCount": 35000,
        "publishedTime": "4 years ago",
        "replyCount": 452
      },
      {
        "id": "UgxIOV-sXAchpKX94cB4AaABAg",
        "text": "1987 : normal song \r\n2025 : national anthem of the universe",
        "author": "@ochkalov",
        "authorChannelId": "UCtbyFPryy7J4DR4xh5CRCvA",
        "likeCount": 121000,
        "publishedTime": "6 years ago (edited)",
        "replyCount": 935
      },
      {
        "id": "UgyKfK-LUe3_s7IEGwl4AaABAg",
        "text": "Wait, this isn’t the link to  finding out Obama’s last name",
        "author": "@tylerwilson447",
        "authorChannelId": "UC9ERYGv2pe1rZfS3msT1hyg",
        "likeCount": 225000,
        "publishedTime": "6 years ago",
        "replyCount": 852
      }
    ]
  }
```

### ❓ FAQ – YouTube Metadata Scraper

#### 1️⃣ What is YouTube metadata?

YouTube metadata includes details like titles, tags, descriptions, categories, and channel info that help define each video.

#### 2️⃣ Does YouTube remove metadata?

Yes, YouTube strips embedded metadata (like EXIF or GPS info) from videos for privacy and consistency.

#### 3️⃣ How to scrape YouTube data easily?

Use the Apify YouTube scraper or YouTube scraper Python — both beginner-friendly and efficient.

#### 4️⃣ Is there a YouTube channel scraper on GitHub?

Yes, check out open-source projects like YouTube Channel Scraper GitHub for developers.

#### 5️⃣ What’s the difference between YouTube metadata scraper and generator?

A scraper extracts real data from YouTube; a generator helps create SEO-optimized metadata for uploads.

#### 6️⃣ Can I use this as a YouTube metatag scraper?

Absolutely! It can extract video tags, making it great for keyword research and SEO analysis.

#### 7️⃣ Does this work with YouTube metadata API?

Yes, you can easily integrate it into custom APIs for automation and analytics.

#### 8️⃣ Is this tool free?

Yes, you can start using the YouTube metadata scraper free under Apify’s free plan.

### 🚀 Final Thoughts

The YouTube Metadata Scraper is the ultimate solution for extracting, analyzing, and exporting YouTube video data — whether for content strategy, machine learning, or SEO insights.

From transcripts to tags, this scraper gives you everything you need to understand and optimize YouTube performance — all without coding!

💡 Start using the YouTube Metadata Scraper today and unlock a world of video intelligence. 🎬

# Actor input Schema

## `urls` (type: `array`):

One entry per video: full watch links (`youtube.com` / `youtu.be`) or the raw **video ID**. Leave empty if you only want keyword-based discovery.

## `keywords` (type: `array`):

YouTube search phrases — one phrase per line. **Sort** and **Max videos per keyword** in this same panel control ranking and how many videos are collected per phrase.

## `sort_order` (type: `string`):

Applies to **keyword** runs only. Choose how YouTube should order the search results before videos are added to your run.

## `max_results_per_keyword` (type: `integer`):

Safety cap for discovery: at most this many videos are taken **per keyword** (YouTube paging under the hood). Lower = faster & lighter; higher = broader coverage.

## `max_comments` (type: `integer`):

Top-level comments to store for each video. Set **0** to skip comments entirely and focus on metadata (and transcripts, if enabled).

## `include_transcripts` (type: `boolean`):

When on, the Actor tries to attach caption/transcript text for each video **if YouTube makes it available** for that upload.

## `transcript_format` (type: `string`):

Choose a compact paragraph-style transcript or structured segments — whichever fits your downstream tooling best.

## `include_english_auto` (type: `boolean`):

Also allow **YouTube auto-captions** in English (in addition to creator-uploaded captions, when present).

## `include_non_english` (type: `boolean`):

When enabled, non-English manual or auto tracks can appear in the transcript list (subject to availability on each video).

## `proxyConfiguration` (type: `object`):

Optional Apify **Proxy** settings for tougher networks or higher-volume runs. Leave off for the default experience; adjust only if your workspace policy or success rate calls for it.

## Actor input object example

```json
{
  "urls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "sort_order": "relevance",
  "max_results_per_keyword": 10,
  "max_comments": 2,
  "include_transcripts": true,
  "transcript_format": "text",
  "include_english_auto": false,
  "include_non_english": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemesh/youtube-metadata-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemesh/youtube-metadata-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ]
}' |
apify call scrapemesh/youtube-metadata-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapemesh/youtube-metadata-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Metadata Scraper",
        "description": null,
        "version": "0.1",
        "x-build-id": "cGZKFTNhh52UL7xOn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemesh~youtube-metadata-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemesh-youtube-metadata-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapemesh~youtube-metadata-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapemesh-youtube-metadata-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapemesh~youtube-metadata-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemesh-youtube-metadata-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "🔗 Video URLs or IDs",
                        "type": "array",
                        "description": "One entry per video: full watch links (`youtube.com` / `youtu.be`) or the raw **video ID**. Leave empty if you only want keyword-based discovery.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywords": {
                        "title": "🔍 Search keywords",
                        "type": "array",
                        "description": "YouTube search phrases — one phrase per line. **Sort** and **Max videos per keyword** in this same panel control ranking and how many videos are collected per phrase.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sort_order": {
                        "title": "📊 Sort keyword results by",
                        "enum": [
                            "relevance",
                            "upload_date",
                            "view_count",
                            "rating"
                        ],
                        "type": "string",
                        "description": "Applies to **keyword** runs only. Choose how YouTube should order the search results before videos are added to your run.",
                        "default": "relevance"
                    },
                    "max_results_per_keyword": {
                        "title": "🔢 Max videos per keyword",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Safety cap for discovery: at most this many videos are taken **per keyword** (YouTube paging under the hood). Lower = faster & lighter; higher = broader coverage.",
                        "default": 10
                    },
                    "max_comments": {
                        "title": "💬 Max comments per video",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Top-level comments to store for each video. Set **0** to skip comments entirely and focus on metadata (and transcripts, if enabled).",
                        "default": 2
                    },
                    "include_transcripts": {
                        "title": "📥 Include transcripts",
                        "type": "boolean",
                        "description": "When on, the Actor tries to attach caption/transcript text for each video **if YouTube makes it available** for that upload.",
                        "default": true
                    },
                    "transcript_format": {
                        "title": "🧾 Transcript format",
                        "enum": [
                            "text",
                            "timestamps"
                        ],
                        "type": "string",
                        "description": "Choose a compact paragraph-style transcript or structured segments — whichever fits your downstream tooling best.",
                        "default": "text"
                    },
                    "include_english_auto": {
                        "title": "🤖 Include auto-generated English",
                        "type": "boolean",
                        "description": "Also allow **YouTube auto-captions** in English (in addition to creator-uploaded captions, when present).",
                        "default": false
                    },
                    "include_non_english": {
                        "title": "🌍 Include non-English captions",
                        "type": "boolean",
                        "description": "When enabled, non-English manual or auto tracks can appear in the transcript list (subject to availability on each video).",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "🔒 Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify **Proxy** settings for tougher networks or higher-volume runs. Leave off for the default experience; adjust only if your workspace policy or success rate calls for it.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
