# TikTok & Instagram Reels Transcription — AI Captions (`toshiusklay/wisprs-social-media-transcriber`) Actor

Transcribe TikTok videos and Instagram Reels to text via automation. Get SRT captions for accessibility, subtitles for repurposing, and text content for scheduling tools. Batch multiple URLs. No Wisprs account needed.

- **URL**: https://apify.com/toshiusklay/wisprs-social-media-transcriber.md
- **Developed by:** [Gitonga Mwaura](https://apify.com/toshiusklay) (community)
- **Categories:** AI, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## TikTok & Instagram Reels Transcription — AI Subtitles & Captions

Transcribe TikTok videos, Instagram Reels, YouTube Shorts, and Facebook videos to text, SRT, and VTT subtitle files. 100+ languages. Self-hosted Whisper AI — no OpenAI API key required. Saves to your Apify Dataset automatically.

This Actor uses the [Wisprs API](https://wisprs.co), which transcribes audio from short-form social media videos using Whisper-based speech-to-text. Unlike caption-scraping approaches that fail on videos without auto-generated captions, Wisprs transcribes the actual audio — which means it works for every public video. Accuracy is excellent on clear audio; results vary by language, accent, and recording quality.

---

### What does this Actor do?

1. Accepts a list of TikTok, Instagram Reel, YouTube Shorts, or Facebook video URLs
2. Submits each to the Wisprs transcription API (short-form videos typically complete in 30–90 seconds)
3. Exports the transcript in your chosen formats: TXT, SRT, VTT, JSON
4. Optionally generates a one-sentence summary or Twitter thread from the transcript
5. Saves one dataset row per video — ready for bulk processing, captioning, or content analysis

---

### How do I use this Actor to transcribe TikTok videos?

**Step 1 — Run the Actor**

```json
{
  "startUrls": [
    { "url": "https://www.tiktok.com/@username/video/EXAMPLE" },
    { "url": "https://www.instagram.com/reel/EXAMPLE/" }
  ],
  "language": "auto",
  "exportFormats": ["txt", "srt", "vtt"]
}
````

**Step 2 — Check your Dataset**

Each video produces one dataset row with the full transcript and subtitle files.

***

### What data does the Actor extract?

| Field | Description |
|---|---|
| `url` | The submitted video URL |
| `jobId` | Wisprs job identifier |
| `transcriptionId` | Transcription identifier |
| `status` | `completed` or `failed` |
| `durationSeconds` | Video duration in seconds |
| `detectedLanguage` | Detected language ISO 639-1 code |
| `transcript_txt` | Full plain-text transcript |
| `transcript_srt` | SRT subtitle file content |
| `transcript_vtt` | WebVTT subtitle file content |
| `transcript_json` | Word-level timestamps in JSON |
| `repurposed_summary` | 1–2 sentence summary (if repurposeMode=summary) |
| `repurposed_thread` | Twitter/X thread array (if repurposeMode=thread) |

***

### How much will it cost to transcribe 1,000 TikTok videos?

Pricing is pay-per-event at **$1.00 per 1,000 transcriptions** ($0.001 per video):

- Cheaper than the closest competitor ($1.50/1,000)
- No per-minute surcharge for short-form video (most TikToks are under 3 minutes)

**Example: 1,000 TikTok videos**

- Total: **~$1.00**

**Example: 10,000 Instagram Reels**

- Total: **~$10.00**

The Apify free plan includes $5/month in credits — enough to transcribe 5,000 short-form videos.

***

### Wisprs vs the competition

| Feature | Wisprs | tictechid Transcriber |
|---|---|---|
| TikTok + IG Reels + YT Shorts + FB | Yes | Yes |
| Language support | 100+ | 35 |
| Self-hosted AI (no external API key) | Yes | Unspecified |
| SRT / VTT subtitle export | Yes | Text only |
| Content repurposing (summary, thread) | Yes | No |
| Price per 1,000 transcriptions | $1.00 | $1.50 |

***

### What can I build with this?

**Bulk caption generation** — scrape TikTok or Instagram profiles for public videos, submit all URLs, and get SRT/VTT files ready to upload back to the platforms. Full caption coverage for a creator's entire library in one run.

**Content moderation pipeline** — transcribe flagged social media videos for text analysis. The `transcript_txt` field is ready to pipe into a content classifier or keyword filter.

**Trend analysis** — transcribe trending TikTok videos in a niche to extract what creators are saying. Identify recurring phrases, topics, and hooks at scale.

**Multilingual caption localization** — transcribe a video in its original language (with word-level timestamps via `exportFormats: ["json"]`), pass the JSON to a translation API, and re-align the translated text to the original timestamps. The timing structure carries through the pipeline.

**Creator research tool** — transcribe competitor content and run keyword analysis to understand their messaging strategy. Identify content gaps and talking points your audience responds to.

**Social listening** — transcribe public videos mentioning your brand, product, or keywords. Extract what customers are saying in video format that standard social listening tools miss.

***

### Supported platforms

| Platform | URL format |
|---|---|
| TikTok | `tiktok.com/@username/video/ID` |
| Instagram Reels | `instagram.com/reel/ID/` |
| YouTube Shorts | `youtube.com/shorts/ID` |
| Facebook Reels/Watch | `facebook.com/watch?v=ID` |
| YouTube (standard) | `youtube.com/watch?v=ID` |

Public posts only. Private, followers-only, or age-restricted content cannot be transcribed.

***

### Language support

100+ languages with automatic detection. The detected language appears as `detectedLanguage` in each dataset row. Notable languages: English, Spanish, Portuguese, Hindi, Indonesian, Arabic, French, German, Japanese, Korean, Mandarin, and 90+ more.

Short-form video presents unique transcription challenges (background music, cuts, fast speech). Accuracy is excellent on speech-forward content; results vary on heavily music-backed or ASMR content.

***

### Related Actors

- [Wisprs — Audio & Video Transcription](https://apify.com/wisprs/audio-video-transcription) — universal transcription including long-form video and podcast
- [Wisprs — Podcast Show Notes Generator](https://apify.com/wisprs/podcast-show-notes) — podcast episodes → show notes, chapters, quotes
- [Wisprs — YouTube Content Repurposer](https://apify.com/wisprs/youtube-repurposer) — YouTube → thread, blog post, show notes

***

### FAQ

**Does this require an OpenAI API key or a Wisprs account?**
No. No external API key or account required. Wisprs runs Whisper on its own infrastructure and handles all transcription automatically — you pay only via Apify credits.

**Does it work for videos without auto-generated captions?**
Yes. Wisprs transcribes the audio directly — it does not rely on platform-generated captions.

**What about private or age-restricted videos?**
Private, followers-only, and age-restricted content cannot be downloaded. The dataset row will have `status: "failed"` and an `errorMessage`.

**What's the maximum video length?**
This Actor is optimized for short-form content (under 10 minutes). For long-form video and podcasts, use the [Wisprs Audio & Video Transcription](https://apify.com/wisprs/audio-video-transcription) Actor.

**Can I process a full TikTok profile at once?**
Yes — pair this Actor with a TikTok scraper to extract all public video URLs from a profile, then pass them into this Actor.

***

### Support

- Documentation: [wisprs.co/docs](https://wisprs.co/docs)
- Email: tosh@belvadigital.com

***

*100+ languages. $1.00 per 1,000 videos. No account or API key required.*

# Actor input Schema

## `startUrls` (type: `array`):

List of TikTok, Instagram Reel, YouTube Shorts, or Facebook video URLs to transcribe. Supports public posts only.

## `language` (type: `string`):

ISO 639-1 language code (e.g. 'en', 'es', 'hi', 'pt'). Leave as 'auto' to detect automatically.

## `exportFormats` (type: `array`):

Transcript formats to include in the dataset output.

## `repurposeMode` (type: `string`):

Optionally generate structured content from the transcript. 'none' to get transcript only. 'summary' for a 1–2 sentence caption-length summary. 'thread' for a Twitter/X thread from the video.

## `maxPollSeconds` (type: `integer`):

Maximum time to wait per video. Short-form videos complete in 30–90 seconds typically. Default 300 seconds.

## `pollIntervalSeconds` (type: `integer`):

How often to check job status. Default 5 seconds (short videos complete fast).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@username/video/EXAMPLE"
    }
  ],
  "language": "auto",
  "exportFormats": [
    "txt",
    "srt",
    "vtt"
  ],
  "repurposeMode": "none",
  "maxPollSeconds": 300,
  "pollIntervalSeconds": 5
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.tiktok.com/@username/video/EXAMPLE"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("toshiusklay/wisprs-social-media-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 = { "startUrls": [{ "url": "https://www.tiktok.com/@username/video/EXAMPLE" }] }

# Run the Actor and wait for it to finish
run = client.actor("toshiusklay/wisprs-social-media-transcriber").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 '{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@username/video/EXAMPLE"
    }
  ]
}' |
apify call toshiusklay/wisprs-social-media-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=toshiusklay/wisprs-social-media-transcriber",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok & Instagram Reels Transcription — AI Captions",
        "description": "Transcribe TikTok videos and Instagram Reels to text via automation. Get SRT captions for accessibility, subtitles for repurposing, and text content for scheduling tools. Batch multiple URLs. No Wisprs account needed.",
        "version": "1.0",
        "x-build-id": "WPqmUR5QHJ3Hj5dgC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/toshiusklay~wisprs-social-media-transcriber/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-toshiusklay-wisprs-social-media-transcriber",
                "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/toshiusklay~wisprs-social-media-transcriber/runs": {
            "post": {
                "operationId": "runs-sync-toshiusklay-wisprs-social-media-transcriber",
                "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/toshiusklay~wisprs-social-media-transcriber/run-sync": {
            "post": {
                "operationId": "run-sync-toshiusklay-wisprs-social-media-transcriber",
                "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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Social Media Video URLs",
                        "type": "array",
                        "description": "List of TikTok, Instagram Reel, YouTube Shorts, or Facebook video URLs to transcribe. Supports public posts only.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "ISO 639-1 language code (e.g. 'en', 'es', 'hi', 'pt'). Leave as 'auto' to detect automatically.",
                        "default": "auto"
                    },
                    "exportFormats": {
                        "title": "Output Formats",
                        "type": "array",
                        "description": "Transcript formats to include in the dataset output.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "txt",
                                "srt",
                                "vtt",
                                "json"
                            ]
                        },
                        "default": [
                            "txt",
                            "srt",
                            "vtt"
                        ]
                    },
                    "repurposeMode": {
                        "title": "Content Generation (optional)",
                        "enum": [
                            "none",
                            "summary",
                            "thread"
                        ],
                        "type": "string",
                        "description": "Optionally generate structured content from the transcript. 'none' to get transcript only. 'summary' for a 1–2 sentence caption-length summary. 'thread' for a Twitter/X thread from the video.",
                        "default": "none"
                    },
                    "maxPollSeconds": {
                        "title": "Max Poll Time (seconds)",
                        "minimum": 30,
                        "maximum": 1800,
                        "type": "integer",
                        "description": "Maximum time to wait per video. Short-form videos complete in 30–90 seconds typically. Default 300 seconds.",
                        "default": 300
                    },
                    "pollIntervalSeconds": {
                        "title": "Poll Interval (seconds)",
                        "minimum": 3,
                        "maximum": 30,
                        "type": "integer",
                        "description": "How often to check job status. Default 5 seconds (short videos complete fast).",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
