# 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 browser, no API keys, fast and cheap.

- **URL**: https://apify.com/hipersoft/youtube-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Videos, Automation
- **Stats:** 3 total users, 1 monthly users, 96.8% 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/platform/actors/running/actors-in-store#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

Extract everything from YouTube in a **single Actor**: video metadata, full **transcripts** (with timestamps), **comments** with reply threads, **channel** profiles with social links, and **search** results. No official API keys, no quotas, no browser — fast and low-cost.

Most YouTube scrapers make you run three or four separate Actors (one for metadata, one for transcripts, one for comments…) and bill you separately for each. This one does it all in one call.

### Features

- 🎥 **Video metadata** — title, description, view count, like count, duration, publish date, keywords, thumbnails
- 📝 **Transcripts** — full text, timestamped segments, and ready-to-use SRT subtitles, with language selection and auto-generated fallback
- 💬 **Comments** — top comments **including reply threads**, with author, like count, and creator/verified flags
- 📺 **Channels** — subscribers, total views, video count, country, join date, **external & social links**, and recent videos
- 🔍 **Search** — scrape YouTube search results, optionally enriched with transcripts/comments/channel data
- ⚡ **Fast & cheap** — fast and lightweight (512 MB)

### Input

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

```json
{
  "videoUrls": ["https://www.youtube.com/watch?v=aircAruvnKk"],
  "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 | Video or Shorts URLs (or bare 11-char IDs) |
| `searchQueries` | array | Search terms; results scraped as videos |
| `maxResultsPerQuery` | integer | Videos to return per search query (default 20) |
| `channelUrls` | array | Channel URLs (`@handle` or `/channel/UC…`) |
| `includeTranscript` | boolean | Attach the transcript to each video |
| `transcriptLanguage` | string | Preferred language code, e.g. `en`, `es`, `de` |
| `includeComments` | boolean | Attach comments (with replies) to each video |
| `maxComments` | integer | Max comments per video incl. replies |
| `includeChannel` | boolean | Attach the uploader's channel profile to each video |

### Output

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,
  "durationSeconds": 1120,
  "publishDate": "2017-10-05T08:11:25-07:00",
  "channel": { "name": "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.

### Common use cases

- **Feed transcripts to an LLM** for summaries, RAG, or content repurposing
- **Comment & sentiment analysis** on any video or channel
- **Lead generation** — pull business emails and social links from channel About pages
- **Competitor & trend research** across search results and channel catalogs

### Integration

Run it from the [Apify API](https://docs.apify.com/api/v2), the JavaScript/Python clients, or schedule it in the Apify Console. Export results as JSON, CSV, Excel, or via webhook.

### FAQ

**Do I need a YouTube API key?**
No. The Actor works without official [YouTube](https://www.youtube.com) API keys or quotas, using plain HTTP requests instead of the Data API.

**How many videos can I get per run?**
For searches, set `maxResultsPerQuery` (default 20) per query, and pass any combination of video URLs, search queries and channel URLs in one run to scale up.

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

**What's the output format?**
One JSON dataset item per video (or `channel` / `search-result` item), with nested transcript, comment and channel objects. Export as JSON, CSV, Excel or via webhook.

**Can I get transcripts and comments too?**
Yes. Toggle `includeTranscript` for full text, timestamped segments and ready-to-use SRT subtitles, and `includeComments` for top comments with reply threads.

### Related Actors

Building a media or entertainment dataset? Pair this with our other scrapers:

- [TVMaze TV Shows 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 with no login or API key.
- [Apple Podcasts Scraper](https://apify.com/hipersoft/apple-podcasts-scraper) — podcast shows and episodes with RSS feeds and artwork.
- [Steam Games Scraper](https://apify.com/hipersoft/steam-games-scraper) — game prices, genres, platforms and Metacritic scores.

### Notes

Only public data is scraped. If you hit occasional blocks at scale, enable residential proxies in the input.

# 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.

## `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 to use. YouTube blocks datacenter IPs on video metadata, so residential proxies are required and set by default. Leave as-is unless you have your own proxies.

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

# 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("💾 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"
  ]
}' |
apify call hipersoft/youtube-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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