# Social Video Downloader & Transcriber - MP4, MP3, Subtitles (`seemuapps/social-video-downloader-transcriber`) Actor

Download videos or audio from YouTube, TikTok, Instagram, X, Facebook, Vimeo and 1000+ sites, then transcribe, translate, summarise and burn in subtitles. Files land in your key-value store with metadata in the dataset.

- **URL**: https://apify.com/seemuapps/social-video-downloader-transcriber.md
- **Developed by:** [Andrew](https://apify.com/seemuapps) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 video downloadeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **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 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

## Social Video Downloader & Transcriber - MP4, MP3, Subtitles

Download videos or audio from YouTube, TikTok, Instagram, X (Twitter), Facebook, Vimeo, Twitch clips and 1000+ other sites, then optionally transcribe them, fix the wording, translate, summarise and burn the captions into a subtitled MP4. Every file lands in the run's key-value store with a direct download link, and every video gets one clean metadata row in the dataset. No servers, no ffmpeg setup, no browser extensions.

### What you get

- **MP4 video** at up to 360p, 480p, 720p, 1080p or the best available quality, or **MP3 audio** only
- **Metadata per video**: title, platform, uploader, upload date, duration, views, likes, resolution and thumbnail
- **Direct download URLs** for every stored file, ready for n8n, Make, Zapier, Google Sheets or your own app
- **Timestamped transcript** with detected language, plus **SRT and VTT subtitle files**
- **Wording fixes** for misheard names and words, **translation** into any language, and a **summary** written to your own prompt
- **Subtitled video**: a second MP4 with the transcript (or its translation) burned in as captions
- **downloads.zip** bundling everything from the run in one file
- **Residential proxy** support with country selection for region-locked content, and cookie support for private or age-restricted videos

### Use cases

- **Content repurposing**: pull a TikTok or YouTube clip, get the transcript and a translated subtitled version for another market
- **Content archiving**: back up your own channels or brand mentions before they disappear
- **Media monitoring**: capture videos referenced in news, reviews or brand-safety workflows with searchable transcripts
- **Podcast and interview workflows**: download the audio as MP3 and get show notes from the summary prompt
- **Research datasets**: collect structured video metadata and transcripts at scale
- **Accessibility**: produce captioned versions of existing videos without a video editor

### How to use

1. Paste one or more **Video URLs** (one video per URL; playlists and channels are not expanded).
2. Pick a **Quality**, or turn on **Audio only** for MP3.
3. Turn on **Transcribe** to get the transcript and subtitle files. Optionally set a **Transcription language**, turn on **Fix transcript wording**, set **Translate transcript to**, add a **Summary prompt**, and turn on **Subtitled video**.
4. Leave **Proxy configuration** on residential (recommended for TikTok and Instagram). Pick a country to bypass region locks.
5. Run the actor. Records appear in the **Dataset** tab; files are in the **Key-value store** tab.

#### Input example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw",
    "https://www.tiktok.com/@scout2015/video/6718335390845095173"
  ],
  "quality": "720",
  "transcribe": true,
  "fixTranscript": true,
  "targetLanguage": "es",
  "summaryPrompt": "Summarise in 3 bullet points",
  "subtitledVideo": true,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Output format

One dataset record per URL:

```json
{
  "sourceUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
  "status": "SUCCESS",
  "title": "Me at the zoo",
  "videoId": "jNQXAC9IVRw",
  "extractor": "Youtube",
  "uploader": "jawed",
  "uploadDate": "2005-04-23",
  "durationSeconds": 19,
  "viewCount": 375000000,
  "likeCount": 18000000,
  "width": 854,
  "height": 480,
  "thumbnailUrl": "https://i.ytimg.com/vi/jNQXAC9IVRw/maxresdefault.jpg",
  "fileName": "video-Youtube-jNQXAC9IVRw.mp4",
  "fileSizeBytes": 1264301,
  "fileSizeMb": 1.21,
  "contentType": "video/mp4",
  "downloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/video-Youtube-jNQXAC9IVRw.mp4",
  "transcript": "All right, so here we are in front of the elephants...",
  "transcriptLanguage": "english",
  "transcribedSeconds": 19,
  "segments": [
    { "start": 0.0, "end": 4.2, "text": "All right, so here we are in front of the elephants." }
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/video-Youtube-jNQXAC9IVRw.srt",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/video-Youtube-jNQXAC9IVRw.vtt",
  "translatedTranscript": "Muy bien, aquí estamos frente a los elefantes...",
  "summary": "A man stands in front of elephants at the zoo and remarks on their long trunks.",
  "subtitledFileName": "subtitled-video-Youtube-jNQXAC9IVRw.mp4",
  "subtitledDownloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/subtitled-video-Youtube-jNQXAC9IVRw.mp4",
  "transcriptionError": null,
  "error": null,
  "downloadedAt": "2026-09-07T05:40:00.000Z"
}
```

`status` is `SUCCESS`, `FAILED` (with `error`) or `SKIPPED` (over the size limit). If a download succeeds but the transcription step fails, the record stays `SUCCESS` with the reason in `transcriptionError`, so you never lose the video.

### Pricing

You pay per event, only for what is delivered:

| Event | When it is charged |
|---|---|
| Video downloaded | Once per successfully stored video or audio file |
| Megabyte stored | Per started MB of each stored file (subtitled copies count too) |
| Minute transcribed | Per started minute of audio transcribed |
| Subtitled video | Once per rendered captioned MP4 |

