YouTube Video Scraper API
Our YouTube video data API returns the title, view count, likes, comments, duration, keywords, and channel details for any public video as one clean JSON object, from a single REST call.
Why YouTube Video data is hard to get
The official YouTube Data API v3 returns video stats, but only after a Google Cloud project, an API key, and a 10,000-unit daily quota, and discovery through search.list burns 100 units a call. Scraping the watch page yourself avoids the quota but hands you the ytInitialPlayerResponse parsing, anti-bot checks, and markup changes to maintain.
The YouTube Video Scraper API in one request
curl "https://api.youtubescraperapi.com/api/v1/youtube/video?video_id=dQw4w9WgXcQ&api_key=$API_KEY" import requests
resp = requests.get(
"https://api.youtubescraperapi.com/api/v1/youtube/video",
params={
"video_id": "dQw4w9WgXcQ",
"api_key": "YOUR_API_KEY",
},
)
video = resp.json()
print(video["title"], "-", video["view_count"], "views")
print("Likes:", video["like_count"], "Comments:", video["comment_count"])
print("Channel:", video["channel_name"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
video_id | required | - | The YouTube video id, the 11-character string after watch?v= (for example dQw4w9WgXcQ). |
url | optional | - | A full watch URL instead of a bare id. The id is parsed out of it, so pass either video_id or url. |
What the YouTube Video Scraper API returns
{
"video_id": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"description": "The official video for Never Gonna Give You Up by Rick Astley...",
"view_count": 1787241493,
"like_count": 19187485,
"comment_count": null,
"duration_seconds": 213,
"keywords": ["rick astley", "Never Gonna Give You Up", "nggyu"],
"category": "Music",
"publish_date": "2009-10-24T23:57:33-07:00",
"channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channel_name": "Rick Astley",
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hq720.jpg",
"related": [
{ "position": 1, "id": "ci6ZtPAN0PM", "title": "RickRolled by an Ad..." }
],
"related_count": 12
} | Field | Type | Description |
|---|---|---|
video_id | string | The 11-character YouTube video id. |
title | string | The video title as shown on the watch page. |
description | string | The full video description text. |
view_count | integer | Lifetime view count at request time. |
like_count | integer | Public like count at request time. |
comment_count | integer | Number of comments on the video. |
duration_seconds | integer | Runtime of the video in seconds. |
keywords | array of strings | The video tags set by the uploader. |
category | string | YouTube category name, such as Music or Education. |
publish_date | string | The date the video was published, as an ISO 8601 timestamp. |
channel_id | string | The channel id that owns the video. |
channel_name | string | The display name of the channel. |
thumbnail | string (url) | URL of the highest-resolution thumbnail available. |
related | array | Related videos, each as { position, id, title, url, thumbnail, channel, views }, with a related_count alongside. |
What you can build using the API
Metadata enrichment
Trend analysis
Dataset building
ML training data
Channel content audits
Thumbnail and title testing
Why teams choose our YouTube Video Scraper API
Our YouTube video data API runs that fetch-render-parse loop on our infrastructure: rotating proxies, anti-bot handling, JS rendering, and retries behind one youtube/video call that returns parsed JSON in about 2.6 seconds. A video id goes in and 14 structured fields come out, with no Google Cloud setup, no OAuth, and a free tier of 1,000 requests.
No key or quota of your own
Anti-bot and proxy rotation
JS rendering built in
Pay for success
Stable JSON schema
YouTube Video Scraper API vs the official YouTube API
| Factor | Our YouTube video data API | DIY page scraping | YouTube Data API v3 |
|---|---|---|---|
| Setup | One api_key | Proxies, headless browser, parser | Google Cloud project plus API key |
| Daily quota | Plan request limit only | None, but you handle blocks | 10,000 units, resets midnight PT |
| Discovery via search | Separate search endpoint | Parse search pages yourself | 100 units per search.list call |
| Anti-bot and proxies | Handled for you | You build and maintain it | Not applicable |
| JS rendering and parsing | Built in, flat JSON | You own ytInitialPlayerResponse parsing | Structured, but quota-bound |
| OAuth for private videos | Public videos, no OAuth | Login automation needed | OAuth consent required |
| Output shape | Stable flat JSON | Whatever you parse | Nested parts you select |
Start free, scale when ready
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
It is a single REST endpoint that takes a YouTube video id and returns the video's title, description, view count, like count, comment count, duration, keywords, category, publish date, channel id, channel name, thumbnail, and related videos as structured JSON. Our API fetches and parses the data for you, so you do not run a Google Cloud project or manage scraping infrastructure.
No. You call our endpoint with a single api_key. There is no Google Cloud project to create, no YouTube Data API key to generate, and no 10,000-unit daily quota to ration. The free tier includes 1,000 requests so you can test before committing.
Yes. Pass the full watch URL in the url parameter and we parse the 11-character video id out of it. You can send either video_id or url, so a link copied straight from the browser works.
No. YouTube removed the public dislike count on November 10, 2021 and made the dislikeCount field private on December 13, 2021, so it is only available to the authenticated owner of a video. No public API or scraper can return real dislike numbers for a video you do not own. Our response includes view_count, like_count, and comment_count.
Each response returns video_id, title, description, view_count, like_count, comment_count, duration_seconds, keywords, category, publish_date, channel_id, channel_name, thumbnail, and a related array of nearby videos. Every field uses the same name and type on each call.
Responses return in a median of 2.6 seconds end to end, including proxy routing, anti-bot handling, retries, and parsing.
The free tier covers 1,000 requests, Pro pricing runs about $0.60 per 1,000 requests, and pay-as-you-go top-ups are $0.90 per 1,000 successful requests. You are billed for successful results.