# YouTube Scraper — Videos, Transcripts, Comments, Channels (`hipersoft/youtube-scraper`) Actor

All-in-one YouTube API: get video metadata, full transcripts, comments with replies, channel data, and search results in a single call. No setup, fast and cheap.

- **URL**: https://apify.com/hipersoft/youtube-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Videos, Automation
- **Stats:** 11 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0032 / video scraped

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper — Videos, Transcripts, Comments, Channels & Search

**Scrape YouTube** at scale into clean JSON, CSV, Excel or XML. This YouTube scraper extracts **video metadata, full transcripts, comments with reply threads, channel profiles, playlists and search results** — all from one Actor, with no API key and no quotas. A faster, lower-cost alternative to the official YouTube Data API.

Most YouTube scrapers make you run three or four separate tools — one for metadata, one for transcripts, one for comments — and bill you for each. This one does it all in a single run.

![YouTube Scraper input — video, playlist, channel URLs or a search term, with transcript, comments and limit options in the Apify Console](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/youtube-scraper-input.png?v=2)

### What does the YouTube Scraper do?

The YouTube Scraper crawls and extracts public YouTube data by **video URL, playlist URL, channel URL or search term**. Point it at a video, a Shorts link, a **playlist**, a `@handle` or channel, or a search query, and it returns structured data points — views, likes, duration, publish date, subscriber counts, transcripts, comments and more — ready for analytics, datasets, LLM pipelines or lead generation.

### What data can you scrape from YouTube?

| Group | Fields |
|---|---|
| 🎥 **Video** | id, title, description, **description links**, view count, like count, duration (+ seconds), publish date, keywords/tags, thumbnails, **is-monetized**, **comments-turned-off**, is-Short, is-Live, family-safe flag, category |
| 📝 **Transcript** | full text, timestamped segments (start + duration), ready-to-use **SRT subtitles**, language, auto-generated flag, list of available languages |
| 💬 **Comments** | comment text, author handle, like count, published time, **reply threads**, creator/verified flags, reply count |
| 📺 **Channel** | name, handle, channel ID, subscriber count, total views, video count, country, join date, avatar, description, **external & social links** |
| 🔍 **Search** | every matching video with full metadata, ranked by YouTube relevance |

### Use cases

- **Feed transcripts to an LLM** — summaries, RAG knowledge bases, content repurposing and translation at scale.
- **Comment & sentiment analysis** — mine top comments and reply threads for any video or channel.
- **Influencer & lead generation** — pull subscriber counts, contact emails and social links from channel profiles.
- **Competitor & trend research** — track a niche via search results, top videos and channel catalogs.
- **Brand & content monitoring** — watch mentions, engagement and new uploads over time.
- **Build a video dataset** — views, likes, duration and metadata for thousands of videos.
- **Content strategy** — find high-performing formats, keywords and titles in your space.
- **Academic & market research** — study engagement, topics and audience signals from public data.

### How to scrape YouTube data

1. Click **Try for free / Start** to open the YouTube Scraper.
2. Paste **video URLs**, **playlist URLs**, a **search query**, or **channel URLs** (bare video IDs and `@handles` also work).
3. Toggle the add-ons you want — **transcripts**, **comments**, and **channel** enrichment — and set limits.
4. Click **Run**.
5. Download the results as **JSON, CSV, Excel or XML**, or pull them from the API.

### Input

Provide any mix of video URLs, search queries and channel URLs, then toggle the add-ons.

```json
{
  "videoUrls": ["https://www.youtube.com/watch?v=aircAruvnKk"],
  "playlistUrls": ["https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi"],
  "searchQueries": ["machine learning tutorial"],
  "maxResultsPerQuery": 20,
  "channelUrls": ["https://www.youtube.com/@3blue1brown"],
  "includeTranscript": true,
  "transcriptLanguage": "en",
  "includeComments": true,
  "maxComments": 100,
  "includeChannel": true
}
```

