# YouTube Video Info Scraper - Metadata, Views, Tags API (`convertfleetdotonline/youtube-video-info-scraper`) Actor

Extract YouTube video metadata without an API key: title, views, likes, comments, tags, description, channel, duration, thumbnail. Bulk URL input, clean JSON output, Shorts supported.

- **URL**: https://apify.com/convertfleetdotonline/youtube-video-info-scraper.md
- **Developed by:** [Hasnain Nisar](https://apify.com/convertfleetdotonline) (community)
- **Categories:** Videos, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$1.99 / 1,000 video info fetcheds

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

The **YouTube Video Info Scraper** extracts complete YouTube video metadata at scale — titles, view counts, likes, comments, tags, descriptions, channel info, thumbnails, and upload dates — from any [YouTube](https://www.youtube.com) video URL, with **no API key, no quotas, and no login**. Paste a list of video URLs and get a clean, structured JSON record per video in seconds, ready for Google Sheets, a database, a dashboard, or an AI pipeline. It is the fastest way to pull YouTube video data without the official YouTube Data API and its 10,000-units/day cap.

### What does the YouTube Video Info Scraper do?

The YouTube Video Info Scraper is a **YouTube video metadata API** built on Apify that pulls the full public metadata for any YouTube video you provide. You pass in one or many YouTube URLs (standard videos, Shorts, or live streams), and it returns a structured record for each — without OAuth, without an API key, and without being subject to YouTube Data API quotas.

- **Scrape YouTube video metadata without an API key** — start extracting immediately, no Google Cloud project required
- **Get YouTube view count, likes, and comment count** for any public video
- **Extract YouTube video tags and description** for SEO and keyword research
- **Bulk scrape multiple YouTube URLs** — pass an array, get an array of clean JSON records
- **Scrape YouTube Shorts and live streams** — full URL-format coverage
- **Pull channel name, channel URL, and subscriber count** alongside each video
- **Export YouTube data to CSV, Excel, JSON, or Google Sheets** via Apify's built-in dataset exports

### What data can I extract?

Every record returned by this YouTube data scraper matches the fields below, extracted live on each run.

| Field | Description |
|-------|-------------|
| `id` | YouTube video ID |
| `title` | Video title |
| `description` | Full video description |
| `tags` | Tags array |
| `categories` | YouTube categories |
| `view_count` | Lifetime view count |
| `like_count` | Like count |
| `comment_count` | Comment count |
| `upload_date` | ISO date (YYYY-MM-DD) |
| `duration` | Duration in seconds |
| `duration_string` | Human-readable duration (e.g. "12:34") |
| `thumbnail` | Highest-resolution thumbnail URL |
| `webpage_url` | Canonical video URL |
| `channel` | Channel display name |
| `channel_url` | Channel page URL |
| `channel_follower_count` | Subscriber count |
| `average_rating` | Rating (when available) |
| `age_limit` | Age restriction (0 / 18) |
| `platform` | Source platform identifier |

### How to scrape YouTube video data (step-by-step)

1. Open the YouTube Video Info Scraper on Apify and click **Try for free**.
2. Paste one or more YouTube video URLs into the **YouTube video URLs** field (`youtube.com/watch?v=`, `youtu.be/`, or `youtube.com/shorts/`).
3. Leave **Proxy configuration** on Apify Proxy (recommended — YouTube rate-limits datacenter IPs).
4. (Optional) Paste a Netscape-format `cookies.txt` if you need age-gated or region-restricted videos.
5. Click **Start** and watch records stream into the dataset.
6. Export the results to **CSV, Excel, JSON, or Google Sheets**, or pull them via the Apify API.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `videoUrls` | array of strings | required | One or more YouTube video URLs to extract metadata from. Supports `youtube.com/watch?v=`, `youtu.be/`, and `youtube.com/shorts/`. |
| `proxyConfiguration` | object | `{ "useApifyProxy": true }` | Routes yt-dlp through Apify Proxy. A proxy is required for reliable extraction; failed videos auto-retry via the RESIDENTIAL group. |
| `cookies` | string | `""` | Optional Netscape-format cookies.txt from a logged-in session, for age-gated, region-restricted, or heavily bot-challenged videos. |

```json
{
    "videoUrls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "https://youtu.be/9bZkp7q19f0",
        "https://www.youtube.com/shorts/abc123"
    ],
    "proxyConfiguration": { "useApifyProxy": true }
}
````

### Output example

```json
{
    "id": "dQw4w9WgXcQ",
    "title": "Rick Astley - Never Gonna Give You Up (Official Video)",
    "channel": "Rick Astley",
    "channel_url": "https://www.youtube.com/@RickAstleyYT",
    "channel_follower_count": 4200000,
    "view_count": 1543210000,
    "like_count": 16800000,
    "comment_count": 2400000,
    "upload_date": "2009-10-25",
    "duration": 213,
    "duration_string": "3:33",
    "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
    "tags": ["Rick Astley", "Music", "Pop"],
    "categories": ["Music"],
    "age_limit": 0,
    "platform": "Youtube"
}
```

### Use cases

- **Content research** — analyze top-performing videos in your niche by view count and engagement
- **Competitor analysis** — track competitor video stats and upload cadence over time
- **YouTube SEO research** — extract titles, tags, and descriptions to mine keyword ideas
- **Influencer marketing** — qualify creators by view count, likes, and subscriber count
- **AI / ML training data** — build structured datasets of video metadata for model training
- **Trend tracking** — monitor viral videos, new uploads, and news content as it happens
- **Data journalism** — analyze public YouTube information for stories and reports

### Pricing

This actor runs on Apify's usage-based pricing — you pay only for the compute time and proxy you use, with no per-video fee. It is small and fast: memory stays under 256 MB and a single video typically extracts in 1–3 seconds, so bulk runs of thousands of URLs remain inexpensive. See the actor's **Pricing** tab for current details.

### Why this YouTube scraper instead of the YouTube Data API?

The official YouTube Data API requires a Google Cloud project, an API key, and caps you at 10,000 quota units per day — enough for only a few hundred video lookups. This actor uses [yt-dlp](https://github.com/yt-dlp/yt-dlp), the gold-standard open-source extractor, to query YouTube's public web endpoints the same way a browser does and parse the embedded player JSON. No key, no OAuth, no daily quota, and no fragile DOM selectors.

### FAQ

#### Is it legal to scrape YouTube video data?

This actor extracts only publicly available video metadata. You are responsible for using the data in compliance with YouTube's Terms of Service and applicable laws such as GDPR and CCPA.

#### Do I need a YouTube Data API key or account?

No. The actor works entirely without API credentials, OAuth, or a Google login.

#### How much does it cost to scrape YouTube?

It runs on Apify's usage-based pricing — you pay for compute and proxy only. Extractions are fast (1–3 seconds per video) and run under 256 MB, so costs stay low.

#### Does it work on YouTube Shorts and live streams?

Yes. Shorts (`youtube.com/shorts/...`) and live-stream URLs are fully supported.

#### Can I export the data to CSV, Excel, JSON, or Google Sheets?

Yes. Apify lets you export every dataset to CSV, Excel, JSON, or Google Sheets, or pull results via the Apify API.

#### Will I get blocked, and does it use proxies?

The actor routes requests through Apify Proxy and automatically retries failed videos via the residential proxy group to avoid YouTube's bot challenges.

#### How fresh is the data?

Data is extracted live, in real time, on every run — there is no cache or staleness window.

#### Can it handle age-restricted videos?

Public metadata for age-restricted videos is returned with `age_limit` set to 18. For videos that fail the bot challenge, paste a cookies.txt from a logged-in session.

### Related actors

- [YouTube Channel Scraper](https://apify.com/hasnainnisar67/youtube-channel-scraper) — extract a channel's full video history and stats
- [YouTube Competitor Analyzer](https://apify.com/hasnainnisar67/youtube-competitor-analyzer) — compare up to 5 channels side-by-side
- [YouTube Downloader](https://apify.com/hasnainnisar67/youtube-downloader) — get downloadable MP4 / MP3 URLs
- [TikTok Scraper](https://apify.com/hasnainnisar67/tiktok-scraper) — scrape TikTok by hashtag, profile, and search
- [Reddit Scraper](https://apify.com/hasnainnisar67/reddit-scraper) — scrape Reddit posts, comments, and communities

### Support

Found a bug or need a tweak? Open an issue on the actor's **Issues** tab. Custom scraping solutions and enterprise integrations are available on request.

# Actor input Schema

## `videoUrls` (type: `array`):

One or more YouTube video URLs (or yt-dlp-supported video URLs) to extract metadata from. Supports youtube.com/watch?v=, youtu.be/ and youtube.com/shorts/.

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

yt-dlp is routed through this proxy. Apify datacenter IPs are aggressively rate-limited by YouTube ('Sign in to confirm you're not a bot'), so a proxy is required for reliable extraction. If a video still fails the bot-challenge, the actor automatically retries it via the RESIDENTIAL proxy group.

## `cookies` (type: `string`):

Optional. Paste the contents of a Netscape-format cookies.txt file from a logged-in YouTube session. Used for videos that fail even with the residential-proxy retry (age-gated, region-restricted, or heavily bot-challenged content). See https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "cookies": ""
}
```

# 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 = {
    "videoUrls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("convertfleetdotonline/youtube-video-info-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 = {
    "videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("convertfleetdotonline/youtube-video-info-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 '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call convertfleetdotonline/youtube-video-info-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Video Info Scraper - Metadata, Views, Tags API",
        "description": "Extract YouTube video metadata without an API key: title, views, likes, comments, tags, description, channel, duration, thumbnail. Bulk URL input, clean JSON output, Shorts supported.",
        "version": "0.1",
        "x-build-id": "eQeOHUpts5DYjqwWg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/convertfleetdotonline~youtube-video-info-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-convertfleetdotonline-youtube-video-info-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/convertfleetdotonline~youtube-video-info-scraper/runs": {
            "post": {
                "operationId": "runs-sync-convertfleetdotonline-youtube-video-info-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/convertfleetdotonline~youtube-video-info-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-convertfleetdotonline-youtube-video-info-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",
                "required": [
                    "videoUrls"
                ],
                "properties": {
                    "videoUrls": {
                        "title": "YouTube video URLs",
                        "type": "array",
                        "description": "One or more YouTube video URLs (or yt-dlp-supported video URLs) to extract metadata from. Supports youtube.com/watch?v=, youtu.be/ and youtube.com/shorts/.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "yt-dlp is routed through this proxy. Apify datacenter IPs are aggressively rate-limited by YouTube ('Sign in to confirm you're not a bot'), so a proxy is required for reliable extraction. If a video still fails the bot-challenge, the actor automatically retries it via the RESIDENTIAL proxy group.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "cookies": {
                        "title": "YouTube cookies (Netscape format) - optional",
                        "type": "string",
                        "description": "Optional. Paste the contents of a Netscape-format cookies.txt file from a logged-in YouTube session. Used for videos that fail even with the residential-proxy retry (age-gated, region-restricted, or heavily bot-challenged content). See https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
