# YouTube Tags Extractor (`maximedupre/youtube-tags-extractor`) Actor

Extract hidden YouTube tags from public video URLs, youtu.be links, Shorts URLs, or raw video IDs. Get ordered tags, video ID, title, channel details, thumbnail, and description for SEO research, content planning, and competitor analysis.

- **URL**: https://apify.com/maximedupre/youtube-tags-extractor.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.65 / 1,000 scraped videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### 🏷️ YouTube tags extractor for video SEO

YouTube Tags Extractor gets hidden tags from public [YouTube](https://www.youtube.com/) videos. Add YouTube watch URLs, youtu.be links, Shorts URLs, or raw video IDs, then export one clean row per accessible video with ordered tags, video ID, title, channel details, thumbnail URL, and description when YouTube shows them.

Use this YouTube tags extractor for video SEO research, content planning, competitor analysis, metadata audits, and repeatable tag exports. You do not need YouTube cookies, a login, OAuth, or a YouTube API key. For a quick first run, keep the prefilled examples and open the dataset when the run finishes.

The Actor focuses on public video targets. It does not search YouTube, crawl channels, scrape comments, extract transcripts, score keywords, or generate tag ideas. It checks the videos you provide and saves source-backed data only.

### ✅ What this Actor does

- Extracts hidden YouTube tags from public videos.
- Preserves tag order as YouTube exposes it.
- Accepts watch URLs, youtu.be links, Shorts URLs, embed URLs, live URLs, and raw 11-character video IDs.
- Deduplicates repeated targets by normalized video ID.
- Saves one dataset row per successfully processed public video.
- Adds video ID, title, channel name, channel ID, thumbnail URL, and description when available.
- Emits `tags: []` for accessible public videos that have no hidden tags.
- Skips invalid, private, removed, blocked, or unavailable targets without saving misleading rows.
- Works with Apify dataset exports, API access, schedules, webhooks, and integrations.

### 📦 YouTube tags and metadata you can export

Each output row represents one accessible YouTube video. Fields include:

- `videoId` - stable YouTube video ID.
- `title` - video title when available.
- `channelName` - channel name when available.
- `channelId` - YouTube channel ID when available.
- `thumbnailUrl` - best available YouTube thumbnail URL when available.
- `description` - video description when available.
- `tags` - hidden YouTube tags in source order.

The output intentionally avoids fields you can derive yourself, such as a watch URL from `videoId`, a channel URL from `channelId`, joined tag text, or tag count. This keeps the dataset compact and easier to join with your own tools.

### 🚀 Common use cases

- Compare hidden tags across competitor YouTube videos.
- Build a video SEO audit from public video URLs.
- Collect tag examples for content briefs and metadata reviews.
- Check whether a video has hidden tags without opening YouTube manually.
- Join video tags with channel, title, thumbnail, and description data in a spreadsheet.
- Run the same public video list on a schedule and export the dataset through the Apify API.

### ▶️ How to run it

1. Open the Input tab.
2. Paste one public YouTube video URL or ID per line in **YouTube video URLs or IDs**.
3. Keep the prefilled examples for a small first run, or replace them with your own targets.
4. Start the Actor.
5. Open the dataset and export the results as JSON, CSV, Excel, XML, RSS, or HTML.

Accepted input examples:

```json
{
	"videoUrlsOrIds": [
		"https://www.youtube.com/watch?v=Zi_XLOBDo_Y",
		"https://youtu.be/60ItHLz5WEA",
		"https://www.youtube.com/shorts/8Zk5XzLJSAw",
		"HV23VDFWC3o"
	]
}
````

### 🧾 Output example

```json
{
	"videoId": "Zi_XLOBDo_Y",
	"title": "Michael Jackson - Billie Jean (Official Video)",
	"channelName": "michaeljacksonVEVO",
	"channelId": "UCulYu1HEIa7f70L2lYZWHOw",
	"thumbnailUrl": "https://i.ytimg.com/vi/Zi_XLOBDo_Y/maxresdefault.jpg",
	"description": "Official music video for Billie Jean by Michael Jackson.",
	"tags": ["Michael jackson", "billie jean", "thriller"]
}
```

Some nullable fields can be `null` when YouTube does not show that value. The `tags` field is always an array and can be empty for accessible public videos with no hidden tags.

### 💳 Pricing

This Actor uses pay-per-event pricing. You are charged only for successfully saved video rows.

- `Scraped video` - `$0.00265` per accessible public video saved to the dataset.

Skipped targets, unsupported inputs, private videos, removed videos, blocked videos, and unavailable videos are not saved as result rows and are not charged as successful video rows.

### ⚠️ Limits and caveats

- The Actor works on public YouTube videos you provide directly. It does not discover videos from search results or channel pages.
- YouTube can hide, remove, age-gate, region-block, or otherwise withhold some videos. Those targets are skipped and explained in the run log.
- Hidden tags are returned only when YouTube exposes them for that video.
- The Actor does not create, rewrite, translate, rank, score, or recommend tags.
- Very large input lists should be split into smaller runs if you want easier auditing and retry handling.

### ❓ FAQ

#### 🔑 Do I need a YouTube API key?

No. The Actor is built for public YouTube video pages and does not ask for a YouTube API key, OAuth, cookies, or a login.

#### 🎬 Can it process Shorts URLs?

Yes. Paste a Shorts URL such as `https://www.youtube.com/shorts/8Zk5XzLJSAw`. The Actor normalizes it to the underlying video ID and checks it like any other public video target.

#### 🚫 Why did a video return no row?

The video may be private, removed, unavailable, unsupported, blocked, or not exposing the required public video data during the run. The Actor reports skipped targets in the log instead of saving synthetic error rows to the dataset.

#### 🏷️ Why does a row have an empty `tags` array?

That means the video was accessible, but YouTube did not expose hidden tags for it. This is different from a skipped target.

#### 🔌 Can I use the results through an API?

Yes. Run the Actor through the Apify API, schedule it, connect it to webhooks, or export the dataset in common formats such as JSON, CSV, Excel, XML, RSS, and HTML.

### 📝 Changelog

- 0.1: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~youtube-tags-extractor/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [YouTube Keywords Discovery Tool ↗](https://apify.com/maximedupre/youtube-keywords-discovery-tool) - Collect YouTube autocomplete suggestions for content planning and video SEO.
- [YouTube Channel Statistics Scraper ↗](https://apify.com/maximedupre/youtube-channel-statistics-scraper) - Export public channel stats such as subscribers, views, video count, and profile details.
- [YouTube Channel Search Scraper ↗](https://apify.com/maximedupre/youtube-channel-search-scraper) - Find public YouTube channels from search keywords and export channel details.
- [YouTube Channel Scraper ↗](https://apify.com/maximedupre/youtube-channel-scraper) - Scrape channel profiles and recent video rows from public YouTube channels.
- [TikTok Keywords Discovery Tool ↗](https://apify.com/maximedupre/tiktok-keywords-discovery-tool) - Collect TikTok autocomplete suggestions for social search research and content planning.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `videoUrlsOrIds` (type: `array`):

Paste one public YouTube watch URL, youtu.be link, Shorts URL, or raw video ID per line.

## Actor input object example

```json
{
  "videoUrlsOrIds": [
    "8Zk5XzLJSAw",
    "hT_nvWreIhg",
    "kJQP7kiw5Fk",
    "Zi_XLOBDo_Y",
    "9bZkp7q19f0",
    "fJ9rUzIMcZQ",
    "CevxZvSJLk8",
    "HV23VDFWC3o",
    "pRpeEdMmmQ0",
    "uelHwf8o7_U",
    "oRdxUFDoQe0",
    "09R8_2nJtjg",
    "hTWKbfoikeg",
    "L_jWHffIx5E",
    "YykjpeuMNEk",
    "60ItHLz5WEA",
    "e-ORhEE9VVg",
    "y6120QOlsfU",
    "2Vv-BfVoq4g",
    "lp-EO5I60KA",
    "dQw4w9WgXcQ",
    "SlPhMPnQ58k",
    "RBumgq5yVrA",
    "OPf0YbXqDm0",
    "kXYiU_JCYtU",
    "JGwWNGJdvx8",
    "ktvTqknDobU",
    "hLQl3WQQoQ0",
    "iEPTlhBmwRg",
    "QK8mJJJvaes",
    "3tmd-ClpJxA",
    "j5-yKhDd64s",
    "YqeW9_5kURI",
    "k2qgadSvNyU",
    "XbGs_qK2PQA",
    "JRfuAukYTKg",
    "k4V3Mo61fJM",
    "aJOTlE1K90k",
    "0KSOMA3QBU0",
    "tAGnKpE4NCI",
    "XqZsoesa55w",
    "7wtfhZwyrcc",
    "YQHsXMglC9A",
    "dvgZkm1xWPE",
    "HgzGwKwLmgM",
    "VYOjWnS4cMY",
    "djV11Xbc914",
    "8SbUC-UaAxE",
    "1w7OgIMMRc4",
    "vabnZ9-ex7o",
    "nfWlot6h_JM",
    "bx1Bh8ZvH84",
    "eVTXPUF4Oz4",
    "1G4isv_Fylg",
    "FTQbiNvZqaY",
    "9jK-NcRmVcw",
    "lDK9QqIzhwk",
    "RgKAFK5djSk",
    "SR6iYWJxHqs",
    "NdYWuo9OFAw",
    "v2AC41dglnM",
    "2vjPBrBU-TM",
    "fKopy74weus",
    "IcrbM1l_BoI",
    "HL1UzIK-flA",
    "6Ejga4kJUts",
    "lWA2pjMjpBs",
    "4m1EFMoRFvY",
    "RB-RcX5DS5A",
    "bESGLojNYSo",
    "TUVcZfQe-Kw",
    "5NV6Rdv1a3I",
    "bnVUHWCynig",
    "qrO4YZeyl0I",
    "4NRXx6U8ABQ",
    "b1kbLwvqugk",
    "bo_efYhYU2A",
    "ZbZSe6N_BXs",
    "DyDfgMOUjCI",
    "UprcpdwuwCg",
    "E07s5ZYygMg",
    "V1Pl8CzNzCw",
    "34Na4j8AVgA",
    "kffacxfA7G4",
    "pXRviuL6vMY",
    "QGJuMBdaqIw",
    "jNQXAC9IVRw",
    "U3ASj1L6_sY",
    "pB-5XG-DbAA",
    "ALZHF5UqnU4",
    "fk4BbF7B29w",
    "7PCkvCPvDXk",
    "BQ0mxQXmLsk",
    "3AtDnEC4zak",
    "gl1aHhXnN1k",
    "VuNIsY6JdUw",
    "rYEDA3JcQqw",
    "1-xGerv5FOk",
    "My2FRPA3Gf8",
    "QtXby3twMmI",
    "H5v3kku4y6Q",
    "VbfpW0pbvaU",
    "LjhCEhWiKXk",
    "M7lc1UVf-VE",
    "QJO3ROT-A4E",
    "Jwgf3wmiA04",
    "KRaWnd3LJfs",
    "nPvuNsRccVw",
    "lY2yjAdbvdQ",
    "Io0fBr1XBUA",
    "QYh6mYIJG2Y",
    "fwK7ggA3-bU",
    "SXiSVQZLje8",
    "NmugSMBh_iI",
    "qpgTC9MDx1o",
    "FM7MFYoylVs",
    "pa14VNsdSYM",
    "oygrmJFKYZY",
    "SMs0GnYze34",
    "uxpDa-c-4Mc",
    "mWRsgZuwf_8",
    "iS1g8G_njx8",
    "Pkh8UtuejGw",
    "xpVfcZ0ZcFM",
    "niqrrmev4mA",
    "yKNxeF4KMsY",
    "nYh-n7EOtMA",
    "_Yhyp-_hX2s",
    "UqyT8IEBkvY",
    "EHkozMIXZ8w",
    "HyHNuVaZJ-k",
    "d2smz_1L2_0",
    "CvBfHwUxHIk",
    "KWZGAExj-es",
    "Pw-0pbY9JeU",
    "DK_0jXPuIr0",
    "nfs8NYg7yQM",
    "1V_xRb0x9aw",
    "YVkUvmDQ3HY"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

View ordered hidden tags, video IDs, titles, channel details, thumbnails, and descriptions.

# 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 = {
    "videoUrlsOrIds": [
        "8Zk5XzLJSAw",
        "hT_nvWreIhg",
        "kJQP7kiw5Fk",
        "Zi_XLOBDo_Y",
        "9bZkp7q19f0",
        "fJ9rUzIMcZQ",
        "CevxZvSJLk8",
        "HV23VDFWC3o",
        "pRpeEdMmmQ0",
        "uelHwf8o7_U",
        "oRdxUFDoQe0",
        "09R8_2nJtjg",
        "hTWKbfoikeg",
        "L_jWHffIx5E",
        "YykjpeuMNEk",
        "60ItHLz5WEA",
        "e-ORhEE9VVg",
        "y6120QOlsfU",
        "2Vv-BfVoq4g",
        "lp-EO5I60KA",
        "dQw4w9WgXcQ",
        "SlPhMPnQ58k",
        "RBumgq5yVrA",
        "OPf0YbXqDm0",
        "kXYiU_JCYtU",
        "JGwWNGJdvx8",
        "ktvTqknDobU",
        "hLQl3WQQoQ0",
        "iEPTlhBmwRg",
        "QK8mJJJvaes",
        "3tmd-ClpJxA",
        "j5-yKhDd64s",
        "YqeW9_5kURI",
        "k2qgadSvNyU",
        "XbGs_qK2PQA",
        "JRfuAukYTKg",
        "k4V3Mo61fJM",
        "aJOTlE1K90k",
        "0KSOMA3QBU0",
        "tAGnKpE4NCI",
        "XqZsoesa55w",
        "7wtfhZwyrcc",
        "YQHsXMglC9A",
        "dvgZkm1xWPE",
        "HgzGwKwLmgM",
        "VYOjWnS4cMY",
        "djV11Xbc914",
        "8SbUC-UaAxE",
        "1w7OgIMMRc4",
        "vabnZ9-ex7o",
        "nfWlot6h_JM",
        "bx1Bh8ZvH84",
        "eVTXPUF4Oz4",
        "1G4isv_Fylg",
        "FTQbiNvZqaY",
        "9jK-NcRmVcw",
        "lDK9QqIzhwk",
        "RgKAFK5djSk",
        "SR6iYWJxHqs",
        "NdYWuo9OFAw",
        "v2AC41dglnM",
        "2vjPBrBU-TM",
        "fKopy74weus",
        "IcrbM1l_BoI",
        "HL1UzIK-flA",
        "6Ejga4kJUts",
        "lWA2pjMjpBs",
        "4m1EFMoRFvY",
        "RB-RcX5DS5A",
        "bESGLojNYSo",
        "TUVcZfQe-Kw",
        "5NV6Rdv1a3I",
        "bnVUHWCynig",
        "qrO4YZeyl0I",
        "4NRXx6U8ABQ",
        "b1kbLwvqugk",
        "bo_efYhYU2A",
        "ZbZSe6N_BXs",
        "DyDfgMOUjCI",
        "UprcpdwuwCg",
        "E07s5ZYygMg",
        "V1Pl8CzNzCw",
        "34Na4j8AVgA",
        "kffacxfA7G4",
        "pXRviuL6vMY",
        "QGJuMBdaqIw",
        "jNQXAC9IVRw",
        "U3ASj1L6_sY",
        "pB-5XG-DbAA",
        "ALZHF5UqnU4",
        "fk4BbF7B29w",
        "7PCkvCPvDXk",
        "BQ0mxQXmLsk",
        "3AtDnEC4zak",
        "gl1aHhXnN1k",
        "VuNIsY6JdUw",
        "rYEDA3JcQqw",
        "1-xGerv5FOk",
        "My2FRPA3Gf8",
        "QtXby3twMmI",
        "H5v3kku4y6Q",
        "VbfpW0pbvaU",
        "LjhCEhWiKXk",
        "M7lc1UVf-VE",
        "QJO3ROT-A4E",
        "Jwgf3wmiA04",
        "KRaWnd3LJfs",
        "nPvuNsRccVw",
        "lY2yjAdbvdQ",
        "Io0fBr1XBUA",
        "QYh6mYIJG2Y",
        "fwK7ggA3-bU",
        "SXiSVQZLje8",
        "NmugSMBh_iI",
        "qpgTC9MDx1o",
        "FM7MFYoylVs",
        "pa14VNsdSYM",
        "oygrmJFKYZY",
        "SMs0GnYze34",
        "uxpDa-c-4Mc",
        "mWRsgZuwf_8",
        "iS1g8G_njx8",
        "Pkh8UtuejGw",
        "xpVfcZ0ZcFM",
        "niqrrmev4mA",
        "yKNxeF4KMsY",
        "nYh-n7EOtMA",
        "_Yhyp-_hX2s",
        "UqyT8IEBkvY",
        "EHkozMIXZ8w",
        "HyHNuVaZJ-k",
        "d2smz_1L2_0",
        "CvBfHwUxHIk",
        "KWZGAExj-es",
        "Pw-0pbY9JeU",
        "DK_0jXPuIr0",
        "nfs8NYg7yQM",
        "1V_xRb0x9aw",
        "YVkUvmDQ3HY"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/youtube-tags-extractor").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 = { "videoUrlsOrIds": [
        "8Zk5XzLJSAw",
        "hT_nvWreIhg",
        "kJQP7kiw5Fk",
        "Zi_XLOBDo_Y",
        "9bZkp7q19f0",
        "fJ9rUzIMcZQ",
        "CevxZvSJLk8",
        "HV23VDFWC3o",
        "pRpeEdMmmQ0",
        "uelHwf8o7_U",
        "oRdxUFDoQe0",
        "09R8_2nJtjg",
        "hTWKbfoikeg",
        "L_jWHffIx5E",
        "YykjpeuMNEk",
        "60ItHLz5WEA",
        "e-ORhEE9VVg",
        "y6120QOlsfU",
        "2Vv-BfVoq4g",
        "lp-EO5I60KA",
        "dQw4w9WgXcQ",
        "SlPhMPnQ58k",
        "RBumgq5yVrA",
        "OPf0YbXqDm0",
        "kXYiU_JCYtU",
        "JGwWNGJdvx8",
        "ktvTqknDobU",
        "hLQl3WQQoQ0",
        "iEPTlhBmwRg",
        "QK8mJJJvaes",
        "3tmd-ClpJxA",
        "j5-yKhDd64s",
        "YqeW9_5kURI",
        "k2qgadSvNyU",
        "XbGs_qK2PQA",
        "JRfuAukYTKg",
        "k4V3Mo61fJM",
        "aJOTlE1K90k",
        "0KSOMA3QBU0",
        "tAGnKpE4NCI",
        "XqZsoesa55w",
        "7wtfhZwyrcc",
        "YQHsXMglC9A",
        "dvgZkm1xWPE",
        "HgzGwKwLmgM",
        "VYOjWnS4cMY",
        "djV11Xbc914",
        "8SbUC-UaAxE",
        "1w7OgIMMRc4",
        "vabnZ9-ex7o",
        "nfWlot6h_JM",
        "bx1Bh8ZvH84",
        "eVTXPUF4Oz4",
        "1G4isv_Fylg",
        "FTQbiNvZqaY",
        "9jK-NcRmVcw",
        "lDK9QqIzhwk",
        "RgKAFK5djSk",
        "SR6iYWJxHqs",
        "NdYWuo9OFAw",
        "v2AC41dglnM",
        "2vjPBrBU-TM",
        "fKopy74weus",
        "IcrbM1l_BoI",
        "HL1UzIK-flA",
        "6Ejga4kJUts",
        "lWA2pjMjpBs",
        "4m1EFMoRFvY",
        "RB-RcX5DS5A",
        "bESGLojNYSo",
        "TUVcZfQe-Kw",
        "5NV6Rdv1a3I",
        "bnVUHWCynig",
        "qrO4YZeyl0I",
        "4NRXx6U8ABQ",
        "b1kbLwvqugk",
        "bo_efYhYU2A",
        "ZbZSe6N_BXs",
        "DyDfgMOUjCI",
        "UprcpdwuwCg",
        "E07s5ZYygMg",
        "V1Pl8CzNzCw",
        "34Na4j8AVgA",
        "kffacxfA7G4",
        "pXRviuL6vMY",
        "QGJuMBdaqIw",
        "jNQXAC9IVRw",
        "U3ASj1L6_sY",
        "pB-5XG-DbAA",
        "ALZHF5UqnU4",
        "fk4BbF7B29w",
        "7PCkvCPvDXk",
        "BQ0mxQXmLsk",
        "3AtDnEC4zak",
        "gl1aHhXnN1k",
        "VuNIsY6JdUw",
        "rYEDA3JcQqw",
        "1-xGerv5FOk",
        "My2FRPA3Gf8",
        "QtXby3twMmI",
        "H5v3kku4y6Q",
        "VbfpW0pbvaU",
        "LjhCEhWiKXk",
        "M7lc1UVf-VE",
        "QJO3ROT-A4E",
        "Jwgf3wmiA04",
        "KRaWnd3LJfs",
        "nPvuNsRccVw",
        "lY2yjAdbvdQ",
        "Io0fBr1XBUA",
        "QYh6mYIJG2Y",
        "fwK7ggA3-bU",
        "SXiSVQZLje8",
        "NmugSMBh_iI",
        "qpgTC9MDx1o",
        "FM7MFYoylVs",
        "pa14VNsdSYM",
        "oygrmJFKYZY",
        "SMs0GnYze34",
        "uxpDa-c-4Mc",
        "mWRsgZuwf_8",
        "iS1g8G_njx8",
        "Pkh8UtuejGw",
        "xpVfcZ0ZcFM",
        "niqrrmev4mA",
        "yKNxeF4KMsY",
        "nYh-n7EOtMA",
        "_Yhyp-_hX2s",
        "UqyT8IEBkvY",
        "EHkozMIXZ8w",
        "HyHNuVaZJ-k",
        "d2smz_1L2_0",
        "CvBfHwUxHIk",
        "KWZGAExj-es",
        "Pw-0pbY9JeU",
        "DK_0jXPuIr0",
        "nfs8NYg7yQM",
        "1V_xRb0x9aw",
        "YVkUvmDQ3HY",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/youtube-tags-extractor").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 '{
  "videoUrlsOrIds": [
    "8Zk5XzLJSAw",
    "hT_nvWreIhg",
    "kJQP7kiw5Fk",
    "Zi_XLOBDo_Y",
    "9bZkp7q19f0",
    "fJ9rUzIMcZQ",
    "CevxZvSJLk8",
    "HV23VDFWC3o",
    "pRpeEdMmmQ0",
    "uelHwf8o7_U",
    "oRdxUFDoQe0",
    "09R8_2nJtjg",
    "hTWKbfoikeg",
    "L_jWHffIx5E",
    "YykjpeuMNEk",
    "60ItHLz5WEA",
    "e-ORhEE9VVg",
    "y6120QOlsfU",
    "2Vv-BfVoq4g",
    "lp-EO5I60KA",
    "dQw4w9WgXcQ",
    "SlPhMPnQ58k",
    "RBumgq5yVrA",
    "OPf0YbXqDm0",
    "kXYiU_JCYtU",
    "JGwWNGJdvx8",
    "ktvTqknDobU",
    "hLQl3WQQoQ0",
    "iEPTlhBmwRg",
    "QK8mJJJvaes",
    "3tmd-ClpJxA",
    "j5-yKhDd64s",
    "YqeW9_5kURI",
    "k2qgadSvNyU",
    "XbGs_qK2PQA",
    "JRfuAukYTKg",
    "k4V3Mo61fJM",
    "aJOTlE1K90k",
    "0KSOMA3QBU0",
    "tAGnKpE4NCI",
    "XqZsoesa55w",
    "7wtfhZwyrcc",
    "YQHsXMglC9A",
    "dvgZkm1xWPE",
    "HgzGwKwLmgM",
    "VYOjWnS4cMY",
    "djV11Xbc914",
    "8SbUC-UaAxE",
    "1w7OgIMMRc4",
    "vabnZ9-ex7o",
    "nfWlot6h_JM",
    "bx1Bh8ZvH84",
    "eVTXPUF4Oz4",
    "1G4isv_Fylg",
    "FTQbiNvZqaY",
    "9jK-NcRmVcw",
    "lDK9QqIzhwk",
    "RgKAFK5djSk",
    "SR6iYWJxHqs",
    "NdYWuo9OFAw",
    "v2AC41dglnM",
    "2vjPBrBU-TM",
    "fKopy74weus",
    "IcrbM1l_BoI",
    "HL1UzIK-flA",
    "6Ejga4kJUts",
    "lWA2pjMjpBs",
    "4m1EFMoRFvY",
    "RB-RcX5DS5A",
    "bESGLojNYSo",
    "TUVcZfQe-Kw",
    "5NV6Rdv1a3I",
    "bnVUHWCynig",
    "qrO4YZeyl0I",
    "4NRXx6U8ABQ",
    "b1kbLwvqugk",
    "bo_efYhYU2A",
    "ZbZSe6N_BXs",
    "DyDfgMOUjCI",
    "UprcpdwuwCg",
    "E07s5ZYygMg",
    "V1Pl8CzNzCw",
    "34Na4j8AVgA",
    "kffacxfA7G4",
    "pXRviuL6vMY",
    "QGJuMBdaqIw",
    "jNQXAC9IVRw",
    "U3ASj1L6_sY",
    "pB-5XG-DbAA",
    "ALZHF5UqnU4",
    "fk4BbF7B29w",
    "7PCkvCPvDXk",
    "BQ0mxQXmLsk",
    "3AtDnEC4zak",
    "gl1aHhXnN1k",
    "VuNIsY6JdUw",
    "rYEDA3JcQqw",
    "1-xGerv5FOk",
    "My2FRPA3Gf8",
    "QtXby3twMmI",
    "H5v3kku4y6Q",
    "VbfpW0pbvaU",
    "LjhCEhWiKXk",
    "M7lc1UVf-VE",
    "QJO3ROT-A4E",
    "Jwgf3wmiA04",
    "KRaWnd3LJfs",
    "nPvuNsRccVw",
    "lY2yjAdbvdQ",
    "Io0fBr1XBUA",
    "QYh6mYIJG2Y",
    "fwK7ggA3-bU",
    "SXiSVQZLje8",
    "NmugSMBh_iI",
    "qpgTC9MDx1o",
    "FM7MFYoylVs",
    "pa14VNsdSYM",
    "oygrmJFKYZY",
    "SMs0GnYze34",
    "uxpDa-c-4Mc",
    "mWRsgZuwf_8",
    "iS1g8G_njx8",
    "Pkh8UtuejGw",
    "xpVfcZ0ZcFM",
    "niqrrmev4mA",
    "yKNxeF4KMsY",
    "nYh-n7EOtMA",
    "_Yhyp-_hX2s",
    "UqyT8IEBkvY",
    "EHkozMIXZ8w",
    "HyHNuVaZJ-k",
    "d2smz_1L2_0",
    "CvBfHwUxHIk",
    "KWZGAExj-es",
    "Pw-0pbY9JeU",
    "DK_0jXPuIr0",
    "nfs8NYg7yQM",
    "1V_xRb0x9aw",
    "YVkUvmDQ3HY"
  ]
}' |
apify call maximedupre/youtube-tags-extractor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Tags Extractor",
        "description": "Extract hidden YouTube tags from public video URLs, youtu.be links, Shorts URLs, or raw video IDs. Get ordered tags, video ID, title, channel details, thumbnail, and description for SEO research, content planning, and competitor analysis.",
        "version": "0.1",
        "x-build-id": "9HzaXfNWLCtlTSuvO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~youtube-tags-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-youtube-tags-extractor",
                "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/maximedupre~youtube-tags-extractor/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-youtube-tags-extractor",
                "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/maximedupre~youtube-tags-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-youtube-tags-extractor",
                "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",
                "required": [
                    "videoUrlsOrIds"
                ],
                "properties": {
                    "videoUrlsOrIds": {
                        "title": "YouTube video URLs or IDs",
                        "minItems": 1,
                        "type": "array",
                        "description": "Paste one public YouTube watch URL, youtu.be link, Shorts URL, or raw video ID per line.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
