# Compare YouTube Video Tags and Descriptions

**Use case:** 

Compare public YouTube metadata for SEO research. Each video row can include title, description, tags, hashtags, channel information, views and likes when YouTube exposes them. Set videoUrls to the videos you want to compare; cloud runs may omit tags or truncate descriptions when YouTube gates a page.

## Input

```json
{
  "videoUrls": [
    "jNQXAC9IVRw",
    "dQw4w9WgXcQ",
    "M7lc1UVf-VE"
  ],
  "maxComments": 0,
  "includeChapters": true,
  "includeHeatmap": false,
  "includeEndscreen": false,
  "includeCards": false,
  "includeTranscriptMetadata": true,
  "includeTranscript": false,
  "includeRelatedVideos": 0
}
```

## Output

```json
{
  "type": {
    "label": "Type",
    "format": "text"
  },
  "videoId": {
    "label": "Video ID",
    "format": "text"
  },
  "url": {
    "label": "URL",
    "format": "link"
  },
  "title": {
    "label": "Title",
    "format": "text"
  },
  "description": {
    "label": "Description",
    "format": "text"
  },
  "channelId": {
    "label": "Channel ID",
    "format": "text"
  },
  "channelName": {
    "label": "Channel",
    "format": "text"
  },
  "publishedDate": {
    "label": "Published",
    "format": "text"
  },
  "publishedAt": {
    "label": "Published at",
    "format": "text"
  },
  "durationSeconds": {
    "label": "Duration (s)",
    "format": "number"
  },
  "viewCount": {
    "label": "Views",
    "format": "number"
  },
  "likeCount": {
    "label": "Likes",
    "format": "number"
  },
  "commentCount": {
    "label": "Comments",
    "format": "number"
  },
  "commentCountText": {
    "label": "Comments (display)",
    "format": "text"
  },
  "tags": {
    "label": "Tags",
    "format": "text"
  },
  "category": {
    "label": "Category",
    "format": "text"
  },
  "defaultAudioLanguage": {
    "label": "Audio Language",
    "format": "text"
  },
  "liveStatus": {
    "label": "Live Status",
    "format": "text"
  },
  "isLiveNow": {
    "label": "Live now",
    "format": "boolean"
  },
  "isUpcoming": {
    "label": "Upcoming",
    "format": "boolean"
  },
  "isUnlisted": {
    "label": "Unlisted",
    "format": "boolean"
  },
  "engagementRate": {
    "label": "Engagement Rate",
    "format": "number"
  },
  "hashtags": {
    "label": "Hashtags",
    "format": "text"
  },
  "uploadType": {
    "label": "Upload Type",
    "format": "text"
  },
  "resolution": {
    "label": "Resolution",
    "format": "text"
  },
  "isFamilySafe": {
    "label": "Family Safe",
    "format": "boolean"
  },
  "isShortsEligible": {
    "label": "Shorts Eligible",
    "format": "boolean"
  },
  "thumbnails": {
    "label": "Thumbnails",
    "format": "text"
  },
  "playabilityStatus": {
    "label": "Playability Status",
    "format": "text"
  },
  "isPlayable": {
    "label": "Is Playable",
    "format": "boolean"
  },
  "isAgeGated": {
    "label": "Age Gated",
    "format": "boolean"
  },
  "requiresLogin": {
    "label": "Requires Login",
    "format": "boolean"
  },
  "commentsDisabled": {
    "label": "Comments Disabled",
    "format": "boolean"
  },
  "availableCountries": {
    "label": "Available Countries",
    "format": "text"
  },
  "captionTracks": {
    "label": "Caption Tracks",
    "format": "text"
  },
  "captionTrackCount": {
    "label": "Caption tracks",
    "format": "number"
  },
  "hasManualCaptions": {
    "label": "Manual captions",
    "format": "boolean"
  },
  "hasAutoCaptions": {
    "label": "Auto captions",
    "format": "boolean"
  },
  "chapters": {
    "label": "Chapters",
    "format": "text"
  },
  "heatmap": {
    "label": "Heatmap",
    "format": "text"
  },
  "mostReplayed": {
    "label": "Most replayed",
    "format": "text"
  },
  "heatmapSegmentCount": {
    "label": "Heatmap segments",
    "format": "number"
  },
  "chapterSource": {
    "label": "Chapter source",
    "format": "text"
  },
  "endscreen": {
    "label": "Endscreen",
    "format": "text"
  },
  "relatedVideos": {
    "label": "Related Videos",
    "format": "text"
  },
  "transcript": {
    "label": "Transcript",
    "format": "text"
  },
  "comments": {
    "label": "Comments",
    "format": "text"
  },
  "clipId": {
    "label": "Clip ID",
    "format": "text"
  },
  "clipStartMs": {
    "label": "Clip Start (ms)",
    "format": "number"
  },
  "clipEndMs": {
    "label": "Clip End (ms)",
    "format": "number"
  },
  "channel.id": {
    "label": "Channel ID",
    "format": "text"
  },
  "channel.name": {
    "label": "Channel Name",
    "format": "text"
  },
  "channel.handle": {
    "label": "Handle",
    "format": "text"
  },
  "channel.url": {
    "label": "Channel URL",
    "format": "link"
  },
  "channel.subscriberCount": {
    "label": "Subscribers",
    "format": "number"
  },
  "channel.subscriberCountText": {
    "label": "Subscribers Text",
    "format": "text"
  },
  "channel.badges": {
    "label": "Channel Badges",
    "format": "text"
  },
  "success": {
    "label": "Success",
    "format": "boolean"
  },
  "inputUrl": {
    "label": "Input URL",
    "format": "link"
  },
  "scrapedAt": {
    "label": "Scraped At",
    "format": "text"
  }
}
```

