# YouTube Video Details Scraper (`sfoln/youtube-video-lookup`)

Scrape YouTube video and Shorts details in bulk: title, channel, publish date, duration, views, likes, comments, keywords, category and caption languages, plus an optional full transcript. $4 per 1,000 videos; transcripts $4 per 1,000. Paste URLs or video IDs.

- Family: Documents & media
- Categories: AI, Videos, Automation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: YouTube Video Details Scraper (sfoln/youtube-video-lookup)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/youtube-video-lookup.json
- MCP: https://mcp.apify.com?tools=sfoln/youtube-video-lookup
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~youtube-video-lookup/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~youtube-video-lookup/runs

YouTube Video Details Scraper looks up YouTube videos and Shorts in bulk and returns one normalized record per video: title, description, channel (ID, name, handle), publish date, duration, view / like / comment counts, thumbnail, keywords, category, live and paid-promotion flags, available caption languages, and optionally the full transcript in the same record. Built for content analytics, influencer vetting, dataset building and AI agents.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| YouTube video (`youtube-video-looked-up`) | $0.004 | $4 / 1,000 | Charged once per video whose details (title, channel, counts, duration, keywords…) were returned. Missing, private or age-restricted videos and failed requests are not charged, unless the provider billed the lookup. |
| YouTube transcript (`youtube-transcript-retrieved`) | $0.004 | $4 / 1,000 | Charged additionally, once per video, only when Include transcript is on and a caption transcript was returned. Paid plans only. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~youtube-video-lookup/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"videos":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/youtube-video-lookup"
    }
  }
}
```

Example prompt: Get the views, likes, comment count, duration and publish date of https://www.youtube.com/watch?v=dQw4w9WgXcQ.

## Input

Paste YouTube video or Shorts URLs (or 11-character video IDs), one per line. Each video produces one dataset record with normalized metadata and, optionally, the transcript.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `videos` (required) | array | — | YouTube videos: Video URLs (youtube.com/watch?v=…, youtu.be/…, /shorts/…, /live/…) or bare 11-character video IDs. Duplicates are removed. Accounts on the Apify free plan can process up to 10 videos per run. |
| `includeTranscript` | boolean | `false` | Include transcript: Also fetch the caption transcript as plain text (`transcriptText`). Charged as a separate event only when a transcript is returned. Paid plans only (turned off on the Apify free plan). |
| `transcriptLanguage` | string | — | Transcript language (optional): Language code of the caption track, e.g. "en", "es" or "en-US". Leave empty for the original-language track. Only used when Include transcript is on. |
| `cacheMaxAge` | string | `"off"` | Accept cached results: Allow results the upstream fetched within this window instead of a live fetch. Faster; results (view/like counts) may be up to N days old when enabled. Price is the same. Default: off (always live). One of `"off"`, `"1d"`, `"7d"`, `"30d"`. |
| `maxVideos` | integer | `1000` | Max videos: Safety cap on the number of videos processed in this run. |
| `concurrency` | integer | `5` | Concurrency: How many videos are fetched in parallel (1–8). |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified provider payloads (`raw.video`, `raw.transcript`) to each record (much larger output). |

Example input:

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The video URL or ID as provided. |
| `videoId` | string | null | Video ID: 11-character YouTube video ID. |
| `url` | string | null | URL: Watch URL. |
| `type` | string | null | Type: video / short / live as reported upstream. |
| `title` | string | null | Title |
| `description` | string | null | Description |
| `channelId` | string | null | Channel ID |
| `channelName` | string | null | Channel name |
| `channelHandle` | string | null | Channel handle: Without the leading @. |
| `channelUrl` | string | null | Channel URL |
| `publishedAt` | string | null | Published at: ISO 8601 (UTC). |
| `durationSecs` | number | null | Duration (s) |
| `viewCount` | number | null | Views |
| `likeCount` | number | null | Likes |
| `commentCount` | number | null | Comments |
| `thumbnailUrl` | string | null | Thumbnail URL |
| `keywords` | array | Keywords / tags |
| `category` | string | null | Category: YouTube genre/category, e.g. "Music". |
| `isLive` | boolean | null | Live: true for live streams; null when not determinable. |
| `isPaidPromotion` | boolean | null | Paid promotion |
| `chapterCount` | integer | Chapters |
| `captionLanguages` | array | Caption languages: Language codes of available caption tracks. |
| `hasCaptions` | boolean | null | Has captions |
| `cached` | boolean | Cached: Served from the upstream cache (cacheMaxAge). |
| `transcriptText` | string | null | Transcript: Only when includeTranscript is on. |
| `transcriptLanguage` | string | null | Transcript language |
| `transcriptStatus` | string | Transcript status: not_requested \| ok \| no_captions \| skipped_budget (budget could not pay for the transcript; never delivered uncharged) \| skipped_free_plan (paid add-on, off on the Apify free plan) \| error |
| `transcriptCharged` | boolean | Transcript charged: Whether youtube-transcript-retrieved was charged for this video. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Whether youtube-video-looked-up was charged for this record. |
| `chargedEvent` | string | Charged event |
| `error` | object | Error |
| `source` | string | Source |
| `fetchedAt` | string | Fetched at |

Example record:

```json
{
  "input": "https://www.youtube.com/watch?v=Y2Ah_DFr8cw",
  "videoId": "Y2Ah_DFr8cw",
  "url": "https://www.youtube.com/watch?v=Y2Ah_DFr8cw",
  "type": "video",
  "title": "Inside the NBA: Chuck Trolls Jussie Smollett",
  "description": null,
  "channelId": "UCWH3hing1Qb4LnkRfQdxsxQ",
  "channelName": "Afroballer",
  "channelHandle": "afroballer8906",
  "channelUrl": "https://www.youtube.com/@afroballer8906",
  "publishedAt": "2019-02-22T11:19:54.000Z",
  "durationSecs": 348,
  "viewCount": 372864,
  "likeCount": 4043,
  "commentCount": 358,
  "thumbnailUrl": "https://img.youtube.com/vi/Y2Ah_DFr8cw/maxresdefault.jpg",
  "keywords": [],
  "category": "People & Blogs",
  "isLive": false,
  "isPaidPromotion": false,
  "chapterCount": 0,
  "captionLanguages": [
    "en"
  ],
  "hasCaptions": true,
  "cached": false,
  "transcriptText": "what's going on everybody ...",
  "transcriptLanguage": "English",
  "transcriptStatus": "ok",
  "transcriptCharged": true,
  "status": "ok",
  "charged": true,
  "chargedEvent": "youtube-video-looked-up",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [YouTube Video Summarizer – AI + Transcript](https://www.sfoln.com/actors/youtube-transcript-summary.md) (`sfoln/youtube-transcript-summary`)
- [YouTube Comments Scraper](https://www.sfoln.com/actors/youtube-video-comments.md) (`sfoln/youtube-video-comments`)
- [YouTube Channel Videos Scraper](https://www.sfoln.com/actors/youtube-channel-videos.md) (`sfoln/youtube-channel-videos`)
- [YouTube Search Scraper](https://www.sfoln.com/actors/youtube-search.md) (`sfoln/youtube-search`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
