YouTube - video page

v2.0.0

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

Extractor ID

@2 follows fixes and added fields. to freeze the output.

Try in playground
Price
$0.0025 / request premium Also charged when the request fails after the page was fetched. Pricing
Health
healthy v2.0.0
Request settings
  • GET
  • Proxy
  • No JS rendering
HTML
https://www.youtube.com/watch?v=dQw4w9WgXcQ&hl=en
Loading source preview…

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

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

Ask your agent
Use ExtractHub to extract https://youtube.com/... with @extracthub1/youtube-video@2
Tool call it makes
{
  "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.

@2
latest 2.0.0
active healthy
@1
latest 1.0.0
active healthy
  1. 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
  2. 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.