YouTube - video page
v2.0.0by extracthub Updated 11/7/2026 youtube.com
Metadata of a YouTube video watch page (www.youtube.com/watch?v=...): video id, URL, title, channel name / id / URL, subscriber count and view count (from the embedded ytInitialData), plus full description, duration, like count, publish date, category, keywords, thumbnail, live and family-safe flags (from ytInitialPlayerResponse). When YouTube shows its bot check (playabilityStatus LOGIN_REQUIRED) the player fields are null; retry for the full set. Fetched through the proxy, no JavaScript.
@2 follows fixes and added fields. to freeze the output.
Live Preview Not Available
This is a static view of the extractor configuration. To see a live preview and inspect the HTML, please fork this config.
What it returns
result.extracted is a JSON object with these top-level fields (from the current configuration; every released version keeps the schema it was released with, see the changes under Versions and health). A sample is in the extracted data panel above.
| Field | Type |
|---|---|
| videoId | string |
| url | string |
| title | string |
| description | string |
| channelName | string |
| channelId | string |
| channelUrl | string |
| subscriberCount | number |
| viewCount | number |
| durationSeconds | number |
| likeCount | number |
| publishDate | string |
| category | string |
| keywords | string[] |
| thumbnailUrl | string |
| isLive | boolean |
| isFamilySafe | boolean |
| playabilityStatus | string |
How to call YouTube - video page
Pass the URL of a youtube.com page and this extractor's pinned id. Authenticate every request with your API key in the X-API-Key header (a test key, exth_test_..., returns simulated results at no cost). Every parameter and error code is described in the API reference.
Realtime: one URL, result in the response
https://api.extracthub.io/api/extractor/extract
Authentication required via X-API-Key header
| Parameter | Type | Required | Description |
|---|---|---|---|
| target_url | string | Yes | The URL to scrape and extract data from |
| extractor_id | string | Yes | This extractor's ID with a version pin: @extracthub1/youtube-video@2. Use @1 for the latest 1.x or @1.2.3 for an exact version. |
| return_raw_html | boolean | No | Include raw HTML in response (default: false) |
| async_fallback | boolean | No | Default true: a request still queued after the wait limit becomes an async job (202 with job_id). false: 503 queue_timeout instead |
| webhook_url | string | No | HTTPS URL notified if the request becomes a job (job.completed / job.failed) |
Code examples
curl -X GET "https://api.extracthub.io/api/extractor/extract?target_url=https://example.com&extractor_id=%40extracthub1%2Fyoutube-video%402" \
-H "X-API-Key: YOUR_API_KEY" Example response
Shape of a 200 answer (placeholder values). metadata also carries costUsd, and the X-Extractor-Version header names the exact version that ran. A busy queue answers 202 with job_id, status_url and result_url; poll GET /api/extractor/jobs/{id} (or cancel it with POST /api/extractor/jobs/{id}/cancel).
{
"success": true,
"result": {
"extracted": {
"videoId": "…",
"url": "…",
"title": "…",
"description": "…",
"channelName": "…",
"channelId": "…",
"channelUrl": "…",
"subscriberCount": 0,
"viewCount": 0,
"durationSeconds": 0,
"likeCount": 0,
"publishDate": "…",
"category": "…",
"keywords": [
"…"
],
"thumbnailUrl": "…",
"isLive": false,
"isFamilySafe": false,
"playabilityStatus": "…"
},
"metadata": {
"url": "https://example.com",
"useProxy": true,
"renderJs": false,
"scrapedAt": "2026-01-01T12:00:00.000Z"
}
}
} Batch: many URLs in one request
The batch runs in the background with the version resolved once at submission. Read the results as NDJSON pages with a stable cursor; succeeded URLs are charged, and failed URLs only when their scrape reached the provider. If your credit runs out the batch pauses and resumes when credit is available, and POST /api/extractor/batch/{id}/cancel stops it. Signed webhooks report batch.completed, batch.failed and batch.paused.
curl -X POST "https://api.extracthub.io/api/extractor/batch" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"extractor_id": "@extracthub1/youtube-video@2",
"targets": [
{ "url": "https://youtube.com/..." },
{ "url": "https://youtube.com/..." }
],
"webhook_url": "https://your-app.example/webhooks/extracthub"
}'
# Progress, then results as NDJSON pages (cursor = last index)
curl "https://api.extracthub.io/api/extractor/batch/BATCH_ID" -H "X-API-Key: YOUR_API_KEY"
curl "https://api.extracthub.io/api/extractor/batch/BATCH_ID/results" -H "X-API-Key: YOUR_API_KEY" In a pipeline
In the dashboard's pipeline builder, add YouTube - video page as an extractor node and set its version pin to 2 (or exactly 2.0.0). A previous node can feed it the URLs it extracts; pipelines run manually or on a cron schedule, report progress live and export JSON, CSV or NDJSON.
With an AI agent (MCP)
Connect Claude Code, Claude Desktop or Cursor to the ExtractHub MCP server (https://api.extracthub.io/mcp, your API key as a Bearer token) and ask in plain language. The agent calls extract with this extractor's pinned id, or create_batch for many URLs, at the same price and limits as the API. Use a test key to try it without credit. Set up the MCP server.
Use ExtractHub to extract https://youtube.com/... with @extracthub1/youtube-video@2 {
"tool": "extract",
"arguments": {
"extractor_id": "@extracthub1/youtube-video@2",
"url": "https://youtube.com/..."
}
} Versions and health
Each version is immutable. @N resolves to the newest non-yanked version of major N; a deprecated major keeps working until its sunset date and its responses carry Deprecation and Sunset headers. Health comes from scheduled checks of the released versions.
- v2.0.0 active healthy Released 11/7/2026
Core fields are now required: videoId and title must have a value, so a page without them (bot check, consent wall) fails with 422 required_fields_missing instead of returning empty values. Health checks now judge these fields. Output fields are unchanged.
changed: title, videoId - v1.0.0 active healthy Released 11/5/2026
First release: video metadata from ytInitialData (id, URL, title, channel, subscribers, views) and ytInitialPlayerResponse (description, duration, likes, publish date, category, keywords, thumbnail, live/family-safe flags), plus playabilityStatus. Proxy, no JavaScript.
YouTube - video page: frequently asked questions
Is YouTube - video page a youtube.com scraper?
Yes. YouTube - video page is an ExtractHub extractor: a saved, versioned web scraper for youtube.com pages that returns the page as structured JSON. Call it as a youtube.com scraper API with extractor_id=@extracthub1/youtube-video@2; it never changes under you, because every released version is immutable.
What data does YouTube - video page return?
It returns a JSON object with 18 top-level fields: videoId (string), url (string), title (string), description (string), channelName (string), channelId (string), channelUrl (string), subscriberCount (number), viewCount (number), durationSeconds (number), likeCount (number), publishDate (string), category (string), keywords (string[]), thumbnailUrl (string), isLive (boolean), isFamilySafe (boolean) and playabilityStatus (string). The extracted data panel on this page shows a sample.
How do I call YouTube - video page?
Send GET or POST https://api.extracthub.io/api/extractor/extract with your API key in the X-API-Key header, extractor_id=@extracthub1/youtube-video@2 and the URL of a youtube.com page as the target. For many URLs use POST https://api.extracthub.io/api/extractor/batch, and in a pipeline add it as an extractor node pinned to 2.
Can an AI agent use YouTube - video page?
Yes. Connect Claude Code, Claude Desktop, Cursor or another MCP client to the ExtractHub MCP server at https://api.extracthub.io/mcp with your API key, then ask it to extract a youtube.com page: the agent calls the extract tool with extractor_id=@extracthub1/youtube-video@2 (or create_batch for many URLs), at the same price as the API.
Which version should I pin?
Pin the major (@extracthub1/youtube-video@2) to receive fixes and added fields automatically, or the exact version (@extracthub1/youtube-video@2.0.0) to freeze the output. A breaking schema change is always released as a new major, so a major pin never loses or retypes a field.
Does it render JavaScript or use a proxy?
No, it fetches the HTML without JavaScript rendering and it goes through a proxy. Calls are charged at the premium tier (through the scraping proxy, no JavaScript). These settings are part of each released version; JavaScript rendering, XHR capture and browser actions always use the proxy.
More web scrapers in the scraper catalog and in Entertainment.