## How it works

### 1. Sign up on Apify or log in

The YouTube Video Metadata & Chapter Extractor Actor is ready to run with the inputs already set for "Compare YouTube Video Tags and Descriptions". [Sign up or log in](https://console.apify.com/create-task-from-example/g9loFuNOjQ9Z06f1L) and you'll land in Apify Console with a copy of this exact task.

### 2. Start the "Compare YouTube Video Tags and Descriptions" task

The YouTube Video Metadata & Chapter Extractor Actor will start running based on the input automatically. You can also change all the input fields, like video urls or ids, max comments per video, and more, to match your specific use case.

### 3. Receive the "Compare YouTube Video Tags and Descriptions" output

Monitor the progress in real time. You will be notified as soon as your dataset is complete and ready for review. Each result includes data such as type, video id, URL, and more.

### 4. Integrate into your workflow

The final output is delivered in JSON, CSV, or Excel format, ready to be plugged into your workflow. You can also [run the "Compare YouTube Video Tags and Descriptions" task via API](https://apify.com/vexaloom-labs/youtube-video-metadata-and-chapter-extractor.md).

## FAQ

### How do I get YouTube video tags and descriptions for competitor research?

The video metadata task collects tags, descriptions, titles, exact views, likes, and channels from public watch URLs or 11-character video IDs without requiring a YouTube API key.

### Does the video metadata task need a YouTube API key, login, or proxy?

The video metadata task reads public pages and InnerTube endpoints directly, needing no cookies, logins, API keys, or custom proxy setup since Apify handles retries automatically.

### How much does it cost to run the video metadata task?

Running the video metadata task incurs an actor start event charge from $0.10 down to $0.03 depending on your plan, plus $0.99 down to $0.49 per 1,000 results and Apify platform usage.

### Can I export data from the video metadata task to CSV or Excel?

The video metadata task saves results into an Apify dataset that can be downloaded as JSON, CSV, Excel, XML, RSS, or an HTML table, or read through the Apify API.

### Is it legal to collect public data using the video metadata task?

Whether using the video metadata task is lawful depends on your specific purpose, site terms, and privacy laws like GDPR or CCPA, making the person running the task responsible.

### What data does the video metadata task include in the output?

Each row from the video metadata task provides videoId, title, description, tags, category, viewCount, likeCount, commentCount, channelName, publishedDate, and durationSeconds.

### Why are some descriptions or fields missing in the video metadata task output?

Bot-check pages on Apify datacenter IPs can cause the video metadata task to return truncated descriptions around 160 characters while omitting publish times, tags, or transcripts.

## About this Actor

This example demonstrates how to use [YouTube Video Metadata & Chapter Extractor](https://apify.com/vexaloom-labs/youtube-video-metadata-and-chapter-extractor.md) with a specific input configuration. Visit the [Actor detail page](https://apify.com/vexaloom-labs/youtube-video-metadata-and-chapter-extractor.md) to learn more, explore other use cases, and run it yourself.


## How to integrate an Actor?

This Task's input is already configured above. Use it as-is rather than inventing a new one.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For full API examples (JavaScript, Python, CLI, MCP, OpenAPI), see this Task's Actor page: https://apify.com/vexaloom-labs/youtube-video-metadata-and-chapter-extractor.md

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).
