# YouTube: only videos that carry captions

**Use case:** 

One row per video: views, likes, likes per thousand views, length, publish date, category, tags, the list of caption languages and the number of countries it is available in. The same list of videos, filtered to the ones that carry captions at all. A video with none is dropped rather than returned with an empty language list, so the sheet is ready to feed a transcript step.

## Input

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=XqZsoesa55w",
    "https://www.youtube.com/watch?v=kJQP7kiw5Fk",
    "https://www.youtube.com/watch?v=JGwWNGJdvx8",
    "https://www.youtube.com/watch?v=RgKAFK5djSk",
    "https://www.youtube.com/watch?v=OPf0YbXqDm0",
    "https://www.youtube.com/watch?v=9bZkp7q19f0",
    "https://www.youtube.com/watch?v=iG9CE55wbtY",
    "https://www.youtube.com/watch?v=Ks-_Mh1QhMc",
    "https://www.youtube.com/watch?v=qp0HIF3SfI4"
  ],
  "maxVideos": 50,
  "monitoringMode": false,
  "monitorMode": "any-change",
  "resetMonitoringState": false,
  "minViews": 0,
  "maxViews": 0,
  "minLengthSeconds": 0,
  "maxLengthSeconds": 0,
  "publishedAfter": "",
  "requireCaptions": true,
  "excludeLive": false,
  "keywords": [],
  "keywordMatch": "any",
  "excludeKeywords": [],
  "useProxy": true
}
```

## Output

```json
{
  "videoId": {
    "label": "Video Id",
    "format": "string"
  },
  "title": {
    "label": "Title",
    "format": "string"
  },
  "viewCount": {
    "label": "View Count",
    "format": "string"
  },
  "likeCount": {
    "label": "Like Count",
    "format": "string"
  },
  "viewDelta": {
    "label": "View Delta",
    "format": "string"
  },
  "channelTitle": {
    "label": "Channel Title",
    "format": "string"
  },
  "publishedAt": {
    "label": "Published At",
    "format": "string"
  },
  "lengthSeconds": {
    "label": "Length Seconds",
    "format": "string"
  },
  "source": {
    "label": "Source",
    "format": "string"
  },
  "status": {
    "label": "Status",
    "format": "string"
  },
  "scrapedAt": {
    "label": "Scraped At",
    "format": "string"
  },
  "input": {
    "label": "Input",
    "format": "string"
  },
  "videoUrl": {
    "label": "Video Url",
    "format": "string"
  },
  "description": {
    "label": "Description",
    "format": "string"
  },
  "channelId": {
    "label": "Channel Id",
    "format": "string"
  },
  "channelUrl": {
    "label": "Channel Url",
    "format": "string"
  },
  "subscriberCountText": {
    "label": "Subscriber Count Text",
    "format": "string"
  },
  "likesPerThousandViews": {
    "label": "Likes Per Thousand Views",
    "format": "string"
  },
  "publishedAtRaw": {
    "label": "Published At Raw",
    "format": "string"
  },
  "category": {
    "label": "Category",
    "format": "string"
  },
  "keywords": {
    "label": "Keywords",
    "format": "string"
  },
  "isLiveContent": {
    "label": "Is Live Content",
    "format": "string"
  },
  "isFamilySafe": {
    "label": "Is Family Safe",
    "format": "string"
  },
  "allowRatings": {
    "label": "Allow Ratings",
    "format": "string"
  },
  "hasCaptions": {
    "label": "Has Captions",
    "format": "string"
  },
  "captionLanguages": {
    "label": "Caption Languages",
    "format": "string"
  },
  "availableCountryCount": {
    "label": "Available Country Count",
    "format": "string"
  },
  "thumbnailUrl": {
    "label": "Thumbnail Url",
    "format": "string"
  },
  "playabilityStatus": {
    "label": "Playability Status",
    "format": "string"
  },
  "playabilityReason": {
    "label": "Playability Reason",
    "format": "string"
  },
  "isFirstCheck": {
    "label": "Is First Check",
    "format": "string"
  },
  "previousCheckedAt": {
    "label": "Previous Checked At",
    "format": "string"
  },
  "previousViewCount": {
    "label": "Previous View Count",
    "format": "string"
  },
  "likeDelta": {
    "label": "Like Delta",
    "format": "string"
  },
  "changedFields": {
    "label": "Changed Fields",
    "format": "string"
  },
  "searchUrl": {
    "label": "Search Url",
    "format": "string"
  },
  "note": {
    "label": "Note",
    "format": "string"
  }
}
```

## About this Actor

This example demonstrates how to use [YouTube Video Data Scraper - Views, Likes & Change Monitor](https://apify.com/neverempty/youtube-video-data-scraper.md) with a specific input configuration. Visit the [Actor detail page](https://apify.com/neverempty/youtube-video-data-scraper.md) to learn more, explore other use cases, and run it yourself.


## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
This Task's input is already configured above — use it as-is rather than inventing a new one.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For full API examples (JavaScript, Python, CLI, MCP, OpenAPI), see this Task's Actor page: https://apify.com/neverempty/youtube-video-data-scraper.md

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).
