~ / endpoints / Channel API

YouTube Channel Scraper API

Our YouTube channel scraper turns any handle, channel ID, or URL into structured JSON: subscriber count, video count, description, avatar, and the channel's videos in one request, then pages deeper with a simple cursor.

Get a free API keyAll endpoints
1,000
free requests / mo
2.6s
median response
JSON
structured output
1
flat charge per page
the problem

Why YouTube Channel data is hard to get

A channel page loads its key numbers after the first response, so the raw HTML holds placeholders and hand-written selectors break within weeks. The official Data API is cleaner but rounds subscriberCount down to three significant figures over 1,000 subs (123,456 shows as 123000) and gates every call behind a 10,000-unit daily quota.

quickstart

The YouTube Channel Scraper API in one request

cURL
curl "https://api.youtubescraperapi.com/api/v1/youtube/channel?channel=@mkbhd&api_key=$API_KEY"
Python
import requests

BASE = "https://api.youtubescraperapi.com"
API_KEY = "YOUR_API_KEY"

# Page 1: pass the channel handle, id, or URL.
data = requests.get(
    f"{BASE}/api/v1/youtube/channel",
    params={"channel": "@mkbhd", "api_key": API_KEY},
    timeout=30,
).json()

print(data["channel_name"], "-", data["subscriber_count"], "subscribers")
print(data["video_count"], "videos")

for video in data["videos"]:
    print(video["position"], video["views"], video["title"], video["url"])

# Walk further pages by following next_page_url. Each call is one page,
# one flat charge: no server-side deep loop, no surprise multi-page bill.
while data["has_more"]:
    data = requests.get(
        BASE + data["next_page_url"],
        params={"api_key": API_KEY},
        timeout=30,
    ).json()
    for video in data["videos"]:
        print(video["position"], video["views"], video["title"], video["url"])
parameters

Parameters

ParameterRequiredDefaultNotes
channelrequired-Channel handle, id, or URL, e.g. @mkbhd, UCBJycsmduvYEL83R_U4JriQ, or a youtube.com/@handle link. Required unless you pass page_token.
page_tokenoptional-Cursor for the next page of videos. Pass the next_page_token from a prior response (or just follow next_page_url) instead of channel. One of channel or page_token is required.
taboptionalvideosWhich channel tab to read, e.g. videos. Defaults to videos.
countryoptional-Optional two-letter country code to fetch the channel as seen from that region.
api_keyrequired-Your API key, passed as a query parameter. Get one free at signup.
response

What the YouTube Channel Scraper API returns

200 OK
{
  "channel": "@mkbhd",
  "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
  "channel_name": "Marques Brownlee",
  "handle": "@mkbhd",
  "vanity_url": "https://www.youtube.com/@mkbhd",
  "tab": "videos",
  "description": "I make videos about technology and gadgets.",
  "subscriber_count": 19800000,
  "video_count": 1742,
  "avatar": "https://yt3.googleusercontent.com/ytc/AIdro_abc123=s900",
  "videos": [
    {
      "position": 1,
      "id": "dQw4w9WgXcQ",
      "title": "The Best Phone of the Year",
      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
      "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hq720.jpg",
      "channel": "Marques Brownlee",
      "views": "4,231,908 views",
      "published": "3 days ago"
    }
  ],
  "videos_count": 30,
  "page": 1,
  "next_page_token": "eyJjIjoiNHFtRnNn...p9",
  "next_page_url": "/api/v1/youtube/channel?page_token=eyJjIjoiNHFtRnNn...p9",
  "has_more": true
}
FieldTypeDescription
channel_idstringThe channel's unique YouTube ID, the stable identifier that never changes.
channel_namestringThe channel's display name as shown on its page.
handlestringThe channel's @handle, e.g. @mkbhd.
vanity_urlstringThe canonical channel URL.
descriptionstringThe full channel description from the About section.
subscriber_countintegerSubscriber count parsed from the live channel page.
video_countintegerTotal number of public videos on the channel.
avatarstringURL of the channel's profile picture.
videosarrayVideos on this page, each with position, id, title, url, thumbnail, channel, views, and published.
videos_countintegerNumber of videos returned on this page (one page per call).
pageintegerThe page number for this response, starting at 1.
next_page_tokenstringCursor for the next page. Pass it back as page_token, or null when has_more is false.
next_page_urlstringReady-made path for the next page, /api/v1/youtube/channel?page_token=. Follow it to fetch more videos.
has_morebooleanTrue when another page of videos is available, false on the last page.
use cases

What you can build using the API

>

Influencer discovery

Resolve a list of handles into subscriber count, video count, and recent view counts to size up creators before you reach out or sponsor.
>

Competitor tracking

