# Transcribe Interview to Text — for Journalists & Researchers (`sian.agency/transcribe-interview-to-text`) Actor

Transcribe interviews and recorded conversations to text. Speaker labels for interviewer and guest, word-level timestamps, SRT/VTT. Try free.

- **URL**: https://apify.com/sian.agency/transcribe-interview-to-text.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Automation, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.15 / 1,000 second of video processeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Transcribe Interview to Text — for Journalists & Researchers

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-97cc64)](https://apify.com/sian.agency?fpr=sian)
[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)
[![Instagram AI Transcript Extractor](https://img.shields.io/badge/Platform-Instagram-E4405F)](https://apify.com/sian.agency/instagram-ai-transcript-extractor?fpr=sian)
[![Best TikTok AI Transcript Extractor](https://img.shields.io/badge/Platform-TikTok-25F4EE)](https://apify.com/sian.agency/best-tiktok-ai-transcript-extractor?fpr=sian)
[![YouTube Shorts AI Transcript Extractor](https://img.shields.io/badge/Platform-YouTube%20Shorts-FF0000)](https://apify.com/sian.agency/youtube-shorts-ai-transcript-and-metadata-extractor?fpr=sian)
[![Facebook AI Transcript Extractor](https://img.shields.io/badge/Platform-Facebook-1877F2)](https://apify.com/sian.agency/facebook-ai-transcript-extractor?fpr=sian)

> **Transcribe interviews and recorded conversations to text.** Built for journalists, qualitative researchers, market researchers, and anyone with hours of interview tape. Speaker labels for interviewer and guest, word-level timestamps for precise quote extraction, SRT/VTT subtitles, 99+ languages.

---

### How to transcribe an interview in 4 steps

1. **Upload your interview recordings** — drop `.m4a`, `.mp3`, `.wav`, `.mp4`, or any common format into the **Upload Interview Recordings** field. Bulk uploads supported.
2. **Pick your options** — auto-detect language or pick from 99+, toggle speaker diarization to separate the interviewer from each guest, optionally translate non-English interviews to English.
3. **Run the actor** — recordings process 10 at a time in parallel on the paid tier; an entire project's interviews can be transcribed in one run.
4. **Download results** — every recording lands in the dataset with the transcript, segment + word-level timestamps, speaker labels, and ready-to-use SRT/VTT subtitle strings.

Supported formats: M4A, MP3, WAV, FLAC, AAC, OPUS, OGG, MP4, MOV, WebM. Max 1 GB per file on the paid tier.

---

### Example output — interview transcript with speaker labels

```json
{
  "transcript": "Interviewer: Tell me about the first time you realized... Guest: Honestly, it was when my mentor pulled me aside and said...",
  "detected_language": "en",
  "duration": 1432.7,
  "segments": [
    {
      "id": 0,
      "text": "Tell me about the first time you realized you wanted to do this.",
      "start": 0.42,
      "end": 4.18,
      "speaker": "SPEAKER_00",
      "language": "en",
      "words": [
        { "word": "Tell",  "start": 0.42, "end": 0.61, "speaker": "SPEAKER_00" },
        { "word": "me",    "start": 0.61, "end": 0.74, "speaker": "SPEAKER_00" }
      ]
    },
    {
      "id": 1,
      "text": "Honestly, it was when my mentor pulled me aside.",
      "start": 4.86,
      "end": 8.94,
      "speaker": "SPEAKER_01",
      "language": "en",
      "words": []
    }
  ],
  "srt": "1\n00:00:00,420 --> 00:00:04,180\nTell me about the first time you realized you wanted to do this.\n\n2\n00:00:04,860 --> 00:00:08,940\nHonestly, it was when my mentor pulled me aside.",
  "vtt": "WEBVTT\n\n00:00:00.420 --> 00:00:04.180\nTell me about the first time you realized you wanted to do this.\n\n00:00:04.860 --> 00:00:08.940\nHonestly, it was when my mentor pulled me aside.",
  "speakers": ["SPEAKER_00", "SPEAKER_01"],
  "languages": ["en"],
  "fileSizeMB": 12.6,
  "success": true
}
````

Every result includes the full transcript, segment-level timestamps, word-level timestamps, language detection, recording duration in seconds, file size, ready-to-use `srt` and `vtt` subtitle strings, and (when speaker diarization is enabled) speaker labels per segment and per word.

***

### Built for journalists, qualitative researchers, market researchers

- 📰 **Journalists** — turn phone-recorded interviews into clean transcripts ready for quote pulling
- 🧪 **Qualitative researchers** — preserve participant voices with speaker separation for thematic analysis
- 📊 **Market researchers** — bulk-transcribe focus group and 1:1 interview tapes
- 📚 **Oral historians** — searchable, time-stamped archives of long-form interviews
- 🎙️ **Podcasters publishing interview shows** — transcripts for show notes, blog repurposing, and SEO

***

### Speaker diarization (interviewer / guest separation)

Toggle the **Speaker Diarization** input and the actor automatically labels every segment and every word with the speaker it came from (`SPEAKER_00` for the interviewer, `SPEAKER_01` for the first guest, `SPEAKER_02` for the second, etc.). This makes it trivial to extract clean quote attributions for journalism or coding qualitative data for research. Powered by pyannote-audio. Charged per audio second; only billed when enabled.

***

### Translate foreign-language interviews to English

Toggle **Translate to English** and the actor returns the transcript translated into English while preserving timing — perfect for conducting interviews in your subject's native language and publishing in English. Combine with **Speaker Diarization** to get clean, attributed quotes in both directions. Charged separately when enabled.

***

### SRT / VTT subtitle export

Every transcription returns ready-to-use `srt` and `vtt` subtitle strings. Save the field value as a `.srt` or `.vtt` file and:

- Publish a video version of the interview with subtitles for YouTube, Vimeo, or your CMS
- Add HTML5 `<track>` accessibility captions to embedded video
- Build a searchable interview archive with timestamps

Set **Timestamp Granularities** to `word` for cue precision down to individual words.

***

### Why interviewers choose this transcriber

- ✅ **Interviewer ↔ guest separation** out of the box via pyannote-audio diarization — clean attributed quotes ready for publication
- ⏱️ **Word-level timestamps** for every word — find any quote in a 90-minute interview in seconds
- 🌐 **Translate non-English interviews** to English in the same run — perfect for international journalism and cross-cultural research
- 🎬 **SRT and VTT subtitles included** for video versions of interviews
- 🌍 **99+ languages** — automatic detection, no manual selection
- 🇪🇺 **EU-region processing** for GDPR-aligned research workflows
- 💰 **Pay per audio second** — no per-minute Rev.com markups, no Otter subscription
- 🚀 **10× parallel** on the paid tier — an entire research project's worth of interviews done in one run

***

### Use cases

- 📰 **Investigative journalists** transcribing source interviews and pulling attributed quotes for stories
- 🎙️ **Long-form podcasters** generating publication-ready transcripts of every guest interview
- 🧪 **Qualitative researchers** coding participant transcripts in NVivo, Atlas.ti, or MAXQDA
- 📊 **Market research firms** transcribing focus groups and customer 1:1 sessions for thematic analysis
- 📚 **Oral history projects** preserving long-form recorded interviews with timestamped speaker tracks
- 🎓 **Academic researchers** conducting qualitative fieldwork in foreign-language contexts (transcribe + translate in one pass)
- ✍️ **Authors and biographers** working from hours of recorded conversations for book material
- 🎬 **Documentary filmmakers** preparing rough-cut transcripts of interview tape for editing

***

### Pricing & tiers

Pay only for the audio seconds you actually transcribe. No subscriptions, no minimums.

| FREE tier | PAID tier |
|---|---|
| Perfect for testing and small jobs | Built for production volume |
| Up to 5 interviews per run | Unlimited interviews per run |
| 50 MB max per file | 1 GB max per file |
| 200 MB / 20 minutes monthly | Unlimited monthly volume |
| 3 concurrent files | 10 concurrent files (10× parallel) |
| No credit card required | $0.0005 per audio second |

**Optional add-ons** (only billed when enabled):

| Feature | Price |
|---|---|
| Speaker diarization | $0.0001 per audio second |
| Translate to English | $0.0003 per audio second |
| EU-region processing | $0.0007 per audio second (replaces base $0.0005) |

A 60-minute interview with diarization on the paid tier costs approximately **$2.16** ($1.80 transcription + $0.36 diarization). Compare to Rev.com's $1.50/min ($90 for the same interview).

***

### Integration examples

#### JavaScript / Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('sian.agency/transcribe-interview-to-text').call({
    audioFiles: ['https://example.com/interview-with-source.m4a'],
    speakerDiarization: true,
    translateToEnglish: false,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].transcript);
console.log(items[0].srt);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('sian.agency/transcribe-interview-to-text').call(run_input={
    'audioFiles': ['https://example.com/interview-with-source.m4a'],
    'speakerDiarization': True,
    'translateToEnglish': False,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0]['transcript'])
print(items[0]['vtt'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~transcribe-interview-to-text/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "audioFiles": ["https://example.com/interview.m4a"],
    "speakerDiarization": true
  }'
```

#### n8n / Zapier / Make

Wire this actor onto a "new file in research-recordings folder" trigger (Dropbox, Google Drive, OneDrive). The dataset record returned per item includes `transcript`, `segments[].words[]`, `srt`, and `vtt` — drop them into Notion (research database), Airtable (interview log), MAXQDA/NVivo (qualitative coding), or Google Docs (story drafts).

***

### FAQ

**How accurate is interview transcription?**
Powered by an industrial speech-to-text pipeline tuned for natural conversation. Accuracy is typically 95–99% on clean studio or quiet-room interviews, lower on phone-recorded or noisy field interviews. Word-level timestamps are returned even when accuracy is imperfect, so you can verify and correct quote attributions quickly.

**What audio and video formats are supported?**
M4A, MP3, WAV, FLAC, AAC, OPUS, OGG, MP4, MOV, WebM. Max 50 MB per file on the free tier, 1 GB on the paid tier.

**Can I transcribe foreign-language interviews?**
Yes — auto-detection across 99+ languages including Spanish, French, German, Mandarin, Japanese, Portuguese, Arabic, Hindi, Russian, and many more. Toggle **Translate to English** to receive an English transcript alongside the timestamped original.

**Is speaker diarization included?**
Yes, opt-in via the **Speaker Diarization** toggle. Each segment and word gets labeled `SPEAKER_00` (interviewer), `SPEAKER_01` (first guest), etc. Powered by pyannote-audio. Billed at $0.0001 per audio second only when enabled.

**How does pricing work?**
Pay-per-audio-second. The free tier covers small jobs and testing without a credit card. The paid tier is $0.0005 per second of audio. A 1-hour interview with diarization is approximately $2.16 — versus Rev.com at ~$90 for the same length.

**Can I integrate this into my qualitative research workflow?**
Yes. The actor exposes a standard Apify run/dataset API. The dataset record includes `transcript`, `segments[].words[]`, `srt`, and `vtt` ready to feed into NVivo, MAXQDA, Atlas.ti, Dovetail, or any qualitative analysis tool that accepts plain text or VTT.

**What if my interview is multi-speaker (panel, focus group)?**
Speaker diarization handles up to ~6 distinct speakers reliably. Each speaker is labeled `SPEAKER_00` through `SPEAKER_N` in temporal order of first speaking turn.

**How long does a transcription take?**
A 60-minute interview takes 1–3 minutes on the paid tier. Bulk batches of 10 interviews complete in 5–10 minutes (parallelized).

***

### Legal disclaimer

Use this actor only on interviews you have rights to transcribe — your own recordings with subject consent, properly licensed media, or material covered by journalistic source agreements. Some jurisdictions require subject consent for recording; you are responsible for compliance with applicable laws and IRB requirements for academic research. The actor does not retain audio or transcripts beyond the run's lifetime. **EU-region processing** is available via the EU Processing toggle for GDPR-aligned workflows. SIÁN Agency provides this actor as-is.

***

### Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)
[![Email](https://img.shields.io/badge/Email-support%40sian--agency.online-EA4335)](mailto:support@sian-agency.online)
[![SIÁN Agency](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-97cc64)](https://apify.com/sian.agency?fpr=sian)

Join the Telegram support group, email **support@sian-agency.online**, or open an issue on the [SIÁN Agency Apify Store](https://apify.com/sian.agency?fpr=sian) page.

***

### More from SIÁN Agency

Platform-specific scrapers + transcribers:

- [Instagram AI Transcript Extractor](https://apify.com/sian.agency/instagram-ai-transcript-extractor?fpr=sian)
- [Best TikTok AI Transcript Extractor](https://apify.com/sian.agency/best-tiktok-ai-transcript-extractor?fpr=sian)
- [YouTube Shorts AI Transcript Extractor](https://apify.com/sian.agency/youtube-shorts-ai-transcript-and-metadata-extractor?fpr=sian)
- [Facebook AI Transcript Extractor](https://apify.com/sian.agency/facebook-ai-transcript-extractor?fpr=sian)

Browse the full [SIÁN Agency Apify Store](https://apify.com/sian.agency?fpr=sian) for all available actors.

***

# Actor input Schema

## `audioFiles` (type: `array`):

Upload your interview recordings directly. Most journalists and researchers record locally — drop the files in here without having to host them anywhere first.

**Supported Formats:** M4A, MP3, WAV, FLAC, AAC, OPUS, OGG, MP4, MOV, WebM
**Max file size:** 1GB per file

You can also paste hosted URLs in the optional **Interview Recording URLs** field below.

## `audioUrls` (type: `array`):

Optional: add direct interview audio/video URLs (one per line) if your recordings are already hosted somewhere (Dropbox direct link, your CDN, archive.org, etc.).

🚫 **Social media links are rejected** — use the specialized actors linked in the description.

✅ **Valid:** `https://example.com/interview.mp3`, `https://cdn.example.com/oral-history.wav`

**Supported Formats:** M4A, MP3, WAV, FLAC, AAC, OPUS, OGG, MP4, MOV, WebM

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

Language spoken in the audio. Leave as 'Auto-detect' for automatic language detection.

## `translateToEnglish` (type: `boolean`):

Translate non-English audio into English. Additional charges apply for translation service.

## `useEuServers` (type: `boolean`):

Process data within the EU for GDPR compliance. Higher processing rates apply for EU servers.

## `speakerDiarization` (type: `boolean`):

Identify and label different speakers in the audio (e.g., SPEAKER\_00, SPEAKER\_01). Perfect for meetings, interviews, and multi-person conversations. Additional charges apply.

## Actor input object example

```json
{
  "audioUrls": [
    "https://raw.githubusercontent.com/rara-cyber/podcast-test-file/main/KchSfOdwCJE-56eb7ccd6dc030fa3cc280ab26925c4e234.opus"
  ],
  "language": "auto",
  "translateToEnglish": false,
  "useEuServers": false,
  "speakerDiarization": false
}
```

# Actor output Schema

## `audioTranscripts` (type: `string`):

Processed transcription data with timestamps, speaker diarization, detected languages, and file metadata

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed transcriptions with key metrics

# 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 = {
    "audioUrls": [
        "https://raw.githubusercontent.com/rara-cyber/podcast-test-file/main/KchSfOdwCJE-56eb7ccd6dc030fa3cc280ab26925c4e234.opus"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/transcribe-interview-to-text").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 = { "audioUrls": ["https://raw.githubusercontent.com/rara-cyber/podcast-test-file/main/KchSfOdwCJE-56eb7ccd6dc030fa3cc280ab26925c4e234.opus"] }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/transcribe-interview-to-text").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 '{
  "audioUrls": [
    "https://raw.githubusercontent.com/rara-cyber/podcast-test-file/main/KchSfOdwCJE-56eb7ccd6dc030fa3cc280ab26925c4e234.opus"
  ]
}' |
apify call sian.agency/transcribe-interview-to-text --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/transcribe-interview-to-text",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Transcribe Interview to Text — for Journalists & Researchers",
        "description": "Transcribe interviews and recorded conversations to text. Speaker labels for interviewer and guest, word-level timestamps, SRT/VTT. Try free.",
        "version": "1.0",
        "x-build-id": "pT468U8fC6pC5PiLH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~transcribe-interview-to-text/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-transcribe-interview-to-text",
                "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/sian.agency~transcribe-interview-to-text/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-transcribe-interview-to-text",
                "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/sian.agency~transcribe-interview-to-text/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-transcribe-interview-to-text",
                "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",
                "properties": {
                    "audioFiles": {
                        "title": "Upload Interview Recordings",
                        "type": "array",
                        "description": "Upload your interview recordings directly. Most journalists and researchers record locally — drop the files in here without having to host them anywhere first.\n\n**Supported Formats:** M4A, MP3, WAV, FLAC, AAC, OPUS, OGG, MP4, MOV, WebM\n**Max file size:** 1GB per file\n\nYou can also paste hosted URLs in the optional **Interview Recording URLs** field below."
                    },
                    "audioUrls": {
                        "title": "Interview Recording URLs (optional)",
                        "type": "array",
                        "description": "Optional: add direct interview audio/video URLs (one per line) if your recordings are already hosted somewhere (Dropbox direct link, your CDN, archive.org, etc.).\n\n🚫 **Social media links are rejected** — use the specialized actors linked in the description.\n\n✅ **Valid:** `https://example.com/interview.mp3`, `https://cdn.example.com/oral-history.wav`\n\n**Supported Formats:** M4A, MP3, WAV, FLAC, AAC, OPUS, OGG, MP4, MOV, WebM",
                        "items": {
                            "type": "string"
                        }
                    },
                    "language": {
                        "title": "Language (Optional)",
                        "enum": [
                            "auto",
                            "english",
                            "chinese",
                            "german",
                            "spanish",
                            "russian",
                            "korean",
                            "french",
                            "japanese",
                            "portuguese",
                            "turkish",
                            "polish",
                            "catalan",
                            "dutch",
                            "arabic",
                            "swedish",
                            "italian",
                            "indonesian",
                            "hindi",
                            "finnish",
                            "vietnamese",
                            "hebrew",
                            "ukrainian",
                            "greek",
                            "malay",
                            "czech",
                            "romanian",
                            "danish",
                            "hungarian",
                            "tamil",
                            "norwegian",
                            "thai",
                            "urdu",
                            "croatian",
                            "bulgarian",
                            "lithuanian",
                            "latin",
                            "maori",
                            "malayalam",
                            "welsh",
                            "slovak",
                            "telugu",
                            "persian",
                            "latvian",
                            "bengali",
                            "serbian",
                            "azerbaijani",
                            "slovenian",
                            "kannada",
                            "estonian",
                            "macedonian",
                            "breton",
                            "basque",
                            "icelandic",
                            "armenian",
                            "nepali",
                            "mongolian",
                            "bosnian",
                            "kazakh",
                            "albanian",
                            "swahili",
                            "galician",
                            "marathi",
                            "punjabi",
                            "sinhala",
                            "khmer",
                            "shona",
                            "yoruba",
                            "somali",
                            "afrikaans",
                            "occitan",
                            "georgian",
                            "belarusian",
                            "tajik",
                            "sindhi",
                            "gujarati",
                            "amharic",
                            "yiddish",
                            "lao",
                            "uzbek",
                            "faroese",
                            "haitian creole",
                            "pashto",
                            "turkmen",
                            "nynorsk",
                            "maltese",
                            "sanskrit",
                            "luxembourgish",
                            "myanmar",
                            "tibetan",
                            "tagalog",
                            "malagasy",
                            "assamese",
                            "tatar",
                            "hawaiian",
                            "lingala",
                            "hausa",
                            "bashkir",
                            "javanese",
                            "sundanese",
                            "cantonese"
                        ],
                        "type": "string",
                        "description": "Language spoken in the audio. Leave as 'Auto-detect' for automatic language detection.",
                        "default": "auto"
                    },
                    "translateToEnglish": {
                        "title": "🔄 Translate to English (PAID)",
                        "type": "boolean",
                        "description": "Translate non-English audio into English. Additional charges apply for translation service.",
                        "default": false
                    },
                    "useEuServers": {
                        "title": "🇪🇺 EU-Based Processing (PAID)",
                        "type": "boolean",
                        "description": "Process data within the EU for GDPR compliance. Higher processing rates apply for EU servers.",
                        "default": false
                    },
                    "speakerDiarization": {
                        "title": "🎤 Speaker Diarization (PAID)",
                        "type": "boolean",
                        "description": "Identify and label different speakers in the audio (e.g., SPEAKER_00, SPEAKER_01). Perfect for meetings, interviews, and multi-person conversations. Additional charges apply.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