| Field | Type | Description |
|---|---|---|
| `videoUrls` | array | YouTube video or Shorts URLs (or bare 11-char video IDs). |
| `playlistUrls` | array | Playlist URLs (or IDs) — every video in the playlist is scraped with full metadata. |
| `searchQueries` | array | Search terms; each result is scraped as a video. |
| `maxResultsPerQuery` | integer | Videos returned per search query, and per playlist (default 20). |
| `channelUrls` | array | Channel URLs — `@handle` or `/channel/UC…`. |
| `includeTranscript` | boolean | Attach the full transcript (text, segments, SRT) to each video. |
| `transcriptLanguage` | string | Preferred transcript language code, e.g. `en`, `es`, `de`. |
| `includeComments` | boolean | Attach comments with reply threads to each video. |
| `maxComments` | integer | Max comments per video, including replies. |
| `includeChannel` | boolean | Attach the uploader's channel profile to each video. |

#### Scrape YouTube by URL or search term

Pass exact `videoUrls` when you know the videos, or `searchQueries` to discover them — mix both in one run.

#### Scrape YouTube transcripts and subtitles

Enable `includeTranscript` for the full transcript, timestamped segments and downloadable **SRT** subtitles, with `transcriptLanguage` selection and an auto-generated fallback.

#### Scrape YouTube comments

Enable `includeComments` to pull top comments **including reply threads**, each with author, like count and verified/creator flags.

### Output

![YouTube Scraper output example — a videos dataset with views, likes, duration, channel and transcripts, plus the full field list as structured JSON](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/youtube-scraper-output.png?v=5)

Each video is one dataset item:

```json
{
  "type": "video",
  "id": "aircAruvnKk",
  "title": "But what is a neural network? | Deep learning chapter 1",
  "viewCount": 23621207,
  "likeCount": 551760,
  "commentCount": 8300,
  "durationSeconds": 1120,
  "publishDate": "2017-10-05T08:11:25-07:00",
  "descriptionLinks": ["https://www.patreon.com/3blue1brown", "https://3b1b.co/nn1-thanks"],
  "isMonetized": true,
  "commentsTurnedOff": false,
  "keywords": ["neural network", "deep learning"],
  "channel": { "name": "3Blue1Brown", "handle": "@3blue1brown", "subscriberCount": 8460000, "links": ["…"] },
  "transcript": {
    "available": true,
    "language": "en",
    "segments": [ { "start": 4.2, "duration": 3.1, "text": "This is a 3." } ],
    "fullText": "This is a 3. It's sloppily written …",
    "srt": "1\n00:00:04,200 --> 00:00:07,300\nThis is a 3.\n…"
  },
  "comments": [
    { "author": "@user", "text": "Great video!", "likeCount": 13000, "replies": ["…"] }
  ]
}
```

Channels and standalone search results are emitted as `type: "channel"` and `type: "search-result"` items with their own fields.

#### Output schema (video items)

| Field | Type | Description |
|-------|------|-------------|
| `type` | string | Item type — `video`, `channel` or `search-result`. |
| `id` | string | YouTube video ID. |
| `url` | string (URL) | Canonical watch URL of the video. |
| `title` | string | Video title. |
| `description` | string | Full video description text. |
| `descriptionLinks` | array | Links found in the description. |
| `durationSeconds` | integer | Video length in seconds. |
| `viewCount` | integer | Total view count. |
| `likeCount` | integer | Total like count. |
| `commentCount` | string | Number of comments (as shown by YouTube). |
| `commentsTurnedOff` | boolean | Whether comments are disabled on the video. |
| `isMonetized` | boolean | Whether the video appears to be monetized. |
| `publishDate` | string (ISO date) | When the video was published. |
| `uploadDate` | string (ISO date) | When the video was uploaded. |
| `category` | string | YouTube category, e.g. `Education`. |
| `keywords` | array | Video tags/keywords. |
| `isLive` | boolean | Whether the item is a live stream. |
| `thumbnail` | string (URL) | Thumbnail image URL. |
| `channel` | object | Channel info — name, handle, subscriberCount and links. |
| `availableTranscripts` | array | Transcript languages available for the video. |

When enabled, video items also include a `transcript` object (segments, `fullText`, `srt`) and a `comments` array (author, text, likeCount, replies).

### Need YouTube comments, transcripts or other platforms?

This Actor already bundles comments, transcripts and channel data — but if you're building a wider dataset, pair it with our other scrapers:

