# YouTube channel scraper API — $0.0008/video

> YouTube channel scraper API: A channel

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*YouTube channel scraper API*

# YouTube channel scraper API

A YouTube channel scraper API: pass a handle, a channel id or a URL and get the channel's uploads — title, video id, views, publish age, duration and thumbnail — with the channel's own name, subscriber count and video total stamped on every row.

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/youtube-channel-scraper-api/#integration)

$0.0008 per delivered video · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/youtube_channel/run

```
$ curl $QD/youtube_channel/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"channel": "@NASA", "tab": "videos", "max_results": 30}'
{ "status": "done", "count": 30,
  "results": [
    {
      "channel": "…",
      "channel_id": "…",
      "channel_url": "…",
      "channel_description": "…" } ],
  "cost": 0.024 }
# 30 videos × $0.0008 · nothing delivered, nothing charged
```

**$0.0008 / video**2,500 videos on the free $2 every month

**Semantic input**channel, tab, country — no URL lists

**Up to 60**videos per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [What it is](/collectors/youtube-channel-scraper-api/#what) [Output fields](/collectors/youtube-channel-scraper-api/#output) [Inputs](/collectors/youtube-channel-scraper-api/#input) [Pricing](/collectors/youtube-channel-scraper-api/#pricing) [Integration](/collectors/youtube-channel-scraper-api/#integration) [Use cases](/collectors/youtube-channel-scraper-api/#use-cases) [Versus the alternatives](/collectors/youtube-channel-scraper-api/#compare) [FAQ](/collectors/youtube-channel-scraper-api/#faq)

## What a YouTube channel scraper API does

Monitoring a creator means reading the uploads tab, not the search page. That tab has already migrated to YouTube's newer card format, where the old video renderer object simply does not exist — which is why search-based scrapers return zero rows on a channel page that visibly has thirty videos.

This collector reads the new format directly, expands abbreviated counts (15.1M subscribers becomes a number) and covers the videos, shorts and streams tabs. One page per run, and the response says so rather than looking truncated.

Input is meaning, not a URL *channel* *tab* *country* *max_results*

## What one video looks like

Every delivered video carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `rank` | integer | 1-based position on the tab. |
| `channel` | string · nullable | Channel name. |
| `channel_id` | string · nullable | Channel id (UC…). |
| `channel_url` | string · nullable | Canonical channel URL. |
| `channel_description` | string · nullable | Channel description (trimmed). |
| `channel_subscribers` | integer · nullable | Subscribers (15.1M → 15100000). |
| `channel_videos` | integer · nullable | Total videos on the channel. |
| `video_id` | string | Video id. |
| `title` | string | Video title. |
| `url` | string | Watch URL. |
| `views` | string · nullable | Views as shown. |
| `views_value` | integer · nullable | Views as a number. |
| `published` | string · nullable | Publish age. |
| `duration` | string · nullable | Duration (m:ss). |
| `live` | boolean | True for live/premiere items. |
| `thumbnail` | string · nullable | Thumbnail URL. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `channel` | string | yes | Handle (@NASA), channel id (UC…) or channel URL. |
| `tab` | string | no | Which uploads tab to read. One of: `videos`, `shorts`, `streams`. |
| `country` | string | no | ISO 3166-1 alpha-2 code — proxy exit geo and Google locale (gl). Omit for the default pool. |
| `max_results` | integer | no | How many videos to deliver at most (1–60). You pay only for delivered videos. |

Pricing

## YouTube channel scraper API pricing

$0.0008 per delivered video. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,500 videos before you spend anything.

**$0.0008**per delivered video*$0.8 per 1,000 delivered videos*

**2,500 videos**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/youtube_channel/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/youtube_channel/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel":"@NASA","tab":"videos","max_results":30}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/youtube_channel/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "channel": "@NASA",
        "tab": "videos",
        "max_results": 30
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/youtube_channel/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"channel":"@NASA","tab":"videos","max_results":30}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quantumproxies \
  -e QUANTUMPROXIES_API_KEY=qd_live_your_key_here \
  -- npx -y quantumproxies-mcp

# then, in the chat:
> run the youtube_channel collector with channel="@NASA" and tab="videos"
```

## What people build with the YouTube channel scraper API

Three shapes of work this endpoint was designed around.

### Competitor content audit

Pull a rival channel's recent uploads with views and duration in one call.

### Influencer vetting

Check publishing cadence and view distribution before a partnership.

### Content datasets

Collect a channel corpus for topic modelling or transcription pipelines.

## YouTube channel scraper API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| Card format | Search parser returns zero rows here | Reads the current uploads format |
| Channel stats | A second call | On every row |

## Three calls, or one row shape

Reading a channel through the Data API means resolving the handle, fetching the uploads playlist, then making a separate statistics call because playlist items do not carry view counts. Three resources, three responses to join, and a quota bill that returns once you do it across a few hundred channels.

The other gap is structural: the Data API does not model shorts and streams as distinct catalogues, so separating a creator's short-form output from their long-form means inferring it from duration. Here it is an input, and channel-level stats are stamped onto every video row so one flat table answers both the channel and the video question without a join.

## Limits, tabs and the legal bit

One grid page per run, roughly 30 videos and up to 60; the back catalogue sits behind continuation tokens and is out of scope. Pick the `tab` deliberately — averaging shorts and long-form together misrepresents any channel that posts both. Throughput is your plan's rate limit rather than anything about the collector: 60 requests/minute on pay-as-you-go, up to 1,200 on the top tier.

Collecting publicly visible data is generally lawful in most jurisdictions, and courts have repeatedly declined to treat reading a public page as unauthorised access. YouTube's terms restrict automated access. Creator names and channel descriptions can be personal data. None of this is legal advice — get some for your actual use case.

## FAQ

Questions we get about the YouTube channel scraper API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Can I read shorts or live streams?

Yes — `tab` accepts videos, shorts and streams.

### How far back does it go?

One page of the tab, around 30 videos. Older uploads sit behind a continuation token this collector does not follow; the run notes exactly how many it returned.

### Is there a free YouTube channel scraper API?

Every account gets $2 of credit every month with no card, which is about 2,500 delivered videos on this endpoint at $0.0008 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.0008. A run capped at 60 videos — the maximum for this collector — costs $0.048 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

### Why are channel stats repeated on every row?

So the output stays one flat table. Subscriber and video totals on each row mean per-video performance relative to audience size is a single expression, with no join and no second call — which is what makes the output usable directly as a dataset.

### Can I get a channel's whole back catalogue?

No — one grid page per run, roughly 30 videos. Everything beyond that requires walking YouTube's continuation protocol, which this collector deliberately does not claim to do. The recent uploads are what it covers.

## Run the YouTube channel scraper API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 32 collectors](https://quanticdata.io/collectors/) [YouTube scraper API](https://quanticdata.io/collectors/youtube-scraper-api/) [TikTok video scraper API](https://quanticdata.io/collectors/tiktok-video-scraper-api/) [Video search API](https://quanticdata.io/collectors/search-videos-api/) [Documentation](https://quanticdata.io/docs/)

---

Source: https://quanticdata.io/collectors/youtube-channel-scraper-api/ · Site index for AI: https://quanticdata.io/llms.txt
