# YouTube Video Clipper (Trim, Crop and Download) (`lurkapi/youtube-video-clipper`) Actor

Trim, crop and download YouTube videos. Specify timestamps to extract single or multiple clips per URL, choose an aspect ratio for Shorts/TikTok, optionally export audio, GIF or a transcript of the clip.

- **URL**: https://apify.com/lurkapi/youtube-video-clipper.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Categories:** Automation, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $40.00 / 1,000 360p clip seconds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

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


# README

## YouTube Video Clipper

Trim and crop YouTube videos into ready-to-share clips. Paste links, set timestamps, choose an aspect ratio, optionally add audio, GIF, or a transcript. Get back direct download URLs in your Apify storage.

### 🎬 What it does

Give it one or more YouTube links and the timestamps you want, and it will:

1. **Trim** each link into one clip (or many) using start and end times
2. **Crop** to a target aspect ratio for Shorts, TikTok, Reels, or square posts, or to a precise pixel rectangle
3. **Download** the result in MP4 or WebM at up to 4K source quality
4. **Add a separate audio file** for the same clip if you want it (optional)
5. **Render an animated GIF** of the clip (optional)
6. **Extract a transcript** of the clip in any of 7 formats (optional)
7. **Save everything** to your Apify storage with direct, shareable URLs

Works with regular YouTube videos, Shorts, and full playlists. Up to 1,000 URLs per run.

### 📋 How to use it

#### Step 1: Paste your links

Add YouTube URLs in the **YouTube Video URLs** field. The actor accepts:

- Full links: `youtube.com/watch?v=...`
- Short links: `youtu.be/...`
- Shorts: `youtube.com/shorts/...`
- Playlists: `youtube.com/playlist?list=...` (each video in the playlist is processed)

#### Step 2: Choose what to clip

Pick one of two trim modes:

- **Single-clip mode.** Fill in **Start Time** and **End Time** (use `HH:MM:SS`, `MM:SS`, or seconds). Every URL is trimmed to that same range.
- **Multi-clip mode.** Fill in the **Clips** field with an array. Every URL is cut into every clip in the list, so 3 URLs and 2 clips give you 6 output files.