- [TVmaze Scraper](https://apify.com/hipersoft/tvmaze-scraper) — TV shows, episodes and cast with IMDb IDs and ratings.
- [Spotify Scraper](https://apify.com/hipersoft/spotify-scraper) — tracks, artists, albums and playlists.
- [SoundCloud Scraper](https://apify.com/hipersoft/soundcloud-scraper) — tracks, artists and play counts.
- [Twitch Scraper](https://apify.com/hipersoft/twitch-scraper) — streams, channels and viewer stats.
- [Apple Podcasts Scraper](https://apify.com/hipersoft/apple-podcasts-scraper) — podcast shows and episodes.

### FAQ

**Do I need a YouTube API key?**
No. The YouTube Scraper needs no official API key and has no quotas — just add your inputs and run.

**How many videos can I scrape per run?**
As many as you like. Set `maxResultsPerQuery` per search, and pass any mix of video URLs, search queries and channel URLs in one run to scale up to thousands.

**Can I scrape YouTube transcripts and subtitles?**
Yes — enable `includeTranscript` for the full text, timestamped segments and ready-to-use SRT subtitles, with language selection.

**Can I scrape YouTube comments?**
Yes — enable `includeComments` for top comments including reply threads, with author, like count and verified flags.

**Can I scrape a whole YouTube playlist?**
Yes — pass playlist URLs in `playlistUrls` and every video in the playlist is scraped with full metadata (and transcripts/comments if enabled). Use `maxResultsPerQuery` to cap how many videos per playlist.

**Can I download videos or audio?**
No. This Actor extracts metadata, transcripts, comments and channel data — text and numbers only, not media files.

**What export formats are supported?**
JSON, CSV, Excel and XML, plus webhooks and the Apify API.

**Can I automate or integrate the YouTube Scraper?**
Yes. The YouTube Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JavaScript/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes — get a notification, or kick off another process such as loading your data downstream.

**Is scraping YouTube legal?**
The Actor collects only public data. You are responsible for how you use it and for complying with YouTube's terms and applicable laws.

### Related Actors

- [Reddit Scraper](https://apify.com/hipersoft/reddit-scraper) — posts, comments and subreddits.
- [Google Trends Scraper](https://apify.com/hipersoft/google-trends-scraper) — interest over time for any topic.
- [Google News Scraper](https://apify.com/hipersoft/google-news-scraper) — headlines and articles by query.
- [Steam Games Scraper](https://apify.com/hipersoft/steam-games-scraper) — game prices, genres and reviews.

### Notes

Original clean-room implementation. Collects only public YouTube data; you are responsible for how you use the data and for complying with YouTube's terms. This is an independent tool and is not affiliated with or endorsed by YouTube.

# Actor input Schema

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

YouTube video or Shorts URLs (or bare video IDs). Each returns one item with metadata — plus transcript, comments, and channel info if enabled below.

## `searchQueries` (type: `array`):

Search YouTube and scrape the resulting videos (metadata only; enable add-ons below to enrich each hit).

## `maxResultsPerQuery` (type: `integer`):

How many videos to return per search query.

## `channelUrls` (type: `array`):

Channel URLs (@handle or /channel/UC… form). Returns channel metadata, links, and recent videos.

## `playlistUrls` (type: `array`):

YouTube playlist URLs (or bare playlist IDs). Every video in the playlist is scraped with full metadata — plus transcript/comments/channel if enabled. Capped by 'Max results per search query'.

## `includeTranscript` (type: `boolean`):

Fetch the full transcript with timestamps for each video (add-on, charged per transcript).

## `transcriptLanguage` (type: `string`):

Preferred transcript language code (e.g. en, es, de). Falls back to the first available track, including auto-generated.

## `includeComments` (type: `boolean`):

Fetch top comments including reply threads for each video (add-on, charged per comment).

## `maxComments` (type: `integer`):

Upper limit of comments (incl. replies) per video.

## `includeChannel` (type: `boolean`):

Fetch the uploader channel's profile (subscribers, links, description) for each video (add-on, charged per channel).

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

Proxy configuration. Leave the default — it is tuned for reliable results.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "maxResultsPerQuery": 20,
  "includeTranscript": true,
  "transcriptLanguage": "en",
  "includeComments": false,
  "maxComments": 100,
  "includeChannel": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

The scraped results as dataset items.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/youtube-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"] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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"
  ]
}' |
apify call hipersoft/youtube-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/youtube-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eQFDaaFKkTIe3fplv/builds/pLSw5AlET4NuM6nvF/openapi.json