Failed and skipped URLs are never charged. Transcription, translation and summaries use our own speech and language models; there is no API key to bring.

### Tips

- **TikTok and Instagram** block datacenter IPs. Keep the residential proxy on, and let the retries fetch a fresh session if a download fails.
- **Region locks** are the most common failure. Set a proxy country matching where the video is available, or paste your browser cookies.
- **Private or age-restricted videos**: export a `cookies.txt` from your browser (any "Get cookies.txt" extension) and paste it into **Cookies**. It is stored encrypted.
- **Big files**: set **Max file size** to skip anything you don't want to pay for, and raise the run memory if you enable **Zip downloads** for large batches.
- **Speed**: 480p is plenty for transcription. Subtitled video re-encodes the whole file, so it roughly doubles the processing time of that video.
- **Advanced**: pass extra yt-dlp options in **Extra downloader arguments**, for example `--extractor-args youtube:player_client=android`.

### Notes & limits

- One URL = one video. Playlist and channel URLs are not expanded.
- Live streams still in progress are not supported.
- Subtitled video needs Transcribe on and is skipped in audio-only mode.
- Files stay in the run's key-value store for the storage retention of your plan. Download or copy them if you need them permanently.
- Up to 100 URLs per run. Long runs stop cleanly before the run timeout and mark the remaining URLs as failed so you can re-run them.

# Actor input Schema

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

Direct URLs of the videos to download. Supports YouTube, TikTok, Instagram, X (Twitter), Facebook, Vimeo, Twitch clips and 1000+ other sites. One video per URL; playlists and channels are not expanded.

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

Maximum video resolution to download. Lower resolutions download faster and produce smaller files.

## `audioOnly` (type: `boolean`):

Download only the audio track and save it as MP3 instead of the full video. Subtitled video rendering is skipped in this mode.

## `transcribe` (type: `boolean`):

Generate a timestamped speech-to-text transcript of each video, plus SRT and VTT subtitle files. Billed per started audio minute.

## `transcriptionLanguage` (type: `string`):

Optional ISO 639-1 code of the spoken language (e.g. en, es, vi) to improve accuracy. Leave empty for automatic detection.

## `fixTranscript` (type: `boolean`):

Run the transcript through a language model to correct misheard words, names and punctuation without changing the meaning. Requires Transcribe.

## `targetLanguage` (type: `string`):

Optional language to translate the transcript into, as an ISO code or name (e.g. es, German). Subtitles and the subtitled video use the translation. Requires Transcribe.

## `summaryPrompt` (type: `string`):

Optional instructions for a summary of each video generated from its transcript, e.g. "Summarise in 3 bullet points for a busy executive". Requires Transcribe.

## `subtitledVideo` (type: `boolean`):

Render a second MP4 with the transcript (or its translation) burned in as captions. Requires Transcribe; re-encodes the video so runs take longer.

## `zipDownloads` (type: `boolean`):

Also bundle every downloaded file into a single downloads.zip in the key-value store. Skipped with a warning if the archive would not fit in the run's memory.

## `maxFileSizeMb` (type: `integer`):

Videos larger than this limit are skipped and not charged. Use 0 for no limit.

## `downloadTimeoutSecs` (type: `integer`):

Maximum time allowed for downloading a single video before it is marked as failed.

## `downloadRetries` (type: `integer`):

How many times a failed download is retried with a fresh proxy session.

## `proxyConfiguration` (type: `object`):

Proxy used for downloads. Residential proxies are recommended: TikTok, Instagram and some YouTube videos block datacenter IPs. Pick a country to work around region locks.

## `cookies` (type: `string`):

Optional contents of a browser cookies.txt export. Use it for private, age-restricted or login-only videos. Stored encrypted and never shown in logs.

## `extraYtDlpArgs` (type: `array`):

Advanced: additional yt-dlp command-line arguments passed as-is, one per line (e.g. --extractor-args, --sub-langs). Output, cookie and exec-style options are ignored for safety.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ],
  "quality": "720",
  "audioOnly": false,
  "transcribe": false,
  "fixTranscript": false,
  "subtitledVideo": false,
  "zipDownloads": false,
  "maxFileSizeMb": 0,
  "downloadTimeoutSecs": 1800,
  "downloadRetries": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "extraYtDlpArgs": []
}
```

# Actor output Schema

## `results` (type: `string`):

One record per URL: sourceUrl, status, title, videoId, extractor, uploader, uploadDate, durationSeconds, viewCount, likeCount, width, height, thumbnailUrl, fileName, fileSizeBytes, contentType, downloadUrl, transcript, transcriptLanguage, segments, srtUrl, vttUrl, translatedTranscript, summary, subtitledDownloadUrl, error, downloadedAt.

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

Video/audio files, subtitle files, subtitled renders and the optional downloads.zip in the default key-value store.

# 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=jNQXAC9IVRw"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/social-video-downloader-transcriber").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=jNQXAC9IVRw"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/social-video-downloader-transcriber").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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=jNQXAC9IVRw"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call seemuapps/social-video-downloader-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seemuapps/social-video-downloader-transcriber"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/adYtgdtetTxQfdJXK/builds/qVxQdjz4dDVmWfjDJ/openapi.json