```json
{
    "videoUrls": ["https://www.youtube.com/watch?v=9bZkp7q19f0"],
    "clips": [
        { "name": "intro",       "startTime": "00:00:30", "endTime": "00:00:45" },
        { "name": "drop",        "startTime": "01:42",     "endTime": "01:55" },
        { "name": "outro",       "startTime": "03:10",     "endTime": "03:25" }
    ]
}
````

Leave both Start Time and End Time empty (and Clips empty) to download the entire video without trimming.

#### Step 3: Choose a crop

Pick a target aspect ratio:

- **Original**: no crop, source ratio preserved
- **9:16**: vertical clips for YouTube Shorts, Instagram Reels, TikTok, Snapchat, Stories
- **2:3**: portrait clips for Pinterest standard pins
- **4:5**: portrait clips for Instagram Feed and Facebook Feed (current best practice for feed video)
- **1:1**: square clips for legacy Instagram feed, Twitter / X, LinkedIn
- **4:3**: classic TV ratio
- **16:9**: widescreen for YouTube standard video, LinkedIn, Twitter landscape

The crop is auto-centered. If you need a specific framing, use the **Manual Crop (advanced)** field with `{ "x": 0, "y": 0, "width": 1080, "height": 1920 }` in source pixels.

#### Step 4: Pick output quality and format

- **Quality**: best (up to 4K), 1080p, 720p, 480p, 360p
- **Format**: MP4 (recommended, works everywhere) or WebM

#### Step 5: Pick add-ons (optional)

- **Also export audio**: writes a separate MP3, M4A, or WAV file alongside the clip video
- **Render a GIF**: generates an animated GIF of the clip. You choose the resolution and frame rate
- **Include a transcript**: extracts the spoken words of the clip in plain text, timestamped text, SRT, VTT, JSON, CSV, XML, or all formats at once
- **Include subtitles**: saves YouTube's existing subtitle tracks for the source video as SRT files

#### Step 6: Run it

Click **Start** and wait. Time depends on the source video length and the number of clips.

#### Step 7: Get your files

In the **Output** tab you'll see one row per (URL × clip). Each row includes direct download links to:

- `videoFileUrl`: the trimmed and cropped video
- `audioFileUrl`: separate audio file (when enabled)
- `gifFileUrl`: animated GIF (when enabled)
- `transcriptFileUrl`: transcript file (when enabled)
- `thumbnailFileUrl`: the source video thumbnail
- `subtitleFileUrls`: subtitle tracks per language (when enabled)

The `status` field tells you if the clip succeeded. If something went wrong, `status` explains what and what to try.

### 💰 Pricing

You only pay for clips that succeed. Failed clips are free.

#### Video clip (per minute of clip output, rounded up)

| Quality | Per minute |
|---|---|
| 360p | $0.008 |
| 480p | $0.012 |
| 720p | $0.016 |
| 1080p | $0.024 |
| Best (up to 4K) | $0.040 |

A 30-second clip rounds up to 1 minute. A 90-second clip rounds up to 2 minutes.

#### Add-ons (flat, per clip)

| Add-on | Price |
|---|---|
| Separate audio file | $0.02 per clip |
| Animated GIF | $0.05 per clip |
| Transcript | $0.05 per source video (transcripts cover the whole source so the cost is per video, not per clip) |

#### Examples

- A 30-second clip at 720p: 1 min × $0.016 = **$0.016**
- A 60-second clip at 1080p with audio: 1 min × $0.024 + $0.02 = **$0.044**
- A 90-second clip at 360p with GIF and transcript (one video, one clip): 2 × $0.008 + $0.05 + $0.05 = **$0.116**

### 💡 Good to know

- **Multi-clip behavior**: every clip in the **Clips** list is cut from every URL. 3 URLs and 2 clips give you 6 output rows, each tagged with the clip's `name` so you can match rows back to (URL, clip).
- **Aspect ratio** is set once per run and applies to every clip.
- **Manual crop** uses raw source pixels and overrides the aspect ratio dropdown.
- **GIF size**: GIFs grow quickly. A 60-second GIF at 480p / 15 fps lands around 20 MB; the same clip at 720p / 24 fps is closer to 100 MB.
- **Transcripts** depend on whether YouTube has captions for the video. When captions exist, transcripts are sliced to the clip's time range. Music-only videos often lack captions.
- **Age-restricted videos** cannot be downloaded. They require a logged-in YouTube account, which the actor does not have.
- **Private and removed videos** cannot be downloaded.
- **Playlists** are expanded into individual videos.
- **Storage**: files at the URLs above are stored in your Apify storage. How long they're kept depends on your Apify plan.
- **Source download is cached per clip**: each clip downloads only its time range from YouTube (not the whole video), so large source files don't blow up your costs when you only want a short clip.

### ❓ FAQ

**My clip is slightly off by a frame or two. Why?**

YouTube videos are stored with a sparse set of keyframes. To trim accurately, the actor downloads a small extra window around your timestamps, then re-encodes the precise range. The output should be frame-accurate within a few milliseconds of the timestamps you provided.

**Why is the output a different size than the source?**

The actor re-encodes the video at the quality you select. Re-encoding lets us apply the aspect ratio crop and produces a file that plays everywhere. If you need the exact original encoding, choose **Best** quality and **Original** aspect ratio.

**Can I use this from my backend?**

Yes. The `videoFileUrl`, `audioFileUrl`, and `gifFileUrl` are Apify URLs that work from any IP and any server. Call the actor via the [Apify API](https://docs.apify.com/api/v2) and read the dataset items.

**Can I download a whole playlist?**

Yes. Paste the playlist URL in **YouTube Video URLs** and the actor expands it for you.

**Why did my clip fail?**

Check the `status` field on that row. Common reasons:

- YouTube is **blocking the request**. The actor will retry automatically a few times; if every attempt is blocked, try again in a few minutes.
- The video is **age-restricted**.
- The video is **private** or has been removed by the creator.
- Your clip timestamps are **past the end of the video**.

**Which quality should I pick?**

720p is a great default for most use cases. Pick 1080p for higher quality. Pick 360p for the smallest files (good for GIFs). Pick **Best** for archival use.

**How long are the files stored?**

In your Apify storage. The retention period depends on your Apify plan.

### 🔗 Other tools you might like

- [YouTube Video Downloader](https://apify.com/lurkapi/youtube-video-downloader): download full YouTube videos and audio in any quality.
- [YouTube to MP3 Audio Downloader](https://apify.com/lurkapi/youtube-to-mp3-audio-downloader): extract audio from YouTube videos in 8 formats.
- [YouTube Transcript Download](https://apify.com/lurkapi/youtube-transcript-download): bulk transcript extraction with rich format options.

### ⚖️ Disclaimer

This tool is intended for personal, research, and educational use. You are responsible for complying with YouTube's Terms of Service and applicable laws in your jurisdiction. The developer is not liable for misuse. Video availability depends on YouTube at run time.

**Keywords:** youtube clipper, trim youtube video, crop youtube video, youtube clip maker, youtube to gif, youtube short maker, youtube to mp4, youtube 9 16, youtube vertical

# Actor input Schema

## `videoUrls` (type: `array`):

Paste your YouTube video links here. Supports video URLs, short links (youtu.be/...), Shorts, and playlist URLs.

## `startTime` (type: `string`):

Clip start, as HH:MM:SS or seconds (e.g. 90 or 00:01:30). Leave empty to download the full video. Ignored if 'Clips' is provided below.

## `endTime` (type: `string`):

Clip end, as HH:MM:SS or seconds. Must be greater than Start Time.

## `clips` (type: `array`):

Define multiple clips per URL. Each entry is { "name": "optional label", "startTime": "HH:MM:SS", "endTime": "HH:MM:SS" }. When provided, Start Time / End Time above are ignored. Each URL is cut into every clip in this list — N URLs × M clips = N×M output rows.

## `aspectRatio` (type: `string`):

Crop the output to a target aspect ratio (auto-centered). Pick the format your target platform prefers. 'original' keeps the source ratio.

## `manualCrop` (type: `object`):

Override the aspect ratio with a precise crop rectangle in source pixels: { "x": 0, "y": 0, "width": 1080, "height": 1920 }. Leave empty to use Aspect Ratio above.

## `quality` (type: `string`):

Source quality to download before trimming. 'best' uses the highest available (up to 4K).

## `format` (type: `string`):

Container format for the video clip.

## `extractAudio` (type: `boolean`):

Save the clip's audio as a separate file alongside the video. Charged per clip.

## `audioFormat` (type: `string`):

Container for the separately-exported audio.

## `renderGif` (type: `boolean`):

Generate an animated GIF of each clip. Charged per clip.

## `gifResolution` (type: `string`):

Height of the GIF in pixels. Lower = smaller file. GIFs grow quickly: a 60-second 480p GIF is around 20 MB.

## `gifFps` (type: `integer`):

Frames per second. Lower = smaller file. 15 fps looks fine for most content; 24 fps is smoother but ~60% larger.

## `transcript` (type: `boolean`):

Extract a transcript and slice it to the clip's time range (or the full video if no clip is set). Charged per source video.

## `transcriptLang` (type: `string`):

Preferred transcript language. Falls back to English auto-generated if not available.

## `transcriptFormat` (type: `string`):

Output format for the transcript.

## `includeSubtitles` (type: `boolean`):

Save YouTube's existing subtitle tracks for the source video as .srt files. Free.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=9bZkp7q19f0"
  ],
  "startTime": "00:00:30",
  "endTime": "00:00:45",
  "clips": [],
  "aspectRatio": "original",
  "manualCrop": {},
  "quality": "360p",
  "format": "mp4",
  "extractAudio": false,
  "audioFormat": "mp3",
  "renderGif": false,
  "gifResolution": "480p",
  "gifFps": 15,
  "transcript": false,
  "transcriptLang": "en",
  "transcriptFormat": "plain",
  "includeSubtitles": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `clips` (type: `string`):

No description

## `files` (type: `string`):

No description

## `stats` (type: `string`):

No description

## `keyValueStore` (type: `string`):

Downloaded clip videos, audio, GIFs, transcripts, thumbnails and subtitles.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "videoUrls": [
        "https://www.youtube.com/watch?v=9bZkp7q19f0"
    ],
    "startTime": "00:00:30",
    "endTime": "00:00:45",
    "clips": [],
    "aspectRatio": "original",
    "manualCrop": {},
    "quality": "360p",
    "format": "mp4"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/youtube-video-clipper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "videoUrls": ["https://www.youtube.com/watch?v=9bZkp7q19f0"],
    "startTime": "00:00:30",
    "endTime": "00:00:45",
    "clips": [],
    "aspectRatio": "original",
    "manualCrop": {},
    "quality": "360p",
    "format": "mp4",
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/youtube-video-clipper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=9bZkp7q19f0"
  ],
  "startTime": "00:00:30",
  "endTime": "00:00:45",
  "clips": [],
  "aspectRatio": "original",
  "manualCrop": {},
  "quality": "360p",
  "format": "mp4"
}' |
apify call lurkapi/youtube-video-clipper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lurkapi/youtube-video-clipper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Video Clipper (Trim, Crop and Download)",
        "description": "Trim, crop and download YouTube videos. Specify timestamps to extract single or multiple clips per URL, choose an aspect ratio for Shorts/TikTok, optionally export audio, GIF or a transcript of the clip.",
        "version": "0.0",
        "x-build-id": "xaWU67xlHAtBfCKDs"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lurkapi~youtube-video-clipper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lurkapi-youtube-video-clipper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lurkapi~youtube-video-clipper/runs": {
            "post": {
                "operationId": "runs-sync-lurkapi-youtube-video-clipper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lurkapi~youtube-video-clipper/run-sync": {
            "post": {
                "operationId": "run-sync-lurkapi-youtube-video-clipper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "videoUrls"
                ],
                "properties": {
                    "videoUrls": {
                        "title": "YouTube Video URLs",
                        "maxItems": 1000,
                        "type": "array",
                        "description": "Paste your YouTube video links here. Supports video URLs, short links (youtu.be/...), Shorts, and playlist URLs.",
                        "items": {
                            "type": "string",
                            "pattern": "^https?://(www\\.|music\\.|m\\.)?youtube\\.com/|^https?://youtu\\.be/"
                        }
                    },
                    "startTime": {
                        "title": "Start Time",
                        "type": "string",
                        "description": "Clip start, as HH:MM:SS or seconds (e.g. 90 or 00:01:30). Leave empty to download the full video. Ignored if 'Clips' is provided below."
                    },
                    "endTime": {
                        "title": "End Time",
                        "type": "string",
                        "description": "Clip end, as HH:MM:SS or seconds. Must be greater than Start Time."
                    },
                    "clips": {
                        "title": "Clips (multi-clip mode)",
                        "type": "array",
                        "description": "Define multiple clips per URL. Each entry is { \"name\": \"optional label\", \"startTime\": \"HH:MM:SS\", \"endTime\": \"HH:MM:SS\" }. When provided, Start Time / End Time above are ignored. Each URL is cut into every clip in this list — N URLs × M clips = N×M output rows."
                    },
                    "aspectRatio": {
                        "title": "Aspect Ratio",
                        "enum": [
                            "original",
                            "9:16",
                            "2:3",
                            "4:5",
                            "1:1",
                            "4:3",
                            "16:9"
                        ],
                        "type": "string",
                        "description": "Crop the output to a target aspect ratio (auto-centered). Pick the format your target platform prefers. 'original' keeps the source ratio.",
                        "default": "original"
                    },
                    "manualCrop": {
                        "title": "Manual Crop (advanced)",
                        "type": "object",
                        "description": "Override the aspect ratio with a precise crop rectangle in source pixels: { \"x\": 0, \"y\": 0, \"width\": 1080, \"height\": 1920 }. Leave empty to use Aspect Ratio above."
                    },
                    "quality": {
                        "title": "Video Quality",
                        "enum": [
                            "best",
                            "1080p",
                            "720p",
                            "480p",
                            "360p"
                        ],
                        "type": "string",
                        "description": "Source quality to download before trimming. 'best' uses the highest available (up to 4K).",
                        "default": "720p"
                    },
                    "format": {
                        "title": "Output Format",
                        "enum": [
                            "mp4",
                            "webm"
                        ],
                        "type": "string",
                        "description": "Container format for the video clip.",
                        "default": "mp4"
                    },
                    "extractAudio": {
                        "title": "Also export audio as a separate file ($)",
                        "type": "boolean",
                        "description": "Save the clip's audio as a separate file alongside the video. Charged per clip.",
                        "default": false
                    },
                    "audioFormat": {
                        "title": "Audio Format",
                        "enum": [
                            "mp3",
                            "m4a",
                            "wav"
                        ],
                        "type": "string",
                        "description": "Container for the separately-exported audio.",
                        "default": "mp3"
                    },
                    "renderGif": {
                        "title": "Render a GIF of the clip ($)",
                        "type": "boolean",
                        "description": "Generate an animated GIF of each clip. Charged per clip.",
                        "default": false
                    },
                    "gifResolution": {
                        "title": "GIF Resolution",
                        "enum": [
                            "240p",
                            "360p",
                            "480p",
                            "720p"
                        ],
                        "type": "string",
                        "description": "Height of the GIF in pixels. Lower = smaller file. GIFs grow quickly: a 60-second 480p GIF is around 20 MB.",
                        "default": "480p"
                    },
                    "gifFps": {
                        "title": "GIF Frame Rate",
                        "minimum": 5,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Frames per second. Lower = smaller file. 15 fps looks fine for most content; 24 fps is smoother but ~60% larger.",
                        "default": 15
                    },
                    "transcript": {
                        "title": "Include a transcript of the clip ($)",
                        "type": "boolean",
                        "description": "Extract a transcript and slice it to the clip's time range (or the full video if no clip is set). Charged per source video.",
                        "default": false
                    },
                    "transcriptLang": {
                        "title": "Transcript Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "it",
                            "pt",
                            "ja",
                            "ko",
                            "zh",
                            "zh-Hans",
                            "zh-Hant",
                            "ar",
                            "hi",
                            "ru",
                            "id",
                            "tr",
                            "vi",
                            "th",
                            "nl",
                            "pl",
                            "sv",
                            "no",
                            "da",
                            "fi",
                            "he",
                            "cs",
                            "ro",
                            "hu",
                            "el",
                            "uk",
                            "bg",
                            "hr",
                            "sk",
                            "sl"
                        ],
                        "type": "string",
                        "description": "Preferred transcript language. Falls back to English auto-generated if not available.",
                        "default": "en"
                    },
                    "transcriptFormat": {
                        "title": "Transcript Format",
                        "enum": [
                            "plain",
                            "timestamped",
                            "srt",
                            "vtt",
                            "json",
                            "csv",
                            "xml",
                            "all"
                        ],
                        "type": "string",
                        "description": "Output format for the transcript.",
                        "default": "plain"
                    },
                    "includeSubtitles": {
                        "title": "Include raw YouTube subtitle tracks",
                        "type": "boolean",
                        "description": "Save YouTube's existing subtitle tracks for the source video as .srt files. Free.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