Pull rival channels on a schedule and watch how their subscriber count, upload cadence, and recent video views move over time.
>

Channel monitoring

Poll your own or a client's channel daily and store subscriber_count and video_count to build the history graph YouTube does not hand you.
>

Creator databases

Enrich a spreadsheet of channel URLs into clean rows: name, handle, vanity_url, description, and avatar for a searchable creator catalog.
>

Recent video feeds

Read the videos array to surface a channel's latest uploads with titles, view counts, and publish times inside your own dashboard.
>

Outreach enrichment

Drop channel data into a CRM so sales and partnerships see audience size and posting activity next to each lead.
why youtubescraperapi.com

Why teams choose our YouTube Channel Scraper API

Pass an @handle, a raw channel ID, or a full URL and we resolve it for you, with no OAuth, no Google Cloud project, and no unit budget to ration. Every request runs through rotating proxies, anti-bot handling, JS rendering, and retries, returning validated JSON with a stable schema in about 2.6 seconds.

*

Handle, ID, or URL input

One channel parameter takes an @handle, a channel ID, or a full URL and resolves it server side.
*

Anti-bot and proxy rotation

Rotating residential and datacenter proxies plus anti-bot handling keep channel requests from getting blocked.
*

JS rendering built in

We render the channel page so the subscriber and video counts that load late are fully captured in the response.
*

Auto-retry across pools

Failed fetches retry through datacenter, residential, and premium proxy tiers before a response is returned.
*

Validated JSON schema

Parity-checked, regression-tested fields return in the same shape on every call.
*

Flat-cost cursor pagination

Each call returns one page plus a next_page_token and next_page_url. You follow the cursor to go deeper, so every page is one flat charge with no hidden multi-page billing.
comparison

YouTube Channel Scraper API vs the official YouTube API

Our APIDIY (requests / headless)YouTube Data API v3
Input by handle or URLYes, handle, ID, or URLManual page fetch and parseResolves @handle and legacy username; URLs need search.list
Exact subscriber countParsed from the live pagePossible but parser breaks oftenRounded to 3 significant figures over 1,000 subs
SetupAPI key onlyProxies, headless browser, parsersGoogle Cloud project plus OAuth
Rate limitsBy plan, no daily unit budgetBound by your proxy pool10,000 units/day default
Anti-bot and proxiesBuilt inYou build and maintain itNot applicable
Recent videos in one callYes, in the videos array, with a cursor for moreExtra requests and scrollingSeparate playlistItems / search calls
Deeper video pagesFollow next_page_url, flat charge per pageHand-managed continuation tokensPage tokens, 1 unit per playlistItems page
pricing

Start free, scale when ready

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

What is a YouTube channel scraper?

A YouTube channel scraper is a tool that reads a channel's public data and returns it in a structured format. Our YouTube channel scraper API takes a handle, channel ID, or URL and returns the channel name, handle, vanity URL, description, subscriber count, video count, avatar, and a list of recent videos as JSON from a single request.

How do I scrape a YouTube channel without writing a parser?

Send one GET request to our youtube/channel endpoint with the channel handle, ID, or URL and your API key. We render the page, rotate proxies, handle anti-bot checks, retry on failure, and parse the result, so you get clean JSON back without maintaining selectors against YouTube's changing markup.

Can I get the exact subscriber count?

Our API parses the subscriber count from the live channel page. The official YouTube Data API rounds statistics.subscriberCount down to three significant figures for channels over 1,000 subscribers, so a channel with 123,456 subscribers reports 123000 there, and the precise number is only visible to the owner in YouTube Studio.

Do I need a YouTube API key or Google Cloud project?

No. You only need a youtubescraperapi key, passed as the api_key query parameter. There is no OAuth flow, no Google Cloud project, and no daily quota of units to manage. The free tier includes 1,000 requests per month.

Can I pass a channel URL or only a handle?

You can pass a handle like @mkbhd, a raw channel ID like UCBJycsmduvYEL83R_U4JriQ, or a full channel URL. The single channel parameter accepts all three and resolves them server side.

How fast is the YouTube channel scraper API?

Median end-to-end response is about 2.6 seconds, which includes proxy routing, anti-bot handling, retries, and parsing. One call returns the channel profile plus the first page of videos, so you do not chain extra requests just to assemble a profile.

How do I get more than the first page of videos?

Each response carries a next_page_token, a next_page_url, and a has_more flag. To page deeper, follow next_page_url (which is /youtube/channel?page_token=) or pass the next_page_token back as the page_token parameter. Every call returns exactly one page and is billed as one flat charge, so there is no server-side deep loop and no surprise multi-page bill. The old max_pages parameter has been replaced by this cursor model.

Get channel api as JSON
Free plan, 1,000 requests. No credit card required.
Get a free API key All endpoints